本帖最后由 旺宝电子 于 2015-4-22 17:25 编辑
第十六章 红外解码
16.1红外遥控简介:1、红外编解码
在光谱中波长自0.76至400微米的一段称为红外线,红外线是不可见光线。为了防止自然界中的红外线干扰,一般对红外线进行编码调制后进行通信,一般使用38KHz进行调制,如今使用红外遥控有两种编码方式:PWM编码(脉宽调制)和PPM编码(脉冲位置调制)
二进制数调制
PWM编码:发射载波的占空比代表”0”和”1”,发射红外载波的时间固定,通过改变不发射载波的时间来改变占空比。
如下图,当第一次发送时引导码9ms 的载波波形和4.5ms的关断时间构成,在发重复码时,引导码由一个9ms的载波波形和2.25ms的关断时间构成。
如下图以脉宽为0.56ms、周期为1. 12ms 的组合表示二进制的“0”,以脉宽为1. 68ms 、周期为2. 24ms 的组合表示二进制的“1”。
2、HS0038
红外接收探头,接收红外信号频率为38kHz,周期约26μs,同时能对信号进行放大、检波、整形,得到TTL电平的编码信号。
红外线信号被红外接收头接收到后,经过HS0038内部的放大、检波、整型后滤除了38KHz的载波,如下图是接收到的波形与对应输出波形,输出的有用信号与原PPM编码信号相反。
16.2实验说明:本实验采用外部中断功能实现红外解码,并在 LCD 上显示键值和所代表的意义,以及按键次数等信息。同时用 LED1来指示程序正在运行。
16.3硬件说明:16.4程序说明:本次实验使用stm32的PB0脚与红外接收头,通过配置PB0为外部中断,当没有红外信号时HS0038输出高电平,接收到红外信号的引导码后触发下降沿中断,进入中断函数对信号进行解码,信号接收完成后PB0为高电平,通过判断高电平时间大于5ms时退出中断函数,并将接收到的32位数据存放在Remote_Odr中。
当进入中断程序后,通过判断高电平持续时间即高脉冲宽度来判断信号类型,使用Pulse_Width_Check函数来检测高电平时间,使用宏定义#define RDATA GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0)读取PB0的状态,如下当PB0为高电平时,延时20us,同时t加一,直到PB0变为低电平或高电平时间达到5ms退出返回t,高电平时间t*20us,实验使用系统定时器作为延时,确保延时的精准,这里不做介绍。
这里介绍红外解码的相关时序
1)当res=250时,高电平时间大于5ms为无用信号,退出处理函数;
2)当250>res>200时,即5ms>t>4ms被认为是引导码4.5ms,并且OK=1,表明后面的为数据信号可以接收;
3)当200>res>85时,即4ms>t>1.7ms被认为是第二次发送引导码2.25ms;
4)当85>res>50时,即1.7ms>t>1ms被认为是1.5ms代表“1”;
5)当50>res>10时,即1ms>t>0.2ms被认为是0.5ms代表“0”;
在发送完成后Remote_Rdy置1来标志接收到了数据,在主程序中循环判断是否接收到数据,若接收到则进入Remote_Process进行键值处理,Remote_Odr中的24-31位为地址码,16-23位为地址反码,8-15位为键值,0-7位为键值反码。判断并返回键值,在主程序中显示出对应键值对应的按键码。
16.5、实验现象:下载程序后,安装3.2寸彩屏模块,重新上电,使用实验遥控对着开发板的红外接收头按下按键,在LCD屏上显示按键对应的标号,对于不同的遥控器编码也会有区别,本次使用“car mp3遥控器”。