资源描述
沈阳航空航天大学课 程 设 计(论文)题目 红外遥控系统设计 班 级 学 号 学 生 姓 名 指 导 教 师 沈阳航空航天大学课 程 设 计 任 务 书课 程 名 称 专业基础课程设计 院(系) 自动化学院 专业 测控技术与仪器 班级 学号 姓名 课程设计题目 红外遥控系统设计 课程设计时间: 2012 年 7 月 9 日至 2012 年 7月 20 日课程设计的内容及要求:1. 内容利用51单片机开发板及红外遥控器设计一红外接收系统。当遥控器按键按下时,接收系统有对应的数据显示。2. 要求(1)掌握红外信号的编码原理及解码方法。(2)设计红外接收电路,实现红外发射信号的实时显示。(3)制定设计方案,绘制系统工作框图,给出系统电路原理图。(4)用汇编或C语言进行程序设计与调试。(5)完成系统硬件电路的设计。(6)撰写一篇7000字左右的课程设计报告。指导教师 年 月 日负责教师 年 月 日学生签字 年 月 日沈阳航空航天大学课 程 设 计 成 绩 评 定 单课 程 名 称 专业基础课程设计 院(系) 自动化学院 专业 测控技术与仪器 课程设计题目 红外遥控系统设计 学号 2009040701070 姓名张远康 答辩日期 2012年7月 20 日指导教师(答辩组)评语: 课程设计成绩 指导教师(答辩组)签字 年 月 日沈阳航空航天大学课 程 设 计 成 绩 评 定 单课 程 名 称 专业基础课程设计B 院(系) 自动化学院 专业 测控技术与仪器 课程设计题目 红外遥控系统设计 学号 姓名 答辩日期 2012年7月 20 日指导教师(答辩组)评语: 课程设计成绩 指导教师(答辩组)签字 年 月 日目录0 前言11 总体方案设计22 硬件电路设计32.1 单片机最小系统设计32.1.1 时钟电路32.1.2 复位电路42.2 红外遥控系统设计52.2.1 发射原理52.2.2 接收电路设计62.3 LED电路设计62.4 步进电机驱动电路设计73 软件设计83.1 主程序设计83.2 红外解码子程序设计93.3 显示子程序设计103.4步进电机驱动子程序设计114 调试分析125 结论及进一步设想12参考文献13课设体会14附录1 电路原理图15附录2 程序清单16沈阳航空航天大学课程设计论文红外遥控系统设计红外遥控系统设计 沈阳航空航天大学自动化学院摘要:遥控技术是对受控对象进行远距离控制和检测的技术。它是利用自动控制技术,通信技术和计算机技术而形成的一门综合性技术。本课题是采用单片机STC89C52作为设计的核心元件,利用红外遥控发射、接收的工作原理以及单片机外部中断的原理而设计的一款遥控系统。当一体化红外接收器接收到红外遥控信号后,将光信号转变成电信号,经放大、解调、滤波后,将原编码信号送入单片机STC89C52中进行信号识别、解码,然后进行相应的处理,达到控制单片机外围设备的目的。关键词:单片机;遥控技术;红外;编码;解码0 前言随着电子科技的发展目前市场上出现了越来越多的红外线遥控家用电器,逐步提高了人们的生活水平。根据控制方式的不同,一般分为红外遥控、声控和无线遥控,俗称“三遥”。伴随着人们的物质文化生活水平日益提高,各种各样的家用电器走进了千家万户,其中,大多数的家用电器都有各自不同的遥控器。本设计涉及电子产品技术领域,特指一种使用方便的红外线遥控灯光控制开关。采用这种方式让使用者在使用过程中更加方便快捷,并且实用性可根据实际情况对使用装置进行有效调节。该红外线遥控器包括:红外线发射的遥控器为主体,以及相应的接收器。其中遥控器主体包括控制芯片、发射器、电源。人们坐在家中手执遥控器便可以方便快捷地将电视机、照明灯、电脑等家用电器打开;做到足不出户便可以开启私家车等。由于红外线遥控装置具有体积小、功耗低、功能强、成本低等特点,因而,继彩电、录像机之后,在录音机、音响设备、空调以及玩具等其它小型电器装置上也纷纷采用红外线遥控;工业设备中,在高压、辐射、有毒气体、粉尘等环境下,采用红外线遥控,由于红外线在频谱上居于可将光之外,具有光波的直线传播特性,不易产生相互间的干扰,是很好的信息传输媒体,且能有效地隔离电气电磁等干扰,取得很好遥控效果。本课题以STC89C52单片机学习板为硬件平台,设计了一款由单片机编程实现的简易遥控系统,可通过遥控器控制单片机外围器件,包括数码管的显示、按键的声音控制、流水灯的闪烁、步进电机的控制,具有遥控开启和关闭多种设备的功能。1 总体方案设计针对本课题的设计任务,经分析可知,其基本要求为:设计红外遥控系统实现红外发射信号的实时显示,即当红外遥控器有按键按下时,系统能够显示当前键值。在此基础上,拓展一些外围电路,包括LED显示,流水灯、带驱动电路的步进电机等来达到控制的目的。该红外遥控系统的设计,在总体上大致可分为以下三个部分: 红外遥控器和接收头;单片机最小系统;流水灯电路;数码管显示电路;驱动电路,包括步进电机的驱动以及蜂鸣器的驱动。根据设计要求,有两种设计方案。方案一:红外遥控器发射信号经接收器接收后,将接收信号送人解码芯片BC7210,该芯片是红外遥控解码专用芯片,其输出的解码信号可通过单片机的串口接收。不同的按键会使单片机接收到不同的解码信号,从而由单片机实现对外围电路的控制。其原理框图如图1所示。解码芯片步进电机单片机蜂鸣器流水灯接收头LED显示驱动电路图1 方案一原理框图方案二:接收器接收红外遥控器发射信号后,直接将接收信号送入单片机的外部中断口,触发单片机产生下降沿中断,从而读取该信号并判断是哪个键被按下,进一步发出处理命令控制外围设备。单片机读取信号的方式是:根据接收信号,即脉冲信号的时序,逐位读取,其中高低电平的识别是通过判断脉冲宽度实现的。由此可知,硬件电路较为简洁,而把主要任务放在软件部分了。其原理框图如图2所示。单片机接收头LED显示蜂鸣器流水灯步进电机驱动电路图2 方案二原理框图经上述讨论可知,方案一处理起来相对简单,但硬件稍麻烦;而方案二硬件电路较为简单,却给软件的编写带来不便。综合各方面的因素,本设计采用了方案二,制作设计成本低,性价比较高。2 硬件电路设计2.1 单片机最小系统设计单片机最小系统:就是指由单片机和一些基本的外围电路所组成的一个可以工作的单片机系统。一般来说,它包括单片机,晶振电路和复位电路。本设计采用宏晶公司生产的8位STC89C52单片机,它是一种带8K字节闪烁可编程可檫除只读存储器的低电压、高性能微处理器。2.1.1 时钟电路时钟电路产生单片机工作所必须的时钟信号,在时钟信号的控制下,系统严格按时序执行指令。时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的稳定性。常用的时钟电路有两种方式,即内部时钟方式和外部时钟方式,这里使用内部时钟方式。STC89C52内部有一个用于构成振荡器的高增益反相放大器,输入端为为芯片引脚XTAL1,输出端为引脚XTAL2。这两个引脚跨接石英晶体振荡器和微调电容,构成一个稳定的自激振荡器,电路如图3所示。图3 时钟电路原理图2.1.2 复位电路单片机除系统的正常初始化外,当程序出错或操作错误时系统处于死锁状态时,需使单片机复位,使单片机摆脱“跑飞”或“死锁”状态而重新启动程序。要实现复位,只需给复位引脚RST加上大于2个机器周期的高电平就使单片机复位。复位电路采用按钮复位方式,如图4所示,该电路除了具有上电复位功能外,若要复位 只需按下按键即可,当复位键被按下时,复位引脚会立即产生一个高电平,使得单片机复位。图4 复位电路原理图2.2 红外遥控系统设计 通用红外遥控器由发射和接收两大部分组成,应用编码解码专用集成电路芯片来进行控制,发射部分包括矩阵键盘、编码调制、LED红外发送器;接收部分包括光电转换器、解调等电路。本设计采用的遥控器如图5所示。图5 红外遥控器实物图2.2.1 发射原理通常,红外遥控器是将二进制脉冲信号调制在38KHz的载波上,经缓冲放大后送至红外发光二极管,转化为红外信号发射出去。二进制脉冲编码的形式有多种,其中最为常用的是脉冲宽度调制码,即以宽脉冲表示1,窄脉冲表示0。脉冲信号由引导码,地址码、数据码、数据反码组成。引导码也叫起始码,由宽度为9ms的高电平和和宽度为4.5ms的低电平组成,用来标志遥控编码脉冲信号的开始;地址码是16位的用户识别码,用来指示遥控系统的种类,以区别其它遥控系统,防止各种遥控器的误动作;数据码是遥控器不同按键产生的8位的键值识别码,用于判断是哪个按键被按下;数据反码是对数据码取反后的数据信号,用于核对数据是否正确。为了提高抗干扰性能和降低电源消耗,将上述遥控编码脉冲对频率为38KHz的载波信号进行脉宽调制,再经缓冲放大后送到红外二极管,将遥控信号发射出去。其发射原理框图如图6所示。红外二极管发射 调 制矩阵键盘图6 遥控信号发射原理框图2.2.2 接收电路设计根据遥控信号编码和发射过程,遥控信号的识别-即解码过程应是去除38KHz载波信号后识别出二进制码中的0和1。红外接收头接收到调制后的遥控信号,经前置放大、限幅放大、带通滤波、峰值检测和波形整形,从而解调出与遥控信号反相的遥控脉冲。红外接收头解调出的编码是二进制码,包含着遥控按键信息,其时序图如图7所示。但它还不便于CPU读取识别,为此可添加解码芯片,再送给CPU读取。为方便起见,本设计直接用单片机程序解码,而不添加任何解码电路,红外接收头送入单片机的中断口P3.2,如图8所示。图7 遥控信号时序图图8 接收头电路原理图2.3 LED电路设计 为直观起见,当遥控器数字键按下时,数码管能够实时显示当前键值,同时可以由按键来控制数码管显示的开和关。这里采用共阳七段极数码管,接在单片机的P0口上,如图9所示。此外,还添加了流水灯电路,在单片机的P2口接有八个LED灯,如图10所示,可以通过遥控器来控制其点亮或熄灭以及闪烁的快慢。在单片机开发试验箱上,能明显看出流水灯的动态显示,当遥控器按下加速键时,LED会高速的闪烁。图9 数码管电路原理图图10 流水灯电路原理图2.4 步进电机驱动电路设计电机是一种常用控制器件,通过驱动电路接口,实现单片机对电机的控制,包括电机的转速、方向控制。本设计采用的是对步进电机的控制,如图9所示。步进电机的控制采用脉冲的节拍控制方式驱动电路采用达林顿驱动器ULN2003,由单片机的P1口经反相器74ls14连到驱动芯片上,驱动芯片的四端输出与四相步进电机的四个引脚相接,如图11所示。由图知,在驱动电路的另外两个输出端还接有蜂鸣器、法光二极管等器件,在本设计中,以发光二极管的亮灭来标志步进电机的启动与停止。图11 驱动电路原理图3 软件设计3.1 主程序设计根据设计方案,在软件设计上主要分为三个部分,包括初始化子函数、红外解码子函数、显示子函数。其中,初始化程序包括中断开启,I/O口初始化等,是程序运行的前提;红外解码程序是在中断里执行的,当按键按下时,触发单片机中断,从而转到接收子程序,这是是整个程序较为核心的部分,为后续的显示、控制程序提供了前提;显示子程序,是接收到信号后的事件处理部分,包括数码管的显示与关闭、步进电机的开启与停止等。每个部分都写成子函数形式,本课题的软件设计采用了模块化设计的思想,主程序流程如图12所示。Y初始化RELAY=0?关闭电机关闭流水灯开始开启电机LED_flag=1?开流水灯NYN图12 主程序流程图3.2 红外解码子程序设计红外解码是程序中非常关键的一个模块,只有能将遥控器按键信息识别出来,才能进行正确的显示或控制。根据前面所述,遥控器所发送的信号分为引导码、地址码、数据码和数据反码,因此当按键被按下使单片机产生中断时,应先延时以避开高电平9ms、低电平4.5ms的引导码,之后再接收四组数据。其程序流程图如图13所示。接收子程序等待P3.2变高 等待P3.2变低接收地址码接收数据码子程序返回数据校对等待P3.2变高图13 接收子程序流程图3.3 显示子程序设计当按键信号来临时,需要及时显示当前键值,并产生一定的控制信号。单片机将遥控信号解码后,该子程序将被执行。它包括数码管的显示与关闭控制、流水灯的闪烁与关闭及其闪烁速度控制、步进电机的转向及其转速控制、按键声音的开启与关闭控制。控制方式采用标志位的方法,即每个设备都有开启和关闭的功能,当相应控制按键被按下后,该标志位取反即可,从而用单个按键即可实现两种状态的控制。而控制程序是在主程序中循环执行的,只是通过标志位的改变间接实现对设备的控制。这里定义了四个控制标志位,包括步进电机的开启与停止标志位、流水灯的开启与关闭标志位、电机正反转标志位、数码管显示与关闭标志位。该子程序相对麻烦,因为里面涉及对不同的按键产生不同的控制信号的问题,需用上分支结构switch语句来处理多情况的问题,并根据不同的情况产生不同的控制信号,流程图如图14所示。YN子程序返回显 示显示子程序按键判断为数字键?改变显示缓冲值判断控制键种类改变相应控制标志位位图14 显示子程序流程图3.4步进电机驱动子程序设计本设计所用的电机是四相的步进电机,因此控制方式分为单四拍控制、双四拍控制和八拍控制,这里只采用八拍的控制方式。该程序较为简单,只需在程序了定义一个全局变量的数组代码,这些代码便是步进电机的脉冲代码,由于是八拍控制,因此需要八组数据代码,这是一组正转的代码,将该代码反过来送给电机之后,电机便能反转。此处是用标志位方式来控制电机的正反转的,该程序的流程图如图15所示。步进电机子程序Motor_flag=1?Y电 机 正 转N电 机 反 转子程序返回 图15 显示子程序流程图4 调试分析本设计硬件电路较为简单,因此主要问题是在软件的调试上,最关键的部分还是红外解码程序。因为需要区分数据的高低电平,在软件上实现起来相对困难一些。红外信号用宽脉冲表示高电平,在脉冲表示低电平,因此需要用延时方式得到脉冲的大致宽度,方能得到正确的数据。一开始的时候,只是在接收子程序里设置按键声音控制以及数码管显示部分,但没有实现功能,后来发现时解码不对,就通过液晶显示器将解码信号显示出来,再根据显示的数据去改程序代码中的参数,终于得到了预期的结果,实现了课设要求的内容。5 结论及进一步设想根据实验结果,本设计基本完成了设计要求,但是由于时间上的原因,该系统还存在着一定缺陷,比如,硬件部分没有加红外解码电路,为后续软件代码的编写带来负担,为此可以通过添加一片解码芯片来实现,来进一步改善电路的性能。参考文献1 刘复华.单片机及其应用系统.北京:清华大学出版社,19922 李斌,董慧颖.可重组机器人研究和发展现状.沈阳工业学院学报,2005,3(2):5-103 陈光明等主编电子技术课程设计与综合实训北京:北京航空航天出版社,2007年4 李剑心.基于单片机的红外发射器.电气电子教学学报,2009,18(2):22-305 田裕康.单片机在电子系统设计课程实验的应用.电气电子教学学报,2008,19(4):23-27课设体会经过两周时间,课设已然顺利完成。与其他同学题目相比,我这个还算比较容易实现,只是用了一些基本知识,设计起来不难。开始拿到题目,在一天之内在单片机开发箱上完成了硬件与软件的调试,但由于期末时间比较紧张,在硬件上只是用了现有的基本模块,没有增添其它特殊功能,软件上也还有许多不完善之处。同时让我认识到,科学是老老实实的学问,容不得半点虚假,在学术方面,一定要做到严谨,这也是对我们做学问的要求,对我们专业素养的形成起着潜移默化的作用。硬件电路的设计以前做的不多,虽然之前也做过一些电子设计有关的比赛,但我主要负责一些软件调试,编写程序算法,对硬件了解不是太多,这一点固然不是我所擅长,所以动手能力和其他同学相比确实是还远远不够的,在今后的学习中还需加强。通过本次课设,加强了对单片机和通信方面知识的运用,同时也让我学到了很多课本上学不到的东西,也包括从别的同学的课设题目中,体会到实践的重要性,无论在平时学习,或是在工程实际中,理论知识固然重要,但要真正到实际中,却又不是那么容易了,在仿真过程中,经调试容易能得到理想结果,然而转到实物就显得困难些了。这次课设是理论到实践的一次跨越,同时又通过实际反作用与理论,让我加深了对理论知识的理解,对今后的学习更是有着莫大的作用。在此想感谢指导老师高云红老师,无论是理论授课环节还是实验过程,我都从老师身上学到很多,让我受益匪浅,对我以后的专业知识的进一步学习有重要的作用。同时也让我感觉到,我们应该去多实践,运用我们自己所学知识去体会那一份属于自己的成功。2012年7月 17日完成附录1 电路原理图附录2 程序清单 /*START*/#include /宏定义#define uchar unsigned char#define uint unsigned int#define Motor P1 /P1口低四位控制步进电机#define SEG P0 /P0口控制数码管显示#define led P2 /P2口控制led闪烁/-/端口定义sbit IRIN = P32; /红外接收器数据线sbit RELAY= P14; /继电器驱动线sbit BEEP = P15; /蜂鸣器驱动线/-/函数声明void beep(void); /蜂鸣器发声void IRinit(void); /初始化void receive(void); /接收void control(void); /遥控void delay(uint i); /长延时void IRdelay(char x); /短延时void LED_flash(void); /流水灯void Motor_control(void); /电机控制/-/变量定义uchar IRCOM3; /四组接收数据uchar Y0; /键值uchar Seg_flag; /数码管(共阳极)开关标志 0默认为开bit data_receive; /数据接收标志 为0时表示没有数据bit beep_flag; /按键声音(蜂鸣器)开关标志 0默认为开bit Motor_flag; /步进电机正反转标志 0默认为反转bit LED_flag; /led(接上拉电阻)亮灭标志uint time=400; /电机转动的延时时间控制速度大小,时间越长速度越慢uint T=1500; /led闪烁延时时间,控制闪烁速度大小/-/电机正反转编码uchar code Motor_round16=0x0e,0x0c,0x0d,0x09,0x0b,0x03,0x07,0x06, 0x06,0x07,0x03,0x0b,0x09,0x0d,0x0c,0x0e; /数码管段选码 0 1 2 3 4 5 6 7 8 9 A b C d E uchar code Disp_Tab= 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86;/*延时函数*/void delay(unsigned int i) char j; for(i; i 0; i-) for(j = 200; j 0; j-); void IRdelay(unsigned char x) unsigned char i; while(x-) for (i = 0; i13; i+) /*初始化子函数*/void IRinit(void) IE |= 0x81; /允许总中断中断,使能 INT0 外部中断 TCON |= 0x01; /触发方式为脉冲负边沿触发 IRIN=1; /I/O口初始化 RELAY=1; SEG=Disp_Tab0; /点亮LED数码管/*蜂鸣器发声子函数*/void beep(void) uchar i; for (i=0;i100;i+) IRdelay(4); BEEP=(!BEEP)|(beep_flag);/当flag为0时正常 为1时给高电平不发声 BEEP=1; /关闭蜂鸣器/*LED闪烁子函数*/void LED_flash(void) uchar i,LED; LED = 0xfe; if(LED_flag) for (i = 0 ;i 8 ; i+) led = LED; delay(T); LED = LED 1; / 左移 LED = LED | 0x01; / 移位后,后面的位为高电平 if(LED = 0x7f)break; for (i = 0 ;i 1; / 右移LED = LED | 0x80; / 移位后,后面的位为高电平 else led=0xff; /关闭显示/*步进电机正反转函数*/void Motor_control(void)if(RELAY) uchar i; for (i=0+Motor_flag*8; i8+Motor_flag*8; i+) Motor = Motor_roundi|(RELAY*0x10+BEEP*0x20); delay(time); /*接收子函数*/ void receive(void) uchar j,k,N=0; data_receive=1; IRdelay(15); /延时约2ms while (!IRIN) /等IR变为高电平,跳过9ms的前导高电平信号。 IRdelay(1); for (j=0;j4;j+) /收集四组数据 for (k=0;k=30) /高电平持续时间太长 认为本次无效 data_receive=0; /没有接收到数据 return; /退出 /高电平计数完毕 IRCOMj=IRCOMj 1; /数据最高位补“0” if (N=8) IRCOMj = IRCOMj | 0x80; /数据最高位补“1” N=0; /end for k /end for j if (IRCOM2!=IRCOM3) /接收的数据不正确 data_receive=0; /没有接收到数据 return; /退出 /*按键控制子函数*/ void control(void) if(data_receive) /数据是否有效return; /无效则退出 /* 键值解码 */ /= switch(IRCOM2) / * 红外遥控器键解码表 * / 45 46 47 case 0x0c: Y0=1; break; / 44 40 43 case 0x18: Y0=2; break; / 0715 09 case 0x5e: Y0=3; break; / 16 19 0d case 0x08: Y0=4; break; / 0c 18 5e case 0x1c: Y0=5; break; / 08 1c 5a case 0x5a: Y0=6; break; / 42 52 4a case 0x42: Y0=7; break; /= case 0x52: Y0=8; break; case 0x4a: Y0=9; break; case 0x16: Y0=0; break; case 0x46: Y0=10;time=400; break;/电机正常转速 case 0x47: Y0=11;if(time150)time-=50; break;/电机加速 case 0x45: Y0=12;if(time2000)time+=100; break;/电机减速 case 0x19: Y0=13;RELAY=RELAY;break; /继电器吸合/释放 case 0x0d: Y0=14;Motor_flag=Motor_flag;break;/改变电机转向标志 case 0x15: beep_flag=beep_flag;break; /改变按键声音开/关标志 case 0x07: Seg_flag=Seg_flag;break; /改变数码管亮/灭标志 case 0x44:if(T100) T-=100;break; /加快led闪烁 case 0x43: LED_flag=LED_flag;break; /改变led亮/灭标志 case0x09: RELAY=1;beep_flag=1;Seg_flag=0xff; /全部关闭 LED_flag=0; break; beep(); /按键声音控制 SEG=Disp_TabY0|Seg_flag;/送数码管显示/*主函数*/ void main(void) IRinit();for(;)Motor_control(); /当电机和led程序同时运行时,电机的速度会明显降LED_flash();/低,这是因为led闪烁导致电机延时时间变长,速度变慢 /*中断服务子函数*/*功能:接收按键数并执行相应操作*/void IR_IN(void) interrupt 0 EX0 = 0; /关中断 receive();/接收 control();/产生控制作用 EX0 = 1; /重新开启中断/*END*/第 23 页
展开阅读全文