关注公众号

关注公众号

手机扫码查看

手机查看

喜欢作者

打赏方式

微信支付微信支付
支付宝支付支付宝支付
×

一文读懂红外遥控解码(一)

2020.10.05

红外遥控是我们现实生活中必不可少的一员。遥控,顾名思义即在遥远的地方进行控制,其实也就是说远程通信。红外遥控就是以红外线为传输介质的遥控。

红外遥控器是怎么工作的?其实它内部就是有一个单片机,单片机的I/O口控制一个红外LED灯(当然一般会加外部放大电路以增大传输距离),在内部编码后发送出去,然后电视或者空调之类的可以用红外遥控控制的电器在接收到红外信号后就会进行解码,并根据制定好的协议执行特定动作,比如电视可能换台、调节音量等。现在有的手机就带有红外遥控功能,其实也是用单片机的功能实现的。

红外遥控解码

有的时候,我们希望模拟一些遥控器的功能,这时候就要对这些遥控器的数据进行解码。

在进行解码前,我们先来了解一下红外编码。红外编码有很多种,最常用的编码是NEC编码。NEC格式的编码如下:

wx_article_20190621194350_8A6DJn.jpg

NEC格式的红外编码是连续的32位二进制码组。32位二进制码组之前的引导码,用于区分每次的传输;在起始码之后的才是32位二进制码组,其中8位用户识别码和8位反码(反码主要用于)校验,用户识别码的作用主要是区分不同品牌的遥控器;接着就是8位操作码和反码,用于表示哪个按键被按下。

NEC格式的编码除引导码和起始码外,用于交互数据的信息采用脉宽调制的串行码,在38kHz的载波下,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的“1”,其波形如下所示:

wx_article_20190621194350_MwnLHA.jpg

了解了红外编码,就可以进行红外解码了。

实现方法

一般,进行红外解码我们需要先将接受到的有效信号与外界环境的干扰信号分离开,这就是载波的作用。现在市面上有很多一体化红外接收头,内部是红外接收二极管 +放大电路 +解调器。当接收到红外信号后,先将其放大,然后把38kHz的信号保留下来。需要注意的是一般一体化红外接收头接收到信号时输出是低电平,没有接收信号时是高电平。

wx_article_20190621194350_YzfS2v.jpg

上面是常用红外接收头的引脚,“OUT”脚接单片机的I/O口,“-”脚接电源负极,“+”脚接电源正极。

接好电路,就要进行解码工作了.其实解码工作主要是识别引导码,还有数据“0”“1”。我们看波形图,只要识别红外接收头“OUT”引脚高低电平持续的时间就可以了。这个可以用定时器中断完成,也可以用延时来判断。由于只完成解码工作,我们就用延时的方法更方便。

首先,红外接收头没有接到信号时是高电平,等待其变低。之后,每隔900us测量一次,若在10次内电平变高,说明这不是引导码,退出重新开始;若10次内并没有变高,说明这就是引导码,继续下一步。接着可以不判断起始码,就是直接等待引脚电平变高再变低,就可以接收数据了。

接收数据,就是进行判断“0”和“1”。从位的定义我们可以发现“0”、“1”均以0.56ms的低电平开始,不同的是高电平的宽度不同,“0”为0.56ms,“1”为1.68ms,所以必须根据高电平的宽度区别“0”和“1”。

每一位“0”或者“1”在接收头接收信号即低电平的时间都是一样的,直接等待低电平过去,在高电平时延时600us,如果600us时还是高电平,说明是“1”;如果是低电平即高电平过去了,说明是“0”。将这些数据结合到一起,就是接收到的编码了。

将单片机的串口与电脑接好,就可以在串口显示我们读到的红外遥控数据了。


推荐
关闭