stm32与红外遥控器(NEC协议)

本次测试采用R903V1红外接收头与NEC协议的红外遥控器,接收头原理图如下:

stm32与红外遥控器(NEC协议)

器件的供电电压VCC在2.7V~5.5V之间,输出电压VOUT正常在0.2v ~(VCC-0.3±0.2)v,注意高低电平输出脉冲宽度最小都在400us~800us之间。

NEC 码的位定义:一个脉冲对应 560us 的连续载波,一个逻辑 1 传输需要 2.25ms(560us脉冲+1680us 低电平),一个逻辑 0 的传输需要 1.125ms(560us 脉冲+560us 低电平)。而遥控接收头在收到脉冲的时候为低电平,在没有脉冲的时候为高电平,这样,我们在接收头端收到的信号为:逻辑 1 应该是 560us 低+1680us 高,逻辑 0 应该是 560us 低+560us 高。同时NEC码还规定了连发码由 9ms 低电平+2.5m 高电平+0.56ms 低电平+97.94ms 高电平组成。

NEC协议的数据格式:同步码头、地址码、地址反码、控制码、控制反码。同步码由一个 9ms 的低电平和一个 4.5ms 的高电平组成,地址码、地址反码、控制码、控制反码均是8 位数据格式。正常是按照低位在前,高位在后的顺序发送,但是我测试是按照高位在前,低位在后的。采用反码是为了增加传输的可靠性(可用于校验)。

stm32与红外遥控器(NEC协议)

 

2.硬件连接

简单说一下,红外接收器电压接3.3V,VOUT连接单片机的输入捕获引脚即可。

 

3.软件设计

使用stm32单片机的输入捕获功能,用stm32cubemx进行设置:

stm32与红外遥控器(NEC协议)

 

这里解释主要参数部分:

prescaler:预分频器,设置为72

counter mode:计数模式,设为向上计数

counter period:计数周期,设为65535

polarity selection:边沿检测方式,选择下降沿检测,程序里还是改成了上升沿检测

input filter:输入滤波器,设为8,是指连续采集到8个一样的高/低电平才计作高/低电平

在MAIN中开启输入捕获:

stm32与红外遥控器(NEC协议)

stm32与红外遥控器(NEC协议)

while (1) { switch(cap_state) { case 0: __HAL_TIM_SET_CAPTUREPOLARITY(&htim5, TIM_CHANNEL_2, TIM_INPUTCHANNELPOLARITY_RISING);//设置为上升沿捕获 HAL_TIM_IC_Start_IT(&htim5, TIM_CHANNEL_2); //启动输入捕获 cap_state++; break; } /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpgpzd.html