基本原理
众所周知,红外线是一种波长大于红光的不可见光,人眼无法感知,但是红外光敏二极管可以接收感知到红外线,借由红外线是否照射来控制电路的通断,实现远程使用红外线遥控。
NEC协议
家中常见的电视、空调等家电遥控器很多都是采用红外线控制,但是如果只是简单的控制电路通断当然是无法实现遥控器上那么多按键的不同功能,所以这里介绍一种基于红外线的一种通讯协议,NEC协议是比较常用于红外通信的协议。
载波
不管是光信号还是电信号一般我们都可以定义高电平(发光)代表逻辑1,低电平(熄灭)代表逻辑0,但是在NEC协议中没有这样简单的采用这种方式,而是采用了38kHz频率的载波信号来传输信息,所谓载波可以理解为发射端在发射每秒亮灭38000次的高频闪烁信号,并且这里的载波空占比一般是1/3到1/4,也就是1/38000秒的一个周期内,前1/3到1/4的时间在发光,后2/3到3/4的时间是熄灭的,这样做大概有以下两个好处:
- 提高抗干扰性能
- 降低电源消耗
数据帧
基于以上介绍的载波,我们就可以发射NEC协议定义的数据帧了,以下是一个数据帧的格式
其中黑色的部分就是发送载波信息的时间段,空白的就是没有发送
NEC协议把逻辑1和逻辑0分别用以下载波发送段来表示
- 逻辑1总时间段为2.25ms,其中前0.56ms发送载波,后1.69ms不发送
- 逻辑0总时间段为1.12ms,其中前0.56ms发送载波,后0.56ms不发送
引导码
数据帧的前9ms+4.5ms是引导码,代表数据帧准备开始发送了
地址码
连续8个逻辑位,用于识别不同发送接收端,比如家里一个空调一个电视都是NEC红外协议通信,这里就可以利用地址码区别开来,避免相互影响
地址码分两次发送,后一次需要将前一次的每个二进制取反,用于校验
指令码
连续8个逻辑位,需要发送的实际数据
指令码也是要分两次发送,后一次需要将前一次的每个二进制取反,用于校验
结束码
0.56ms的载波信号,代表这帧数据结束了
重复码
在我们按下遥控器的按钮并且不松开时,比如调节电视音量一直按住加,这时遥控器并不会一直发送这个按钮的数据帧,而是发送重复码
前110ms是发送的实际数据帧,我们可以计算一下,一个数据帧最长大概有多少ms,全部发送逻辑1应该是最长的,引导码地址码指令码全部加起来大概也就是86ms,不会超过这个110ms,如果一直按下按钮超过110ms没有松开紧接着就会发送9ms的载波和2.25ms的空以及0.56ms的载波,代表重复
红外接收模块
我们一般常见的红外接收模块是3个针脚,一个VCC一个GND一个数据接收引脚,其实模块内部已经有芯片针对载波进行了处理,数据接收引脚出来的信号已经是高低电平信号,不需要解析38kHz载波信号了,这样相当于简化了我们的程序处理逻辑,只需要通过单片机的定时器和中断计算电平信号的时长来解析数据帧即可
评论区