使用单片机捕获红外编码
时间:10-09 15:35 阅读:868次
*温馨提示:点击图片可以放大观看高清大图
简介:对于智能家居,有个重要的设备部分红外遥控器,因为需要它来控制一些红外家电。
对于智能家居,有个重要的设备部分红外遥控器,因为需要它来控制一些红外家电。那么我们怎么获得这些红外编码呢?常用方法是记录遥控器发出的编码,并保存,当需要控制设备时,再将其编码发射出去。那么我们怎么使用单片机来捕获这些红外编码呢?下面我就给大家讲讲我所使用的方法。
我们一般会使用1838作为红外编码的接收头,1838的数字输出管脚是空闲为高电平(VDD),接收到红外信号时为低电平(GND)。对于很多单片机的定时器都有PWM波捕获功能,PWM捕获功能的使用,将定时器设置为从模式,意思是由其它事件启动定时器,设定好定时器的某个通道作为PWM波捕获通道,并且设置下降沿触发PWM波捕获,开启PWM捕获完成中断,如果捕获通道上出现下降沿,那么定时器外设会将定时器计数器的值存到保存PWM周期的寄存器中,此时会产生PWM捕获完成中断,然后复位计数器,再启动定时器,当捕获通道上出现上升沿,定时器外设会将计数器的值存到保存PWM波占空比的寄存器中。当处理器接收到PWM捕获中断时,就读取PWM捕获占空比寄存器和周期寄存器的值,并保存到编码缓冲器,注意第一个PWM波值需要扔掉,因为第一个中断是第一个下降沿时产生的,此时才开始第一个PWM波的捕获,需要等到第二个中断,第一个PWM波才捕获完成,此时占空比寄存器和周期寄存器里面存放的是第一个PWM波的数据,如此继续捕获。还有一个问题是,怎么判断PWM波捕获完成呢,PWM波的结束是捕获通道上出现上升沿之后不会出现下降沿了,定时器的计数器会一直计数,直到等于定时器的周期值,然后计数器才会更新为0,如果开启了定时器的更新中断,此时会产生中断,那么我们就可以利用定时器的更新中断作为PWM波捕获的结束,将周期寄存器设置为你所期望在捕获通道上出现了上升沿多久之后没有出现下降沿,就判定PWM捕获结束,可设置为几十毫秒。
我所使用的是STM32单片机,设置的定时器计数频率为100KHz,周期寄存器为30ms,采用定时器2的CH1作为PWM波捕获通道,那么PWM的周期寄存器为TIM2->CCR2,占空比寄存器为TIM2->CCR1。当然实际情况中还会有一些红外干扰信号,红外编码太长等等。