红外解码方法简述

      

1  引言

低速的红外无线传输是一种廉价的无线通讯/控制方案,在家电领域已经广泛使用。在嵌入式领域,只要工作环境比较优良,数据量小,传输距离较近(5米以内),同样可以采用红外无线传输。本站的ATmega16学习板上设计了红外发射管与接收管,配合站长家中闲置的“HITACHI VM101”型电视遥控器,详细分析一下此遥控器的红外编解码原理与单片机解码方法。

 

2  红外数据序列采集

       HITACHI VM101”型电视遥控器结构非常简单,主芯片是M50560-123FP,外围配有455kHZ晶体做为主时钟源,一个红外发射管,一个发射管的驱动三极管以及若干容器件。考虑到此芯片为专用芯片,就算找到芯片资料去啃E文也对以后没有多大帮助,所以站长采用了最直接的方法——软件采集输出电平变化时间间隔。

       按照学习板的红外接收管连接方法,当接收到红外数据时,在ATmega16INT0脚上电平为高,电平的上升沿变化可以做为数据接收的开始。普通使用的红外管载波频率为38kHz-40kHz之间,这样可以先设计一个n于载波频率的定时器计时,在中断触发以后对INT0脚上的高低电平计时,就可以得到一个完整的红外数据序列。站长首先采用了110kHz的定时器来采集数据,计时用了一个16位的变量,得到的一个数据序列如下:

922 1384 1440 1498 1555 1613 1669 1727 1784 1842 1899 2072 2129 2187 2243 2416 2473 2531 2588 2761 2818 2991 3047 3221 3277 3451 3507 3565 3622 3795 3852 3910 3966 4140 4196 4369 4426 4484 4541 4714 4771 4944 5000 5058 5115 5173 5230 5288 5344 5402 5459 5517 5573 5747 5803 5861 5918 5976 6033 6206 6262 6436 6492 6666 6722 6895 6952

                        序列   110kHz定时采集序列

其中相邻两个数的差值即为电平维持时间。由以上数据可以看出,最小的电平维持时间也在计数58个周期左右,即58/110k=0.53ms,这说明完全可以采用一个低频率的定时器来采集数据,只要满足频率在1/0.305ms=1.9kHz2倍以上即可。这里采用了6kHz的定时器,采集到的数据序列变为:

55 81 85 88 91 95 98 101 105 108 111 121 125 128 131 141 145 148 151 161 165 174 178 188 191 201 204 208 211 221 224 228 232 241 244 254 258 261 264 274 278 287 291 294 298 301 304 307 311 314 317 321 324 334 337 341 344 347 351 361 364 374 377 387 391 401 404 641 694 707 710

                         序列二  6kHz定时采集序列

此序列的相邻两个数的差值最小值为3,最大值为11,并且差值完全分布在3-49-11之间,完全满足分辨的要求。

 

       3  红外编码的调制方法

       红外遥控信号的编码调制方式通常有两种:

(1)       脉冲占空比编码调制

这种调制编码的每一位二进制数所占的时间宽度相同,用停发红外调制信号时间宽度的占空比大小表示二进制数10占空比大者表示1占空比小者表示0,如图一所示(按学习板设计为低电平表示停发)。

(2)       脉冲宽度编码调制

       这种调制编码的每一位二进制数所占的时间宽度不同,用停发红外调制信号的时间宽度表示01,停发时间长者表示1,停发时间短者表示0,如图二所示。

        

图一 脉冲占空比编码调制               图二 脉冲宽度编码调制

       区分这两种方式的最简单的方法就是看数据序列中有没有较宽的高电平,如果有即为脉冲占空比编码调制方式,没有就是脉冲宽度编码调制方式。根据序列二的数据分析可以看出“HITACHI VM101”型电视遥控器采用的红外编码方式是脉冲宽度编码调制。

 

       4  红外遥控信号代码的格式

  一个完整的红外遥控信号代码一般由引导码、系统码、系统码的反码、数据码、数据码的反码等几个部分组成。引导码是一个代码的起始部分,由时间相对较长的一段发送时间与一段停发时间构成,即时间较长的一个高电平和一个低电平组成;系统码是通过遥控器的遥控编码芯片的引脚不同接法设定的,用以区分不同型号的遥控系统;数据码则是遥控器功能按键的编码,不同的功能按键其代码不相同;系统码的反码和数据码的反码是用来纠错的。遥控信号代码总的长度因采用的编码芯片不同而有所不同,功能代码与功能代码之间的最短时间间隔一般为80ms120ms。如图三所示是采用脉冲宽度编码调制方式的代表某一功能的一个完整的遥控代码。

             图三  脉冲宽度编码调制方法的一个完整的遥控代码实例

       数据码根据实际所需要表达的不同含义的数量,可以有不同的数据位数。如图三的示例为8位数据,则该遥控器最多可以有256个功能键。

       参考这个格式,对序列二的数据进行解码,得到明码数据如下:

引导码,系统码00001010,系统码反码11110101,数据码10110000,数据码反码01001111

这个数据是对遥控器上按键1解码所得,可以认为按键1的码值就是(10110000)B,即0xB0。对按键1进行反复几次的数据采集,其相邻两个采集值的差值误差仅仅为1,可以认为数据采集正确。再对不同的按键进行数据采集解码,系统码部分不变,仅有数据码发生变化,说明数据解码方法正确。

 

5  后记

       按照前面所述方法,站长已完成了对“HITACHI VM101”型电视遥控器红外数据接收解码的程序,但是此程序并非对于所有的红外通讯都适用,并且在连续的数据发送(键按下不放)方面并没有深入研究。希望用户在充分理解此文的情况下,根据自己的需要分析自己的数据并完成相应的红外解码程序。