学习型红外遥控器实验报告.docx_第1页
学习型红外遥控器实验报告.docx_第2页
学习型红外遥控器实验报告.docx_第3页
学习型红外遥控器实验报告.docx_第4页
学习型红外遥控器实验报告.docx_第5页
免费预览已结束,剩余22页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

学习型遥控器实验报告目 录第 1 章 背景介绍.1第 2 章 设计任务要求. . . . .22.1 基本要求. . . . . .22.2 提高要求. . . 22.3 设计指标. . .2第 3 章 红外遥控设计方案.33.1 遥控编码表制作. 33.2 遥控编码表实现.33.3 遥控编码表检测. 33.4 主要器材选择. 5第 4 章 红外接收解码装置设计方案.64.1 硬件部分. 64.2 软件部分. 74.3 遇到的困难. 8第 5 章 红外编码发射装置设计方案.95.1 硬件部分. 95.2 软件部分. 105.3 遇到的困难. 11第 6 章 学习型遥控器设计方案.116.1 硬件部分. 116.2 软件部分. 116.3 遇到的困难. 11第 7 章 仿真波形图.12第 8 章 总结与心得体会.13第 8 章 附页程序.14一、 背景介绍 本次小学期创新实验是以我们小组申请的创新项目“基于NFC技术的智能空间节能系统设计”为依托实现的。项目希望借助新兴的NFC技术,在人流量变化符合统计规律的公共空间(如博物馆、商城、写字楼)入口处设置NFC读卡器,读取进场人员信息;基于统计得出的人流量数据,对公共空间的环境变量进行智能调控,达到控温、控电、控能量,在节能减排的同时提高用户舒适度。 从研究的角度考虑,多变量调控和单变量调控意义相同,所以我们选取最易体现环境舒适度的温度作为研究对象。以博物馆为例,无论淡季热季,一天内博物馆的参观人数在14:00-15:00达到高峰,此时应增大空调功率抵消人体散发的热量,使参观者感觉更舒适;在8:00-10:00参观人数较少,可减小功率,降低能耗。我们依据NFC收集的人流变化数据和数学模型建立的调控机制,动态调整空调功率,最终能达到20%左右的节能效果,并提高用户体验度。 系统模块图:软件开发NFC双向通信数学模型建立空调红外控制程序开发软件开发NFC信息读取办公提醒体验优化NFC人流量统计温度闭环调节系统智能空间节能系统图1 本次小学期所做的是温度闭环调节系统中的空调红外控制部分,希望制作一个能与PC通信、对空调温度进行控制的工具。经过调研,我们最后选择用单片机来实现这一功能。二、 设计任务要求1. 基本要求:1) 设计一个红外遥控器,能够发射NEC协议的红外编码。2) 设计一个红外接收显示装置,能够接收NEC协议的红外编码,并将编码显示在LCD屏上。2. 提高要求:综合以上两个功能,设计一个学习型遥控器,要求能实现红外编码学习和还原。3. 设计指标 在系统功能实现的基础上,系统性能的优异需要通过设计指标来衡量,具体如表2.1所示。表2.1 设计指标表设计指标预期1解码类型NEC协议2解码准确率95%3红外发射距离5米4载波发射频率38KHz1KHz5编码还原误差1ms/T 以上五个性能指标,除红外发射距离是由硬件和软件方面共同决定,其余均由软件决定。三、 红外遥控设计方案基于功能,系统设计为三个单元:1、遥控编码表制作单元;2、遥控编码表实现单元;3、遥控编码表检测单元。三个单元属于递进关系,如图3.1 所示:遥控编码表制作单元遥控编码表实现单元遥控编码表检测单元图3.1 三大功能单元关系示意图1、遥控编码表制作遥控编码表制作主要包含编码提取部分,该单元设计如图3.2 所示:红外接收编码分析图3.2 编码提取模块对照图 2.2,编码提取通过红外接收头接收,送至单片机解码,对于较为复杂的编码,也可以通过PC辅助分析波形,进行解码。最终制作的遥控编码表包括: 1、遥控编码格式;2、按键遥控代码表。2、遥控编码表实现遥控编码表实现分为外观和功能两个部分该单元设计如图 3.3 所示:遥控编码表实现单元按键操作液晶显示系统状态外观显示模块红外编码红外发射按键操作红外发射模块图3.3 遥控编码表实现单元结构图对照图 2.3,外观虚拟采用LCD液晶,显示发射的红外信号编码;功能模拟采用微处理器,通过程序控制发射红外信号。3、遥控编码表检测遥控编码表检测分为基于内容和基于功能的两种方法,该单元的设计如图2.4所示:遥控编码表检测单元红外解码红外接收编码显示基于内容检测普通遥控板操作对比空调万能遥控板基于功能检测图3.4 遥控器编码表检测单元结构图对照图 3.4,从设计角度考虑,可采用基于内容的检测方法,解析红外编码,检测结果以字符型显示编码格式;从用户的角度考虑,可采用基于功能的检测方法,采用现有设备(如电视、空调)直接接收红外信号,检测设备是否正常工作,具有一定的容错量。为配合硬件实现功能设计,系统实现和调试分三个制作的进行,即:1、基础制作:红外接收解码装置,2、中级制作:红外编码发射装置,3、高级制作:万能学习型遥控器,如图3.5 所示: 图3.5 系统功能硬件实现将以上设计集中到一起,模块化处理,如表3.1所示:表3.1 系统模块功能定义模块功能说明1IR_SEND红外发射模块2IR_RECEIVE红外接收模块3KEY功能键盘(控制发射、输出功能的切换)4LCD_1602液晶显示模块5BEEP蜂鸣器模块(指示成功接收红外信号)6MCU0_IR单片机1,集成发射接收模块7MCU1_LCD单片机2,检测并显示发射的红外信号4、其中主要器材选择如表3.2所示:器材实物图单片机: STC89C52RC仿真器:hc6800 开发板仿真芯片: STC89C52RC红外接收头:SM0038LCD屏:1602红外遥控器(测试用)四、 红外接收解码装置设计方案1. 硬件部分:如方案设计所述,制作红外接收解码装置,该装置主体为hc6800开发板,使用的芯片为常见的stc89c51单片机(晶振为12MHz),其中开发板还自带1602-lcd液晶屏,接收部分使用的是市面上常见的一体化红外接收头(发射端使用开发板自带的遥控器)。整体效果图如图4.1所示,成品红外接收头的封装大致有两种,如图4.2所示:图7.3 接收板实物图图4.2 常用一体化红外接收头成品红外接收头均有三只引脚,即VDD(5V)、GND 和OUT。当红外接收头接收到38KHZ 红外载波引脚OUT 为低电平,否则为高电平(5V),供单片机查询。红外接收的电路图如4.3所示:图4.3 红外接收电路图2. 软件部分:中断服务程序主程序当一体化红外接收头接收到红外信号时,将其转化为电平信号传入stc89c51单片机P3.2引脚上,经过软件处理,分离处起始码、用户码、用户码反码、操作码、操作码反码,然后将起主导作用的8位操作码转化为16进制数在1602-lcd上显示。其软件流程如图4.4所示:读取遥控接收头状态系统初始化:1、 计数器TO设置2、 1602液晶初始化3、 外部中断设置接收完毕红外解码开中断INT0下降沿有效LCD显示编码重启INT0中断中断检测:等待红外触发退出中断图4.4 液晶显示红外接收板软件流程图想要正确解码出起始码、用户码、操作码等,必须要先了解发射编码NEC编码协议。NEC协议采用38KHz的红外载波进行脉冲位置调制。如图4.5所示:一个脉冲对应560us的连续载波,一个逻辑1传输需要2.25ms(560us脉冲+1680us低电平),一个逻辑0传输需要1.125ms(560us脉冲+560us低电平),占空比约为1/3或1/4(该占空比下的发射距离比较远)。图4.5 NEC编码位定义一个典型的NEC遥控指令是由同步码头、用户码、用户反码、操作码、操作反码构成。其中同步码包括一个9ms的高电平和一个4.5ms的低电平,用户码、用户反码、操作码、操作反码均是8位的数据格式,按照低位在前高位在后的顺序发送(其中采用反码是为了保证传输的可靠性)。图4.6为一个典型NEC遥控指令:图4.6 典型NEC遥控指令3. 遇到的困难: 在编写解码程序时有一个非常需要注意的问题是一体化红外接收头接收到的信号与发射信号的电平刚好相反,这就导致接收到的用户码、操作码刚好是发射的用户码、操作码的反码,会引起一大串的连锁反应,使最后学习型遥控器学习到的是错误的编码。 如何判断逻辑1和逻辑0的问题。由于逻辑1和逻辑0都是由一段脉冲(高电平)和一段低电平组成,所以只能根据低电平持续时间来计算逻辑1或逻辑0(在解码部分中其为计算高电平持续时间)。计算时长采用的是计数器N与延时函数delay(),其中delay(1)表示延时0.14ms。当N为4时,其为逻辑0,当N为12时,其为逻辑1,所以取N=8为判断标准,若N8,其为逻辑1。 在整机调试时,为了测试中断程序是否正确运行,以及远距离接收的性能,又在中断函数中加了蜂鸣器,若其有声音,则表示中断正确运行。这样使整个程序更为直观的表现出来。五、 红外编码发射装置设计方案1. 硬件部分:制作红外发射装置,该装置主体与红外接收装置一样,同为hc6800开发板,使用的芯片也为stc89c51单片机。另外加上自搭的红外发射电路。红外发射电路由一个8550PNP三极管,一个51,一个1000电阻,一个红外发光二极管组成,电源由stc89c51单片机的Vcc与Gnd引脚组成。整体效果图如图5.1所示。红外发射电路图如图5.2所示:图7.2 发射板实物图图5.2 红外发射电路当stc89c51单片机检测到按键状态时,当按键被按下以后,单片机根据其键位来查询对应编码(此阶段使用的编码为事先存在数组中的编码,并不是学习后的编码),然后由软件产生38KHz载波通过通用引脚3.6来发射。2. 软件部分:由于同样采用NEC编码,故软件部分需要考虑如何在38KHz载波下发射逻辑1和逻辑0,并由此组成一个8位的数据,然后是整一个遥控指令。其软件流程图如图5.3所示:sanzhuan函数主函数8位数据发送函数V=0读按键状态系统初始化发送高电平0.56ms由按键查找对应编码是否有键按下低电平0.56ms低电平1.6ms发送头码YN去抖动检测V=V+1发送4组8位数据YN调用函数sanzhuanV8发送结束码Y结束结束3. 遇到的困难: 如何产生38KHz载波。由于用c语言编程并不能得到精确的延时,必须要转化为汇编语言才能得到运行一段程序所需要的精确时间。stc89c51单片机为12分频,且其使用的晶振为12M,所以其一个机器周期所需要的时间为1us。又因为产生的是38KHz的载波,故其周期约为26.3us即26us,所以产生脉冲(高电平)的部分转化为汇编语言之后运行时间只能在26个机器周期左右,然后将该部分进行循环,则就产生了38KHz的载波。 硬件电路的发射问题。由红外发射电路图可得:当引脚3.6(IR_out)为高电平时,PNP三极管8550截止,红外二极管不工作,不发射红外信号,当引脚3.6(IR_out)为低电平时PNP三极管8550导通,红外二极管正向导通发射红外信号。但是由于失误,本来应该用PNP的三极管却用了NPN的三极管,导致红外二极管一直处于发射状态(人眼看不到,但是可以用手机摄像机看到红外光)。后根据模电知识得出了三极管出错导致不能发射的问题,改进后即可以正常发射编码了。六、 学习型遥控器设计方案学习型红外遥控器即将前两个红外解码装置与红外编码发射装置的整合而得到。1. 硬件部分:硬件部分与红外编码装置相同。2. 软件部分:软件部分即为红外解码与红外编码发射的整合体。由于两个部分中断的工作方式不同,所以另外设置了一个按键来控制中断的开关。若中断开启,则该学习遥控器则进入了学习模式,将其他遥控器发射的编码储存入数组中,以供下次发射使用。若中断关闭,则遥控器就进入了发射模式,遇到红外信号不会进行学习。软件流程图如图6.1所示:3. 遇到的困难:由于红外中断的特殊性,只要开了该中断,只要接收到红外信号就会跳转进入中断,也就是说,在该学习型遥控器发射编码的同时,红外一体化接收头会接收到该信号,从而跳转入中断之中,导致发射与接收都无法完成。后来采用按键控制LED灯的亮灭,再由LED灯的状态来分别控制发射与接收。当键按下时,某个LED灯亮起,中断开启,于是就进入接收状态,再按下该键,则LED灭,中断关闭,也就是任何红外信号无法打断发射,可以完整发射一个遥控指令。七、 仿真波形图发射板仿真图发射波形仿真图观察图可知,头码高电平9ms,低电平4.5ms;逻辑“1”总时长2.20ms,逻辑“0”1.20ms,与NEC编码一致,完成设计要求。八、 总结与心得体会 本设计完成的万能学习型红外遥控器遵循NEC协议,能够替代采用NEC编码的各类红外遥控器使用,最终完成的技术指标如表7.1所示:表7.1设计指标实现情况1解码类型NEC协议2解码准确率100%3红外发射距离10米4载波发射频率37-39KHZ5功能按键5个很长花了很长一段时间,终于把学习型遥控器完整的制作了出来所有预期的功能全部实现,在制作的过程中,我们走了不少的冤枉路,但同时也学到了不少的知识。制作红外接收板并没有什么太大的难度,因为开发板中自带的资料中给了许多例程,只需要掌握基本的单片机知识,并熟悉该例程,再进行代码复用,将接收到的信息在LCD屏幕上显示即可,并没有遇到什么障碍。接下来红外发射的电路才是最难的难点,由于单片机开发板中没有红外发射的相关资料,网上的资料也少的可怜,所以我们只能根据NEC编码的规则与解码部分的代码,自己进行程序的编写与硬件部分的制作。红外发射的电路图是从网上找的,但是我们在买三极管的时候被骗,本来买的是PNP的三极管,店家给我们的却是NPN的,导致在不因该发射时红外管一直处于发射状态。因为这个是硬件问题,不知如何调试。幸亏后来发现了一款叫PROTEUS的软件可以用来仿真,这才发现不是软件的问题,而是三极管极性不同,导致发射与截止刚好相反。纠正了这个以后,我们又开始进行下一个最关键的问题,如何产生38KHz的载波?查了不少的资料,有的说用振荡电路,有的用软件调制。由于38KHz=26.3us,用c语言很难的到这么精确的延时,只有使用汇编语言来得到。后来我们发现keil 4软件可以把c语言转换为汇编语言,于是我们根据转换后的汇编语言来进行调试,最终得到38Khz的载波。接下来的学习型遥控器的制作,即把前面两个工作成果拼凑到一个开发板上的工作,也很顺利的完成,小学期也就到此完成。虽然说小学期做出来的仅仅是这么一个不是很起眼的学习型遥控器,但是我们在这上面花了不少的经历,也学到了不少的知识,相信能在以后的学习工作中能够用到。附页源程序:1.主程序/*名称:红外线遥控发射(NEC编码) 单片机:STC89C52RC 晶振:12M编译环境:Keil uVision4 V9.00*/发射引脚(接PNP三极管b极与1K欧电阻)/PNP三极管e极接电源,c极接红外发射管与51欧电阻 #include #include INCMY_SET.h#include INCLCD1602_6IO.h sbit IR = P36; /发射引脚(接PNP三极管基极)sbit LED1=P20;sbit LED2=P21;sbit LED3=P22;sbit LED4=P23;sbit KEY1=P10;sbit KEY2=P11;sbit KEY3=P12;sbit KEY4=P13;sbit KEY5=P14;#define USER_H P2 /用户码高8位#define USER_L P0 /用户码低8位uint8 tab16 = /操作码 0x12,0x05,0x1e,0x55, 0x01,0x1b,0x03,0x6b, 0x07,0x08,0x09,0x68, 0x22,0xE6,0x33,0xe2;uint16 M = 0;#define m9 (65536-9000) /9mS#define m4_5 (65536-4500) /4.5mS#define m1_6 (65536-1650) /1.65mS#define m_56 (65536-560) /0.56mS#define m40 (65536-40000) /40mS#define m56 (65536-56000) /56mS#define m2_25 (65536-2250) /2.25mSvoid SanZhuan();uint8 KEY(void);void ZZ(uint8 x); /NEC编码发送程序void Z0(uint8 temp); /单帧(8位数据)发送程序void TT0(bit BT,uint16 x); /38KHz载波发射 + 延时程序/*函数:主程序*/void main(void) uchar m; TMOD = 0x01; IE = 0x81; /允许总中断中断,使能 INT0 外部中断 TCON = 0x01; /触发方式为脉冲负边沿触发 IRIN=1; /I/O口初始化 BEEP=1;IR = 1; delay1(10); /延时 lcd_init(); /初始化LCD lcd_pos(0); /设置显示位置为第一行的第1个字符 m = 0; while(cdis1m != 0) /显示字符 lcd_wdat(cdis1m); m+; lcd_pos(0x40); /设置显示位置为第二行第1个字符 m = 0; while(cdis2m != 0) lcd_wdat(cdis2m); /显示字符 m+; while(1)if(LED4 = 0)IE = 0x00;elseIE = 0x81;SanZhuan();/*函数:4*2独立键盘入口:void */uint8 KEY(void) uint8 Key = 0xff; if(KEY1 = 0) Key = 0; LED1 = LED1; if(KEY2 = 0) Key = 1; LED2 = LED2; if(KEY3 = 0) Key = 2; LED3 = LED3; if(KEY4 = 0) Key = 3; LED3 = LED3; if(KEY5 = 0) LED4 = LED4; return Key; /返回键值/*函数:散转程序入口:void*/void SanZhuan() uint8 v; /TMOD = 0x01; v = KEY(); /键盘检测 switch(v) case 0:ZZ(tab0);break; case 1:ZZ(tab1);break; case 2:ZZ(tab2);break; case 3:ZZ(tab3);break; /* case 0x7d:ZZ(tab4);break; case 0xbd:ZZ(tab5);break; case 0xdd:ZZ(tab6);break; case 0xed:ZZ(tab7);break; case 0x7b:ZZ(tab8);break; case 0xbb:ZZ(tab9);break; case 0xdb:ZZ(tab10);break; case 0xeb:ZZ(tab11);break; case 0x77:ZZ(tab12);break; case 0xb7:ZZ(tab13);break; case 0xd7:ZZ(tab14);break; case 0xe7:ZZ(tab15);break;*/ default:break; v=0;/*函数:NEC编码发送程序入口:八位操作码*/void ZZ(uint8 Value) TT0(1,m9); /高电平9mS TT0(0,m4_5); /低电平4.5mS /* 发送4帧数据*/ Z0(USER_H); /用户码高8位 Z0(USER_L); /用户码低8位 Z0(Value); /操作码 Z0(Value); /操作码反码 /* 结束码 */ TT0(1,m_56); TT0(0,m40); /* 重复码 */ while(KEY() != 0xFF) TT0(1,m9); TT0(0,m2_25); TT0(1,m_56); TT0(0,m40);TT0(0,m56); /*函数:单帧(8位数据)发送程序入口:temp*/void Z0(uint8 temp) uint8 v; for (v=0;v= 1; /右移一位 /*函数:38KHz载波发射 + 延时程序入口:(是否发射载波,延时约 x (uS))*/void TT0(bit BT,uint16 x) TH0 = x8; /输入T0初始值 TL0 = x; TF0=0; /清0 TR0=1; /启动定时器0 if(BT = 0) while(!TF0);/BT=0时,不发射38KHz载波只延时;BT=1发射38KHz脉冲且延时; else while(1) /38KHz载波,(低电平)占空比5:26 IR = 0; if(TF0)break;if(TF0)break; IR = 1; if(TF0)break;if(TF0)break; if(TF0)break;if(TF0)break; if(TF0)break;if(TF0)break; if(TF0)break;if(TF0)break; if(TF0)break;if(TF0)break; TR0=0; /关闭定时器0 TF0=0; /标志位溢出则清0 IR =1; /载波停止后,发射端口常态为高/*函数 :外部中断函数 入口:void */void IR_IN(void) interrupt 0 /外部中断服务程序 unsigned char j,k,N=0; EX0 = 0; delay(15); if (IRIN=1) EX0 =1; return; /确认IR信号出现 while (!IRIN) /等IR变为高电平,跳过9ms的前导低电平信号。 delay(1); for (j=0;j4;j+) /收集四组数据 for (k=0;k=30) EX0=1; return; /0.14ms计数过长自动离开。 /高电平计数完毕 IRCOMj=IRCOMj 1; /数据最高位补“0” if (N=8) IRCOMj = IRCOMj | 0x80; /数据最高位补“1” N=0; /end for k /end for j if (IRCOM2!=IRCOM3)/按位取反 EX0=1; return; IRCOM5=IRCOM2 & 0x0F; /取键码的低四位 IRCOM6=IRCOM2 4; /右移4次,高四位变为低四位 if(IRCOM59) IRCOM5=IRCOM5+0x37; else IRCOM5=IRCOM5+0x30; if(IRCOM69) IRCOM6=IRCOM6+0x37; else IRCOM6=IRCOM6+0x30; lcd_pos(0x4b); lcd_wdat(IRCOM6); /第一位数显示 lcd_pos(0x4c); lcd_wdat(IRCOM5); /第二位数显示 Y0=0; switch(IRCOM2) case 0x09: Y0=0x01; break; case 0x1D: Y0=0x02; break; case 0x1F: Y0=0x03; break; case 0x0D: Y0=0x04; break; case 0x19: Y0=0x05; break; case 0x1B: Y0=0x06; break; case 0x11: Y0=0x07; break; case 0x15: Y0=0x08; break; case 0x17: Y0=0x09; break; default:break; /case 0x13: RELAY=1; break; / case 0x14: RELAY=1; break; / case 0x51: RELAY=0; break; tabM = IRCOM2;M = (M+1)%4; beep(); EX0 = 1; 2.头文件设定:头文件1MY_SET.h#ifndef _MY_SET_H_#define _MY_SET_H_/ data 固定指片内RAM:0x000x7F/ bdata 固定指片内RAM:0x200x2F/ idata 固定指片内RAM:0x000xFF/ xdata 一般指内部扩展RAM:0x00000xFFFF,也指内部扩展RAM:0x00000xFFFF/ code 指程序存储区ROM:0x00000xFFFF/无符号类型#define uint8 unsigned char#define uint8b unsigned char bdata#define uint8i unsigned char idata#define uint8x unsigned char xdata#define uint8c unsigned char code#define uint16 unsigned int#define uint16i unsigned int idata#define uint16x unsigned int xdata#define uint16c unsigned int code#define uint32 unsigned long#define uint32i unsigned long idata#define uint32x unsgined long xdata#define uint32c unsgined long code/有符号类型#define int8 char #define int8x char xdata#define int8c char code#define int16 int#define int16x int xdata#define int16c int code#define int32 long #define int32x long xdata#define int32c long code/#include #define NOP _n

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论