无线红外多路遥控发射接收系统设计与实现软件设计.docx
- 文档编号:30709177
- 上传时间:2023-08-19
- 格式:DOCX
- 页数:63
- 大小:533.75KB
无线红外多路遥控发射接收系统设计与实现软件设计.docx
《无线红外多路遥控发射接收系统设计与实现软件设计.docx》由会员分享,可在线阅读,更多相关《无线红外多路遥控发射接收系统设计与实现软件设计.docx(63页珍藏版)》请在冰豆网上搜索。
无线红外多路遥控发射接收系统设计与实现软件设计
1绪论
1.3本课题的主要任务
本课题的核心是设计出一个无线红外多路遥控发射/接收系统的软件。
本设计要求掌握无线红外多路遥控发射/接收系统的工作原理,本红外多路遥控发射接收是以红外线为传递信息媒体的短距离无线控制系统,可对8个受控对象的工作状态进行遥控,适用于工业,医疗,家用电器等设备的开启或关闭控制,也可以对一种设备八种工作状态进行控制或2种设备的4种工作状态进行控制。
具体要求如下:
(1)遥控距离不小于3m,即红外遥控发射机与红外接收机之间的距离不小于3m;
(2)遥控路数8路,即可对8个受控设备进行开关控制;(3)工作频率40kHz,即红外发射和接收的载频为40kHz;(4)发射端可显示控制路数,接收端可显示受控状态。
2红外遥控系统简介
红外遥控是目前家用电器中用得较多的遥控方式,在讲红外线遥控之前,首先讲一讲什么是红外线。
我们知道,人的眼睛能看到的可见光按波长从长到短排列,依次为红、橙、黄、绿、青、蓝、紫。
其中红光的波长范围为0.62~0.76μm;紫光的波长范围为0.38~0.46μm。
比紫光波长还短的光叫紫外线,比红光波长还长的光叫红外线。
红外线遥控就是利用波长为0.76~1.5μm之间的近红外线来传送控制信号的。
2.1系统组成框图
通用红外遥控系统由发射和接收两大部分组成,应用编/解码专用集成电路芯片来进行控制操作,如图1所示。
发射部分包括键盘矩阵、编码调制、LED红外发送器;接收部分包括光、电转换放大器、解调、解码电路。
发射部分的主要元件为红外发光二极管。
它实际上是一只特殊的发光二极管,由于其内部材料不同于普通发光二极管,因而在其两端施加一定电压时,它便发出的是红外线而不是可见光。
目前大量使用的红外发光二极管发出的红外线波长为940nm左右,外形与普通发光二极管相同(见图2),只是颜色不同。
红外发光二极管一般有黑色、深蓝、透明三种颜色。
判断红外发光二极管好坏的办法与判断普通二极管一样:
用万用表电阻挡量一下红外发光二极管的正、反向电阻即可。
红外发光二极管的发光效率要用专门的仪器才能精确测定,而业余条件下只能用拉距法来粗略判定。
接收部分的红外接收管是一种光敏二极管。
在实际应用中要给红外接收二极管加反向偏压,它才能正常工作,亦即红外接收二极管在电路中应用时是反向运用,这样才能获得较高的灵敏度。
红外接收二极管一般有圆形和方形两种。
由于红外发光二极管的发射功率一般都较小(100mW左右),所以红外接收二极管接收到的信号比较微弱,因此就要增加高增益放大电路。
前些年常用μPC1373H、CX20106A等红外接收专用放大电路。
最近几年不论是业余制作还是正式产品,大多都采用成品红外接收头。
成品红外接收头的封装大致有两种:
一种采用铁皮屏蔽;一种是塑料封装。
均有三只引脚,即电源正(VDD)、电源负(GND)和数据输出(VO或OUT)。
图3给出一些成品红外接收头的外形。
红外接收头的引脚排列因型号不同而不尽相同,可参考厂家的使用说明。
成品红外接收头的优点是不需要复杂的调试和外壳屏蔽,使用起来如同一只三极管,非常方便。
但在使用时注意成品红外接收头的载波频率。
红外遥控常用的载波频率为38kHz,这是由发射端所使用的455kHz晶振来决定的。
在发射端对晶振进行整数分频,分频系数一般取12,所以455kHz÷12≈37.9kHz≈38kHz。
也有一些遥控系统采用36kHz、40kHz、56kHz等,一般由发射端晶振的振荡频率来决定。
此次遥控系统的设计要求载波频率为40KHz。
2.2多路控制的红外遥控系统
多路控制的红外发射部分一般有许多按键,代表不同的控制功能。
当发射端按下某一按键时,相应地在接收端有不同的输出状态。
接收端的输出状态大致可分为脉冲、电平、自锁、互锁、数据五种形式。
“脉冲”输出是当按发射端按键时,接收端对应输出端输出一个“有效脉冲”,宽度一般在100ms左右。
“电平”输出是指发射端按下键时,接收端对应输出端输出“有效电平”,发射端松开键时,接收端“有效电平”消失。
此处的“有效脉冲”和“有效电平”,可能是高、也可能是低,取决于相应输出脚的静态状况,如静态时为低,则“高”为有效;如静态时为高,则“低”为有效。
大多数情况下“高”为有效。
“自锁”输出是指发射端每按一次某一个键,接收端对应输出端改变一次状态,即原来为高电平变为低电平,原来为低电平变为高电平。
此种输出适合用作电源开关、静音控制等。
有时亦称这种输出形式为“反相”。
“互锁”输出是指多个输出互相清除,在同一时间内只有一个输出有效。
电视机的选台就属此种情况,其它如调光、调速、音响的输入选择等。
“数据”输出是指把一些发射键编上号码,利用接收端的几个输出形成一个二进制数,来代表不同的按键输入。
一般情况下,接收端除了几位数据输出外,还应有一位“数据有效”输出端,以便后级适时地来取数据。
这种输出形式一般用于与单片机或微机接口。
除以上输出形式外,还有“锁存”和“暂存”两种形式。
所谓“锁存”输出是指对发射端每次发的信号,接收端对应输出予以“储存”,直至收到新的信号为止;“暂存”输出与上述介绍的“电平”输出类似。
3红外遥控系统的总体设计
3.1发射控制系统设计
此部分设计要求:
用数码管显示所控制路数,即
按下“1”键——显示数字“1”,表示对设备“1”进行控制;
……;
按下“8”键——显示数字“8”,表示对设备“8”进行控制。
在所有被控制对象处于停止状态时,数码管熄灭。
3.1.1电路设计
发射控制部分电路主要分为:
按键及控制电路,显示电路,编码电路,脉码调制振荡电路,红外发射电路这5部分。
(1)按键及控制电路
按键及控制电路由AT89C51与键盘组成,根据设计要求,此系统要求对八路信号进行遥控,因此电路采用最简单的独立式按键输入方式。
八个按键表示八个控制设备。
按键的一端接89C51的P1(P1.0~P1.7)口,另一端直接接地。
这种方式的优点是编程简单,当有按键按下时P1口由高电平变为低电平,说明有信号输入,89C51测试到此低电平时,将其对应的BCD码与键值送到相应的端口并行输出。
按键接口电路见附图1。
(2)显示电路
在显示电路部分用到八段LED显示器。
八段LED显示器由8个发光二极管组成。
其中7个长形条的发光管排列成”日”字形,另一个贺点形的发光管在显示器的右下角作为显示小数点用,它能显示各种数字及部分英文字母。
LED显示器有两种不同的形式:
一种是8个发光二极管的阳极都连在一起的,称为共阳极LED显示器;另一种是8个发光二极管的阴极都连在一起的,称之为共阴极LED显示器。
如下图4所示。
图4数码管电路图
共阴和共阳结构的LED显示器各笔划段名和安排位置时相同的。
当二极管导通时,相应的笔划段发亮,由发亮的笔划段组合而显示的各种字符。
8个笔划段hgfedcba对应于一个字节(8位)的D7D6D5D4D3D2D1D0,于是用8位二进制就可以表示欲显示字符的字形代码。
例如,对于共阴LED显示器,当公共阴极接地(为零电平),而阴极hgfedcba各段为01110011时,显示器显示“P”字符,即对于共阴LED显示器,“P”字符的字形码是73H。
如果是共阳LED显示器,公共阳极接高电平,显示“P”字符的字形代码应为10001100(8CH)。
设计要求用数字显示所控制的路数,即将发送的键值转换成与数码管显示相对应的字符码。
选89C51的P2口作为字符码输出端口。
因为51单片机I/O口输出低电平时输出的电流很小,数码管不会太亮,所以用锁存器74HC373来驱动数码管发光,显示接口电路见附图1。
数码管显示1~8数字时,P2口应送出的字符值分别为:
F9H、A4H、B0H、99H、92H、83H、F8H、80H。
并用89C51的P3.4、P3.5口分别控制74HC373允许输入G与输出控制/OE。
(3)编码电路
编码电路有集成电路VD5026组成,它将进行的4位BCD码变换成串行的编码信号。
其功能是将并行的4位BCD码转换成串行输出信号,经调制以后发射。
将89C51单片机P3口的P3.3~P3.0直接接到VD5026的数据输入D3~D0端,另外用P3.5接发射指令,VD5026的工作原理与性能见器件介绍。
具体电路见附图1。
(4)脉冲调制振荡电路
为了提高传输信号的抗干扰能力,还需要将编码信号调制在较高频率的载波上发射。
本课题要求载波频率为40KHz,故可采用CMOS门电路构成的脉冲调制电路。
当编码信号A为高电平时,振荡器工作,输出为载频信号;当编码信号为低电平时,振荡器不工作,输出为低电平。
输出的编码调制信号波形如下图5中的B所示。
A
B
图5编码调制波形图
脉码调制振荡电路见下图6所示。
图6脉码调制振荡电路图
(5)红外发射电路
红外发射电路有放大电路和红外发射管组成。
G3、G4为隔离级,其作用是减少发射时的大电流对振荡级的影响;三极管对发射信号进行电流放大。
当G4输出为高电平是,三极管导通,红外管工作,当G4输出为低电平时,三极管截止,红外管不工作。
图7红外发射电路图
3.1.2软件设计
软件设计有两种方法:
一种是自上而下,逐步细化;一种是自下而上,先设计出每一个具体的模块(子程序),然后再慢慢扩大,最后组成一个系统。
在本设计中我用自下而上的设计方法。
首先设计出一个延时子程序,再设计显示子程序,最后组成一个按键查询程序。
当然在编程之前要先画程序流程图。
画程序流程图是程序设计的一个重要组成部分,而且决定成败的关键部分。
画程序流程图的过程就是进行程序的逻辑设计过程,这中间的任何错误或忽视均将导致程序出错或可靠性下降。
因此,真正的程序设计过程是流程图设计,而上机编程是将设计好的程序流程图转换成程序设计语言而已。
正确的流程图画法是先粗后细、一步一个足印,只考虑逻辑结构和算法,不考虑或少考虑具体指令。
这样画流程图就可以集中精力考虑程序的结构,从根本上保证程序的合理性和可靠性。
接下来就是进行指令代换,这时只要消除语法错误,一般就能顺利编出源程序。
发射部分的软件设计有两种方案。
第一种方案是在发射部分从编码程序的设计着手,从而设计出整个发射部分。
下面是两种方案的比较。
(1)方案一:
编码程序的设计
课题要求用数字显示所遥控的路数,即将发送的键值与数码管显示相对应的字符码。
键盘的每一键均表示一种控制,并赋予了键值,因此,编码程序的作用是控制单片机读键盘,然后生成与键值一致的编码,并用串行数据方式发送编码,编码程序流程图如图8所示。
图8编码流程图
其中,置波特率子程序用于设定数据传送速率。
当选择串行发送方式1时,其波特率由定时器T1的溢出率和SMOD的位状态确定。
串行数据发送子程序用来设定数据发送程序。
串行发送方式1是由10位异步通信方式,其中1个起始位,8个数据位和1个停止位。
发送时,首先送出起始位,而后发送数据位D0~D7(由低位到高位),最后为停止位。
当10位发送完毕后,89C51的T1自动跳变为1,产生中断,串行发送结束。
注意:
在进行多次发送数据时,必须在程序中有清零命令。
按键子程序用来判断有无按键按下。
判断时可先将P1口中对应行的口全置“1”,即P1输出为0FH,然后用读引脚的办法将P1口值读入,读入值与0FH一致,则无键按下,否则就有键按下。
10ms延时程序是为了消除按键瞬间按下的抖动。
(2)方案二的程序框图
下面是程序框图的一部分,是通用的独立式按键查询程序框图。
此程序基本功能:
查询有无按键按下,没有转下一次查询,有则调用延时子程序,作用是消除按键的抖动,确定此键确实按下。
然后调用显示子程序将此键值送显示电路,其四位BCD码送编码电路进行编码。
最后判断此按键是否释放,调用延时子程序直到按键被释放。
图9独立式按键查询程序框图
图10延时程序框图
(3)方案二的程序设计
主控程序的设计思想:
发射控制程序主要用到了独立式按键查询程序、延时程序和查表显示程序。
用89C51单片机的P1口作为按键的输入,P2口作为显示输出,P3口作为键值的BCD码输出和控制输出。
用寄存器R0作为计数器,初值为零,在每次测试有无按键按下之前加1,直到加到7为止,然后又从零开始加,是为了显示查表子程序中查表的目的。
由于此系统要求是对8路信号的遥控,在编程时没有用到八位二进制数到四位BCD码的转换。
只判断输入健值,然后将其对应的四位BCD码送P3口的低四位输出。
P5用做锁存器74HC373和编码器VD5026的输出控制,当有信号要发射时此端口为低电平。
P3.4用做控制74HC373的允许输入端,高电平有效。
显示电路的程序设计思想:
当测试到是哪一路信号输入时,将其对应值的是十六进制数送P2口输出。
其对应情况为:
信号通道P2口输出(十六进制)P3口输出(十六进制)
按键“1”0F9H0D1H
按键“2”0A4H0D2H
按键“3”0B0H0D3H
按键“4”99H0D4H
按键“5”92H0D5H
按键“6”83H0D6H
按键“7”0F8H0D7H
按键“8”80H0D8H
查表显示电路的程序如下:
DISP:
;显示子程序
PUSHSP
PUSHPSW
MOVDPTR,#TAB
MOVA,R0
MOVCA,@A+DPTR;查表
MOVP2,A;将测试到的信号的十六进制送P2口,显示输出
POPPSW
POPSP
RET;返回
TAB:
DB0F9H,0A4H,0B0H,99H,92H,83H,0F8H,80H
END
如下是延时子程序:
DELAY:
;延时子程序
MOVR7,#01H
D1:
MOVR6,#0FFH
D2:
DJNZR6,$;R6减于1不等于零则转移
DJNZR7,D1;R7减于1不等于零则转移
RET;返回
方案一更适合工作状态数比较大的情况下,如对8路受控对象进行8种工作状态的控制,即工作状态总数为8*8种。
由于本课题只要求对8个受控设备进行开关控制。
而方案一的读入键值子程序是确定被按下的键。
当确定有键被按下时,可先对4根列线轮流置“0”,4根行线全部置“1”,由此产生置位值。
再读P1口,读入值与置位值一致,则无键按下,否则就有键按下,读入值即为键值。
将键值作为发射码送串行发送口。
显然方案二更适用于本次设计,一方面编程比较简单,需要的芯片数比较少,可以节约实验室的器材。
方案二程序设计时,在汇编语言的环境下进行编程,在伟福仿真器上运行和调试。
3.2接收控制设计
接收控制部分的设计要求:
用8个LED的亮、灭表示相应设备的开关状态
某个LED亮——该被控对象处于开启状态
某个LED灭——该被控对象处于停止状态
3.2.1电路设计
接收控制部分主要有:
红外接收、解调电路,解码电路,控制电路三部分。
(1)红外接收、解调电路
红外接收电路通常由一片专用集成电路和少量外围器件组成。
我们采用了应用最为广泛的芯片CX20106,图11是由CX20106组成的红外接收、解调电路。
红外接收管将光信号转换为电信号,从CX20106的1脚输入,经前置放大器、限幅放大器放大后送至带通滤波器,带通滤波器的中心频率与红外发射载波频率相同。
检波器、积分器组成解调电路,对接收信号进行解调。
施密特触发器对解调输出信号进行整形,从7脚输出,该输出为集电极开路电路,因此要接上拉电阻。
所有红外遥控器的输出都是用编码后串行数据对38~40kHz的方波进行脉冲幅度调制而产生的。
如果直接对已调波进行测量,由于单片机的指令周期是微秒(μs)级,而已调波的脉宽只有20多μs,会产生很大的误差。
因此先要对已调波进行解调,对解调后的波形进行测量。
图11红外接收解调电路
(2)解码电路
解码电路的功能是将解调后的串行数据进行解调,使其成为BCD控制代码,并使控制代码进行输出。
VD5027是与VD5026配对使用的通用接收解码器。
收到的串行数据从VD5027的14脚输入,经数据提取电路判断后与序列发生器产生的本地地址码亿比特一比特地进行校验。
如果第一次接收到的地址码和本地地址码相符,则将紧接着收到的4位数据马储存在内部4bit移位寄存器中(不移到输出锁存器)。
当第二次收到的地址码仍与本地地址码相符,则将新收到的数据码于上一次储存的数据码加以比较,若两次相同则控制逻辑电路使有效传输输出端VT为高电平,4比特移位积存器中的数据码转移到输出锁锁存器,并且在输出锁存器保留,直到新的数据代替它。
保留在锁存器的数据经缓冲器后输出,同时有效传输输出端VT保持高电平。
若两次不相同或4个数据周期内没收到信号,则VT为低电平。
电路连接见附图2。
(3)控制电路
控制电路有89C51与八个发光二极管组成,二极管的亮、灭表示设备的工作状态:
亮说明受控设备开启,灭说明受控设备停止。
二极管连接在89C51的P2口,在编程时,89C51将收到的四位BCD码转换二极管的控制信号来使二极管发光或熄灭,证明设备的受控情况。
P2.7~P2.0分别控制1~8路信号,每次只有一路信号输出,所以二极管每次只有一只发光。
3.2.2软件设计
同样的在接收部分主要有译码即解码程序设计和控制程序设计。
(1)程序框图
译码的工作过程是,由89C51将解调后的编码读入,再由内部程序将读入的编码译成相应的路控制信号,由于编码的就是键值,因此可用查表程序将键值转换成相应的控制信号并用识别标志位的方法,识别键值所对应的控制方式,译码程序流程如图12所示。
图12译码程序流程图
接收控制程序的目的是测试接收到的控制信号,从而控制P2口的输出,使其为高电平或低电平,达到控制受控设备的要求。
考虑到接收的只是四位BCD码,所以测试时只判断P1口的低四位(P1.3~P1.0)是否为0或1。
例如:
当测试到P1.3~P1.0为0011时,说明接收到的是第三路信号,则选择P2.5口作为信号的输出端,也就是将P2.5清零,使第三个二极管发亮,说明接收到了第三路信号。
测试过程为:
先检测P1.3是否为0,为0;再检测P1.1是否为0,不为0。
说明是1;最后检测P1.0,为1,证明接收到的是0011,即可控制P2.5为0,使第3只LED发光。
下面是接收部分的程序框图:
图13接收控制程序框图
(2)程序设计
设计思想:
接收控制的输入用89C51的P1口低四位(P1.3~P1.0),当有信号输入P3.2也有中断输入,此时测试P1.3~P1.0为0或1,判断是哪路信号,再选择相应的端口输出控制信号。
其对应情况:
P1.3~P1.0P2端口(P2.7~P2.0)受控设备
000101111111LED“1”
001010111111LED“2”
001111011111LED“3”
010011101111LED“4”
010111110111LED“5”
011011111011LED“6”
011111111101LED“7”
100011111110LED“8”
首先测试P1.3,是1则说明收到的是第八路信号,因为八路信号的BCD码中,只有第八路的BCD码的最高位为1,而其余的都为0,所以将P2.0清零,说明接收到了第八路信号;是0则有7种可能性,因为其它7个数字的BCD码最高位都为0,此时要测试下一位即P1.1位,依次类推测试出其它几路信号。
4器件介绍
4.1AT89C51单片机简介
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除100次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。
AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
图14AT89C51管脚图图15AT89C2051管脚图
4.1.1主要特性
·与MCS-51兼容
·4K字节可编程闪烁存储器
寿命:
1000写/擦循环
数据保留时间:
10年
·全静态工作:
0Hz-24Hz
·三级程序存储器锁定
·128*8位内部RAM
·32可编程I/O线
·两个16位定时器/计数器
·5个中断源
·可编程串行通道
·低功耗的闲置和掉电模式
·片内振荡器和时钟电路
4.1.2管脚说明
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下所示:
P3口管脚备选功能
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器1外部输入)
P3.6/WR(外部数据存储器写选通)
P3.7/RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 无线 红外 遥控 发射 接收 系统 设计 实现 软件设计