单片机遥控系统应用设计15文档格式.docx
《单片机遥控系统应用设计15文档格式.docx》由会员分享,可在线阅读,更多相关《单片机遥控系统应用设计15文档格式.docx(21页珍藏版)》请在冰豆网上搜索。
单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域,单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,广泛应用于仪器仪表中,结合不同类型的传感器,可实现诸如电压、功率、频率、湿度、温度、流量、速度、厚度、角度、长度、硬度、元素、压力等物理量的测量。
采用单片机控制使得仪器仪表数字化、智能化、微型化,且功能比起采用电子或数字电路更加强大。
第2章功能要求
单片机遥控应用系统要求用单片机作为控制芯片制作一个遥控器,另一个单片机控制系统能被遥控操作,本单片机制作十五路电器遥控器,可以分别控制十五个电器的电源开关,并且可对一路电灯进行亮度的遥控。
采用脉冲个数编码,4×
8键盘开关,可扩充到对32个电器的控制。
第3章方案论证
目前市场上一般设备系统采用专用的遥控编码及解码集成电路。
此方案具有制作简单容易等特点,但由于功能键数及功能受到特定的限制,只适合用于某一专用电器产品的应用,应用范围受到限止。
而采用单片机进行遥控系统的应用设计,具有编程灵活多样、操作码个数可随意设定等优点。
本单片机遥控应用系统采用红外线脉冲个数编码、单片机软件解码实现了对十五个小灯的开关控制,其中一路为一个交流电灯,可以进行亮度的遥控。
图3.1和图3.2为该应用系统的遥控器设计原理框图及接收控制系统设计原理框图。
图3.1
单片机遥控器设计原理框图
图3.2接收控制系统设计原理框图
第4章系统硬件电路的设计
单片机遥控应用系统电路分遥控发射器电路和遥控接收系统电路。
4.1遥控发射器的电路设计
图4.1.1为该系统遥控发射器的电路原理图,其中P1口和P0口作键扫描端口,具有32个功能操作键。
第(9)脚为单片机的复位脚,采用简单的RC上电复位电路,(15)脚作为红外线遥控码的输出口,用于输出40KHz载波编码。
(18)、(19)脚接12M晶振。
P0口需接上拉电阻。
图4.1.1遥控发射器电原理图
1AT89C52单片机
遥控电路的主芯片采用美国ATMEL公司的AT89C52FLASH单片机,它具有8K字节可重编程闪速存储器,使用5V电源电压、256×
8位的内部RAM,3个16位定时器/计数器,7个中断源以及空闲和掉电方式等功能。
遥控器如用AT89C52中的LV低电压系列,可用2节1.5V电池供电。
2行列式操作键盘
行列式操作键盘又称为矩阵式键盘。
用I/O线组成行、列结构,按键设置在行列的交点上,行列线分别连接到按键开关的两端,键盘中有无按键按下是由列线送入扫描字、行线读入行线状态来判断的,有键按下时通过查键并执行键功能程序。
3红外线发射电路
遥控器信息码由AT89C52单片机的定时器1中断产生40KHZ红外线方波信号,由P3.5口输出,经过三极管9013放大,由红外线发射管发送。
电阻R1的大小可以改变发射距离。
4.2遥控接收系统的电路设计
图4.2.1为该遥控系统的接收器主电路原理图,控制系统主要由AT89C52单片机、+5V电源电路、红外接收电路、50HZ交流电过零检测电路、电灯亮灭及调光控制电路等组成。
遥控器发射的红外信号经红外接收处理传送给单片机,单片机根据不同的信息码进行对十五个端口的控制操作。
其中P1.1—P1.2作为数码管的二进制数据输出,显示数字为0—7,7代表最亮,0代表最暗,采用4511集成块硬件译码显示数值。
P0.0—P0.7以及P2.0—P2.6作为15个电器的电源控制输出,接口可以用继电器或可控硅,在本电路中,P2.0口控制一个电灯的亮灭。
P2.7为可控硅调光灯的调光脉冲输出。
第10脚P3.0口为50HZ交流市电相位基准输入,第(12)脚为中断输入口,P3.1用于接收红外遥控码输入信号。
图4.2.1十五路电器控制器电原理图
1.电源电路
电源电路由桥式整流、虑波电容、7805稳压器及电源指示灯组成。
交流电经过桥式整流变成直流电,再经过电容滤波,7805集成稳压器稳压成为稳定的+5V电源,用一个发光二极管指示灯指示电源状态,图4.2.2为电源电路图。
图4.2.2控制器电源电路图。
2.50HZ交流电过零检测电路
交流电过零检测电路如图4.2.3所示。
图4.2.3交流电过零检测电路图
过零检测电路由桥式整流电路和2个9013三极管组成。
当UA=UBE>
=0.7V时,T1三极管导通,T2三极管截止,B点为低电平,C点(P3.0)为高电平;
当UA=UBE<
0.7V时,T1三极管截止,T2三极管导通,B点变高电平,C点(P3.0)为低电平。
50HZ交流电过零检测电路图中各点电压波形如图4.2.4所示。
图4.2.4交流电过零检测电路图中各点电压波形图
3.电灯开关及亮度控制电路
图4.2.5为可控硅光亮控制电路设计原理图。
电灯的开关受P2.0口控制,也可由可控硅的导通角控制。
AT89C52产生可控硅控制的移相脉冲,移相角的改变实现导通角的改变,即当移相角较大时,可控硅的导通角较小,输出电压较低,电灯较暗;
当移相角较小时,可控硅的导通角较大,输出电压较高,电灯较亮。
图4.2.5可控硅光亮控制电路图
当AT89C52的P2.7位低电平时,9012三极管导通,三极管集电极电流驱动光电耦合器导通,使可控硅的G极产生脉冲信号触发可控硅导通;
当AT89C52的P2.7位高电平时,9012三极管、光电耦合器、可控硅都处于截止状态。
可控硅导通角控制电路中各点波形如图4.2.6所示。
图4.2.6可控硅导通角控制电路中各点波形图
第5章系统程序的设计
5.1系统功能的实现方法
(1)遥控码的编码格式
遥控采用脉冲个数编码,不同的脉冲个数代表不同的码。
最小为2个脉冲,最大为17个脉冲。
为了使接收可靠,第一位码宽为3mS,其余为1mS,遥控码数据帧间隔大于10mS(图5.1.1)。
图5.1.1P3.5端口输出编码波形图
(2)遥控码的发射
当某个操作按键按下时,单片机先读出键值,然后根据键值设定遥控码的脉冲个数,再调制成40KHZ方波由红外线发光管发射出去。
P3.5端口的输出调制波如图8.10。
(3)数据帧的接收处理
当红外线接收器输出脉冲帧数据时,第一位码的低电平将启动中断程序,实时接收数据帧。
在数据帧接收时,将对第一位(起始位)码的码宽进行验证,若第一位低电平码的脉宽小于2mS,将作为错误码处理,当间隔位的高电平脉宽大于3mS时,结束接收,然后根据累加器A中的脉冲个数,执行相应输出口的操作。
图5.1.2为红外线接收器输出的一帧遥控码波形。
图5.1.2红外线接收器输出的一帧遥控码波形图
5.2遥控发射及接收控制程序设计流程图
图5.2.1遥控发射器主程序、键扫程序、遥控码发射程序流程图
图5.2.2遥控接收器主程序、中断程序流程图
第6章调试及性能分析
6.1调试
系统在完成硬件的检查后主要进行软件的调试,对遥控器的调试主要是用示波器观察能否在遥控接收器中输出图8.11所示的波形,另外调整发射电阻的大小可以改变红外线发射的作用距离。
电灯亮度控制系统的调试主要是对可控硅延时时间的调整,电灯按0-7共八档进行亮度的调整,控制延时经调试后确定如下:
最最暗时的移相角控制延时:
256μS×
26H=9728μS
最暗移相角控制延时:
256μS×
1CH=7168μS
次暗移相角控制延时:
19H=6400μS
中间亮移相角控制延时:
16H=5632μS
次亮移相角控制延时:
12H=4608μS
最亮移相角控制延时:
0EH=3584μS
遥控接收头在安装时应注意尽量靠表面,以扩大接收的角度,不同厂家的遥控接收头的灵敏度也不一致,应选择确定。
6.2性能指标
调试后系统性能指标测试如下:
1.最大遥控距离:
10米
2.发射接收角:
水平最大90度
3.遥控器发射时工作电流:
8mA
4.遥控器静态电流:
0.6mA
5.电灯最亮电压:
交流200V
6.电灯最暗电压:
交流10V
采用红外线遥控方式时,距离、角度等使用效果受一定的限制,如果采用调频或调幅发射接收,则发射距离会更远,接收将不受角度的影响。
本单片机遥控编码及解码方案适合一切需要应用到遥控的电器系统,是自行设计带遥控功能的控制系统首选理想方案。
第7章控制源程序清单
以下是遥控器及接收系统单片机控制C源程序清单:
/*********************************************************************/
//
send.c
遥控发射器
LRM2004.10.22
//使用AT89C52单片机,12MHZ晶振,
//
//#pragmasrc(E:
\remote.asm)
#include"
reg51.h"
intrins.h"
//_nop_();
延时函数用
#defineucharunsignedchar
#defineuintunsignedint
#definekey0P0
//键列线
#definekey1P1
//键行线
sbit
remoteout=P3^5;
//遥控输出口
uinti,j,m,n,k,s;
ucharkeyvol;
//键值存放
uchar
codekeyv[8]={1,2,4,8,16,32,64,128};
////
/*********1毫秒延时程序**********/
delay1ms(uintt)
{
for(i=0;
i<
t;
i++)
for(j=0;
j<
120;
j++)
;
}
/***********初始化函数**********/
clearmen()
remoteout=0;