红外的介绍、优点、缺点就不给大家说了,进入正题

 

一、红外遥控协议的的讲解

 

红外遥控的编码目前广泛使用的是:NEC Protocol 的 PWM(脉冲宽度调制)和 Philips RC-5 Protocol 的 PPM(脉冲位置调制)

 

本文将以 NEC 协议实现红外遥控。

 

NEC 协议的特征:

 

1、8 位地址和 8 位指令长度;

 

2、地址和命令两次传输;(确保可靠性)

 

3、PWM 脉冲宽度调制,以发射红外载波的占空比代表“0”和“1”;

 

4、载波频率为 38KHz

 

5、位时间为 1.125ms 和 2.25ms

 

NEC 码位的定义:一个脉冲对应 560us 的连续载波,一个逻辑 1 传输需要 2.25ms(560us 脉冲+1680us 低电平),一个逻辑 0 的传输需要 1.125ms(560us 脉冲+560us 低电平)。而遥控接收头在收到脉冲时为低电平,在没有收到脉冲时为高电平,因此,我们在接收头端收到的信号为:逻辑 1 应该是 560us 低+1680us 高,逻辑 0 应该是 560us 低+560us 高。如下图:

 

 

NEC 遥控指令的数据格式为:同步码头(引导码)+地址码+地址反码+控制码+控制反码。同步码是由一个 9ms 的低电平和一个 4.5ms 的高电平组成,地址码、地址反码、控制码、控制反码均为 8 位数据格式。按照高位在前低位在后的顺序发送。采用反码是为了增加传输的可靠性(可用于校验)。下图是我们按下按键 2 时,从红外接收头端测到的波形:

 

 

在图中可以看到,在 100ms 之后,我们还收到了几个脉冲,这是 NEC 码规定的连发码(由 9ms 低电平+2.5ms 高电平+0.56ms 低电平和 97.94ms 高电平组成),如果在一帧数据发送完后,按键仍没有松开,则发送重复码(连发码),可以通过统计连发码的次数来标记按键按下的长短 / 次数。

 

二、解码程序解析(参考正点原子的代码)

 

在正点原子的代码中是利用定时器的输入捕获功能来实现遥控解码的,下面解析一下关键代码:

 

在该实验 remote.h 文件中,定义了 3 个函数:Remote_Init();、TIM4_IRQHandler();、Remote_Scan();。

 

1、Remote_Init();

 

 

这里要注意中断优先级,定时器 4 的两个中断,溢出(更新)中断,捕获事件中断的优先级是一样的。意思就是,他两谁也不能打断谁,例如 A 在执行时,B 就不会产生中断。这里很重要,很重要,很重要!

 

2、TIM4_IRQHandler();

 

 

 

 

注意:遥控器发过来的码都是编好的,比如想破解遥控器编码,可以拿示波器去测接收端的码。

 

整个程序思路不难,就是对遥控器发过来的码进行解码,这里主要是两个中断的理解。