红外收发基础

时间:2024-01-25 19:12:22

基础认识

红外光:

只要温度高于绝对零度(-273.15℃)的物体都会发出红外光,因此它是无处不在的。肉眼不可见。

 

波长:

红外发射管常见的波长有850nm和940nm两种比较常见

 

频率:

发射端以一个固定频率来发射红外光,一般以37.91KHZ比较常见,也有的地方自接说成是38KHz。同时,接收端只能识别该频率下的信号,只要发射端与接收端的频率正负相差不超过1KHZ,都是可以正常通信的;如果相差超高2KHZ,会出现失灵或者距离短等情况。

 

原理:

红外光的光谱位于红色光之外,比红色光的波长还长,这样的光被称为红外线,其肉眼不可见。可以使用手机摄像头对准红外光发射器即可铺捉到红外光的存在。

 

红外遥控是利用红外线进行传递信息的一种控制系统,红外遥控具有抗干扰强、电路简单、编码及解码容易、功耗小、成本低的优点。

 

红外遥控其实就是一个红外发光二极管和一个红外接收管组成

 

红外传输时使用38KHZ作为载波,发射端通常保持低电平不发送,高电平发送的是38KHZ的波

 硬件组成

红外包括红外发射管和红外接收管

红外发射管:

与普通发给二极管(LED)相识,但其发出的光是不可见的

      

 

红外接收管1

可能存在两种结构,原理图1中D1二极管默认不导通,如果接收到红外信号时二极管的电阻会大大降低,而实现导通。

      

 

 

 红外接收管2

   该模块有三个引脚,功能比前面的大大增强。它的内部电路包括红外监测二极管,放大器,限幅器,带通滤波器,积分电路,比较器等。通过内部电路,还原处发射端的信号波形,可以直接被单片机使用。因此也被称为一体化红外接收头。也就是说,它输出的是符合数字电路要求的数字信号,可以直接拿来使用。所以,虽然外型上只多了一个引脚,但实际内部功能增加了很多很多,大大简化了电路设计者的工作。另外,此类接收头的内部放大增益比较大,很容易引起干扰,因此一般厂家建议在供电脚上加上4.7uf以上的电容进行滤波。

常用型号有IRM3638、HS0038和VS1838等。其接口电路如下所示

管子里面集成了红外接收器的滤波和放大功能,基本不用什么外围电路了,用起来简单。通常只需要做或者不做电源电容滤波电路即可。

红外接收模块的OUT引脚可以直接接到单片机IO口上。

        

    

红外协议

1. 红外光是载体,需要通过此载体实现数据交互,必须存在数据协议

2. 协议的最终都是为完成0或1的指令传送

3.常见有:ITT协议、NEC协议、Nokia NRC协议、Sharp协议等

 

NEC协议发射端:

遥控器内部一般会使用455Khz的晶体作为震荡源,通过内部分频电路将其调制为频率37.91Khz、占空比三分之一的震荡信号。遥控器闲置是,发射端无输出。当有按键按下时,会发送一串信号驱动红外发射端发射红外线,信号格式如下:一段引导码、两个字节的用户码(厂家定义)、一个字节的按键数据、一个字节的按键数据反码,最后跟一个停止位(编程时基本不考虑)。

数据格式包括了引导码、用户码、用户反码、数据码、数据反码,编码总共占32位。其中用户码和用户反码(数据码和数据反码)他们的关系是按位取反相等。其主要用于纠错。数据传输低位在前。

发射端的编码:

 

 

 

NEC协议接收端:

闲置时输出高电平,当收到37.91KHZ的红外时,接收端调制出的信号时低电平,无红外光时,又恢复到高电平。所以,将发射端的信号全部取反则为接收端的接收信号。

接收端红外信号解析与输出:

     空闲状态下引脚输出高电平

     当表示一个bit位为0时,先输出一个0.56ms的低电平,然后输出一个0.565ms的高电平;

     当表示一个bit位为1时,先输出一个0.56ms的低电平,然后输出一个1.690ms的高电平。

 

起始吗:9ms的载波+4.5ms的空闲,对于接收来说的话,就是9ms低电平+4.5ms的高电平作为数据的起始信号。

比特值0:560us的载波+560us的空闲,对于接收,载波就是低电平

比特值1:560us的载波+1.68ms的空闲,对于接收,载波就是低电平

 

接收端编程:

检测低电平和高电平的时间,通过时间即可得到起始码和比特1、比特0的数据。

 

首先判断电平变化,然后开启计时,再次等待电平变化停止计时

 

检测低电平:

 

 

 

首先检测到底电平的出现后立即开始计时,如果检测到高电平停止本次计时,存储计时时间,并开始高电平计时,再次等待到低电平,则表示一次一个bit位接收完毕。

 

方法1:

 

 

方法2

通常我们只需要判断两个下降沿的时间就可以了,最大时间不可超过9+4.5ms,最小不可小于560us+560us

 

编程导向

 以是否有红外信号输出/判断高低电平

 

接收端编程思路:

通过两个下降沿计算到时间间隔,可以判断到接收到的信号时0还是1

 

发送编程思路:

发送端发送高电平其实是38Khz的高低电平组成的

定时器设置为38KHZ中断,如果要发送则在中断计数里一直取反发送端(连接红外灯)的电平,实现发送高电平(接收端识别为低电平)的数据,如果发送低电平则延时不动作。

 


 参考视频:https://www.bilibili.com/video/av73032905