红外线相关设计.docx
《红外线相关设计.docx》由会员分享,可在线阅读,更多相关《红外线相关设计.docx(12页珍藏版)》请在冰豆网上搜索。
红外线相关设计
近年来随着计算机在社会领域的渗透,单片机的应用正在不断地走向深入,同时带动传统控制检测日新月益更新。
传统的遥控器大多数采用了无线电遥控技术,但是随着科技的进步,红外线遥控技术的成熟,红外也成为了一种被广泛应用的通信和遥控手段。
继彩电、录像机之后,在录音机、音响设备、空凋机以及玩具等其它小型电器装置上也纷纷采用红外线遥控。
工业设备中,在高压、辐射、有毒气体、粉尘等环境下,采用红外线遥控不仅完全可靠而且能有效地隔离电气干扰。
由于红外线抗干扰能力强,且不会对周围的无线电设备产生干扰电波,同时红外发射接收范围窄,安全性较高。
红外遥控虽然被广泛应用,但各产商的遥控器不能相互兼容。
当今市场上的红外线遥控装置一般采用专用的遥控编码及解码集成电路,由于其灵活性较低,应用范围有限。
所以采用单片机进行遥控系统的应用设计,遥控装置将同时具有编程灵活、控制范围广、体积小、功耗低、功能强、成本低、可靠性高等特点,因此采用单片机的红外遥控技术具有广阔的发展前景。
本设计主要研究并设计一个基于单片机的红外接收系统,并实现对八路开关的控制。
控制系统主要是由MCS-51和52系列单片机、电源电路、红外发射电路、红外接收电路、LCD显示电路等部分组成,单片机编码发射遥控信号经红外接收处理传送给单片机,单片机根据不同的信息码控制八路LED发光二极管各个状态,并完成相应的状态指示。
红外遥控的特点是不影响周边环境、不干扰其它电器设备。
由于其无法穿透墙壁,故不同房间的家用电器可使用通用的遥控器而不会产生相互干扰;电路调试简单,只要按给定电路连接无误,一般不需任何调试即可投入工作;编解码容易,可进行多路遥控。
信息可以直接通过红外光进行调制传输,例如,信息直接调制红外光的强弱进行传输,也可以用红外线产生一定频率的载波,再用信息对载波进行调制,接收端去掉载波,取到信息。
从信息的可靠传输来说,这就是我们今天看到的大多数红外遥控器所采用的方法。
设计一:
红外对管发射接收装置,可配合步进电机做相关设计,目前多应用于防盗、自动反馈等地方。
设计二:
红外遥控器
红外发射电路
(1)红外线遥控制系统的原理框图:
将指令脉冲编码信号调制在载波振荡器产生的载波上(也称脉码调制),然后用这脉码调制信号去驱动红外发光二极管,以发出经过调制的红外光波,其红外遥控系统电路如图3-5所示。
图3-5红外遥控系统电路框图
(2)红外编码原理:
通常,红外遥控器将遥控信号(二进制脉冲码)调制在38KHz的载波上,经缓冲放大后送至红外发光二极管,转化为红外信号发射出去。
二进制脉冲码的形式有多种,其中最为常用的是PWM码(脉冲宽度调制码)和PPM码(脉冲位置调制码)。
前者以宽脉冲表示1,窄脉冲表示0。
后者脉冲宽度一样,但是码位的宽度不一样,码位宽的代表1,码位窄的代表0。
脉宽为0.56ms、间隔0.565ms、周期为1.125ms的组合表示二进制的“0”;以脉宽为0.56ms、间隔1.69ms、周期为2.25ms的组合表示二进制的“1”。
如图3-6示。
本课题是以PPM码(脉冲位置调制码)对红外数据的发送进行论证。
图3-6指令脉冲图
遥控编码脉冲信号由引导码、系统码、系统反码、功能码、功能反码等信号组成。
引导码也叫起始码,由宽度为9ms的高电平和宽度为4.5ms的低电平组成(不同的红外家用设备在高低电平的宽度上有一定区别),用来标志遥控编码脉冲信号的开始。
如图3-7所示。
图3-7信号引导码图
系统码也叫识别码,它用来指示遥控系统的种类,以区别其它遥控系统,防止各遥控系统的误动作功能码也叫指令码,它代表了相应的控制功能,接收机中的可根据功能码的数值完成各种功能操作。
系统反码与功能反码分别是系统码与功能码的反码,反码的加入是为了能在接收端校对传输过程中数据是否产生差错。
脉冲位置表示的“0”和“1”组成的32位二进制码前16位控制指令,控制不同的红外遥控设备。
而不同的红外家用电器又有不同的脉冲调控方式,后16位分别是8位的功能码和8位的功能反码。
串行数据码时序图如3-8所示。
图3-8串行数据码时序图
将要发送的指令脉冲编码信号调制在38KHz的载波上,可以增加信号的抗干扰能力,提高信号传输效率。
信号调制时序如3-9所示。
图3-9信号调制图
(3)红外发射二极管的主要技术参数:
SIR333是GaAlAs红外发射二极管,其特点 是体积小、功耗低、高发射强度、高可靠性、发射角度45°、SIR333管子直径5mm。
广泛应用于仪器、仪表、电气设备近距离红外数据传输、电视机、空调机等家用电器红外遥控信号发射其红外发射距离为8--10米。
(4)红外数据发射电路的设计:
在红外数据发射过程中,由于发送信号时的最大平均电流需几十mA(对应mW级发射功率),所以需要三极管放大后去驱动红外光发射二极管(又称电光二极管)。
软件编程将数据从P3口第6脚(P37)将数据输出。
T0定时产生38KHz载波信号。
红外数据射发射电路图如3-10所示。
图3-10红外数据发射电路
红外接收电路
LT0038是用于红外遥控接收的小型一体化接收头,集成红外线的接收、放大、解调,不需要任何外接元件,就能完成从红外线接收到输出与TTL电平信号兼容的所有工作,而体积和普通的塑封三极管大小一样,它适合于各种红外线遥控和红外线数据传输,中心频率38.0kHz。
接收器对外只有3个引脚:
OUT、GND、VCC与单片机接口非常方便,如图3-11所示。
图3-11LT0038外型图
1脚接电源(+VCC),2脚GND接系统的地线(0V),3脚脉冲信号输出,经非门U6缓冲与P24的判断信号进行逻辑与使得进入INT0的信号恰好是红外数据发射电路输出端P25的相反相信号,只要检测到INT0信号下降沿从而测出控制指令的功能。
LT0038内部结构框图
图3-12LT0038内部结构工作流程
LT0038接收原理
红外线接收是把遥制发送的数据(已调信号)转换成一定格式的控制指令脉冲(调制信号、基带信号),是完成红外线的接收、放大、解调,还原成发射格式(高、低电位刚好相反)的脉冲信号。
这些工作通常由一体化的接收头来完成,输出TTL兼容电平。
最后通过解码把脉冲信号转换成数据,从而实现数据的传输。
图3-13是一个红外线接收电路框图。
图3-13红外接收及控制电路框图
红外编码子程序
//===================================
//hongwai.c
//writer:
莫熙乐2010年4月
//===================================
voidsendirdata()
{
uchars=0,user=0,shuju=0,hc=0;
TR0=1;
/***发送引导码******************************************/
endcount=700;//发送9ms起始码的高电平
p3_7=1;
count=0;
do{}while(countendcount=350;//发送4.5ms的结果码低电平
count=0;
p3_7=0;
do{}while(count/***发送系统码*******************************************/
user=system;
for(s=0;s<=7;s++)
{
endcount=30;count=0;//发送公共的0.56ms高电平
p3_7=1;
do{}while(counthc=user&wy[s];//发送脉冲间距
if(hc==0){endcount=30;count=0;}
else{endcount=120;count=0;}
p3_7=0;
do{}while(count}
/***发送系统反码******************************************/
user=system;
for(s=0;s<=7;s++)
{
endcount=30;count=0;//发送公共的0.56ms高电平
p3_7=1;
do{}while(counthc=user&wy[s];//发送脉冲间距
if(hc==0){endcount=120;count=0;}
else{endcount=30;count=0;}
p3_7=0;
do{}while(count}
/***发送数据码********************************************/
shuju=keyvalue;
for(s=0;s<=7;s++)
{
endcount=30;count=0;//发送公共的0.56ms高电平
p3_7=1;
do{}while(counthc=shuju&wy[s];//发送脉冲间距
if(hc==0){endcount=30;count=0;}
else{endcount=120;count=0;}
p3_7=0;
do{}while(count}
/***发送数据反码******************************************/
shuju=keyvalue;
for(s=0;s<=7;s++)
{
endcount=30;count=0;//发送公共的0.56ms高电平
p3_7=1;
do{}while(counthc=shuju&wy[s];//发送脉冲间距
if(hc==0){endcount=120;count=0;}
else{endcount=30;count=0;}
p3_7=0;
do{}while(count}
红外编码子程序
//===========================================================
//函数名称:
voidintr0_int()
//函数功能:
外中断0中断服务函数
//===========================================================
voidintr0_int()interrupt0using2//外中断0用于判断脉冲个数
{
if(!
First_INT)//第一次外中断来时设置
{
time=0;
TR0=1;
First_INT=1;
}
else
{
if(time>330)//判断起始码,起始码来时设置&&time<700
{
Star_Flag=1;
CodeNum=0;
time=0;
}
elseif(Star_Flag==0)//没有接收到起始码,放弃
{
First_INT=1;
time=0;
}
if(Star_Flag&&time!
=0)//开始接收
{
if((time>=30)&&(time<60))Code[CodeNum]=0;//计数值设置
elseif((time>=100)&&(time<150))Code[CodeNum]=1;//计数值设置
time=0;//计数值清零,以对下一个脉冲宽度进行计时
CodeNum++;//码字计数器加1
if(CodeNum>=33)//脉冲个数判断,共32个
{
TR0=0;
CodeNum=0;
Star_Flag=0;
First_INT=0;
flag=1;
}
}
}
}
LCD1602初始化程序
//==========================================================================================
voidlcd_init(void)
{LCD_DATA=0;
WriteCommandLcd(0x38);//工作方式初始化
WriteCommandLcd(0x38);//显示模式设置
WriteCommandLcd(0x08);//关闭显示
WriteCommandLcd(0x01);//显示清屏
WriteCommandLcd(0x06);//显示光标移动设置
WriteCommandLcd(0x0c);//显示开及光标移动设置
}