红外遥控器与输入捕获,手搓个板子实操一下遥控PWM波。
红外遥控器在我们生活中随处可见,空调、电视、电风扇、遥控小车想必大家都经常用到,这种红外通信方式到底是怎么实现的?
今天我用之前自己手搓的一个开发板来和大家一起从原理到实用学习一下。
我们分两部分来说明,先说发射端原理:其主要是通过两个三极管对输出信号进行调制的。
当输出端信号为高电平时,此时三极管不导通,38K载波信号不进行输出,输出信号维持高电平,红外管不发出信号;
当输出端信号为低电平时,此时三极管导通,38K载波信号得到释放,输出信号被调制为38K载波信号,通过红外管发送。
关于接收端原理,我们以常见的HS0038红外接收管为例说明:
当接收管监测到有38K的红外信号时,就会在OUT引脚输出低电平;当没有38K红外信号时,OUT引脚就输出高电平。
监测、放大、滤波、解调等一系列信号中间转换环节,均由一体化化接收接头HS0038完成。
遥控器的通信协议有很多种,我们以用得比较多的NEC协议来说明。从上面的红外发射接收原理,可以知道有38K载波信号就输出低电平,空闲则输出高电平,所以NEC协议规定:
560微秒载波加上560微秒空闲代表逻辑“0”,560微秒载波加上1.68毫秒空闲代表逻辑“1”。
这是一个用逻辑分析仪抓取的红外接收头输出信号,开头是9ms载波加上4.5ms空闲组成的同步引导码,然后就是8位用户地址码和8位地址反码,
地址码是用于区分不同遥控器的,可以自定义,而数据码和数据反码就是要传输的具体信息,不论是地址反码还是数据反码都是用来提高信号传输可靠性的,避免出错。
如果一直按住遥控器按键不放,在发完一轮数据后,红外接收头的输出不会重复,而是发送连发码标志,连发码由9ms低电平加2.5ms高电平加0.56ms低电平再加上97.94ms高电平组成。
有了信号的发送和接收,接下来就是有效信号的抓取和分析,这就需要用到单片机定时器中的输入捕获功能。
提前设置定时器自动重装载值ARR,定时器从0开始计数,计数到ARR则重新归零,依次循环。
当输入信号,并设定上升沿捕获,则信号在t1时刻遇到上升沿时,记录此时数值存入CCRx1, 并立刻清空计数器,转换通道为下降沿捕获。
此时计数器循环计数,直到信号在t2时刻遇到下降沿时,记录此时数值存入CCRx2,这样就可以根据t1到t2这段时间经历了多少个ARR,再加上CCRx2,
就可以得到高电平持续的时间。
以上理论虽然简单,但真要从电路到板子再到代码都手搓一遍,还是有点花时间的, 不过胜在趣味性强,有兴趣的同学都可以做一做,后面资料会在出的视频中开源出来。