红外线相关设计Word文档格式.docx
《红外线相关设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《红外线相关设计Word文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
红外对管发射接收装置,可配合步进电机做相关设计,目前多应用于防盗、自动反馈等地方。
设计二:
红外遥控器
红外发射电路
(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(count<
endcount);
endcount=350;
//发送4.5ms的结果码低电平
p3_7=0;
/***发送系统码*******************************************/
user=system;
for(s=0;
s<
=7;
s++)
{
endcount=30;
count=0;
//发送公共的0.56ms高电平
p3_7=1;
do{}while(count<
hc=user&
wy[s];
//发送脉冲间距
if(hc==0){endcount=30;
}
else{endcount=120;
p3_7=0;
}
/***发送系统反码******************************************/
hc=user&
if(hc==0){endcount=120;
else{endcount=30;
}
/***发送数据码********************************************/
shuju=keyvalue;
hc=shuju&
/***发送数据反码******************************************/
{
}
//===========================================================
//函数名称:
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;
if(Star_Flag&
time!
=0)//开始接收
if((time>
=30)&
(time<
60))Code[CodeNum]=0;
//计数值设置
elseif((time>
=100)&
150))Code[CodeNum]=1;
//计数值清零,以对下一个脉冲宽度进行计时
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(0x08);
//关闭显示
WriteCommandLcd(0x01);
//显示清屏
WriteCommandLcd(0x06);
//显示光标移动设置
WriteCommandLcd(0x0c);
//显示开及光标移动设置