基于mega128单片机的学习型红外遥控器设计
扫描二维码
随时随地手机看文章
红外遥控是一种无线、非接触控制技术,具有抗干扰能力强、信息传输可靠、功耗低、成本低、易实现等显著优点,被诸多电子设备特别是家用电器广泛采用。随着人们生活水平的提高,家用电器的数量逐渐增加,使用红外遥控器的频率越来越高。但是由于各种红外遥控器编码格式不同[1],所以各种红外遥控器不能兼容,这样一个家庭就需要很多个遥控器,很不方便。
目前国内学习型遥控器大部分采用复制遥控器红外波形的思想,方法很多。但是由于采用专用遥控发射芯片,集成度高但成本也高。
本文介绍一种基于mega128单片机的具有学习型的红外遥控器的设计,其思想是通过测量经过红外接收芯片解调后输出的编码脉冲宽度[2],然后存入单片机内部eeprom指定地址。当要发生红外信号时,从存储区还原出相应的红外遥控编码,并调制到38 kHz的载波信号上,最后直接驱动红外发光二极管发射红外信号,实现一个遥控器控制多种红外家电设备。
1 学习型红外遥控器基本硬件结构
学习型红外遥控器由以下几个模块组成[3]:单片机、红外接收模块、红外发射模块和矩阵键盘,如图1所示。系统采用8 MHz晶振,直接采用mega128内部E2PROM来存储红外遥控编码,其容量为4 KB。
红外接收模块电路如图2所示。红外接收芯片采用HS0038A2,此芯片对接收到的红外信号进行放大,检波整形并解调出红外遥控编码,得到TTL电平,反相输入到mega128 的PD0和PD1口,即外部中断0和外部中断1口。通过上升沿和下降沿两个边沿触发中断来控制定时器的开与关,从而记录高低电平的脉冲宽度值。
红外发射模块电路如图3所示。当系统进入发射功能时,单片机首先扫描矩阵键盘,识别相应按键的按下情况,然后从E2PROM中取出相应键值的遥控信号[4],即通过学习后保存到E2PROM里的高低电平的宽度值。与此同时,利用单片机T0定时器产生38 kHz的载波信号。最后将遥控信号调制到载波上,通过IO口直接驱动红外发射二极管发射红外信号。这里的调制完全通过软件实现,取代了直接用与门来调制的方式,方便准确。由于mega128 单片机IO口的驱动能力强,可以直接驱动二极管,避免了传统三极管放大后再驱动的繁琐。
2 系统软件设计
2.1主程序设计
系统上电后不断扫描键盘,当检测到学习键按下时,调入学习子程序,对相应功能键的遥控编码进行学习并写入E2PROM;当发射键按下时,先识别按下的功能键,然后从E2PROM中读出相应的已经学习到的红外遥控编码,然后通过发射程序发射出去。如图4所示。
2.2 学习子程序
学习程序的功能是对红外遥控编码的学习,即对高低脉冲宽度的测量。当中一定会存在一定误差,不可能毫无误差地复制出被测的红外编码。不过,由于所有的红外设备在接收端都允许一定的误差,只要保证在误差范围内都可以对红外设备进行控制。学习程序的主要思路是通过边沿触发中断来控制定时器的开和关,从而测出高低脉冲宽度。mega128单片机的外部中断0和1口的中断方式分别设置为下降沿和上升沿触发中断。当没有接收到红外信号时,外部中断0、1口都为高,此时程序等待红外信号的到来。当红外到达时,下降沿触发中断,学习程序跳到下降沿中断服务程序。在中断服务程序里,停止定时器3,保存其寄存器的值并清零,最后启动定时器1,这样开始测量低电平。当高电平到来时,上升沿触发中断,程序跳到上升沿中断服务程序里,此时停止定时器1,保存其寄存器的值并清零,最后启动定时器3,高电平开始测量。当下一个低电平到来时,程序又跳到下降沿中断服务程序,重复上面的工作。这样,高低电平的测量就在两个边沿触发中断服务程序里面来回跳转。最后一次跳入边沿触发中断服务程序时,一旦产生定时器溢出,则程序跳入定时器溢出中断服务程序,只要设定一个标志位,让程序跳回主程序即可。到此,红外编码学习完毕,只需把学习到的编码宽度值存入E2PROM即可。如图5所示。
2.3发射子程序
发射程序是把已经学习到的红外编码发射出去控制红外设备。首先要根据所按下键来找到E2PROM相应的红外编码。这里是通过红外接收芯片接收到的红外编码经过一个反相器,所以发射时要把原来的高低电平翻转一下。红外发射程序的思想是通过两个定时器的配合来调制出38 kHz的红外信号。定时器0产生38 kHz的载波信号,用已经学习到的低电平宽度来确定定时器0的定时长度。当发送低电平时,启动定时器0;发送高电平时,停止定时器0。如此就能发送一个与接收到的红外编码反相并且高电平是经过38 kHz载波调制过的红外遥控信号,这个信号就是普通遥控器发送出去用来控制红外设备的信号。如图6所示。
3 实验测试
实验中用格力的一台柜式空调进行试验。图7是接收波形,图8是还没有经过38 kHz调制的发射波形。比较两个波形可以看出,接收和发射的波形高低电平持续时间相同,只是波形正好相反,原因是在接收芯片里有一个反相过程。此时,只需将38 kHz的波形调制到波形里,再通过红外发光二极管发射出去,即可对空调进行控制。把空调遥控器上的所有功能键都尝试过一次,都可以对空调进行控制。
本文所设计的学习型红外遥控器可以准确地测量并学习红外编码信号,将所学的信号复制,保存并通过红外发射二极管发射,可以控制红外家用设备。不同类型的红外遥控器,各种编码格式都可以对其进行学习并对电器进行稳定控制。
参考文献
[1] 邱士安.通用遥控器的解决方案[J].昆明理工大学学报, 2001(26):197-199.
[2] 芦健,彭军,颜自勇,等.自学习智能型红外遥控器的设计[J].国外电子测量技术,2006,25(8):63-65.
[3] 徐志,何明华,林武,等.一类基于软件载波的学习型遥控器的设计与实现[J].现代电子技术,2009(2):36-38.
[4] 耿德根,宋建国,马潮,等.AVR高速嵌入式单片机原理与应用[M].北京:北京航空航天出版社,2002.