找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4404|回复: 1
打印 上一主题 下一主题
收起左侧

LED智能调光红外编码和解码编程的应用和体会

[复制链接]
跳转到指定楼层
楼主
ID:76127 发表于 2015-4-5 00:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
      据悉:顺德勒流镇镇府企业部门已取得了“中国商业LED生产基地”的称号,LED照明产业的趋势发展已到了个高速路口;本月中山“LED灯博会”我也有幸参加,通过大约4个小时的精心调查,LED产品在灯饰照明上有了很大的突破性,也就是说在照明应用上有了很大的改善,实际照明效果和节能效果及光效寿命等参数都有很大的突破。另外再配合创意性的灯具产品,突显了LED所具有的独特性和取代白炽灯甚至取代荧光节能灯的可能性。通过参展,我也认识到LED产业已悄悄地由小作坊转向大规模,在资本上已由小打小闹转向资本营运化;洗牌的力度开始加大!
因此,本人为了不甘落伍,针对LED的灵活性在驱动的基础上加快智能LED控制板的学习和研究。国外同行,针对智能调光产品已非常成熟了,但在国内才刚刚起步;国外在集中照明控制领域中已发展成熟上位机控制下位的技术,在节能低碳方面,信息传感网络方面已融合得非常完美。本人在绿博士照明有限公司业余期间,大量的实践调光控制程序,总算取得了一点点小成绩,现在编写出来和有兴趣的朋友们一起探讨!
本次所有的程序研究都是基于本人开发的“WICN-01”单片机开发板所试的,所使用的单片机也是市场上性价比最有竞争力的STC系列单片机。
红外线解码方案的研究(芯片STC-89C52RC单片机):
为了提高研究的速度,本人首先采用日本upd6122芯片标准PPM码进行解码,该码在日本及中国等家电产品中应用非常多,PPM码的解码方案就是用一把“时间尺寸”来测量接收到的红外码,通过这个时间标尺的判断就可以得到二进制的数据,如此循环解码出32位数据码值,然后根据解得的码值进行数据判断,最后转向所要执行的各个功能子程序以达到调光、定时、通信等目的。 解码的成功第一点是解码的“时间标尺”应该很精确,由于单片机型号的不同,所执行命令的周期性不同,因此,你算的时间精度和实际用示波器测量出来的精度是很大差别的,因此,要想成功解码手上必须要有一台数字示波器,一方面可以用来测量波形,另一方面数字示波器可以存储波形用来慢慢分析波形是否正确,以及口头读码的功能。upd6122芯片标准PPM码的时间标尺一般是882us,在用这个标尺之前当然就是要像电视机中的“行场同步信号”那样使用引导码进行对齐,也就是发射和接收要找到一个同步点,这样才能解出正确的数据。在解码数据时,要重点的掌握汇编语言特别是C语言,如果没有C语言干脆就不要搞程序!另外,要重点掌握各种算法对于各个寄存器状态的影响,通过计算和查阅各个数据才能正确解码,因此编程序的算法显得相当重要。本人在实际解码时也算是尝尽了各种方法,用汇编语言解码时,解码很成功;但在用C语言解码时却迟迟显示没有反映,反复检查各种算法,问题还是出在算法不合理造成没有解到码,外部中断和定时中断应用得不熟练。最终研究出5个调光档位,2个慢调光档位(当然,如果你要更多的档位方法也是一样的),5个档位在调光时显得调光很生硬,突然达到某个亮度;因此我加上两个慢调光档位,当你想调亮时,单片机自动地按一个时间线性慢调亮,这样使人的眼睛能很好的去适应这个增亮或减暗的光线。当在高兴时问题又来了,就是在每更换一个档位时,其由于我设置了外部中断优先于定时中断,而我的调光PWM波形是由定时中断得来的,这样就使我在连续按遥控器时,外部中断就在不停的产生,如此打乱了定时中断的波形产生,因此,在连续按遥控器时灯管会出现闪动的现象。由于我使用的解码MCUSTC-89C52RC,其不带有PCA模块,因此不得不想办法自己来做红外发射程序。
红外发射程序心得(芯片STC-12C5A60S2单片机):
红外发射首先要解决的就是发射信号不含有“连发码”,发射的波形中只包含32位数据码,这就是要求;发射信号当然和解码过程序是反向的,因此在发射程序上要解决怎样将32个数据一个一个地发出去,并让另外一个单片机接收下来。通过查阅大量的资料,我只需在高电平时发射数据,低电平不发射,然后将32个数据通过移位的方法,一个一个的移到一个寄存器中,对这个寄存器中的数据进行高低电平的判断,最后解决什么时间射,什么时间不发射,如此就可以在红外线二极管中发射出一串数据来,让接收方接收信号。但问题还有啊?红外二极管的发射是需要38K-40K的频率进行调制啊!不调制不能发射,更发射得不远啊!那么,怎样将我要发射的数据调制在这38k的载波上呢?方法有两种:一种是通过中断的方法,二种是通过软件定时的方法,网络上大部份是建议中断的方法,但方法太过于复杂,不方便移值。我最后还是采用自己想的办法“软件定时法”,就是在高电平时发射38k载波,低电平时不发射载波,载波的频率和周期是不变的,但载波的发射个数是可以改变的,这样通过计算载波的周期和引导码、数据码的比例关系,就可能得出具体该发多少个载波周期,这种方法非常简便适用。但是问题总是有的,就是发射总是不正确,难道我的这种简单方法是行不通的吗?不应该啊,我计算过好多次了,应该没问题的,最多是波形最终测量的时间有点偏差嘛!为了验证子程序了正确性不得不重新写验证程序了,幸好我的开发板上有6LED显示,常规学习者认为这几个LED只能做一下流水灯试验,其实这几个LED灯作用不仅仅如此,更重要的功能是可能显示是不是我们想要得到的数据啊!通过验证,问题出在移位程序语句,我没有良好的运用“进位位CY”,通过改进,程序可以一个个地将数据正确的移入CY中了,下一步就是判断CY的值,然后判断发射时间,但是问题还有啊!真是要命!!!!怎么还不行啊?发出去的数据不是我想要的啊??检查了2个小时才知道,我们书面上写的二进制高低方向和发射方向是不一样的,再加上又要取反码,几个倒转就不知道发射出去的是什么数据了。好在公司的示波器可以存波形,通过读波形显示的数据才知道,书面上的据数方向是:左边是高位,右面是低位,如十六进制的0X04=00000100B,而不能是00100000B;发射时应该从书面的高位向低位开始发射数据;如:0X03=00000011(书面),发射时应该11000000,这样发射数据,要注意00000011是不等于取反的00000011的数据哟!这些都是些小细节,但错了就是不行!!!!
如此,一串数据发射出去了,接收方也正确的解了码,说明我的程序正确。
通过红外编码和解码程序的理解和编写,我们可以联想出更多的通信协议,也可以用这种方法来联想理解其它协议和运用,红外线编码和解码程序我认为是学习各种协议的基础,非常重要。
以下是解码过程图片。



  
                 红外解码波形







分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:76223 发表于 2015-4-6 09:49 | 只看该作者
程序开发思路,供我们学习下,不要那么保守
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表