红外遥控在嵌入式系统中的实现
2010-07-25翟祥林王景成
翟祥林,王景成
0 引言
红外遥控技术是70年代发展起来的新兴电子技术,它具有价廉、非接触控制等特点,在普通的环境下,可靠性高。目前,红外遥控技术已经取得了非常广泛的应用。不仅很多家电,像电视、影碟机、空调等都采用红外遥控,而且在很多工业设备中,为了克服一些恶劣的工作环境,也纷纷采用红外遥控器来控制设备。另外,为了方便使用,许多仪器也都采用红外遥控器来遥控操作。
一套完整的红外遥控系统,都由红外发送器和红外接收器两部分组成。红外发送器的功能是把它上面的按键的功能编码,以 30~60kHz的载波调制后加到近红外线发光二极管上发送出去。通常采用的近红外线发光二极管所发出的近红外线光的中心波长在 940nm左右。红外接收器的功能是将发送端的调制波解调,得出发送端所发送的功能编码,遥控设备再根据功能编码来进行相应的动作,从而达到遥控的目的。
1 红外遥控编码的基本原则
随着技术的不断发展,采用红外遥控的电器设备逐渐增多。为了防止误操作,不同厂家不同种类遥控设备的遥控系统编码方式各不相同,互不兼容,但是它们基本都遵循如下方式:
图1 红外遥控系统的编码方式
引导码信号是必须的,不可省略,不同厂家所定的信号宽度略有不同。引导码的信号需要一段较长的信号时间,在此时间内来设定红外接收器内光电路的增益,大小随输入信号的强度而不同,这样动作可较为稳定。
编码输出可分为两部分,前面是用户码(custom code),后面是数据码(data code)。一般将不同的custom code当成不同的产品来分类,而data code则代表功能设定。custom code 及data code的长度,就是传送的bit数,不同的产品也会有所不同。有时为了抗干扰的需要,分别将custom code及data code的反码再一起传送出去。
编码输出的调制方式一般采用 PPM 方式(Pulse Position Modulation),即利用脉冲之间的大小作为传送信号的“0”与“1”,一般采取间隔短的代表“1”,间隔短的代表“0”。
重复码是表示使用者按下按键(在按下按键时就开始发送),间隔一段时间以后,若使用者仍未将按键放开,为了减少电源的功耗,不再传送完整的编码输出,发射器改为发送重复码,表示按键仍在按着。重复码不是必须的。重复码的时间与引导码的时间、“0”和“1”的时间都应不同。
在完整的编码输出后,应该再输出一个停止位,这样,在接收器的接收处理程序中才可以确定编码输出的最后一个bit的时间。同理,在重复码的最后也必须加上一个停止位。
2 红外发送的原理
红外发射器应用电路的一般形式如下:
图2 红外遥控系统发送部分的原理图
红外发射器的工作流程:首先,发射器中的MCU以扫描方式检测是否有按键按下;其次,有按键按下后,查找该按键对应的功能编码;然后,就开始传送,把引导码,用户码及其反码,按键的功能编码及其反码,停止位依次传送出去。所有的信息传送完之后,若按键仍持续按着,每超过一段时间(一般取100ms左右)后就传送一次重复码。
整个流程如下框图所示:
图3 红外遥控系统发送部分的流程图
红外发送的最佳发射频率为38kHz。采用I/O口传送方式来发送时,可利用定时器中断或空指令延时来产生38kHz的频率。其中空指令延时与MCU的晶振频率有关,空指令执行次数计算公式如下:
空指令执行次数 = 晶振频率 / 空指令的指令周期 /38000
如果发送单片机上有PWM口时,采用PWM口传送方式传送则更为方便,因为可利用PWM口来产生38kHz的频率,PWM口的具体使用方法可参阅相关单片机的使用手册。
假如用户码为0110 1110B(二进制表示法),按键对应的编码为0110 0000B,采用I/O口传送方式发送,则从此I/O口输出的波形如下所示:
图4 红外遥控系统信号发送波形示例
其中,高电平部分由 38kHZ的脉冲组成,从而输出38kHZ的红外载波。
现在市面上已有专用的红外发送单片机,只要加上少量的外围电路和按键,即可组成一个红外遥控器。如 Holtech公司(台湾盛扬半导体)的八位 OTP载波遥控单片机HT48RA0A ,它是八位高性能精简指令集的单片机,专为多输入/输出口的产品而设计的,特别适用于作红外遥控器中的控制器。
3 红外接收的原理
红外接收器的接收模块收到红外线光后,由光电二极管做光电转换,经过放大、带通滤波器滤波,再经过检波、整波即可将发送端的调制波解调。现在市面上已有将上述接收过程的电路整合成单一元件的器件,如日本光电子公司的PIC-12043、西门子公司的SFH506-38。
红外接收器应用电路的一般形式如下:
图5 红外遥控系统接收部分的原理图
经解调处理以后,红外接收模块输出的信号为源发射信号的反向。假如按上述红外发送部分发送信号,则红外接收模块的输出信号应为如下形式:
图6 红外遥控系统信号接收波形示例
红外接收器中的MCU至少有一个定时器和一个外部中断。其中定时器以特定的频率计数,来确定信号的一个脉冲的时间。红外接收模块的输出信号应接在外部中断源的引脚上,此外部中断应设置为下降沿触发方式,如果不能设置为此方式,在红外接收模块的输出后面还要加上反向电路或反向器。在定时器中断服务程序中,每执行一次就将计数值加1,在外部中断服务程序中,检查定时器中的计数值大小,从而确定接收信号的某个脉冲的内容:引导码、0,1、重复码,并且清除计数值内容。
在接收端来说,假如引导码的低电平和高电平时间分别为 8.8ms、4.4ms,“1” 的低电平和高电平时间分别为 0.55ms、1.65ms,“1” 的低电平和高电平时间分别为 0.55ms,“0” 的低电平和高电平时间都为 0.55ms,重复码的低电平和高电平时间分别为8.8ms、2.2ms。若定时器以8kHz的频率计数,则各阶段的计数值都可以计算出来:
引导码:(8.8ms+4.4ms)/(1/8000)=105.6
“0”: 1.1ms /(1/8000)=8.8
“1”: 2.2ms /(1/8000)=17.6
重复码:(8.8ms+2.2ms)/(1/8000)=89.6
为提高抗干扰的能力,可以理论的计数值为中心给定一范围,只要定时器中的计数值落在相应的范围,就确定此脉冲为相应的值。
红外接收的整个判断流程如下:
图7 红外遥控系统接收部分的流程图
下面是一个红外遥控系统中的接收模块源代码,使用对象是Windbond公司的51系列单片机W78E52,经在产品中长期使用,证明可以高效无误的实现遥控功能。下面仅给出了接收模块部分的源代码,其他部分均已略去(包括调用的子函数、中断的初始化等),给出部分采用C51语言编写。详细源代码如下:
4 结论
在实际使用的红外遥控系统中,红外发送部分即为常说的遥控器,它一般只作发送遥控指令用,功能较为单一。由于遥控器基本上都使用电池供电,因此,编制红外发送部分MCU的控制程序时,一定要遵循节省电源的原则。红外接收部分一般只是在产品中接收外部操作指令,并不是产品的核心功能。目前,使用红外遥控的产品有两种方式来完成红外接收功能,一种方式是直接在产品的主控MCU中加上红外接收模块,另外一种方式是产品中两个MCU,其中一个负责人机接口,完成红外接收解码等工作,再通过一定的接口传输给另外一个MCU,即完成产品主要功能的MCU。
目前,带有红外遥控的电器设备逐渐增多。如果在同一环境下需要遥控多台设备,由于不同厂家不同种类的遥控设备与其遥控系统一一对应,互不兼容,操作就十分不方便,有时还会因为拿错遥控器而不能及时操作。现在市面上出现的一种既具有通用性又能适应每个用户的特殊要求,并能随时更新内容的通用型学习式红外遥控器,就能很好的解决这类问题。这种遥控器具有自我学习功能,它能够学习并存储不同种类的遥控器所发出的各种控制信号,然后重发出来,从而实现一台遥控器同一控制多种设备。
[1] 王镇道等.长距离遥控[J] .半导体技术,2001(4):39-41.
[2] 邱玉春,李文俊.单片机系统中的红外通信接口[J] .电子产品世界,2000(5) :36-37.
[3] 麦山等.基于单片机的协议红外遥控系统[J] .电子技术,1998(5):22-24.
[4] 霍林科.彩电遥控系统的软件设计[J] .电视技术,1997(4):29-35.
[5] 谢晓晖.红外遥控技术在复费率电度表中的应用[J] .电测与仪表,1996(4):24-26.