光电检测系统课程设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
********
光电系统设计与检测说明书
电子照片
(证件照)
题目红外遥控设计
系(部)******
专业(班级)******
姓名****
学号20100411**
页脚内容1
指导教师******
起止日期13年6月3日6月15日
长沙学院课程设计鉴定表
页脚内容2
页脚内容3
10级光电检测课程设计任务书
系(部):电子与通信工程系专业:光电指导教师: 刘莉孙利平谭志光谢志宇2013-6-8
页脚内容4
页脚内容5
页脚内容6
摘要:
很多电器都采用红外遥控,那么红外遥控的工作原理是什么呢?本文将介绍其原理和设计方法。
红外线遥控就是利用波长为0.76~1.5μm之间的近红外线来传送控制信号的。
常用的红外遥控系统一般分发射和接收两个部分。
红外遥控常用的载波频率为38kHz,这是由发射端所使用的455kHz晶振来决定的,在发射端要对晶振进行整数分频,分频系数一般取12,所以455kHz÷12≈37.9 kHz≈38kHz。
也有一些遥控系统采用36kHz、40kHz、56kHz等,一般由发射端晶振的振荡频率来决定。
接收端的输出状态大致可分为脉冲、电平、自锁、互锁、数据五种形式。
页脚内容7
关键词:80c51单片机、红外发光二极管、晶振
目录
页脚内容8
1、绪论 (10)
2、红外遥控器 (11)
2.1、基本原理及应用 (11)
2.2、红外遥控发射部分 (13)
2.3、红外遥控接收部分 (17)
2.4、系统设计 (17)
3、设计思路 (19)
4、设计成果展示 (19)
5、总结 (21)
6、参考文献: (21)
附录1: (22)
页脚内容9
1、绪论
人的眼睛能看到的可见光按波长从长到短排列,依次为红、橙、黄、绿、青、蓝、紫。
其中红光的波长范围为0.62~0.76μm;紫光的波长范围为0.38~0.46μm。
比紫光波长还短的光叫紫外线,比红光波长还长的光叫红外线。
红外线遥控就是利用波长为0.76~1.5μm之间的近红外线来传送控制信号的。
发射部分的主要元件为红外发光二极管。
它实际上是一只特殊的发光二极管,由于其内部材料不同于普通发光二极管,因而在其两端施加一定电压时,它便发出的是红外线而不是可见光。
目前大量使用的红外发光二极管发出的红外线波长为940nm左右,外形与普通5发光二极管相同,只是颜色不同。
红外发光二极管一般有黑色、深蓝、透明三种颜色,判断红外发光二极管好坏的办法与判断普通二极管一样:用万用表电阻挡量一下红外发光二极管的正、反向电阻即可。
在实际应用中要给红外接收二极管加反向偏压,它才能正常工作,亦即红外接收二极管在电路中应用时是反向运用,这样才能获得较高的灵敏度。
红外接收二极管一般有圆形和方形两种。
由于红外发光二极管的发射功率一般都较小(100mW左右),所以红外接收二极管接收到的信号比较微弱,因此就要增加高增益放大电路。
前些年常用μPC1373H、CX20106A等红外接收专用放大电路。
最近几年不论是业余制作还是正式产品,大多都采用成品红外接收头。
成品红外接收头的封装大致有两种:一种采用铁皮屏蔽;一种是塑料封
页脚内容10
装。
均有三只引脚,即电源正(VDD)、电源负(GND)和数据输出(VO或OUT)。
红外接收头的引脚排列因型号不同而不尽相同,可参考厂家的使用说明。
成品红外接收头的优点是不需要复杂的调试和外壳屏蔽,使用起来如同一只三极管,非常方便。
但在使用时注意成品红外接收头的载波频率。
2、红外遥控器
2.1、基本原理及应用
红外线的特点人的眼睛能看到的可见光,若按波长排列,依次(从长到短)为红、橙、黄、绿、青、蓝、紫,红光的波长范围为0.62μm~0.7μm,比红光波长还长的光叫红外线。
红外线遥控器就是利用波长0.76μm~1.5μm之间的近红外线来传送控制信号的。
红外线的特点是不干扰其他电器设备工作,也不会影响周边环境。
电路调试简单,若对发射信号进行编码,可实现多路红外遥控功能。
红
页脚内容11
外线发射和接收人们见到的红外遥控系统分为发射和接收两部分。
发射部分的发射元件为红外发光二极管,它发出的是红外线而不是可见光。
常用的红外发光二极管发出的红外线波长为940nm 左右,外形与普通φ5mm 发光二极管相同,只是颜色不同。
一般有透明、黑色和深蓝等三种。
判断红外发光二极管的好坏与判断普通二极管一样的方法。
单只红外发光二极管的发射功率约100mW。
红外发光二极管的发光效率需用专用仪器测定,而业余条件下,只能凭经验用拉距法进行粗略判定。
接收电路的红外接收管是一种光敏二极管,使用时要给红外接收二极管加反向偏压,它才能正常工作而获得高的灵敏度。
红外接收二极管一般有圆形和方形两种。
由于红外发光二极管的发射功率较小,红外接收二极管收到的信号较弱,所以接收端就要增加高增益放大电路。
然而现在不论是业余制作或正式的产品,大都采用成品的一体化接收头。
红外线一体化接收头是集红外接收、放大、滤波和比较器输出西安科技大学高新学院毕业论文- 2 - 等的模块,性能稳定、可靠。
所以,有了一体化接收头,人们不再制作接收放大电路,这样红外接收电路不仅简单而且可靠性大大提高。
红外遥控器由于受遥控距离、角度等影响,使用效果不是很好,如采用调频或调幅发射接收编码,则可提高遥控距离,并且没有角度影响。
红外遥控发射和接收模块可以用在室内红外遥控中,它不影响周边环境、不干扰其它电器设备。
由于其无法穿透墙壁,所以不同房间的家用电器可使用通用遥控器而不会产生相互干扰;电路调试简单,只要按给定电路连接无误,一般不需任何调试即可投入工作;编解码容易,可进行多路遥控。
现在红外遥控在家用电器、室内近距离遥控中得到了广泛的应用。
另外模块还可以用在其他红外遥控系统中,应用前景十分广阔。
页脚内容12
通用红外遥控系统由发射和接收两大部分组成,应用编/解码专用集成电路芯片来进行控制操作,如图1所示。
发射部分包括键盘矩阵、编码调制、LED红外发送器;接收部分包括光、电转换放大器、解调、解码电路。
以下详细说明
2.2、红外遥控发射部分
红外遥控系统由发射和接收两大部分组成,系统采用编/解码专用集成电路和单片机芯片来进行控制操作。
发射系统设计的电路由如下的几个基本模块组成:直流稳压电源,红外发射电路。
系统框图如图2所示:、
图2
主要芯片——单片机介绍
同一般微处理器的89S52 的控制器也由指令寄存器IR 。
指令译码器ID 。
页脚内容13
定时及控制逻辑电路和程序计数器PC 等组成。
程序计数器PC 是一个16 为的计数器(注:PC 不属于特殊功能寄存器SFR 的范畴)。
他总是存放着下一个要取得指令的16 位存储单元地址。
也就是说,CPU 总是把PC 的内容作为地址,从内存中取出指令码或含在指令中的操作数。
因此,每当取完一个字节后,PC的内容自动加1 ,为取下一个字节作好准备。
只有在执行转移子程序调用指令和中断响应是例外,那时PC 的内容不加1 ,而是指令或中断响应过程自动给PC 置入新的地址。
单片机上电或复PC 自动清0 ,即装入地址0000H ,这就保证了单片机上电或复位后,程序从0000H 地址开始执行。
指令寄存器1R 保存当前正在执行的一条指令。
执行一条指令,先要把他从程序存储器取到指令存储器中。
指令内容含操作码和地址码,操作码送往指令译码器ID,并形成相应指令的微操作信号。
地址码送往操作数地址形成实际的操作数地址。
定时与操作是微处理器的核心部件,他的任务是控制取指令` 执行指令` 存取操作数或运算结果等操作,向其他部件发出各种微操作控制信号,协调各部件的工作。
80C51单片机内设有振荡电路,只需外接石英晶体和频率微调电容就可产生内部时钟信号。
2AT89S52的引脚
VCC : 电源
GND: 接地
P0 口:P0口是一个8位漏极开路的双向I/O口。
作为输出口,每位能驱动8个TTL逻辑电平。
对P0端口写“1”时,引脚用作高阻抗输入。
当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。
在这种模式下,P0具有内部上拉电阻。
页脚内容14
在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。
程序校验时,需要外部上拉电阻。
P1 口:P1 口是一个具有内部上拉电阻的8 位双向I/O 口,p1 输出缓冲器能驱动4 个TTL 逻辑电平。
对P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和时器/计数器2的触发输入(P1.1/T2EX),具体如下表所示。
在flash编程和校验时,P1口接收低8位地址字节。
引脚号第二功能:
P1.0 T2(定时器/计数器T2的外部计数输入),时钟输出
P1.1 T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制)
P1.5 MOSI(在系统编程用)
P1.6 MISO(在系统编程用)
P1.7 SCK(在系统编程用)
P2 口:P2 口是一个具有内部上拉电阻的8 位双向I/O 口,P2 输出缓冲器能驱动4 个TTL 逻辑电平。
对P2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
页脚内容15
在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX @DPTR)时,P2 口送出高八位地址。
在这种应用中,P2 口使用很强的内部上拉发送1。
在使用8位地址(如MOVX @RI)访问外部数据存储器时,P2口输出P2锁存器的内容。
在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。
P3 口:P3 口是一个具有内部上拉电阻的8 位双向I/O 口,p2 输出缓冲器能驱动4 个
TTL 逻辑电平。
对P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。
红外发射电路图
遥控发射通过键盘,每按下一个键,即产生具有不同的编码数字脉冲,这种代码指令信号调制在40KH z 的载波上,激励红外光二极管产生不同的脉冲,通过空间的传送到受控机的遥控接收器。
P1 口作为按键部分,P3.5 口作为发射部分,然后用三极管的放大驱动红外发射。
电路如下图所示。
页脚内容16
2.3、红外遥控接收部分
1、接收部分系统框图:
其中显示部分采用七段数码管显示。
2.4、系统设计
1、摇控码的编码格式
采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合二进制的“1”,其波形如图4所示。
图4 遥控码的“1”和“0”
页脚内容17
红外遥控发射芯片采用PPM 编码方式,当发射器按键按下后, 将周期性地发出同一种32位二进制码,周期约为108ms 的编码脉冲。
遥控编码脉冲由前导码、16 位地址码(8 位地址码、8 位地址码的反码)和16 位操作码(8 位操作码、8 位操作码的反码)组成。
通过对用户码的检验,每个遥控器只能控制一个设备动作,这样可以有效地防止多个设备之间的干扰。
编码后面还要有编码的反码,用来检验编码接收的正确性,防止误操作,增强系统的可靠性。
前导码是一个遥控码的起始部分,由一个9ms 的高电平( 起始码) 和一个4. 5ms 的低电平( 结果码) 组成,作为接受数据的准备脉冲。
图5 发送一组完整的编码脉冲
上述“0”和“1”组成的32位二进制码经38khz的载频进行二次调制以提高发射频率,然后再通过红外发射二极管产生红外线向空间发射。
2、遥控码的发射
当某个操作按键按下时,单片机先读出键值,然后根据键值设定遥控码的脉冲个数,再调制成
40kHz 方波由红外线发光管发射出去。
P3.5 端口的输出调制波如图4 -1 所示。
3、数码帧的接收处理
当红外线接收器输出脉冲帧数据时,第一位码的低电平将启动中断程序实时接收数据帧。
在数据帧接收时,将对第一位码的码宽进行验证。
若第一位低电平码的的脉宽小于2ms ,将作为错误码处理。
当间隔位的高电平脉宽大于3ms 时,结束接收,然后根据累加器A 中的脉冲个数,执行相应输出口操作。
图4 -2 就是红外线接收器输出的一帧遥控码波形图。
页脚内容18
3、设计思路
本次课程设计的设计思路,采用单片机为载体,实现红外遥控器对显示数字的控制,通过键盘扫描读取遥控器上的按键并且进行判断。
遥控器上的数字与数码管显示数字完全一样,另外增设了“加”“减”键、消音键、遥控开关键。
键盘上其他按键显示为键上字母,通过单片机对该系统实施控制,源程序见附录。
本次设计的实验程序原本程序为单片机配套的红外遥控程序,在12864的显示屏上显示,经过一番改动变成数码管显示。
4、设计成果展示
红外遥控器:
页脚内容19
设计实物图:
页脚内容20
5、总结
一个星期的课程设计终于完了,此次的课程设计让我感触很多,不仅仅是知识上的学习和掌握,同时也让我明白了很多做人的道理。
在开始阶段,老师让我们了解一些基本知识,当自己照着学习指导上的内容完成了一个课题时那种心情很棒,我觉得自己尽自己的最大努力去设计课程项目,便能感到一种幸福。
由于是三人一组,这次课程设计中,我也有打酱油的时候,当然更重要的还是团队合作的,如果时间可以重来,我可能会认真的去学习和研究,也可能会自己独立的完成一个项目,我相信无论是谁看到自己做出的成果时心里一定会很兴奋。
此次实验让我明白了一个很深刻的道理:团队精神固然很重要,但人往往还是要靠自己的努力,自己亲身去经历,这样自己的心里才会踏实,学到的东西才会更多。
本次课程设计虽然不是自己亲手一字一句的设计出来的,但还是基本看懂了了它的设计思路和程序。
通过这些我复习了单片机相关的知识、软件。
这次课程设计是一个理论与实践结合的过程,让我明白理论知识往往是不够的,只有把所学的理论与实际行动相结合,才会提高自己的综合实际能力和独立思考能力。
在设计的过程中我们都会遇到很多的问题,但往往是一个小问题都会导致实验的失败,这就要我们花大量的时间去思索和改正,这是一个很艰辛的过程,但同时也是你收获最大的过程。
实验往往是一个苦中有乐的过程,我希望在以后的实验学习中自己能独立思考,同时也要认真去完成,这样既能学到知识,也能让自己的实践操作得到锻炼。
我要感谢我们这个团队的人员,他们帮我学到了很多,同时也付出了很多,也感谢老师的细心指导,让我们顺利的完成了课程设计。
6、参考文献:
1)/view/1870404.htm
2)/view/8c430d878762caaedd33d4c8.html
页脚内容21
3)/view/37c9611c59eef8c75fbfb3ae.html
4)/view/4843487d31b765ce05081453.html 附录1:
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
//此表为LED的字模// 0 1 2 3 4 5 6 7 8 9
R U E L H
uchar code
number[]={0xc0,0xf9,0xa4,0xb0,0x99,0x 92,0x82,0xf8,0x80,0x98,0x88,0xc1,0x86,0 xc7,0x89};
//函数声名
void delay(uchar x); //x*0.14MS
void delay1(int ms);
void beep();
sbit IRIN = P3^2; //红外接收器数据线
sbit BEEP = P1^5; //蜂鸣器驱动线
uchar IRCOM[7];
页脚内容22
uchar quite=1; //控制声音开关
/*************************** ******************************** ********/
main()
{P0=number[0];
IRIN=1;
//I/O口初始化
BEEP=1;
IE = 0x81; //允许总中断中断,使能INT0 外部中断
TCON = 0x01; //触发方式为脉冲负边沿触发
while(1);
}
/*************************** ******************************** *********/
void IR_IN() interrupt 0 using 0
{uchar j,k,N=0;
uchar p;
EX0 = 0;
//关掉外部中断防止中断的再次发生进入检测引导码阶段(9ms的低电平4.5ms的高电平)
delay(15);
if (IRIN==1)
{
EX0 =1;
//9ms的检测检测结束从新打开外部中断
return;
}
页脚内容23
while (!IRIN) //确认IR信号出现
{delay(1);}
//等IR变为高电平,跳过9ms的前导低电平信号。
for (j=0;j<4;j++) //收集四组数据
{
for (k=0;k<8;k++) //每组数据有8位
{
while (IRIN)
//等IR 变为低电平,跳过4.5ms的引导高电平信号。
{delay(1);}
while (!IRIN)
//等IR 变为高电平
{delay(1);}
while (IRIN)
//计算IR高电平时长(0和1的低电平的时长一样的,只要判断高电平时长超过0.56ms并小于1.12ms为1否则为0)
{
delay(1);
//0.14ms计数过长自动离开。
N++;
if (N>=30)
{
EX0=1;
return;
}
//高电平计数完毕
}
IRCOM[j]=IRCOM[j] >> 1; //数据最高位补“0”
页脚内容24
if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;} //高电平持续时间大于1.12ms则数据最高位补“1”
N=0;
}
}
/*
;===================== ======
;***** 红外遥控器键值表****
; 45 46 47
; 44 40 43
; 07 15 09
; 16 19 0d
; 0c 18 5e
; 08 1c 5a
; 42 52 4a
;===================== ======
*/
if (IRCOM[2]!=~IRCOM[3])
// 判断有没有误码(有责放弃没有判断键码)
{
EX0=1;
return;
}
switch(IRCOM[2])
{
case 0x45:
// 显示遥控上的字符按键
P0=number[0];
p=0;
break;
case 0x46:
页脚内容25
P0=number[0];
p=0;
break;
case 0x47:
quite=!quite;
//开/关声音
break;
case 0x44:
P0=number[0];
p=0;
break;
case 0x40:
{if(p==0||p==-1)p=1; p--;P0=number[p];if(p<=0) p=10;}
//数字减
break;
case 0x43:
{if(p==9||p==10) p=8; p++;P0=number[p];if(p>=9) p=-1;} //数字加
break;
case 0x07:
P0=number[12];
p=0;
break;
case 0x15:
P0=number[13];
p=0;
break;
case 0x09:
P0=number[14];
p=0;
break;
case 0x19:
页脚内容26
P0=number[10];
p=0;
break;
case 0x0d:
P0=number[11];
p=0;
break;
case 0x16:
P0=number[0];
p=-1;
break;
case 0x0c:
P0=number[1];
p=1;
break;
case 0x18:
P0=number[2];
p=2;
break;
case 0x5e:
P0=number[3];
p=3;
break;
case 0x08:
P0=number[4];
p=4;
break;
case 0x1c:
P0=number[5];
p=5;
break;
case 0x5a:
页脚内容27
P0=number[6];
p=6;
break;
case 0x42:
P0=number[7];
p=7;
break;
case 0x52:
P0=number[8];
p=8;
break;
case 0x4a:
P0=number[9];
p=9;
break;}
if(quite==1) //控制声音开关
beep();
EX0 = 1;
}
/*************************** *******************************/
void beep() //控制蜂鸣器响
{unsigned char i;
for (i=0;i<100;i++)
{delay(4);
BEEP=!BEEP;
//BEEP取反}
BEEP=1; //关闭蜂鸣器}
/*************************** *******************************/
void delay(unsigned char x)
//x*0.14MS
页脚内容28
{unsigned char i;
while(x--)
{for (i = 0; i<13; i++){}
}}
/***************************
*******************************/
void delay1(int ms)
{unsigned char y;
while(ms--)
{for(y = 0; y<250; y++)
{_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
页脚内容29。