单片机红外遥控电路设计毕业论文
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机红外遥控电路设计毕业论文
第一章课题概况
1.1 红外遥控电路设计的目的
本次设计的主要任务是利用单片机技术,并将数字电子技术、模拟电子技术和红外学相关知识相结合,设计一款可以实现灯泡的开关和调光(或者电机启动和调速)控制的红外遥控电路。
通过设计红外遥控电路来巩固和加强对三年来所学的理论知识和锻炼自己的动手能力,熟悉和掌握以单片机为核心的电路设计的基本方法和技术,熟悉传感器的使用,提高电子电路的设计和动手能力,加深对单片机软硬件知识的理解,获得初步的应用经验,为以后从事生产和科研工作打下一定的基础。
1.2红外遥控电路设计功能介绍
本设计要求红外遥控电路实现以下功能:
(1)利用红外接收和发射探头发送和接收红外线;
(2)该遥控系统可以实现灯泡的开关(或者电机启动)控制;
(3)能够按键启动/停止,使用单片机进行设计或者纯数字模拟电路设计;
1.3课题方案设计
目前红外遥控器已经在各类电器上得到了广泛应用。
市场上一般设备系统均采用专用的遥控编码及解码集成电路,具有制作简单等特点,但由于这些芯片价格较贵,功能键数及功能受到特定的限制,且相互之间采用的遥控编码格式互不兼容.所以各机型的遥控器通常只能针对各自的遥控对象而无法通用,只适用于某一专用电器产品的应用,应用围受到限制。
采用单片机进行遥控系统的应用设
计,具有硬件接口简单方便。
编程灵活多样,操作码个数可随意设定等优点。
此方案可用控制键实现对电器的控制,方便实用。
且本设计用到的元器件较少,电路相对简单实用。
红外遥控电发射器主要由单片机、操作键盘和红外发射电路三部分组成。
红外发射部分结构图如图1.1所示:
图1.1红外遥控电路发射设计原理框图
当按下遥控按钮时,单片机产生相应的控制脉冲,由红外发光二极管发射出去。
控制系统采用3V 电源电压,并具有低功耗空闲和掉电方式控制。
红外遥控电发射器主要由单片机、指示电路和红外接收电路三部分组成。
红外接收部分结构如图1.2所示:
图1.2红外遥控电路接收设计原理框图
当红外接收器接收到控制脉冲后,经单片机处理由显示设备显示出当前受控电器的序号,并判断是否对电灯进行调光,如需调光则经调光电路处理后实现调光功能。
系统采用5V 单电源电压供电,能满足低功耗空闲状态,并具有掉电记
忆控制功能。
第二章系统硬件部分方案设计
2.1红外遥控接发电路的主控芯片
AT89C52是一个低电压,高性能CMOS 8位单片机,片含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片置通用8位中央处理器和Flash存储单元,AT89C52单片机在电子行业中有着广泛的应用。
编辑本段主要功能特性
1、兼容MCS51指令系统
2、8k可反复擦写(大于1000次)Flash ROM;
3、2个双向I/O口;
4、256x8bit部RAM;
5、3个16位可编程定时/计数器中断;
6、时钟频率0-24MHz;
7、2个串行中断,可编程UART串行通道;
8、2个外部中断源,共8个中断源;
9、2个读写中断口线,3级加密位;
10、低功耗空闲和掉电模式,软件设置睡眠和唤醒功能;
11、有PDIP、PQFP、TQFP及PLCC等几种封装形式,以适应不同产品的需求。
AT89C52为8 位通用微处理器,采用工业标 PDIP封装的AT89C52引脚图准的C51核,在部功能及管脚排布上与通用的8xc52 相同,其主要用于会聚调整时的功能控制。
功能包括对会聚主IC 部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等。
主要管脚有:XTAL1(19 脚)和XTAL2(18 脚)为振荡器输入输出端口,外接12MHz 晶振。
RST/Vpd(9 脚)为复位输入端口,外接电阻电容组成的复位电路。
VCC(40 脚)和VSS(20 脚)为供电端口,分别接+5V电源的正负端。
P0~P3 为可编程通用I/O 脚,其功能用途由软件定义,在本设计中,P0 端口(32~39 脚)被定义为N1 功能控制端口,分别与N1的相应功能管脚相连接,13 脚定义为IR输入端,10 脚和11脚定义为I2C总线控制端口,分别连接N1的SDAS(18脚)和SCLS(19脚)端口,12 脚、27 脚及28 脚定义为握手信号功能端口,连接主板CPU 的相应功能端,用于当前制式的检测及会聚调整状态进入的控制功能。
2.2红外发送电路
单片机遥控发射器原理图如图2.1所示,单片机遥控发射器主要由AT89C52单片机、操作键盘和红外发射电路等组成。
单片机部分主要完成遥控发射器发射过程的控制、键盘扫描的管理和显示。
其中P1.3用于输出控制红外发射电路的工作的信号,P2..1到P2.5连接键盘,用于接受键盘的信号。
电路采用5V电池供电,当有按键被按下,遥控器信息码由AT89C52单片机的定时器1中断产生38KHZ的红外线信号,由P1.3口输出—,经过三极管9013放大,由红外发射管发送。
待发送完毕。
电路采用LED发光二极管来实现按键的操作指示。
图2.1 红外发射原理图
遥控器采用按键中断扫描方式。
当按下按键K1时,所有灯灭;当按下按键K2时,红灯亮,其他灯灭;当按下按键K3时,黄灯亮,其他等灭;当按下按键K4时,绿灯亮,其他灯灭;按键K5是备用按键。
2.3红外接收电路
单片机遥控接受器原理图如图2.2所示,单片机遥控发射器主要由AT89C52单片机、红外线接收电路、和电灯亮灭电路等组成。
当红外接受接收到遥控器发射的信号后,将信号传给AT89C52单片机,AT89C52单片机根据收到的信息码的不同,进行相应的状态指示。
图2.2 红外接收原理图
第三章系统软件部分方案设计
3.1红外编码原理
遥控发射器专用芯片很多,根据编码格式可以分成两大类,这里我们以运用比较广泛,解码比较容易的一类来加以说明,现以日本NEC的uPD6121G组成发射电路为例说明编码原理。
当发射器按键按下后,即有遥控码发出,所按的键不同遥控编码也不同。
这种遥控码具有以下特征:
采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的“1”,其波形如下图所示。
上述“0”和“1”组成的32位二进制码经38kHz的载频进行二次调制以提高发射效率,达到降低电源功耗的目的。
然后再通过红外发射二极管产生红外线向空间发射。
编码数据,载波,发射,接收解码如下图所示:
UPD6121G产生的遥控编码是连续的32位二进制码组,其中前16位为用户识别码,能区别不同的电器设备,防止不同机种遥控码互相干扰。
该芯片的用户识别码固定为十六进制01H;后16位为8位操作码(功能码)及其反码。
UPD6121G 最多额128种不同组合的编码。
遥控器在按键按下后,周期性地发出同一种32位二进制码,周期约为108ms。
一组码本身的持续时间随它包含的二进制“0”和“1”的个数不同而不同,大约在45~63ms之间,发射波形图如下图所示。
当一个键按下超过36ms,振荡器使芯片激活,将发射一组108ms的编码脉冲,这108ms发射代码由一个起始码(9ms),一个结果码(4.5ms),低8位地址码(9ms~18ms),高8位地址码(9ms~18ms),8位数据码(9ms~18ms)和这8位数据的反码(9ms~18ms)组成。
如果键按下超过108ms仍未松开,接下来发射的代码(连发代码)将仅由起始码(9ms)和结束码(2.5ms)组成。
3.2红外遥控初始化程序和主程序
红外遥控接收部分与发射部分初始化程序如图2.8、图2.10所示,红外遥控接收部分与发射部分主程序如图2.9、图2.11所示。
Y
图2.8 发射初始化程序流程图图2.9发射主程序流程图
红外遥控发射部分初始化程序,初始化程序主要是使单片机复位,即为将IO 口置于高电平状态,关闭遥控输出口P1.3口,选择定时器/计数器0方式二,自动重装初值。
红外遥控发射部分主程序,先调用初始化程序,再完成调用键盘程序。
系统完成键盘查询程序后,解码,执行相应的状态指示即显示LED 灯的亮灭。
开始
图
2.10 接收初始化流程图图2.11
接收主程序流程
图
红外遥控接收部分初始化程序,初始化程序主要使单片机复位,即为将IOP2口为高电平状态,开外部中断0,设置默认彩灯亮灭标志位。
红外遥控接收部分主程序,先调用初始化程序,初始化程序完毕,进入主程序循环状态。
程序在循环中主要任务是接收红外数据,处理后解码送去显示。
3.3红外遥控键盘扫描、红外发射程序
红外遥控键盘扫描程序流程图如图2.12所示,红外发射程序如图2.13所示。
键盘扫键过程:首先判断控制键是否按下,若有控制键按下则进行逐行扫描,按照P 口值查找键号。
最后按照键号转至相应的发射程序。
红外信号发射过程:首先是发射9MS 的引导码(4.5ms 高电平和4.5ms 低电平),接着发送8位用户码和八位用户反码,发完后发送8位数据码和8位数据反码。
在实践中,采用红外线遥控方式时,由于受遥控距离,角度等影响,使用效果不是很好,如采用调频或调幅发射接收码,可提高遥控距离,并且没有角度影响。
图2.12 键盘扫描程序流程图 图2.13发射程序流程图
3.4红外遥控接收部分外部中断程序
中断过程:首先判断两个下降沿之间的时间是否大于9ms ,若不到9ms ,则中断返回;若低电平大于9ms ,则接收并对下降沿计数,如果接收到了33个下降沿,说明一帧数据接收完了。
计数清零,并送去才处理。
Y
图2.14 外部中断0中断服务程序流程图
第四章系统调试
控制电路板的安装与调试在整个系统研制中占有重要位置,它是把理论付诸实践的过程,也是把纸面设计转变位实际产品的必经阶段。
对试验阶段的电路板的安装一般有两种方式即焊接方式和面包板插接方式。
使用面包板焊接更加方
便,容易更换线路和器件,而且可以多次使用。
但在多次使用的面包板中弹簧片会变松,弹性变差,容易造成接触不良,这是需要注意的。
实验和调试常用的仪器有:万用表、稳压电源、示波器、信号发生器等。
调试的主要步骤。
1.调试前不加电源的检查
对照电路图和实际线路检查连线是否正确,包括错接、少接、多接等;用万用表电阻档检查焊接和接插是否良好;元器件引脚之间有无短路,连接处有无接触不良,二极管、三极管、集成电路和电解电容的极性是否正确;电源供电包括极性、信号源连线是否正确;电源端对地是否存在短路(用万用表测量电阻)。
若电路经过上述检查,确认无误后,可转入静态检测与调试。
2.静态检测与调试
断开信号源,把经过准确测量的电源接入电路,用万用表电压档监测电源电压,观察有无异常现象:如冒烟、异常气味、手摸元器件发烫,电源短路等,如发现异常情况,立即切断电源,排除故障;
如无异常情况,分别测量各关键点直流电压,如静态工作点、数字电路各输入端和输出端的高、低电平值及逻辑关系、放大电路输入、输出端直流电压等是否在正常工作状态下,如不符,则调整电路元器件参数、更换元器件等,使电路最终工作在合适的工作状态;
对于放大电路还要用示波器观察是否有自激发生。
3.动态检测与调试
动态调试是在静态调试的基础上进行的,调试的方法地在电路的输入端加上所需的信号源,并循着信号的注射逐级检测各有关点的波形、参数和性能指标是否满
足设计要求,如必要,要对电路参数作进一步调整。
发现问题,要设法找出原因,排除故障,继续进行。
我们所设计的遥控器电路是采用码分制遥控方式,我们用示波器对发射电路输出端及接收电路输入端的信号波型的进行了检查,发现当按下不同的开关按钮时所显示的波型是不同的。
这说明了此电路是工作在正常状态的。
4.调试注意事项
(1)正确使用测量仪器的接地端,仪器的接地端与电路的接地端要可靠连接;(2)在信号较弱的输入端,尽可能使用屏蔽线连线,屏蔽线的外屏蔽层要接到公共地线上,在频率较高时要设法隔离连接线分布电容的影响,例如用示波器测量时应该使用示波器探头连接,以减少分布电容的影响。
(3)测量电压所用仪器的输入阻抗必须远大于被测处的等效阻抗。
(4)测量仪器的带宽必须大于被测量电路的带宽。
(5)正确选择测量点和测量
(6)认真观察记录实验过程,包括条件、现象、数据、波形、相位等。
(7)出现故障时要认真查找原因
课题设计总结
毕业设计是学生即将完成学业的最后一个重要环节,它既是对学校所学知识的全面总结和综合应用,又为今后走向社会的实际操作应用铸就了一个良好的开
端。
所以在此有必要对这次的毕业设计作一个系统的总结。
这次毕业设计,我选择了实做的题目,这不仅是对我的一种锻炼,也是对我大学三年所学知识的综合检查。
从开始设计到设计的完成,我感觉收获很多,不仅在理论上有了很大的升华,并且还在实践中锻炼了自己。
使自己成长了许多。
本文首先对整个系统的工作原理和实现方法进行了简单的介绍,给出了系统工作的整体框图。
在此基础上,介绍了系统设计用到的各个模块的功能特性,并进性了方案比较,选择出了最优越的方案。
在理论上对整个系统有一定了解的情况下,进行了系统模块的电路的设计,充分利用各方面的资料,发挥我所学的特长。
整个系统的开发过程是曲折的,首先在硬件设计上,由于以前所学课程有一定的基础,我多方查阅资料,不断的向老师、同学学习请教,以确保设计的电路系统完整,并能实现最完美的系统功能。
经过几个月学习,我设计出了各个部分的电路图,并实现了电路图的组合。
经过测试与修改,最终完善了硬件电路的设计,并能够比较理想的完成本次毕业设计功能——红外遥控电路。
对于软件设计,因为以前的编程经验不够,因此,在这方面花费了很多的精力和时间。
尽管过程很艰难,但是在真正意义上学到了知识,为以后的工作和学习积累了宝贵的经验。
在研制过程中注重先进、适用的原则,注重科技与应用结合,来用产、学、研结合,侧重于科研技术转化为生产力。
本系统经过了设计阶段、开发实现阶段以及最后的应用测试阶段。
经过2个月的努力,核心问题已经全部解决,所有功能均已基本实现,只是在通用性上还有待提高。
这次毕业设计的经历使我对51单片机的一些特征、性能,以及应用及原理有了深刻的了解,真正做到了学有所
得、学有所用,可以说获益匪浅。
但是,总的说来,由于我在理论和实践方面存在一定的不足,所以在设计思路和实现功能上难免有不足之处,请各位老师多多批评指正。
参考文献
[1] 军. 检测技术及其仪表. 中国轻工业
[2] 贺红娟等. 汇编语言程序设计教程. 清华大学
[3] 亮鹏. 自动控制技术. 北京工业大学
[4] 守义钟苏. 数字电子技术. 电子科技大学
[5] 周雪. 模拟电子技术. 电子科技大学
[6] 宏丽王静霞. 单片机基础教程. 人民邮电
[7] 林伸茂 8051单片机彻底研究经验篇.人民邮电
[8] 文涛 MCS-51单片机培训教程.电子工业
附录
发射模块程序:
//*************单片机红外发射******** #include<reg52.h>
sbit ir=P1^3;
sbit k1=P2^5;
sbit k2=P2^4;
sbit k3=P2^3;
sbit k4=P2^2;
sbit k5=P2^1;
unsigned int count, set_count;
bit irflag,keyflag;
unsigned char irsys[]={0x00,0xff};
unsigned char irdata,ircode; void delay(unsigned int a) {
unsigned char i;
while(--a!=0)
for(i=300;i>0;i--);
}
void keyscan()
{
/*if(k1==0)
{
delay(10);
if(k1==0)
{
keyflag=1;
while(!k1);
irdata=0x01;
}
}*/
if(k2==0)
{
if(k2==0)
{
keyflag=1;
while(!k2);
irdata=0x02;
}
}
if(k3==0)
{
delay(10);
if(k3==0)
{
keyflag=1;
while(!k3);
irdata=0x03;
}
}
if(k4==0)
{
if(k4==0)
{
keyflag=1;
while(!k4);
irdata=0x04;
}
}
if(k5==0)
{
delay(10);
if(k5==0)
{
keyflag=1;
while(!k5);
irdata=0x05;
}
}
}
void ir_sendbyte() //红外发送一个字节数据
{
unsigned char i;
for(i=0;i<8;i++) //发送8位数据
{
set_count=43; //发送编码中的0.56ms高电平
irflag=1;
count=0;
TR0=1;
while(count<set_count);
TR0=0;
if(ircode&0x01) set_count=130; //判断红外编码最低位,若为1则1.69ms的低电平
else set_count=43; //为0则0.565ms的低电平
irflag=0;
count=0;
TR0=1;
while(count<set_count);
TR0=0;
ircode=ircode>>1;
}
void ir_send()
{
set_count=346; //发送编码中的引导码(4.5ms高电平+4.5ms低电平)
irflag=1;
count=0;
TR0=1;
while(count<set_count);
TR0=0;
set_count=346; //发送编码中的4.5ms低电平
irflag=0;
count=0;
TR0=1;
while(count<set_count);
TR0=0;
ircode=irsys[0];
ir_sendbyte();
ircode=irsys[1];
ir_sendbyte();
ircode=irdata; //发送8位数据码
ir_sendbyte();
ircode=~irdata; //发送8位数据反码
ir_sendbyte();
set_count=43; //发送编码中的0.56ms高电平
irflag=1;
count=0;
TR0=1;
while(count<set_count);
TR0=0;
irflag=0;
/*delay(23); //延时23ms(编码中的23ms低电平)
set_count=346; //发送编码中的引导码(4.5ms高电平+4.5ms低电平)
irflag=1;
count=0;
TR0=1;
while(count<set_count);
TR0=0;
set_count=346;
irflag=0;
count=0;
TR0=1;
while(count<set_count);
TR0=0;*/
set_count=43;
irflag=1;
count=0;
TR0=1;
while(count<set_count);
TR0=0;
irflag=0;
delay(23);
}
void timer0_init()
{
EA=1;
TMOD=0x02; //定时0 8位自动重装模式
ET0=1;
TH0=0xe6; //定时13us,38K红外矩形波,晶振24M TL0=0xe6;
}
void main()
{
timer0_init();
count=0;
ir=0;
irflag=0;
while(1)
{
keyscan();
if(keyflag)
{
delay(10);
ir_send();
delay(500);
keyflag=0;
delay(100);
}
}
}
void timer0() interrupt 1
{
count++;
if(irflag==1)
ir=~ir; //有发射标志,则发射38khz的矩形波
else
ir=0;
}
接收模块程序
//************红外接收******************** #include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit led1=P2^1;
sbit led2=P2^2;
sbit led3=P2^3;
uchar irtime;
uchar startflag;
uchar irdata[33];
uchar bitnum;
uchar irreceok;
uchar ircode[4];
uchar irprosok,flag;
void delay(uint z)
{
uint i,j;
for(i=z;i>0;i--)
for(j=120;j>0;j--); }
void timer0init()
{
TMOD=0x02;
TH0=0x00;
TL0=0x00;
ET0=1;
EA=1;
TR0=1;
}
void int0init()
{
IT0=1;
EX0=1;
EA=1;
}
void irpros()
{
uchar k,i,j;
uchar value;
k=1;
for(j=0;j<4;j++)
{
for(i=0;i<8;i++)
{
value=value>>1;
if(irdata[k]>6)
{
value=value | 0x80;
}
k++;
if(k==33)
{
k=1;
}
}
ircode[j]=value;
}
irprosok=1; }
void display()
{
switch(ircode[2])
{
case 0x05:
led1=1;
led2=1;
led3=1;
break;
case 0x02:
led1=0;
led2=1;
led3=1;
break;
case 0x03:
led2=0;
led1=1;
led3=1;
break;
case 0x04:
led3=0;
led1=1;
led2=1;
break;
//case 0x01: 备用 }
}
void main()
{
timer0init();
int0init();
while(1)
{
if(irreceok)
{
irpros();
irreceok=0;
if(irprosok)
{
if(ircode[2]=~ircode[3])
{
display();
}
delay(5);
irprosok=0;
}
}
if(bitnum>33)
{
bitnum=0;
irreceok=1;
startflag=0;
flag=0;
}
}
}
void timer0 () interrupt 1
{
irtime++;
}
void int0 () interrupt 0
{
if(startflag)
{
if(irtime>31) //检测引导码
{
bitnum=0;
flag=1;
}
if(flag)
{
irdata[bitnum]=irtime;
irtime=0;
bitnum++;
}
}
else
{
startflag=1;
irtime=0;
}
}
致谢
毕业设计是我大学学习生活的最后一项学习任务,是对我大学三年学习的综合考核。
而也为了使我的综合素质技能可以有一个很大的提高,这次毕业设计,我选择了郭泉江老师所带的这个比较具有实用性的有意思的课题——红外遥控电路设计。
在为期两个多月的毕业设计过程中,我不仅较为系统的复习了以前学的知识,而且又学习了许多新知识,使我的知识结构更加系统化,也更加完善。
同时,也提高了我独立分析问题、解决问题的能力。
本次毕业设计能够顺利地完成,首先要感谢我的指导老师凌云老师。
凌老师严谨的治学态度,深厚的学术造诣以及忘我的工作精神给我留下了深刻的印象。
凌老师的严格要求和孜孜不倦的教导是我完成这次毕业设计的重要保证,他给予了我很大的帮助和支持,在课题研究期间,凌老师提供了很多指导性的意见,对存在的问题给予细心的分析并提出许多宝贵的意见,使我受益匪浅。
在此谨向导师表示衷心的感谢!同时我要感谢给予我帮助和支持的同组同学们,感谢信息工
程系的老师为我们做毕业设计提供的各方面的帮助!
同时,我要感谢我的母校——理工大学,特别是在我即将踏上工作岗位时,给了我这样一个锻炼、学习的机会,使我加深了对以前知识的理解,拓宽了知识面,也提高了我对所学知识的综合的应用能力。
在整个设计制作过程当中,我感觉收获非常大,我获得的不仅是理论上的收获,还有实践中的丰收,同时还有的就是同学们之间的合作精神。
在此,祝愿我院日后蓬勃发展,成为一所独具风格的综合性大学。
祝愿母校的将来更美好!
最后,我要再一次感谢所有在此期间帮助过我的人,我衷心的祝福你们!
09应用电子班
2012年4月理工大学校区。