基于MSP430G2553的红外遥控
红外遥控原理:
红外无线遥控主要用于短距离(一般10米以内可靠)控制被操作对象。我们家里有很多电器都用到了红外遥控,比如,电视机,DVD,空调等。
这里主要讲用于MP3的遥控器。这种遥控器小巧便宜随处可见,电子市场和各淘宝上的电子元件卖家的店里更是相当的廉价(2块钱左右)。先来讲讲它的物理特性,遥控板上有21个按键,意味着你有21种功能选择,遥控器长方形一只手就能握完。它能发射频率约为38KHZ的载波,不可见,这种电波是红外线(常见的波长例如940nm)。
至于它为什么能发送38KHZ的载波,就不是我们的研究范围了,我也解释不清。这个最好是咨询专门做这个东西的专家了,这里面涉及到微电子技术,调制技术,我们主要是知道怎么用就行了,这东西深究不起,我也没那能力了,呵呵。
遥控器发送的载波,通过红外接收头解调输出一个一个的矩形波序列。我们需要用单片机去检测识别并解读出这些矩形波序列。矩形波序列由引导码,地址码,地址码,数据码,数据反码组成。单片机就是要解读这些码,从而判断遥控器按下的哪个键。
file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\ksohtml\wps_clip_image-7882.pngfile:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\ksohtml\wps_clip_image-16904.pngfile:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\ksohtml\wps_clip_image-15502.png矩形波序列图:
file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\ksohtml\wps_clip_image-20271.pngfile:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\ksohtml\wps_clip_image-17378.pngfile:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\ksohtml\wps_clip_image-1651.png 9ms 4.5ms
file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\ksohtml\wps_clip_image-10606.pngfile:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\ksohtml\wps_clip_image-23140.pngfile:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\ksohtml\wps_clip_image-11261.pngfile:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\ksohtml\wps_clip_image-13104.pngfile:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\ksohtml\wps_clip_image-27983.pngfile:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\ksohtml\wps_clip_image-17593.png
引 导 码 地址码1 地址码2 数据码 数据反码
file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\ksohtml\wps_clip_image-3671.png
红外接收头的输出信号以13.5ms长的引导码开始,接着是地址码1,地址码2(1和2一般是相同的码,通过检测两次发送的地址码是否相同从而防止其他遥控器干扰。)。紧随地址码的是数据码,数据反码(即前面的数据码取反,通过判断数据反码提高遥控的可靠性)。
先来介绍一下怎么判断0、1:
file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\ksohtml\wps_clip_image-24153.pngfile:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\ksohtml\wps_clip_image-21107.png
“1”由0.56ms的低电平 “0”由0.56ms的低电平和
和1.69ms高电平组成 0.56ms的高电平组成
解码就是要将这串序列波中把0和1判断出来(其实就是需要计算出高低电平持续的时间)。引导码是由一段9毫秒(我看有些文章是写的4.5毫秒,可能是调制的区别吧,这没关系的)的低电平和一段4.5毫秒的高电平组成。因此我需要解地址码1(8位二进制码)、地址码2(8位)、数据码(8位)、数据反码(8位)。 所以我们需要解出这串32位二进制码,简单的说,地址码1决定哪块遥控板,数据码决定遥控板上哪个按键。地址码2=地址码1,数据反码=~数据码,它们的存在是为了排除干扰提高遥控的可靠性。
举一个8位地址码的例子如下图:
file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\ksohtml\wps_clip_image-18870.png
解码得:01010010
解码过程中由于晶振的误差或其他因素导致计算电平时间不准确,应考虑一定的时间误差。比如,计算出电平时间大于1.15ms判断为“1”,小于1.15ms判断为“0”。
正序解码法——以发送最高位开始
定义按键数组address[21]对应遥控器的21个按键(具体元素值见程序);定义触发的中断次数j;定义解码数组receive[2]即数据码,数据反码;定义高电平持续时间count;
经过多次试验调试,发现我所买的1.5元的MP3红外遥控器的地址码1是0000 0000,地址码2是1111 1111,其次是数据码xxxx xxxx,数据反码。因为在我所遥控的范围内没有其他遥控器干扰,所以为了简化解码,我跳过引导码,地址码1、2,直接解数据码和数据反码。解码完之后,能和按键完全对应效果较好。下面来看我是怎么解码的:
设置P1.1开中断,下降沿触发,P1.1接红外接收头的输出。遥控器一有按键按下,红外接收头就会发出一系列的脉冲波序列,这序列波上文已经详细叙述了。所以P1.1会触发33次以上的中断。第1次为引导码,第2到9次为地址码1,第10到17次是地址码2,第18到25次是数据码,第26到33次是数据反码。我只需把第18到33次中断的码解出即可。
当中断次数j大于17时,解码数组开始接受解码;当j大于25时,数据码解完;当j大于33时,数据反码解完。解得的码放在receive[2]中,找到按键数组和解码数组第一个元素相等的值,从而知道是按键数组的哪个元素。最后根据找到的元素,作出相应的控制。
解码结束。如果对原理不太明白,可留言,我再针对具体问题具体讲述。。