打印

红外编解码彻底解析

[复制链接]
5827|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
pa2792|  楼主 | 2010-10-15 19:22 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 pa2792 于 2010-10-15 20:00 编辑

1、编码格式
现有的红外遥控包括两种方式:PWM(脉冲宽度调制)和PPM(脉冲位置调制)。
两种形式编码的代表分别为NEC和PHILIPS的RC-5、RC-6以及将来的RC-7。
PWM(脉冲宽度调制):以发射红外载波的占空比代表“0”和“1”。为了节省能量,一般情况下,发射红外载波的时间固定,通过改变不发射载波的时间来改变占空比。例如常用的电视遥控器,使用NEC upd6121,其“0”为载波发射0.56ms,不发射0.56ms;其“1”为载波发射0.56ms,不发射1.68ms;此外,为了解码的方便,还有引导码,upd6121的引导码为载波发射9ms,不发射4.5ms。upd6121总共的编码长度为108ms。
但并不是所有的编码器都是如此,比如TOSHIBA的TC9012,其引导码为载波发射4.5ms,不发射4.5ms,其“0”为载波发射0.52ms,不发射0.52ms,其“1”为载波发射0.52ms,不发射1.04ms。
PPM(脉冲位置调制):以发射载波的位置表示“0”和“1”。从发射载波到不发射载波为“0”,从不发射载波到发射载波为“1”。其发射载波和不发射载波的时间相同,都为0.68ms,也就是每位的时间是固定的。
通过以上对编码的分析,可以得出以某种固定格式的“0”和“1”去学习红外,是很有可能不成功的。即市面上所宣传的可以学习64位、128位必然是不可靠的。
另外,由于空调的状态远多于电视、音像,并且没有一个标准,所以各厂家都按自己的格式去做一个,造成差异更大。比如:美的的遥控器采用PWM编码,码长120ms左右;新科的遥控器也采用PWM编码,码长500ms左右。如此大的差异,如果按“位”的概念来讲,应该是多少位呢?64?128?显然都不可能包含如此长短不一的编码。

2、学习模式

现在用来学习红外的CPU,无外乎以下几种:
MCS-51系列、microchip pic16系列、winbond w741系列、holtek ht48系列
以上的CPU由于价格便宜、使用量大,被广泛使用在遥控器上。
以上的CPU的基本点是:执行速度在1us左右,数据存储器一般为256个字节。如果按固定格式学习,一般可以学到128位(其他程序会占用一些数据存储器);如果不按固定的格式,需要找出编码的最小公约数作为基本单位,则可以学习到的位数大大降低,达不到实用的效果。但是,即使如此,找到的最小公约数不可能满足所有的红外设备,除非最小单位为26us(1000000/38k)。如果达到这个速度,以上CPU的速度远远不够,并且由于存储量的加大,数据存储器也远远不够用。
对于电视、音响等,一般使用专用的遥控芯片,比nec,philips,toshiba,sanyo,mitsubish,panasonic的芯片,其编码格式固定,一个键只有一个编码,学习比较容易。
而空调不一样,各家空调厂商都是按自己的要求用cpu做遥控芯片,编码形式就有很多种。比如可能没有引导码(电视音响类都有)、校验方式取累加和(电视音响类一般取反码)等。因为空调的状态多,必须一次发送完毕,有制冷、温度、风速、自动、定时、加湿、制热等,所以编码很长,并且同一个按键,在不同状态下发送的编码不一样,造成学习上的困难。

红外遥控编码格式
红外遥控器的编码格式通常有两种格式:NEC和RC5 NEC格式的特征: 1:使用38 kHz载波频率 2:引导码间隔是9 ms + 4.5 ms 3:使用16位客户代码
4:使用8位数据代码和8位取反的数据代码


不过需要将波形反转一下才方便分析:



NEC 协议通过脉冲串之间的时间间隔来实现信号的调制(英文简写PPM)。逻辑“0”是由0.56ms的38KHZ载波和0.560ms的无 载波间隔组成;逻辑“1”是由0.56ms的38KHZ载波和1.68ms的无载波间隔组成;结束位是0.56ms的38K载波。
[url=http://pangzhan1980.files.wordpress.com/2010/10/wps_clip_image27429_thumb.png?w=605&h=436][/url]

下面实例是已知NEC类型遥控器所截获的波形: 遥控器的识别码是Address=0xDD20;其中一个键值是Command=0x0E;


注意波形先是发低位地址再发高位地址。所以0000,0100,1011,1011反转过来就是1101,1101,0010,000十六进制的DD20; 键值波形如下:



也是要将0111,0000反转成0000,1110得到十六进制的0E;另外注意8位的键值代码是取反后再发一次的,如图0111,0000 取反后为1000,1111。 最后一位是一个逻辑“1”。 RC5编码相对简单一些:
同样由于取自红外接收头的波形需要反相一下波形以便于分析:



反相后的波形: [url=http://pangzhan1980.files.wordpress.com/2010/10/wps_clip_image27697_thumb.png?w=605&h=455][/url]

根据编码规则:



得到一组数字:110,11010,001101 根据编码定义:



第一位是起始位S 通常是逻辑1 第二位是场位F通常为逻辑1,在RC5扩展模式下它将最后6位命令代码扩充到7位代码(高位MSB),
这样可以从64个键值扩充到128个键值。
第三位是控制位C 它在每按下了一个键后翻转,这样就可以区分一个键到底是一直按着没松手还是松手后重复按。
如图所示是同一按键重复按两次所得波形,只有第三位是相反的逻辑,其它的位逻辑都一样。


其后是五个系统地址位:11010=1A 最后是六个命令位:001101=0D
参考:http://www.sbprojects.com/knowledge/ir/nec.htm


完整**请查看http://blog.**/pa2792/1870874/message.aspx
评分
参与人数 3威望 +3 收起 理由
爱TA就卖个8 + 1
lfjwfm + 1
tyw + 1 好东东哦

相关帖子

沙发
tyw| | 2010-10-15 19:33 | 只看该作者
本帖最后由 tyw 于 2010-10-15 19:38 编辑

好资料,笑纳了,谢谢,全文在此,帮LZ贴一下

红外编解码彻底解析 12页 0.4M.pdf (409.77 KB)

使用特权

评论回复
板凳
bpwater| | 2010-10-15 19:44 | 只看该作者
好**,已经转载了。

使用特权

评论回复
地板
pa2792|  楼主 | 2010-10-15 20:03 | 只看该作者
老T叔就是好。

使用特权

评论回复
5
nickspace| | 2010-10-19 17:26 | 只看该作者
好東西,謝謝分享

使用特权

评论回复
6
veener| | 2011-9-15 10:55 | 只看该作者
这个好难啊。。

淘宝商城 正品,淘宝旗舰店www.happy-taotao.com

使用特权

评论回复
7
XZL| | 2011-9-15 16:36 | 只看该作者
呵呵,单片机入门级的可以用来DIY遥控器

使用特权

评论回复
8
清清泉水| | 2013-4-25 14:55 | 只看该作者
好东西,学习了。

使用特权

评论回复
9
莫〆唯影| | 2015-1-14 22:21 | 只看该作者
好威武你和那个

使用特权

评论回复
10
那就地方iv| | 2015-7-3 16:57 | 只看该作者
好东西,收藏了

使用特权

评论回复
11
shang21ic| | 2021-5-27 10:20 | 只看该作者
红外芯片推荐YiRTX05,YiRX04.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:成功,不在于你赢过多少人,而在于你与多少人分享利益,帮过多少人。你与之分享的人越多,帮过的人愈多,服务的地方愈广,那你成功的机会就愈大。

371

主题

8438

帖子

15

粉丝