NEC为红外遥控最常用的编码,红外载波频率为38KHz
,其协议小巧简单,非常适合家电设备的控制。其他的还有 Phillips(RCA)的RC-5
和RC-6
,但那只是IR协议的少数。
本篇博文参照国外博客或论坛资料并汇总:(原链接可能需要翻墙)
NEC协议
红外遥控工具(NEC)
DFU IR协议(NEC)- PDF
NEC红外传输协议 - PDF
带微控制器的NEC协议IR(红外)遥控器
我的有些翻译并不准确,对码文字段的命名可参照:
NEC编码格式(百度文库)
本片仅介绍NEC编码协议的部分,硬件电路设计及选型请见:
38K红外遥控发射与接收电路设计与选型、正向压降、限流电阻、半值角
1. NEC编码方式
NEC协议采用脉冲间隔的方式编码每一位数据,用不同数据位的时间间隔
来表示不同的逻辑位
。与众多单总线IC的通信方式很相似。
NEC编码的载波频率为38KHz
,对应的单脉冲周期约等于26.3us
。
每一数据位起始于562.5µs的载波
,约为21.25个38 kHz
脉冲组成。 脉冲的占空比通常为1/4或1/3,以减少电流消耗:
1.1 数据位的逻辑0/1
逻辑"0"
:562.5µs的有效脉冲 + 562.5µs的空闲间隔,总时长为1.125ms
。
逻辑"1"
:562.5µs的有效脉冲 + 1.6875ms的空闲间隔,总时长为2.25ms
(为逻辑0的一倍)。
2. 命令帧
命令帧由 起始位
+ 地址码
+ 地址码反码
+ 命令码
+ 命令码反码
组成。
2.1 起始位
每个序列均以9ms的脉冲(称为AGC脉冲)(是逻辑数据位使用的脉冲562.5us的16倍)开始。 接下来是4.5毫秒的空闲:(可以理解这一过程是每一帧的起始标志)
2.2 地址码 + 命令码
起始位之后会传输4个字节共32Bit的数据位,分别是 地址码
+ 地址码反码
+ 命令码
+ 命令码反码
。字面上是4个字节,而实际只有2个字节有效,多余的2字节为冗余的反码。一方面可以用于校验是否出错。另一方面,因为总有相同数量的反码的存在,每帧的总消息时长保持恒定
。
2.3 结束位
结束位为末尾的562.5µs的有效脉冲。
3. 重复码
即使一直按住遥控器上的一个键,命令帧也只会发送一次。 只要按键保持按下状态,就会每110毫秒
发送一次重复码
。 该重复码的组成为 9ms的AGC脉冲
+ 2.25ms的空闲间隔
+ 560µs的脉冲
。
3.1 重复码组成
3.2 重复码发送时序
4. 扩展的NEC协议
NEC协议的使用如此广泛,以至于所有可能的地址都会很快被用完。 通过牺牲地址冗余
,地址范围的值可以从256个扩展到65536个。 这样,地址范围就能从8位扩展到16位,而无需更改协议的任何其他属性。
通过这种方式扩展地址范围
,总的消息时间不再恒定
,只取决于消息中1和0的总数。 如果要使总的消息时间保持恒定,则必须确保地址字段中的逻辑1
数目为8个(这同样表示逻辑0
的数目也为8个)。 这会将不同地址的最大数量减少到大约13000个。
命令冗余仍然保留。 因此,每个地址仍可以处理256个不同的命令。
5. 38K红外发射接收电路选型设计
本片仅介绍NEC编码协议的部分,硬件电路设计及选型请见:
38K红外遥控发射与接收电路设计与选型、正向压降、限流电阻、半值角
6. 注意事项:电平取反
格外注意的是:VS1838
、PC638
、IRM-56384
、3638
、0038
这些38K红外接收管的输出方式为开漏
,故与上文的时序为反相,coding的代码内要记得取反
。
并且因为OUTPUT
引脚是开漏输出,需要外置上拉电阻
,或者将MCU的GPIO配置为上拉输入
。