红外编解码彻底解析

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 载波。

下面实例是已知 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 编码相对简单一些:

同样由于取自红外接收头的波形需要反相一下波形以便于分析:

反相后的波形:

根据编码规则:

得到一组数字: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

红外线遥控器软件解码程序(能解大部分遥控器的编码)

相关推荐
To_OC1 天前
万字解析《JS 语言精粹》之第五章:继承 5 大核心精髓(JS 原型核心)
前端·javascript·代码规范
Coffeeee1 天前
闲聊几句,Android老哥们,你们多久没做技改需求了
android·程序员·代码规范
饼干哥哥1 天前
扣子3.0测评:我让 Codex 和 Claude Code 住同一个桌面,结果它们打架了!
人工智能·开源·代码规范
码哥字节3 天前
为什么 Claude Code 读你的代码库,光靠 embedding 根本不够?
claude·代码规范
kisshyshy5 天前
从递归到迭代,一文吃透二叉树的核心知识与 JavaScript 实现
javascript·算法·代码规范
用户6919026813399 天前
Vibe Coding 开发项目的基本范式
人工智能·设计模式·代码规范
Cosolar9 天前
藏在 Claude Code 里的极致浪漫:完整 187 条 Spinner Verbs 全收录
后端·程序员·代码规范
Mickey86110 天前
MCP 加持下的零代码逆向:全自动化绕过 APP 验签与加密实战
代码规范
Inhand陈工13 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信