




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
前言随着近年来我国科技的发展,家用电器在我国的发展极为迅猛,科技在为我们带来方便的同时也在改变我们的生活方式,传统意义上的电器开关早已跟不上了人们对智能化发展的向往与追求,跟不上市场对于智能化开关应运而生。现今的家用电器普遍采用红外遥控方式,这也为一个遥控器可以控制多个电器开关提供了可能。而在工业环境中,红外遥控不仅电路结构简单,还可以安全地对目标进行遥控,从而避免在对人体有高度危害的有毒气体等环境中进行作业,减少工作中的成本,降低职业病的产生概率。红外线的编解码电路十分简单,完全可以进行多路控制,而开关之间互不干扰,运用C语言进行单片机编程,编码灵活,硬件价格便宜,还可以多路遥控,这使得红外线在室内近距离遥控中成为能达到同样功能的传输方法中的佼佼者,在合适的环境中,更多的人会选择红外遥控。红外线遥控的发展十分迅速,人类应用红外线设备也已经很久了,在如今的电子科技高度发达的时代,红外线不能像无线电遥控一样具有强大的穿透特性,也不能向过远的地方传输,与同类的遥控产品相比可以说是非常劣质了,但我们为什么还要用红外线遥控呢?红外遥控又凭什么在如今的时代走进千家万户?由于近红外设备制作简单,单片机操控非常灵活,造价也很便宜,最总要的是它非常适用于在室内进行短距离遥控,也不用向无线电遥控一样,每套设备都有自己固定的编码用来互相识别,红外线不能穿越障碍物,这意味着红外遥控器不会因为具有相同的频率而穿墙遥控,所以对于室内进行遥控设备是非常适合的。由于红外线在自然界极为普遍,所以我们也不用怕它会对人体的健康有所影响,不可见光对周围的空间也不会造成光污染。1本设计方案思路所谓智能红外遥控开关,就是由用户任意指定一个家用电器的遥控器(例如家里的电视遥控器)的按键作为智能红外遥控开关的控制键。操作时,首先将电源开关打开,第二步手动复位后就可以打开“取码”按键了,同时激发遥控器的控制键,此时,红外遥控器向红外遥控开关发送红外编码信号,家用红外遥控器发射的特定编码信息经过智能红外遥控开关的红外接收头接收后,通过放大整形,输入到遥控开关的STC89C51RC单片机芯片中,这个MCU通过内置的EEPROM记录了遥控器发出的指定按键的信号编码。接着,MCU芯片发出微电流指令,控制智能红外遥控开关中的继电器模块导通或断开,从而达到控制输出电压的通断,控制电路通断的目的。2基本原理红外线为一种无线控制技术,其不轻易损耗编码信号,硬件价格低,具有反码保证信息不缺失,易实现这些卓越的优点,红外线的波谱范围还要在红光的前面,为0.01um~1000um,而对于我们来说宇宙中的不可见光自然也包括了红外线。红外光按波长一共分为三类,本设计需要研究的只是可在室内传输的近红外,而远红外在自然界中极为普遍,不管是太阳还是石头都会释放,而中红外常用来制作激光器等光电材料。本设计由于目的是遥控室内家用电器的电源开关,属于近红外设备,波长为0.76um~1.5um。,因为家用遥控器的红外线发射器与智能红外遥控开关红外一体化接收头在近红外光波长范围内,二者的光谱正好相符,两者间匹配度高,所以使用近红外作为编码发射的光源,提高了信息的传输有效性及可靠性。2.1电路原理现今的红外遥控系统一般分为两部分,第一部分是红外发射电路,发射电路是一个遥控器,他的内部程序主要是一个单片机键盘矩阵,还有调制编码的电路,红外\t"/item/%E7%BA%A2%E5%A4%96%E9%81%A5%E6%8E%A7/_blank"发光二极管,键盘矩阵用来控制需要发射的红外编码,调制后的编码遥控信号才能用于传输信息。而第二部分红外接收电路则是由\t"/item/%E7%BA%A2%E5%A4%96%E9%81%A5%E6%8E%A7/_blank"红外接收二极管,单片机芯片,复位电路,晶振等组合成的,它们将红外发光二极管发出的红外编码转换为对应的高低电平信号,再通过后置放大器将电平信号放大。发射电路一般由按键矩阵,编码IC芯片、放大电路,红外发光二极管等几部分组成。目前,人们使用的遥控器发送红外遥控编码时,就是把从零到九十个数字的控制键所编写的指令和由二进制编写的32位用户码和键码以及他们的反码序列,加载在32-56kHz频率的载波上,三极管放大后遥控器通过红外发射管将由键盘矩阵选择,编码电路调制的数据发送出去,完成由电调制编码向光信号转化的过程。接收电路一般由光、电信号的转换部分、放大电路、解调制电路、解码电路、等几部分组成。光电转换部分将遥控发射电路发出的经过调制的原始信号恢复后,再经由三极管电路进行放大,发送到解码电路,原始信号再经过单片机芯片中的程序最终将一段红外信号解调成了一列二进制数据。单片机中的38译码器IC又将二进制数据译码,将三位的二进制数最终变为八位,最后由继电器电路来执行遥控器所发送的各种命令控制。本设计为智能红外遥控开关设计,所以主要是针对红外接收电路的研究。系统框图如图2.1所示:继电器继电器控制模块红外发射模块单片机解码模块红外接收模块图2-1系统框架原理图Figure2-1Systemframeworkschematic2.2红外遥控编码原理目前处于市场应用中的多种红外遥控器的原理都大同小异,区别只是在于各系统的信号编码方式不同。而如今被人们青睐的两种,其一是NECProtocol的PWM(脉冲宽度调制)标准,一种是PhilipsRC-5Protocol的PPM(脉冲位置调制)标准。遥控器主要由形成遥控信号的微处理器芯片、晶体振荡器、放大晶体管、红外发光二极管以及键盘矩阵组成。当我们按下红外遥控器上的按键时,键盘矩阵产生响应,这时,一组特定的编码已经产生,调制电路开始对38KHz的载波信号进行调制,调制的多电平数字信号主要是脉幅调制,之后再经过NPN或PNP型三极管进行放大,就可以通过红外发光二极管由电信号的编码转化成不可见的红外光信号。所谓的调制,就是用我们希望传送的信号加载到载波信号上,对载波信号的幅度,频率以及相位进行控制的过程。红外一体化接收头收到红外遥控器发送过来的已调制后的编码信号后,经过三极管放大,滤波,检波和整形,这组多电平数字信号就被发送到了单片机芯片中,而由于红外一体化接收头的这些对于信号的处理手段,解调制后被送给单片机的电平信号就正好与红外信号的发射端编码相位相反。红外遥控器红外遥控器键盘接收、放大、检波、整形编码和调制红外接收头光电放大解调解码单片机图2-2红外遥控系统框图Figure2-2Blockdiagramoftheinfraredremotecontrolsystem不同遥控芯片,遥控码的格式也不一样,本设计的遥控开关解码主要是针对NEC标准格式的,所以简要介绍NEC脉冲宽度调制的编码格式。调制前的红外遥控器载波一般都选择38KHz的,作为调制信号,方波是一个很好地选择,它可以直观的表示高低电平,表示数据“0”和“1”。而这和我们在遥控器中用的445KHz的晶振有关。当晶体振荡器经过12分频后,可以得到载波频率为38KHz,运算式子:(2-1)由此,NEC脉冲宽度调制标准格式特征:红外信号载波频率为38kHz;NEC协议编码简介:NEC协议格式总共包括六部分,第一部分为引导码,组成它的是一个高电平和一个低电平,当我们将遥控器上指定的控制键按下时,红外遥控器将会发送一个高低电平组成的全码,这个就是引导码了,之后红外遥控器会发送一个8位数据码,这就是第二部分的用户码,接着又有8位数据码,这是第三部分的用户码或者用户码的反码,主要由红外遥控器的生产厂家决定。第四部分为按键键码,使用红外遥控器控制智能红外遥控开关时主要就看这一字节,这是作为同一个遥控器用不同按键控制不同的开关的关键所在。第五部分是按键码的反码,这个可以用来对数据进行纠错,第六部分是最后一位,它是一个停止位,主要作用就是对码的隔离。当松开遥控器的按键时,数据码即停止发射。如此六个部分加上后面的延时时间总共为108ms。而在按一次键的有限几秒时间里,会出现许多个由引导码带领的四个字节加上一段延时时间,这样,两个引导码的高电平上升沿中间的数据码加延时都是108ms。如图所示即为两个完整的NEC编码。图2-3两个完整的NEC编码脉冲图Figure2-3TwocompleteNECcodedpulsediagrams如图所示,当正常发码时,一次完整的红外线发送红外编码的过程为:13.5ms的引导码+低八位的用户编码+高八位的用户编码或者它的反码+八位的键数据码+八位的键数据反码+一位的停止位隔离码,最后再加上延时,其中,引导码为9ms+4.5ms,是一个具有完整周期的高低电平。如图:图2-4单个NEC编码脉冲图Figure2-4SingleNECcodedpulsediagramNEC编码格式中的引导码是一个9ms的高电平载波加一个4.5ms的时间空闲的组合,它标志着引导码之后即为红外编码的遥控数据,而我们不同的遥控器的区别就显现在这里,这样当接收系统是由微处理器构成的时候,能更有效的处理码的接受与检测及其他各项控制之间的时序关系。红外编码中关于“0”,“1”的表示方法如下图2-5所示:图2-5单个NEC编码脉冲中“0”,“1”表示图Figure2-5"0"and"1"inasingleNECcodedpulse在红外遥控器中,这些以脉冲宽度调制进行编码的数据码,二进制的数据“0”在调制后表现为时间为0.565ms的高电平和延时时间为0.56ms的0电平时间空闲,合在一起,就是一个完整的,周期为1.125ms的高低电平,它代表的就是数据“0”;二进制数据“1”与数据“0”略有不同,但就是这一点时间不一样决定了他到底是“0”还是“1”,二进制数据“1”在原始信号与载波信号相互组合调制后,表现为脉冲宽度为0.565ms的高电平,它的延时空闲时间较长,为1.685ms表现为0电平,高低电平组合在一起为2.25ms,比数据“0”的时间长了不少,这是红外解码时需要注意的事情。波形如图2-6所示:图2-6遥控编码的“0”和“1”Figure2-6“0”and“1”ofremotecontrolcode图2-7遥控器发射的32位码组图Figure2-732-bitcodegroupdiagramtransmittedbytheremotecontroller图2-8原始信号,载波与调制信号波形图Figure2-8Originalsignal,carrierandmodulationsignalwaveform图2-8中的原始信号就是我们要发送的编码信号,原始信号和38KHz的载波信号都是占平比为1/3的方波,以低电平来表示一个数据“0”位高电平表示数据“1”位,如图,38K载波相对于高低电平的时间长度来说要短得多,这就是载波的高频特性,将原始信号与载波信号进行混合调制后,我们就得到了最终可以承载信息并被发射出去的已调信号了。原始信号就是加载了我们想要传达信息的信号编码,当信号是数据“0”时,也就是原始信号中的低电平,我们就在数据“0”在原始信号低电平的时间段里发射出38KHz的载波,而当原始信号数据为“1”的时候,表现为高电平,红外遥控器不发送任何信号,载波频率为0。这就是调制红外线编码信号的原理过程。2.3红外遥控解码原理本设计所选为红外一体化接收头,可以接收红外信号,将其转换为电信号,并放大电信号,解调制后用TTL电平表示的高低电平由红外一体化接收头的脉冲信号输出引脚(OUT)输出,OUT引脚与STC89C51单片机中的INT0引脚相连接,单片机RC芯片通过红外接收解码程序将其识别,并将编码数据发送到主程序中处理,或者存入FLISH程序存储空间中,并执行相关控制程序。红外一体化接收头我们在焊接时可以发现其共有3 个引脚: VCC接+5V电源的引脚1,接到公共地的GND引脚2,还有1个OUT脉冲信号输出引脚,红外线编码转换成电信号之后,就是从这个引脚向单片机发送NEC格式编码的。红外一体化接收头硬件连接非常简单,转换编码的质量也很可靠,很少有错误。若红外一体化接收头发现有38K的红外编码,就会在OUT这个脉冲信号输出引脚输出低电平,当没有38K的时候,意味着这是信号间的间隔,而OUT引脚就会输出高电平。这样一来,红外信号编解码时的电平就会发生变化,没有信号变成了高电平,载波也正好反了过来变成了低电平,但脉冲宽度还是不变的,引导码也由9ms的载波+4.5ms的空闲变成了9ms的低电平+4.5ms的高电平了。将红外遥控器上的控制按键点击36ms后,遥控器中的晶振激活芯片,会向红外一体化接收头发射一个同步脉冲信号,这就是NEC红外传输协议中的引导码,引导码之后即为总共四个字节36位的数据码了。图2-9遥控解码时的“0”和“1”表示图Figure2-9“0”and“1”representationsduringremotecontroldecoding图2-10遥控解码时的NEC编码序列图Figure2-10NECcodesequencediagramduringremotecontroldecoding图2-10为接收到的编码,用逻辑分析仪显示,智能红外遥控开关接收到的先是从0ms持续到9ms的低电平载波,从这里我们可以看出,这个低电平已经是处于引导码的范围了,而后面紧跟着又加上了4.5ms的高电平,而这一低一高的两个电平最终才组成了完整的引导码,到了这里我们也已经可以看出来了,红外遥控器发过来的引导码竟然已经将相位反转了,这里就是红外一体化接收头这个硬件的作用了,红外光波经过放大,检波,限幅等操作,相位正好颠倒了。引导码的高电平变成了低电平,4.5ms的时间空闲变成了高电平。数据码的一个字节从左到右依次为D0到D7,其中,第一个字节是8位二进制表示的数据,560us的低电平加560us的高电平,根据图2-9所示,0.56ms的低电平加0.56ms的高电平组成了数据“0”也就0x00,第二个字节也是8位二进制数据,它代表着NEC红外编码格式中的用户码或它的反码,主要由遥控器生产厂家决定,它的构成是560us的低电平载波加1.68ms的高电平空闲,而数据位“1”正是由0.56ms的低电平加上1.68ms的高电平组成。所以第二个字节可以看出来是0xFF。而位于引导码之后按键键码之前的这两个字节就是用户码和用户码的反码。从图中可以看到,作为第三个字节的按键的键码翻译成二进制数据则是0x0C,所以它的反码就是0xF3,按键反码的作用是将传输后的错误键码纠正过来,并作为一个提醒。四个字节后面还有一个560us载波停止位,这个停止位是为了隔离两端红外光波编码的,后面还有一点延时。在我们用遥控器进行遥控时,智能红外遥控开关会区分不同的按键,而在程序内在的表现就是对键码及其反码的区分,而他们的用户码是相同的,这个上文中也有解释。这样我就可以通过单片机的程序,把当前的按键的键码给解出来。红外编码信号经过红外遥控接收头解调后,会从OUT引脚向单片机输送二进制码的编码,这些二进制编码中的信息就是控制智能红外遥控开关的编码指令,在其中包含着控制键的需要接收端来进行识别的编码信息。但单片机芯片MCU还不能将它识别,所以,在单片机的程序中还有一个解码子程序,主要是通过对数据“0和数据“1”的高电平持续时间来判断的。解码最重要的就是如何将“0”和“1”识别出来。而在采用脉冲宽度调制的串行码中,“0”和“1”起始时的低电平脉冲宽度是相同的都是0.56ms,而不同的则是“0”的高电平脉冲宽度为0.56ms而“1”的高电平脉冲宽度为1.68ms,所以如果相同的低电平后面接的高电平脉宽为0.56ms,则这一位是“0”若后接的高电平为1.68ms则这一位是“1”。而低电平不超过1.12ms则认为是“0”,所以为了信息传输的可靠性和有效性,取(1.12ms+0.56ms)/2=0.84ms作为“0”和“1”高电平的区分最好,脉宽低于0.84ms则为“0”高于0.84ms则为“1”。所以“0”和“1”的区别就在于低电平之后的高电平持续的时间宽度区别。3硬件设计3.1硬件介绍3.1.1元件清单元器件个数器件代号发光二极管5个D1,D2,D3,D4,D5红外一体化接收头1个IR15V电磁继电器4个K1,K2,K3,K4DC电源接口1个P1接线柱4个P2,P3,P4,P59012型三极管4个Q1Q2Q3Q410K电阻一个R12K电阻8个R2--R10轻触按键1个S1自锁式电源开关1个S2单片机芯片STC89C51RC1个U112M晶体振荡器1个Y13.1.2STC89C51单片机的介绍STC系列单片机是美国STC公司的单片机。片内含有Flash程序存储器、SRAM、UART、SPI、A/D、PWM等模块。单片机的型号各不相同,但基本的东西都是类似的,使用keil软件就可以,语言可以选用C语言或汇编语言,单片机的51是一个统称,是51内核的意思,不是STC89C51中51的意思,而该器件的基本功能与普通的51单片机完全兼容。图3-1STC89C51单片机的引脚图Figure3-1PinDiagramofSTC89C51Microcontroller3.1.3主要功能、性能参数如图3-1所示:单片机引脚分为电源,时钟,I/O口,控制引脚四种。外形封装:40脚PDIP单片机配置51内核机器周期:为12时钟;.工作频率在:0-40MHZ,相当于普通8051的0-80MHZ;3STC89C5xRC对应Flash空间:4KB内部存储器(RAM):512B:定时器,计数器:3个16位:6.通用异步通信口(UART)1个;中断源:8个:有ISP(在系统可编程)IAP(在应用可编程),无需专用编程器,仿真器通用I\O口:32\36个工作电压:5.0V3.1.4芯片引脚电源:VCC接+5V电源。GND接地。时钟:XTAL1,XTAL2分别为晶体振荡器的反相输入端和反向输出端。RST:复位端。位于STC89C51单片机的9端口,外接复位电路,在晶体振荡器工作的状态下,可以支持上电复位和手动复位。ALE(30脚):地址锁存使能。这个引脚属于控制信号引脚,对外部存储器工作时,输出脉冲锁存地址的低字节,在正常情况下,ALE输出信号恒定为1/6振荡频率。并可用作外部时钟或定时,注意每次访问外部数据时,一个ALE脉冲将被忽略。PSEN(29脚):程序存储使能。读外部程序存储。当从外部读取程序时,PSEN每个机器周期被激活两次,是外ROM读选通信号。EA:内外ROM选择端,总中断。P0,P1,P,2P3:四个端口是STC89C51单片机中的四个I/O端口,P3端口除了作为I/O端口外,每个引脚都有自己的第二功能。IT0和IT1分别是外部中断0和1的输入口,本设计的红外一体化接收头就是接在了外部中断IT0也就是P3^2端口,而P3^3端口接入一个“学习”按键,用来控制EEPROM。两个端口功能基本相同,在写单片机程序时,我们可以将外部中断IT0自行设定,达到我们的需求,设成“0”或“1”分别代表低电平触发和下降沿触发这两种不同的设定。当我们希望对ITO这个引脚进行设置时,要先对单片机中的特殊寄存器 sfr进行设置。程序中开始时要有EX0=1,打开这个开关,单片机才会对外部中断进行设置,接下来要有EA=1,这个是在中断使能寄存器IE中的总开关,打开它,中断才可以发生,不管是EX0还是EA都是属于中断使能寄存器的功能,由硬件控制,它们都是可以位寻址的,所以才能这么写。这样IT0的外部中断就可以配置了。中断函数很好认,例如voidAB_T0()interrupt0函数,函数名后面有“interrupty”的就是了,而y是中断函数的中断号,本论文在下面会有详细的介绍。,需要注意的是,中断函数在主程序中并不需要特意声明。在51单片机中,系统初始化运行时,寄存器的值全部都是“0”,I/O口的值全部都是“1”。
voidmain(){
IT0=1;
//设置为下降沿触发
EX0=1;
//外部中断0中断允许位
EA=1;
while(1)
{
}
//死循环等待中断
}3.1.5红外接收头本设计选用的是VS1838B一体化红外接收头接收红外遥控编码信号,VS1838B与其他类型的红外接收头类似,功能大致相同,可以实现对红外信号的接收、放大、整形。一般不需要任何外接元件就能完成从红外接收到输出TTL电平兼容信号的所有工作。接收器对外只有3个引脚:电源Vcc,公共地GND和1个脉冲信号输出OUT。由图可以看出,其与单片机接口非常方便,是红外接收电路的成品。刚买来的红外一体化接收头不一定是功能完好的,这就需要我们在焊接时,可以用自己手头的元件简单地判断检查了,我们可以在红外接收头的OUT输出口与连接+5V电源的引脚这两个金属输出端间,用焊锡简单地焊接一个二极管和一个功能完好的发光二极管以及正5V的VCC,若红外接收头完好,我们向红外接收头发送特定的红外编码信号,发光二极管以及二极管都会正常工作,这时我们会发现发光二极管处于发光且闪动的状态,反之,则证明红外接收头功能不完备,可能是运输时被毁坏,或者是出厂时就已损坏。3.1.6自锁开关作为本设计中连接电源与电路的总开关,自锁开关都具有锁定功能,如图3-2,当我们打开电源将自锁开关连入遥控开关电路时,开关连接DC插座与单片机电路,共有六个接线引脚,当我们按下自锁开关时,开关不会弹起来,这时,开关已经将电源和电路连接起来了,电路导通,当我们再按一下时,开关就会弹起,这时电路处于断开状态。自锁开关能锁定保持使电路导通或断开的状态,现如今我们使用的220V电源插座就是使用的这种机械开关,只是型号可能略有不同。图3-2自锁开关电路图Figure3-2Self-lockingswitchcircuitdiagram3.1.7DC电源插口作为本设计电路的5V电源提供插座,接入+5V的直流电源。DC插座是由五部分组成,应用广泛,圆形的插座空间没有正反面,拔插方便,可以为多种设备提供电源,入收音机,电脑显示器等。3.1.8小型电磁继电器(5V)本设计中,电路通过5V的VCC提供的电源对继电器开关产生通断控制,控制大电流设备电路的通断,增加安全性。4、5脚是继电器线圈,没有正负极之分的,主要是为了通电后由电生磁,产生对1,2脚常闭开关的吸力,使1,3引脚上的开关闭合,一个脚接三极管,为+5V的电磁继电器提供单片机I/O口不能提供的电流。3.1.9发光二极管作为电路中的指示灯,长脚接正极,短脚接负极。3.1.109012型PNP三极管本设计中的9012型PNP三极管作用是电流放大,控制能量的转换。半导体三极管由两个PN结组成,分为PNP和NPN型晶体管,由于有带有不同极性的两种载流子参与导电,又被称作双极型晶体管。本设计使用的是9012型PNP晶体管。我们从基极B和发射极E间提供5V的电源,此时,单片机I/O端口发出低电平,存在了大于开启电压的压降,这样一来,PNP晶体管就会导通,连接晶体管集电极C的继电器就可以得到足够的电压和电流了。目前市面上的晶体三极管大致分为三种外形,我们在智能红外遥控开关中使用的是小功率管。在电路原理图中,三极管的符号一般都是特定的,而不管是NPN型三极管还是PNP型三极管,都会发现里面有一个小箭头,而两种晶体管的区别仅仅在于方向不一样,实际上,这个箭头的作用是用来指示电流方向的,区分三极管也主要就靠这个箭头的方向。本设计中的9012型三极管还具有开关作用,这就是我们需要关注的地方了,当基极b的电流为+5V高电平时,VCC也为发射极提供了+5V的电源,由于三极管两极之中压降为0,所以这个PNP三极管处于截止状态,集电极C自然也得不到电流来驱动电磁继电器,而当单片机芯片为基极B提供低电平的时候,发射极E与基极B之间的电压压降达到了5V,压降已经大于了三极管的开启电压,集电极与发射极之间就可以导通了,但由于基极与发射极之间的三极管可以承受的压降要小于5V,所以我们还要在STC89C51RC单片机芯片与三极管基极之间接入一个阻值为2K的分压电阻,为三极管及单片机I/O口分担超过的电压。由此,我们就可以通过对单片机I/O端口的输出高低电平设置来进行控制电磁继电器开关的通断了。关于这里,我本人初次对单片机进行焊接时,有一个疑问,为什么不把继电器直接接到单片机的I/O端口上呢?单片机输出的高电平也是+5V啊,若要打开继电器,直接用程序设定一直输出高电平就行了啊,其实这个问题是因为单片机虽然输出的也是5V的电压,但,输出的电流却太小了,可能连一个LED小灯都不能使其正常发光,更不足以将电磁继电器驱动了,所以要加一个三极管来当作开关,并起放大电流的作用。在继电器旁边并联一个电阻和一个发光二极管是为了监测当有电流时电磁继电器会不会工作,电阻的作用也是为发光二极管分压,使二极管压降与0.7V导通电压相当。3.2设计原理3.2.1单片机简介本设计中原理图采用altiumdesign2016版来进行原理图设计,由于电脑的原因,新版的软件过于卡顿,所以使用老版软件,芯片烧录采用的是STC89C51烧录器,据说可以重复擦写程序很多次。在单片机中的存在的内部资源,我们一般将其分为三大类,这时单片机被设计出来时就给我们准备的可以使用的内容。第一类是FLISH,这是单片机中的程序存储区,而在早期的单片机中,它被称为OTPROM,FLISH应该算是它的升级版本,它可擦写的特性使它成为单片机中应用最广泛的程序存储器,再加上他大容量,低成本的优点,使FLISH程序存储器非常受欢迎。第二类资源是它的数据存储区,也就是RAM,他的作用是将程序运行时产生的数据存储起来,类似于电脑的内存,其实最典型的比喻是我们的计算器,我们用计算器计算个加减法,一些中间的数据都会保存在RAM里边,关电后数据丢失,所以我们每次打开计算器,都是从归零开始计算。但是他的优点第一是读写速度非常快,第二是理论上是可无限次写入的,即寿命无限,不管程序怎么运行怎么读写它都不会坏的。第三类资源就是特殊寄存器,它又被称为SFR,单片机的很多功能都是我们通过对SFR的读写来实现的。(1)什么是单片机最小系统?单片机最小系统又被称为单片机最小应用系统,指的是单片机工作时用的是最简单的元件相互配合的系统。(2)三个必要条件是:电源:本设计中的需要用来提供单片机STC89C51芯片及其他驱动运行的电压源,不同的芯片需要的电压也不同。本设计中使用的是+5V电源。晶体振荡器:单片机的18脚和19脚是晶振的引脚,我们接了一个11.0592M的晶振它每秒钟震荡11,059,200次,外加两个20pF的电容,电容的作用是帮助晶振起振,并维持震荡信号的稳定。复位电路:接到了单片机的9脚RST(Reset)复位引脚上,单片机复位一般是3种情况,上电复位、手动复位、程序自动复位。我们假如我们的单片机程序有100行,当某一次运行到第50行的时候,突然停电了,这个时候单片机内部有的区域数据会丢失掉,有的区域数据没丢失,那么下次打开设备的时候,我们希望单片机能正常运行。所以上电后,单片机要进行一个内部的初始化过程,这个过程就可以理解为上电复位,上电复位保证单片机每次都从一个固定的相同的状态开始工作。这个过程跟我们打开电脑电源开电脑的过程是一致的。当我们的程序运行,遭受到意外干扰而导致程序死机,或者程序跑飞的时候,我们就可以按下一个复位按键,让程序重新初始化重新运行,这个过程就叫做手动复位,最典型的就是我们电脑的重启按钮。当我们的程序死机或者跑飞的时候,我们的单片机往往有一套自动复位机制,比如看门狗,具体应用以后再了解。在这种情况下,如果程序长时间失去响应,单片机看门狗模块会自动复位重启单片机。还有一些情况是我们程序故意重启复位单片机。图3-3复位按键电路原理图Figure3-3Resetbuttoncircuitschematic(3)系统原理图:原理图中包括单片机微控制器模块,红外一体化接收头,USB供电模块,复位模块,以及电磁继电器模块。图见附录1。3.2.2单片机控制系统电路单片机接收红外接收头输出的电平信号产生中断,处理中断服务程序即红外解码程序并完成对继电器的驱动控制,实现电源开关控制功能,如图3-4:图3-4单片机芯片控制电路图Figure3-4Microcontrollerchipcontrolcircuitdiagram3.2.3红外接收头电路遥控器发出的红外遥控信号经红外接收头接收处理后直接送给单片机的中断口INT0,如图3-5所示。图3-5红外一体化接收头连接原理图Figure3-5Infraredintegratedreceiverconnectionschematic3.2.4USB接口供电电路在本设计中主要是对电脑和单片机烧录器之间的接口连接。如图3-6所示,C16为470uF的去耦电容,它的作用有两个,一个是缓冲作用,通电的瞬间,会有一股不稳定的电流从电源处出现,进入红外遥控电路,这会对电路中的电子元器件进行冲击,超过某个电子元器件的承受范围,元器件就会烧坏,而加了这个电容,就会对电流有一个缓冲的作用,可以保护电路,不受突然接入的大电流的影响,不会减少电路元件的使用寿命。在本设计的焊接电路中,由于主要元器件如芯片,二极管,三极管等后级的电子元器件的工作时功率及电流大小各不相同,而有的时候还需要加一些分压电阻和限流电阻等元件,所以第二个就是稳定的作用了,当我们再给单片机上电时器件工作的时候,可能一个三极管正好处在工作状态,但电流大小不是一直持续不变的,若是后级有个IC芯片在之后突然开始工作了,这时也许就会分去电路中的电压,使电流突然变大,而如果没有一个容纳电流的电容,电路中的三极管就会在此时烧坏,电路中的电压也会直接突然下降,比如我们的5V电压突然降低到3V了。而我们系统中有些电子元器件,必须高于一定的电压才能正常工作,电压太低就直接不工作了,有了这个电容,可以说我们的电压和电流就会很稳定了,不会产生大的波动。图3-6USB接口电路焊接原理图Figure3-6USBinterfacecircuitweldingschematic3.2.4电磁继电器模块电路如图3-7所示,电磁继电器5脚接地,4脚接三极管,1脚2脚状态常闭,1脚3脚状态常开。三极管的用法特点,关键点在于b极(基极)和e级(发射极)之间的电压情况,对于9012型PNP而言,e极电压只要高于b级0.7V以上,这个三极管e级和c级之间就可以顺利导通。也就是说,控制端在b和e之间,被控制端是e和c之间。同理,NPN型三极管的导通电压是b极比e极高0.7V,总之是箭头的始端比末端高0.7V就可以导通三极管的e极和c极。这就是关于“导通电压顺箭头过,电压导通”的解释。如果9012型三极管的基极b我们程序给一个高电平1,那么基极b和发射极e都是+5V,也就是说由Vcc提供电源的发射极e到基极b不会产生一个0.7V的压降,这个时候,发射极和集电极也就不会导通,那么竖着看这个电路在三极管处是断开的,所以没有电流通过,电磁继电器也就不会处于工作状态。如果我们程序给三极管基极b的位置一个低电平0,而发射极e是个+5V,产生压差就会导通,PNP三极管e极和b极之间大概有0.7V的电压,那还有(5-0.7)V的电压会在电阻R5上。这个时候,e和c之间也会导通了,那么电磁继电器本身有5V的压降,三极管本身e和c之间大概有0.2V的压降,我们忽略不计。工作过程如下,当单片机I\O口为低电平时,PNP三极管导通,VCC电源驱动电磁继电器工作,LED小灯串联D4电阻R9后与继电器并联,用来检测继电器的的电流通断情况。当STC89C51单片机的I\O口发出0V的低电平时,9012型PNP三极管导通,基极与发射极之间电压为+5V,但这主要是让三极管导通,而真正让电磁继电器工作,提供电流的还是上方的直流电源Vcc与GND的电压差。图3-7电磁继电器焊接原理图Figure3-7Electromagneticrelayweldingschematic4软件设计4.1总体方案本设计由单片机进行编解码实现红外遥控,可以说本设计的重点除了硬件电路的设计外就在于软件解码。本章节将写出解码软件的实现过程。本设计在MCS-51单片机中使用C语言来编程。这时由于平时上课时老师更提倡用C语言进行编程,而c语言又是平时使用较多的计算机语言,优点也十分明显,具有代码量小,运行速度快,功能强大的特点。编程软件采用Keil软件,这个软件是我们在进行单片机程序设计时使用最广泛的应用软件了可以使用C语言进行编译与调试。连接+5V电源,打开自锁开关,程序进入开始运行阶段。当按下智能红外遥控开关“学习”按键时,这时已经开始了初始化中断,按下红外遥控器的控制按键后,STC89C51RC单片机就会开始存储来自红外遥控器发送过来的信息编码,流程说明:在遥控器按下按键的时候,遥控开关开始上电,并初始化,红外遥控编码信号就通过了固定的信道被对面的红外一体化接收头接收到了,红外接收头的OUT输出引脚输出一组TTL高低电平信号给单片机INT0口,单片机的外部中断开始,然后,单片机中的预先写好的红外解码程序开始工作,引导码标志着接下来的是编码数据了,经过了用户码及其反码,单片机才能对键码进行判断“0”“1”数据,并解码,由解码程序处理后,键码的译码值会传到EEPROM或者再中断后被执行程序执行控制继电器,当没有按键按下,程序返回到初始化之后,再次对键码鉴定。存储程序:初始化后,当按下“学习”按键时,单片机运行存储红外遥控编码的程序此时,由本设计红外遥控开关接收后,会将其保存在EEPROM中,断电后,EEPROM中的红外编码信息也不会丢失,断电后可以正常使用。循环判否断主程序是开始初始化中断继电器控制程序是否按键?红外解码储存程序中断返回中断开始图3-8智能红外遥控开关程序流程图Figure3-8Intelligentinfraredremotecontrolswitchprogramflowchart4.2外部中断设置voidinit_int0() //定义子程序{ EX0=1; //允许外部中断0中断 EA=1; //开总中断 IT0=1; //外部中断0开启}当我在做一件事A时,突然必须要去做另一件B更重要的事情,而要做这第二件事B,就必须先放下第一件事A,这样才能去做第二件事B。这里面有一个主体,就是我,有两个客体,是事件A和B,他们是在同一时间的情况下进行的,如果当我做事件B时,不需要了解事件B的过程,只需要得到一个结果就可以,那么我们就可以事先给事件B订上一个闹钟,当我们在做事件A时,事件B也在同时发生,但由于我们不需要给予关注他的过程,就可以利用这个事件B的运行时间,继续做事件A,而一旦我们设定的闹钟响了,这说明我们的事件B已经结束了,我们就可以去将事件B的结果处理掉了。而在单片机中,单片机处理程序也是类似的,当单片机在运行一个程序时,总有一个或几个程序在同时运行,而我们需要去做的就是去将事件B的结果处理掉,只有当事件B处理完后,我们才能再去回头处理事件A,如果用单片机中断处理这件事,那么程序不仅有了可以处理突发事件的能力,还可以在同一时间运行多个程序了。特别要注意的是,单片机中断是一种机制,它与定时器不同,在单片机中,定时器是一个存在的模块,与中断不同。在51单片机中,中断相关的寄存器一共有两个,一个是中断使能寄存器IE(地址是A8H),共有七位,分别为第七位:EA-总开关,总中断使能位,这就相当于家里的总电闸开关,当我们用到中断时,总要在程序里写上一句EA=1这句话的意思是要打开总中断开关,这样我们才能用接下来的第零位到第五位的分中断。第三位:ET1-定时器1溢出中断使能,第二位:EX1-外部中断1使能,第一位:ET0-定时器0中断使能,第零位:EX0-外部中断0使能。第二个则是中断优先级寄存器,可以位寻址和自己设置中断优先级。在初始化程序中,函数前边的void表示函数返回值为空,就是函数不返回任何值,只能在主程序中运行,函数名字是init_int0,而程序中EX0=1;是允许外部中断使能EX0中断,EA=1;是打开单片机总中断,IT0=1;是外部中断0负跳变中断,这个下降沿触发是由高到低或由低到高这一瞬间触发是微秒级的,比IT0=1这种电平触发要快的多。以上就是本设计程序中的外部中断0初始化程序。4.3红外解码4.3.1中断服务程序首先来了解程序的格式:void函数名()interruptm[usingn]
{}关键字
interrupt
表示这是一个中断函数,而函数中的关键字后面还有一个m,m后面还有一个[usingn]
,这里的m是作为中断源的入口号,单片机中有5个中断源,有了这些数字,编译时就可以找到中断程序的地址了。执行该程序时,这个地址会传个程序计数器PC,MCU就会从这里运行程序了。这5个中断源的中断入口地址如表4-1所示:中断源地址中断号INT00003H
0T0000BH
1INT10013H
2T1:
001BH
3串口0023H
4表4-1中断号对照表Table4-1Interruptnumbercomparisontable若要计算的话,设中断号为y,中断入口地址=y*8+3,而在我们的STC89C51单片机中,外部中断INT0的地址为0003H,解出式子得y=0,所以interrupt后面为0。4.3.2中断函数下的红外解码voidint0()interrupt0{ unsignedchari,j; delay_100us(20);//防止干扰 if(hw_P32==0) { //引导码 while(hw_P32==0);//等待低电平过完 delay_100us(20); if(hw_P32==1) //引码结束 { delay_100us(20);//延时2ms for(i=0;i<4;i++) for(j=0;j<8;j++) { while(hw_P32==0);//等待过完 delay_100us(5); if(hw_P32==0) //数据0的时间 { //数据1的时间 hw_table[i]>>=1;//低位在前 } else { delay_100us(5);//高电平的时间过完 hw_table[i]>>=1;//低位在前 hw_table[i]|=0x80;//数据值1 } } flag_jiema_en=1; } }}中断函数和其他函数不一样之处在于中断函数有自己的中断入口,他不需要像普通程序一样,还要在程序之中重新调用,而是达到中断程序后,会自动进入执行阶段。在上面的红外线解码程序中,voidint0()interrupt0表明,它也是一个中断函数,因为中断函数的格式是固定的,void表明函数返回值为空,int0为函数名,这个是由编写程序者自行设定的,而后面跟着的interrupt是中断的关键字,有了它就代表着中断函数了,再后边的数字0是中断入口号。 delay_100us(20);是一个延时函数,在解码程序中作为一个子程序,延时100us的函数当形式参数为20时,所输出的结果是延时2ms,在这个解码程序中的作用是防止干扰。所谓解码就是判断NEC标准中红外编码信号脉冲的宽度。在智能红外遥控开关中,接受到的编码序列0和1是通过脉冲持续时间的长短来区分的,发送出来的方波波形被接收的过程中,只要其接收到编码信号,(虽然信号是一段一段的发送,而信号之间还夹着空闲),此时,红外接收头尾端的输出端口I/O就会输出低电平,当没有编码信号输入的时候,也就是收到空隙时,输出引脚将输出一个高电平。那我们把输出引脚接到单片机的INT0口上,就可以得到红外遥控器发送的编码信息了。而发送过来的红外编码首先过来的就是引导码,由前面的红外编码原理可知,引导码的第一个电平是低电平第二个是高电平,而if(hw_P32==0)表示引导码为低电平时的条件语句,当出现了引导码的低电平时的程序。引导码为9+4.5=13.5ms,while(hw_P32==0);是一个在hw_P32==0条件下的死循环,作用是为了等待9ms低电平过完。delay_100us(27);为延时函数,延时2.7ms(此时已经处于高电平)。if(hw_P32==1)是表示引码处于4.5ms的高电平过程中,而delay_100us(20);延时函数为延时2ms,但我们要知道,这个延时2ms的函数是位于上面这个if语句中,也就是说在这个延时函数之后,红外编码处于2.7ms+2.0ms=4.7ms而大于4.5ms的高电平结束状态。接下来就是用户码和用户码的反码了,在这里,我们要知道,NEC标准下的红外遥控编码用户码是用来区分不同的遥控设备的,在一个遥控器中,不同的按键的用户码都是完全相同的。
for(i=0;i<4;i++)for(j=0;j<8;j++){}这两个C语句中,第一个for语句,意思是循环接收后面由用户码,用户反码,按键键码,键码反码组成的4个字节,而第二个for语句的意思是循环接收并判定每个字节的8位,两个嵌套for语句将引导码之后的4个字节32位逐位判定。while(hw_P32==0);在NEC标准格式下,红外解码程序中,不管是“0”位还是“1”位,在一个周期内的第一个电平都是时间为0.56ms的低电平,所以while(hw_P32==0);语句为等待0.56ms的低电平结束,这样,我们判断数据是1还是0就只需要观察高电平就可以了。根据红外解码原理,数据0的时间=0.56ms的低电平+0.565ms的高电平=1.125ms,数据1的时间=0.56ms低电平+1.685ms高电平=2.245ms,语句delay_100us(9);为继续延时0.9ms,它的意义是在过完0.56ms的低电平的基础上,此时的0.9ms介于0.565ms和1.685ms之间,由if(hw_P32==0){}else{}语句判定是“0”或“1”,若0.9ms后电平为低电平,即hw_P32==0,则数据位是“0”,执行if之后的括号中的程序
hw_table>>=1;。若0.9ms后的电平为高电平,说明编码还处在数据“1”的1.685ms之中,反而证明了这一位的数据是“1”,这时,就要执行else后面括号中的程序了。hw_table[i]>>=1;即将hw_table[i]右移一位并赋值给hw_table[i],因为低位在先,所以数据右移,高位为0,else后面括号中的程序delay_100us(5);是为了将高电平中的时间过完,hw_table[i]>>=1;因低位在先,所以数据右移。hw_table[i]|=0x80;用变量hw_table[i]的值与0x80做“按位或”运算,并将运算结果再赋值给变量hw_table[i],即hw_table[i]=hw_table[i]|10000000b,结果为数据值1。flag_jiema_en=1;则红外解码成功。4.4红外遥控过程voidhongwai_dis(){ if(flag_jiema_en==1) { flag_jiema_en=0; switch(hw_table[2]) { case0x0c://1 relay1=~relay1;//继电器控制 flag_en1=0;//关闭延时使能 break;//得到按键值 case0x18://2 relay2=~relay2;//继电器控制 flag_en2=0;//关闭延时使能 break;//得到按键值 case0x5e://3 relay3=~relay3;//继电器控制 flag_en3=0;//关闭延时使能 break;//得到按键值 case0x08://4 relay4=~relay4;//继电器控制 flag_en4=0;//关闭延时使能 break;//得到按键值 case0x1c://5 r
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电子商务师实操案例分析试题及答案
- 年度经理工作规划计划
- 公司生产工作计划提升员工技能
- 开发新市场的战略规划计划
- 电子商务标识与信誉构建试题及答案
- 学校特色品牌建设计划
- 秋季节能减排活动计划
- 物流供应链的环节分析国际物流师试题及答案
- 2024物理期末复习试题及答案
- 持续提升的预算员试题及答案
- 安全生产、文明施工资金保障制度11142
- XX化工有限责任公司维保方案
- 基础会计课件(完整版)
- 品质异常处罚细则及奖罚制度
- 二年级下册心理健康教案-第二十四课 帮爸爸妈妈分担 妈妈谢谢您|北师大版
- 人教PEP版五年级英语下册-《课时学练测》全册含答案
- 锅炉水冷壁安装作业指导书
- 《雷锋叔叔_你在哪里》说课稿
- 赞美诗歌400首全集
- 横向分布系数计算剖析
- 北京市建筑施工作业人员安全生产知识教育培训考核试卷A及答案知识讲解
评论
0/150
提交评论