分享

嵌入式系统中的红外遥控附加功能,嵌入式系统,红外遥控,发射

 望穿墙 2014-08-20

转自:http://www1./xsj07/xsj082831.asp


0 引言

在红外遥控系统中,不同的红外编码芯片发出的载波信号各有不同,因此,解码程序各也不相同。但是,它们基本上大同小异,本文以M50462为例来进行说明。

1红外信号编码

红外遥控的基本原理是编码芯片读取用户按键,并根据键号生成不同的编码,然后将此编码调制在38kHz的载波上,再通过电流放大电路后驱动红外LED发送数据。在接收端,则将恢复出编码信号以供CPU解码。目前广泛采用的红外接收头能直接输出原始载波信号。实际上,这个接收头是一个集成电路,它封装了红外光电管、前置放大器、限幅放大器、带通滤波器、检波和比较、积分器和整形电路。这种接收头的外型象一只3极管,只需要外接3 V或5 V电源就能工作,但要注意的是,它输出一般采用OC形式,这是为了起到电平转换的作用,使用时要外接一个上拉电阻。

遥控发射器的脉冲编码一般由用户码和数据码构成,用户码用来区别同一种遥控器的不同厂家或设备,数据码则对应按键。用户码和数据码一般都是8位,各有256种状态。在红外遥控系统中,一般为了省电,它们不采用高低电平来区别0、1,而是采用脉冲位置编码方式。图1是M50462传送1位0、1的波形编码图。

图中,在低电平部分,红外LED发光,此时不论发送0或1,其脉冲时间始终是0.25 ms,所不同的是占空比。由于实际发光时间很短,红外发光管的平均电流很低,因此,发射效率相当高,非常省电。

有时候,有些遥控编码器件会在发送数据之前先发送一个引导脉冲,有的还需要自动重复一次。但是,M50462芯片的编码却非常简洁,它只需要将用户码和数据码各发送一次即可。其传送波形如图2所示。

通过M50462发送编码信息时,低位先发,高位后发,一次传送后,4 ms之内不会再出现脉冲。接收头收到的波形也是如此,仔细观察发现。解码时可以不管脉冲宽度,而直接计算下降沿的间隔时间就可以了。

有一点要特别注意:由于系统所使用的环境、距离、各品牌接收头的参数不完全一样,因此,实际接收到的数据也不可能严格按上面图2中所给的时序那样,这样,在程序设计上就必须要有一定的适应范围,否则就会出现接收不稳定和跳接收头等奇怪的现象。

2解码程序的设计

以往的一些资料上,介绍的解码方法都是采用边沿中断触发以后,再用一个定时器来计算脉冲宽度,这是最简单的办法,一般的CPU都能处理。但在一些廉价的应用中,由于有些CPU资源非常有限,定时器只能共用,有鉴于此,笔者设计的这个解码程序特别考虑了硬件资源问题,该方法只需要占用一个具有边沿触发方式的外中断即可,其定时器可以共用,但基本思路还是采用中断触发定时器计数的方式,其源代码程序如下:


设计时,定时中断间隔时间的设置应根据实际情况确定,理论上是时间短一些为好。由于最小的间隔时间为1 ms,因此,设置为250μs基本能满足接收要求,设置的太短会使CPU负担过重。由于在定时中断中只有一句测试并自减,因此效率非常高。

当第一个下降沿到来时,红外接收中断被触发,在执行到(1)时,将脉冲个数计数器和脉冲宽度计数器都赋初值以准备测量;第二个下降沿到来时,执行到(2),由于M50462是先发送低位后发送高位,因此,stIRCode往右移动,新数据从高位进入。在(3)、(4)、(5)通过测试IRtimer的值,可判断是收到0还是1。实际上,第(3)是空语句,它只是为了加强程序的可读性。到(6)便收够了17个脉冲,此时,用户码和数据码都存在gstrIRdata结构体中,实际上,在(7)处还可以加入一个判断。此时如果用户码不符合,则可直接放弃数据。

3 结束语

本程序由于全部用C语言编写,而且没有使用51特有的位操作,因此,将该程序代码移植到其它系统非常方便。该程序在笔者开发的多个项目上得到应用,其CPU使用了51单片机MSP430和ARM微处理器,其效果都十分良好。稍微改动一下,该代码也能适合其它的遥控芯片。


本文摘自《电子元器件应用》

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多