首页资源分类嵌入式处理器51内核 > 学习型红外遥控器的设计

学习型红外遥控器的设计

已有 445125个资源

下载专区

上传者其他资源

    文档信息举报收藏

    标    签:学习型红外

    分    享:

    文档简介

    一款学习型红外的设计

    文档预览

    摘 要 随着人民生活水平的提高,带红外遥控的家用电器种类繁多,比如电视、空调、VCD等,有些设备也常配有红外装置,如汽车和摩托车的防盗系统。但是,由于各种红外遥控编码格式不同,使得各种产品的遥控器并不能兼容,用户在使用过程中容易产生混乱,这给人们的日常生活带来了诸多不便。针对目前市面上已有的学习型遥控器都只能对一些特定的红外遥控编码进行学习的情况,本文介绍了一种基于单片机的学习型遥控器,以STC89C52为核心,通过测量红外遥控信号的脉冲宽度来原封不动地保存红外遥控编码,并直接利用单片机的定时器产生40KHz的载波信号,实现了对各种空调遥控器的自学习功能,而不需要其它电路或芯片来完成,节约了成本。该学习型遥控器能成功地学习、记忆和再现各种红外遥控编码,从而实现了对多个红外遥控装置的统一管理。测试结果表明,本编码压缩方法简化了编码信息,减少了存储空间,可以代替各种遥控器。 关键词:红外遥控;载频;编码状态转换;自学习 目 录 1 设计要求及原理 1 2 方案论证与对比 2 2.1 方案一 简易红外遥控电路 2 2.2 方案二 利用STC89C52单片机控制电路 2 2.3 方案对比与选择 3 3 遥控器硬件与程序设计 3 3.1遥控器硬件结构组成 3 3.2 系统硬件电路设计 4 3.3初始化程序 4 3.4遥控器读入程序处理 5 3.5遥控码发送处理程序 6 3.6主程序 6 3.7程序延时 6 4 系统功能调试及整体指标分析 6 4.1 程序调试 6 4.2 整体指标分析 7 5详细仪器清单 9 6总结、思考与致谢 9 参考文献 10 附录1:单键学习型红外遥控器原理图(proteus仿真): 11 附录2:单片机C源程序: 13 学习型红外遥控器设计 1 设计要求及原理 利用单片机作为控制核心,要求可以学习不同遥控器的某个按件功能。使用时先用原遥控器对着学习器按一下某操作键,学习器就可实现原遥控器中该键的遥控功能。 具体要求如下: 基本部分: (1)最大学习码长:206位。 (2) 学习码识别范围:起始位为15us~983ms,编码位为15us~3.825ms。 (3) 读码误差:±15us。 扩展部分: 学习型红外遥控器在按下K键待绿色指示灯亮后,用遥控器对着红外接收头按下某个功能键,当绿灯灭说明学习完毕,再按发射键就可以进行遥控操作。 当红外遥控器的某个按键按下时,发射出一组串行二进制遥控编码脉冲。该脉冲由引导码、系统码、功能码和反码组成,通过设置这些编码以及码长便可区分不同的红外遥控器。红外接收器负责红外信号的接收和放大并解调出TTL电平信号送至微处理器进行处理,微处理器通过比较和识别接收来的红外遥控编码便可执行相应的遥控功能[1]。本系统的设计思想是不考虑红外编码方式,仅利用单片机AT89C52对多个红外遥控编码的脉冲宽度进行测量,并原封不动地把发射信号中高、低电平的时间宽度记忆至扩展存储区的指定地址。当要发射红外信号时,从扩展存储区中还原出相应的红外遥控编码,并调制到40KHz的载波信号上,最后,通过三极管放大电路驱动红外发光二极管发射红外信号,达到学习和发射的目的,从而实现一个遥控器控制多种红外遥控设备。 2 方案论证与对比 2.1 方案一 简易红外遥控电路 在不需要多路控制的应用场合下,可以使用由常规电路组成的单通道红外遥控电路[1]。这中遥控电路不需要使用较贵的专用便译码器,因此成本较低。 图 1方案一系统方框图 考虑到本方案电路是简单的单通道控制器,可直接产生一个控制功能的震荡频率,再通过红外发光二极管发射出去。 当红外接收头接收到控制频率时,由一个电路对其进行产生相应的控制功能。 2.2 方案二 利用STC89C52单片机控制电路 用单片机制作一个红外遥控器,并可通过程序控制记忆按键功能,达到学习记忆功能。 图 2 方案二系统方框图 当按下遥控器按钮时,单片机产生相应的控制脉冲,由红外发光二极管发射出去。 当红外就收器接收到控制脉冲时,经单片机处理由显示设备显示出当前受控电器的序号,并判断是否对某一功能进行的操作。 2.3 方案对比与选择 以上方案:方案一未采用单片机,功能过于单一,仅能对一路电器进行简单遥控;方案二不仅可以用控制按键实现对电器的控制,而且可记忆学习按键功能,达到复制的功能,方便使用,且成本设计用STC89C52也比较便宜实用。 显然本设计采用方案二作为设计蓝本。 3 遥控器硬件与程序设计 3.1遥控器硬件结构组成 为了实现遥控码的记录还原功能,系统应具有红外线的接收解码、红外线的调制发射、操作按键和功能控制单元。由于功能定位学习一个遥控按键的遥控的功能,因此决定采用STC89C52RC单片机作为控制器。 STC89C52RC单片机中具有256字节的内存单元,可存储遥控码脉宽的数据。遥控码的脉宽数据可以用红外线接收解码后送单片机读入,发射时由单片机产生40kHz红外调制信号送红外线发管发射。 学习型红外遥控器由红外接收电路、单片机控制器、红外发送电路、EPROM存储器、操作键盘及LED遥控指示灯构成,如图2所示。 单片机STC89C52构成红外遥控的处理器,其数据存储器RAM(258B)用来存储学习过程中编码信号的脉冲宽度和编码。    (1)红外发射电路[5]:40 kHz方波直接由单片机模拟产生,经过三极管放大后,驱动红外发光二极管(注意:40 kHz载波不能用STC89C52定时器产生,因为40 kHz载波信号的周期只有26 μs,考虑到有载波时的占空比为1/3,即定时器的最小中断时间间隔只有8 μs,在执行中断时中断处理过程(如保护现场等)实际运行时间根据中断点的不同需要的时间也不同,有时会大于8 μs,这样不能保证40 kHz信号的稳定性),在软件处理过程中应用延时程序模仿40 kHz的红外载波信号。   (2)红外接收头:在与单片机连接时,将接收来的红外遥控信号反相,其正向信号接外部中断0,反相信号接外部中断1。通过记录2个中断间的间隔时间来测量红外遥控信号的高低电平的脉宽值。   (3)外接E PROM存储器:用于存放学习到的控制命令的编码和高低电平信号的 脉宽值。   (4)按键盘:启动一个学习过程。   (5)LED指示灯:用于显示遥控器的工作状态。 3.2 系统硬件电路设计 【附录1】为该学习型遥控器的原理图,其中: P1.0口接遥控码发射按键; P1.6口用作状态指示,绿灯亮代表学习状态,绿灯灭代表码已读入。 P1.7口用于指示控制键的操作,闪烁时代表遥控码正在发射之中,在学习状态,绿灯灭代表码已读入。 第9脚为单片机的复位脚,采用简单的RC上电复位电路, 第12脚为中断输入口,用于工作方式的转换控制,当脚为低电平时,系统进入学习状态。 第14脚用于红外线接收头的输出信号输入, 第15脚作为遥控码的输出口,用于输出40KHz的遥控码。 第18、19脚接12MHZ晶振。 由于采用最小化应用系统,控制线(片外取指控制)、ALE(地址锁存控制)不用,(片外存储器选择)接高电平,使低8K的E2PROM地址(0000H-1FFFH)指向片内。 3.3初始化程序 内容包括P0、P1、P3端口置位,P2口清零,清08H—6EH共103个工作寄存器,设置堆栈基址(70H),设置计数器计数模式、控制字,开外中断允许等等。 3.4遥控器读入程序处理 完成遥控码起始位的识别、脉宽计数功能,完成遥控码编码位的宽度计数功能,完成结束位的认别功能(流程图见图3)。本程序模块在编程设计中非常重要,通过大量的不同种类的遥控码波形实验测试分析,遥控码的帧间歇位宽度均在10 ms以上,起始位码宽度在100μs—20ms之间,编码位在100μs—5ms之间,为确保所有遥控器学习的成功,采用以下设计方法: 寻找起始位方法:用16位DPTR计数器对高电平进行宽度计数,计数采样周期为21μs,当高电平结束时,如高8位计数器为非零,则说明高电平宽度超过5.35ms(255×21μs),紧接来的低电平码就是起始位,否则重新开始。 读起始位方法[3]:采用16位DPTR对低电平进行宽度计数(最大可读宽度为1.376s),当高电平跳变时结束计数,并将DPTR的高8位、低8分别存入R4,R5寄存器。 读遥控编码的方法:采用DPTR低8位计数器对码(高电平或低电平)进行宽度计数,电平跳变时结束计数,并将值存入规定的地址,在高电平码计数时,如DPTR高8位计数器为非零(宽度大于5.35ms),则判定为结束帧间隔位,在相应存储单元写入数据#OOH作为结束标志。 3.5遥控码发送处理程序 利用计数器计数中断功能,实现40KHz载波的发送,利用接收时接收的低电平位时间控制载波的发送时间。 3.6主程序 主程序在上电初始化后进行端口按键扫描,当确认有键按下时将编码发出去(见图3流程图)。 3.7程序延时 主要用于读键时消抖。时间约为1ms。 4 系统功能调试及整体指标分析 4.1 程序调试 调试学习状态和发射状态下计数器的循环间隙时间是C程序中较为重要的内容,在汇编语言下可以精确地算出循环时间,这样在C编程时能在E磁盘目录下产生1个REMOTE.ASM的汇编源程序[4],在汇编程序清单中可以精确地算出循环时间,这样才能保证读入时的脉宽与发射时的脉宽一样,另外,也可以通过示波器观察比对原遥控器解码波形及学习器产生的波形,结合调试循环延时的间隔达到精确还原脉宽的目的。 4.2 整体指标分析 学习型遥控器的设计性能及实现与其软件设计编写具有密切的关系,在设计中采用内部定时器对信号高低电平计时的方法来采集数据并保存。当系统识别到起始码的低电平时,系统启动内部定时器对输入低电平计时,当起始码的低电平结束时保存定时器此时的值,记录下起始码的低电平信号脉冲宽度值;然后依次保存采集到的编码信号脉冲宽度值,如果采集到编码信号位数大于设定值M(程序中设定值),就认为编码采集已经结束,即学习子程序结束。    在软件设计过程中,使用了2个外部中断和2个内部定时器,外部中断0启动定时器0停止定时器1计数并保存定时器1的数据,外部中断1启动定时器1停止定时器0计数并保存定时器0的数据,用定时器0记录红外解调信号的高电平时长。用定时器1记录红外解调信号的低电平时长,本文采用12 MHz晶振,1个机器周期是1 μs,计数器采用16位计数器。如果在外部中断0和外部中断1之间不发生内部定时器中断,可以记录的最大时间间隔为65.5 ms;如果在外部中断0和外部中断1之间发生内部定时器中断则可以记录的最大时间间隔是n×65.5 ms,其中n为中断次数。其值保存在设定的数据存储器中,然后写入到外部EPROM存储器中。发射过程再从外部的EPROM存储器读出,通过用软件模仿40 kHz载波信号发送编码信息。   在设计过程中研究发现:尽管遥控器存在帧格式多样、码型多样、编码长短不同、发送方式不同等问题,但对于某一个独立的遥控器还是有规律可依的。在系统设计方案时,选择通用性好的就能解决这个问题。例如测得一款遥控器的1个命令码如下:    低电平(有红外发送载波)信号码时长数据是:    0x7368 0x0578 0x0577 0x0563 0x0555 0x0584 0x0564 0x0545 0x0572 0x0554……    高电平(无红外发送载波)信号码时长数据是:0x0578 0x1377 0x0563 0x0555 0x1384 0x0564 0x0545 0x1382 0x0554 0x01345……    尽管码型有帧头、系统码、操作码、同步码、帧间隔码、帧尾,但不论是低电平(有红外发送载波)信号码时长或是高电平(无红外发送载波)信号码时长其结构都相对简单。但是1个帧如此多的数据占据了大量的内存空间,增加了硬件成本和程序运行时间,有必要在数据分析的基础上采取数据压缩。    数据压缩根据使用场合和要求的不同分有损和无损压缩。为了在数据发送时准确再现接收到的红外数据,本文采用无损压缩的方法,使用的编码方式是改进型的游程编码,根据游程编码的原理,游程长度(游程或游长)RL(Run-Length)指的是由信号采样值构成的数据流中各个数据重复重现的长度,只要给出重复的数据、数据长度和位置就可以恢复原来的数据流[2-3]。其具体实现过程如下:    (1)在接收红外信号时分别按高电平和低电平不同的时间长度编号(时间长度规定一定的误差范围) [2],每1次测得的数据根据电平持续时间记录其编号,再将同编号的数据相加求平均值作为标准时间长度,根据红外信号格式的不同,可以选择4 bit压缩方式和2 bit压缩方式,即压缩比达到1/4和1/8。在接收红外数据时采用的是中断方式,不占用过多的CPU时间,还可以一边学习一边存入EPROM以达到节省内存空间的目的。    将上述遥控器的1个命令码(其中红外编码长度为150 bit,压缩比为1/8)的数据存储在EPROM中的数据格式如下:    01100101……(共10个字节低电平数据);11010101……(共10个字节高电平数据);0x96(字节总长度);0x1377 0x0560 0x0572 0x370(4个不同的时长);    (2)发送红外数据时,先从EPROM中读出字节总长度、4个不同的时长及部分高低电平数据,在发送高电平时(即不发送红外载波信号)且时长大于1 ms,再读EPROM数据,这样更可以节省内存空间。 单键学习型遥控器可以学习任何遥控器的某个按键功能,采用最小化应用模式设计,电路简单,可靠性高,尤其是通过大量不同遥控码的特征分析,在遥控码的读入时选择了最佳采样频率,使遥控码的学习成功率大大提高,其技术可应用于多媒体教室、家庭集中控制器等设备。使用时先按一下K,待绿色指示灯亮后,用遥控器对着红外接收头,按一下某个功能按键 ,当绿灯灭且红灯亮时说明学习完成,按发射键就可以进行遥控了。 5详细仪器清单 表格仪器清单 仪器名称 数量 STC89C52 1 电阻(1k) 6 电阻(10R) 1 发光二极管(红) 1 发光二极管(绿) 1 红外接收头 1 红外发射二极管 1 电容(33pf) 2 电容(104pf) 1 三极管(9015) 3 晶振(12Mhz) 1 按钮开关 3 6总结、思考与致谢 本系统是以单片机STC89C52芯片为核心部件,实现遥控器学习并记忆按钮遥控功能。此次在软件上是花费时间最多的,我们上网找资料,上图书馆,尽可能的了解有关于学习型遥控器这方面的知识。通过这次毕业设计,使我得到了一次用专业知识、专业技能分析和解决问题全面系统的锻炼。使我在单片机的基本原理、单片机应用系统开发过程,以及在常用编程设计思路技巧(特别是汇编语言)的掌握方面都能向前迈了一大步。 通过本次毕业设计,我们在方老师和岳老师的精心指导和严格要求下,获得了丰富的理论知识,极大地提高了实践能力,单片机领域这对我们今后进一步学习计算机方面的知识有极大的帮助。同时,因为学习知识的能力和时间有限,因此在本次的课程设计过程中,难免存在错误,恳请老师给以批评和指正,在此,衷心感谢方老师和岳老师以及许多同学的指导和支持。 参考文献 [1] 沈红卫编著.单片机应用系统设计实例与分析[M].北京:北京航空航天大学出版社,2002 [2] 朱定华,戴汝平编著.单片微机原理与应用[M].北京:清华大学出版社,2003 [3] 胡汉才编著.单片机原理及接口技术[M].北京:清华大学出版社,2004 [4] 谭浩强编著.C程序设计(第三版)[M].北京:清华大学出版社,2005 [5] 楼然苗,李光飞编著.单片机课程设计指导[M].北京:北京航空航天大学出版社,2007 附录1:单键学习型红外遥控器原理图(proteus仿真): 附录2:单片机C源程序: /*********学习型红外遥控器C程序*********/ #include "reg51.h" #include "intrins.h" #define uchar unsigned char #define uint unsigned int sbit studylamp=P1^6; sbit lamp=P1^7; sbit studykey=P3^2; sbit remotein=P3^7; sbit remoteout=P1^0; sbit txkey=P3^3 ; uint i,j,m=255,n,k,s; uchar idata remotedata[206]; uint head; uint remdata; /*********1毫秒延时程序**********/ delay1ms(uint t) { for(i=0;i0;i--){;} remoteout=0;ET1=0;TR1=0; n=0; while(1) { if(remotedata[n]==0x00){delay1ms(10);break;} for(i=remotedata[n];i>0;i--) {_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();} lamp=~lamp;n++; ET1=1;TR1=1; for(i=remotedata[n];i>0;i--){;} remoteout=0;ET1=0;TR1=0;n++; } } } /***********主函数***************/ main() { clearmen(); while(1) { keywork(); } } /*********40KHZ发生器***********/ void time_intt1(void) interrupt 3 { remoteout=~remoteout; } /***********学习函数 ***********/ void intt0(void) interrupt 0 { ET1=0;TR1=0;EX0=0;EA=0; head=0;studylamp=1;lamp=0; while(studykey==0); while(remotein==1); head=0; while(remotein==0) {_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();head++;} n=0;remdata=0x0000; while(1) { while(remotein==1) {_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();remdata++;} if(remdata>m) {remotedata[n]=0x00;EX0=1;EA=1;goto end;} remotedata[n]=remdata;n++; remdata=0x0000; while(remotein==0) {_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();remdata++;} remotedata[n]=remdata;n++;remdata=0x00; } end: lamp=1;studylamp=0; } //*********************结束**************************//

    Top_arrow
    回到顶部
    EEWORLD下载中心所有资源均来自网友分享,如有侵权,请发送举报邮件到客服邮箱bbs_service@eeworld.com.cn 或通过站内短信息或QQ:273568022联系管理员 高进,我们会尽快处理。