用微处理器I/O口控制红外接收设备
红外遥控是一种无线、非接触控制技术,具有抗干扰,电路简单,容易编码和解码,功耗小,成本低等优点,几乎适用于所有家电的控制,并越来越多地应用到计算机系统中。出于项目需要,要对一个内部程序未知的设备实现控制,我们把设备自带的红外接收头作为切入点。
本文引用地址://www.cazqn.com/article/142182.htm项目使用的是GOSSAT(高斯赛特)的GSR—S80 S型数字卫星接收机,设备配套有一个遥控器,单凭外观无法知道它所使用红外协议的种类,如果有示波器的话,就可以捕捉信号波形并进行分析。
红外接收头的种类很多,引脚定义也不相同,一般都有三个引脚,包括供电脚,接地和信号输出脚。常见的接收头型号有0038和1838。从外形上看,项目用的接收机使用的是0038接收头。
项目使用的是ATTEN(安泰信)的ADS-1102C数字示波器。把接收头的信号输出脚和地脚引出来,接入示波器,捕捉波形时建议用25ms/div的时间间隔比较方便,之后再放大到2.5ms/div进行查看和分析。鉴定遥控器有没输出信号的小技巧,打开手机的拍照功能,对着遥控器的红外发射管,此时按下遥控器上任意一个键,如果手机屏幕上能看到发射管发出了红紫光,说明遥控器是正常的。
经过分析捕捉到的波形得知,项目所用接收机采用的是NEC红外协议。查阅NEC协议的资料,其特征如下:
(1)8位地址和8位指令长度;
(2)地址和命令2次传输(确保可靠性);
(3)PWM脉冲位置调制,以发射红外载波的占空比代表“0”和“1””;
(4)载波频率为38kHz;
(5)位时间为1.125ms或2.25ms;
NEC码的位定义:一个脉冲对应560μs的连续载波,一个逻辑1传输需要560μs脉冲+1680μs低电平,一个逻辑0的传输需要560μs脉冲+560μs低电平。而遥控接收头在收到脉冲的时候为低电平,在没有脉冲的时候为高电平,这样,我们在接收头端收到的信号是反相的:逻辑1是560μs低+1680ms高,逻辑0是560μs低+560μs高。
NEC遥控指令的数据格式为:同步码头、地址码、地址反码、控制码、控制反码。同步码由一个9ms的低电平和一个4.5ms的高电平组成,地址码、地址反码、控制码、控制反码均是8位数据格式。按照低位在前,高位在后的顺序发送。采用反码是为了增加传输的可靠性(可用于校验)。
NEC码规定的连发码(由9ms低电平+2.5m高电平+0.56ms低电平+97.94ms高电平组成),发送完后40ms,遥控再发送一个9ms低,2ms高的脉冲,表示按键的次数,出现一次则表示只按下了一次,如果出现多次,则可以认为是持续按下该键。
知道协议之后,我们就可以进一步分析出遥控器的地址码和各个按键的控制码。项目所用接收机有点特殊,通过示波器去看,得出地址正码是0xA1,地址反码是0xDE,其余位都取反了,唯独最高位都是1,这个不同于常规。
之后的控制码,由于按键数量多,可以编写一个红外解码程序来解出这些键值,之后再用示波器来抽检几个,用于保证解出来的控制码的正确性,这是很关键的一步,不可小视。
之后就可以开始进行I/O的虚拟NEC工作了,项目采用STM32作为主控芯片,这里的功能只需要用到一个普通I/O,我们使用的是PA14。硬件上只需把PA14连接到红外接收头的信号输出脚,地脚和STM32共地就可以了。
关于STM32的I/O设置说明,每个I/O口可以自由编程,单I/O口寄存器必须要按32位字被访问。STM32的每个I/O端口都由7个寄存器来控制。其中CRL和CRH控制着每个I/O口的模式及输出速率,对ODR赋值可以改变对应位I/O口的高低电平。
万能遥控器相关文章:万能遥控器代码
评论