q 基于光电传感器测距系统设计解析.docx
《q 基于光电传感器测距系统设计解析.docx》由会员分享,可在线阅读,更多相关《q 基于光电传感器测距系统设计解析.docx(17页珍藏版)》请在冰豆网上搜索。
q基于光电传感器测距系统设计解析
基于光电传感器测距系统设计
一、传感器的工作原理
光电传感器是利用光敏元件将光信号转换为电信号的的传感器,它的敏感波长在可见光波长附件,包括红外线波长和紫外线波长。
光敏电阻器是利用半导体光电导效应制成的一种特殊电阻器,对光线十分敏感,它的电阻值能随着外界光照强弱(明暗)变化而变化。
在无光照射时,呈高阻状态;当有光照射时,其电阻值迅速减小,广泛用于各种控制电路,(自动照明灯控制电路、自动报警电路等),家用电气(如电视机中的高度自动调节。
照相机中的自动曝光控制等)及各种测量仪器中。
光敏电阻又称光导管,它几乎都是用半导体材料制成的光电器件。
光敏电阻没有极性,纯粹是一个电阻器件,使用时既可以加直流电压,也可以加交流电压。
当光敏电阻受到一定波长范围的光照时,它的阻值急剧减小,电路中的电流迅速增大,一般希望暗电阻越大越好,亮电阻越小越好,此时光敏电阻的灵敏度高。
该系统可通过光敏电阻将由于距离变化引起的光照强度变化这一非电气量转化为电压这一电气量。
当距离近时,光照强,光敏电阻的阻值很小;当距离远时,光照弱,光敏电阻的阻值大。
二、系统总体结构
1、传感器的选择
光电传感器是采用光电元件作为检测元件的传感器。
它首先把被测量的变化转换成光信号的变化,然后借助光电元件进一步将光信号转换成电信号。
光电传感器一般由光源、光学通路和光电元件三部分组成。
本文选择的是光敏电阻作为光电元件,硫化镉(Cds),光敏电阻器的阻值随入射光线(可见光)的强弱变化而变化,在黑暗条件下,它的阻值(暗阻)可达1~10MΩ;在强光条件(100LX)下,它阻值(亮阻)仅有几百至数千欧姆。
2、系统功能的描述
在测量物体距离时我们采用的时光敏电阻作为本次课题的光电传感器。
距离的变化引起光照强度的变化,进而光敏电阻的阻值发生变化,最终引起电路的输出电压的变化。
本课题是以AT89C52单片机、AD0804转换器核心器件,ADC0804将电路中的模拟信号转换成数字信号送入单片机进行数据的处理,最后通过LCD液晶将电路的电压显示出来。
3、系统原理框图
4、系统结构分析:
(1)光电传感器(信号采集部分)
采用光敏电阻作为信号采集器件,光敏电阻是基于光电导效应的一种光电器件,无光照时,光敏电阻值(暗电阻)很大,电路中的(暗电流)很小,当受到光照时,半导体材料电导率增加,,电阻减小,其阻值随光照强度而减小。
光敏电阻作为光电式传感器的一种,它具有灵敏度高,光谱响应范围宽,体积小,重量轻,机械强度高,耐冲击,耐震动,抗过载能力强和寿命长等优点,所以选择光敏电阻采集光照信号,把不同的光照强度转化为不同的电阻值。
把光敏电阻串联在直流电路中即可把不同的电阻值转化为不同的电压值。
把对光电信号的处理转化为对电压信号的处理。
(2)ADC0804(信号处理部分)
AD0804是一只具有20引脚8位CMOS连续近似的A/D转换器,将光敏电阻采集到的电压模拟量信号转换成数字量的信号。
(3)AT89C52(数据处理部分)
AT89C52是一个低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM)。
在本次课题中,AT89C52将AD0804转换出来的数字信号进行处理,处理完成将电压通过显示器显示出来,AT89C52和AD0804的接线图如原理图所示。
(4)LCD液晶显示(显示部分)
将电压信号通过显示器显示出来,距离的改变直接通过电压显示出来,电压的大小近似取决于距离的远近。
三、主要硬件器件的功能介绍
1、AD0804的结构图
2、ADC0804引脚功能的介绍
(1)引脚1(CS):
ChipSelect,与RD、WR接脚的输入电压高低一起判断读取或写,入与否,当其为低位准(low)时会active。
(2)引脚2(RD):
Read。
当CS、RD皆为低位准(low)时,ADC0804会将转换后的数字讯号经由DB7~DB0输出至其它处理单元。
(3)引脚(WR):
启动转换的控制讯号。
当CS、WR皆为低位准(low)时,ADC0804做清除的动作,系统重置。
当WR由0→1且CS=0时,ADC0804会开始转换信号,此时INTR设定为高位准(high)。
(4)引脚4、引脚19(CLKIN、CLKR):
频率输入/输出。
频率输入可连接处理单元的讯号频率范围为100kHz至800kHz。
而频率输出最大值无法大于640KHz,一般可选用外部或内部来提供频率。
(5)引脚5(INTR):
中断请求。
转换期间为高位准(high),等到转换完毕时INTR会变为低位(low)告知其它的处理单元已转换完成,可读取数字数据。
(6)引脚6、引脚7(VIN(+)、VIN(-)):
差动模拟讯号的输入端。
输入电压VIN=VIN(+)—VIN(-),通常使用单端输入,而将VIN(-)接地。
(7)引脚8(AGND):
模拟电压的接地端。
(8)引脚9(VREF∕2)︰
模拟参考电压输入端。
VREF为模拟输入电压VIN的上限值。
若引脚9空接,则VIN的上限值即为VCC。
(9)引脚10(DGND)︰数字电压的接地端。
(10)引脚11~引脚18(DB7~DB0)︰转换后之数字数据输出端。
(11)引脚20(Vcc)︰驱动电压输入端
3、A/D转换电路
A/D转换电路如图所示,由于PROTUES仿真软件不能仿真光敏电阻接受光照后电阻的变化,故在ADC0804的输入端加一滑变电阻器,来代替光敏电阻产生的0~4.92V模拟电压,经过A/D转换后送到单片机的P1口,从而实现电路的仿真。
4、AT89C52的结构图
5、AT89C52单片机概述
AT89C52是美国Atmel公司生产的低电压、高性能CMOS 8位单片机,片内含8KB的可反复檫写的程序存储器和12B的随机存取数据存储器(RAM),器件采用Atmel公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内配置通用8位中央处理器(CPU)和Flash存储单元,功能强大的AT89C52单片机可灵活应用于各种控制领域。
AT89C52单片机属于AT89C51单片机的增强型,与Intel公司的80C52在引脚排列、硬件组成、工作特点和指令系统等方面兼容。
其主要工作特性是:
1)片内程序存储器内含8KB的Flash程序存储器,可擦写寿命为1000次;
2)片内数据存储器内含256字节的RAM;
3)具有32根可编程I/O口线;
4)具有3个可编程定时器;
5)中断系统是具有8个中断源、6个中断矢量、2个级优先权的中断结构;
6)串行口是具有一个全双工的可编程串行通信口;
7)具有一个数据指针DPTR;
8)低功耗工作模式有空闲模式和掉电模式;
9)具有可编程的3级程序锁定位;
10)AT89C52工作电源电压为5(1+0.2)V,且典型值为5V;
11)AT89C52最高工作频率为24MHz
6、AT89C52的各引脚功能:
·P0 口:
P0 口是一组8 位漏极开路型双向I/O 口, 也即地址/数据总线复用口。
作为输出口用时,每位能吸收电流的方式驱动8 个TTL逻辑门电路,对端口P0 写“1”时,可作为高阻抗输入端用。
在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8 位)和数据总线复用,在访问期间激活内部上拉电阻。
在Flash 编程时,P0 口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。
·P1 口:
P1 是一个带内部上拉电阻的8 位双向I/O 口, P1 的输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻辑门电路。
对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。
作输入口使用时,因为内部存在上拉 电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。
与AT89C51 不同之处是,P1.0 和P1.1 还可分别作为定时/计数器2 的外部计数输入(P1.0/T2)和输入(P1.1/T2EX), Flash 编程和程序校验期间,P1 接收低8 位地址。
·P2 口:
P2 是一个带有内部上拉电阻的8 位双向I/O 口,P2 的输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻辑门电路。
对端口P2 写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。
在访问外部程序存储器或16 位地址的外部数据存储器(例如执行MOVX @DPTR 指令)时,P2 口送出高8 位地址数据。
在访问8 位地址的外部数据存储器(如执行MOVX @RI 指令)时,P2 口输出P2 锁存器的内容。
Flash 编程或校验时,P2亦接收高位地址和一些控制信号。
·P3 口:
P3 口是一组带有内部上拉电阻的8 位双向I/O 口。
P3 口输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻辑门电路。
对P3 口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。
此时,被外部拉低的P3 口将用上拉电阻输出电流(IIL)。
P3 口除了作为一般的I/O 口线外,更重要的用途是它的第二功能,P3 口还接收一些用于Flash 闪速存储器编程和程序校验的控制信号。
·RST:
复位输入。
当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。
·ALE/PROG:
当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8 位字节。
一般情况下,ALE 仍以时钟振荡频率的1/6 输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。
要注意的是:
每当访问外部数据存储器时将跳过一个ALE 脉冲。
对Flash 存储器编程期间,该引脚还用于输入编程脉冲(PROG)。
如有必要,可通过对特殊功能寄存器(SFR)区中的8EH 单元的D0 位置位,可禁止ALE 操作。
该位置位后,只有一条 MOVX 和MOVC指令才能将ALE 激活。
此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE 禁止位无效。
·PSEN:
程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89C52 由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN 有效,即输出两个脉冲。
在此期间,当访问外部数据存储器,将跳过两次PSEN信号。
·EA/VPP:
外部访问允许。
欲使CPU 仅访问外部程序存储器(地址为0000H—FFFFH),EA 端必须保持低电平(接地)。
需注意的是:
如果加密位LB1 被编程,复位时内部会锁存EA端状态。
如EA端为高电平(接Vcc端),CPU 则执行内部程序存储器中的指令。
Flash 存储器编程时,该引脚加上+12V 的编程允许电源Vpp,当然这必须是该器件是使用12V 编程电压Vpp。
·XTAL1:
振荡器反相放大器的及内部时钟发生器的输入端。
·XTAL2:
振荡器反相放大器的输出端。
7、晶振电路
时钟电路是计算机的心脏,它控制着计算机的工作节奏。
MCS-51单片机允许的时钟频率是因型号而异的典型值为12MHZ。
MCS-51内部都有一个反相放大器,XTAL1、XTAL2分别为反相放大器输入和输出端,外接定时反馈元件以后就组成振荡器,产生时钟送至单片机内部的各个部件。
电容C1和C2的作用有两个:
其一是使振荡器起振,其二是对振荡器的频率f起微调作用(C1、C2大,f变小),其典型值为30pF。
8、显示电路
LCD与单片机的接口电路如图所示,单片机通过P0口向LCD输送数据,显示测得的距离所对应的电压。
值得注意的是,P0口要接上拉电阻来保证对LCD的成功驱动。
四、软件
1、系统软件结构框图
2、AT89S51的程序
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitrs=P2^5;
sbitlcden=P2^7;
sbitwr=P2^6;
sbitWRR=P3^6;
sbitRDD=P3^7;
sbitCS=P2^0;
ucharlove=0;
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidwrite_com(ucharcom)
{
rs=0;
wr=0;
lcden=0;
delay
(1);
P0=com;
delay
(1);
lcden=1;
delay
(1);
lcden=0;
}
voidwrite_date(uchardate)
{
rs=1;
wr=0;
lcden=0;
P0=date;
delay
(1);
lcden=1;
delay
(1);
lcden=0;
}
voidinit_lcd()
{
lcden=0;
write_com(0x38);
delay
(1);
write_com(0x0c);
delay
(1);
write_com(0x06);
delay
(1);
write_com(0x01);
delay
(1);
write_com(0x80);
delay
(1);
write_date('L');
write_com(0x81);
delay
(1);
write_date('o');
write_com(0x82);
delay
(1);
write_date('v');
write_com(0x83);
delay
(1);
write_date('e');
write_com(0x84);
delay
(1);
write_date('');
write_com(0x85);
delay
(1);
write_date('D');
write_com(0x86);
delay
(1);
write_date('o');
write_com(0x87);
delay
(1);
write_date('n');
write_com(0x88);
delay
(1);
write_date('g');
write_com(0x89);
delay
(1);
write_date('');
write_com(0x8a);
delay
(1);
write_date('S');
write_com(0x8b);
delay
(1);
write_date('h');
write_com(0x8c);
delay
(1);
write_date('e');
write_com(0x8d);
delay
(1);
write_date('n');
write_com(0x8e);
delay
(1);
write_date('g');
}
/*voidwrite_sfm(ucharadd,uchardate)
{
ucharge,shi;shi=date/10;
ge=date%10;
write_com(0x80+0x40+add);
write_date(0x30+shi);
write_date(0x30+ge);
}*/
voidinit_ad()
{
P1=0;
P0=0;
CS=0;
}
voidstart()
{
WRR=0;
WRR=1;
}
voidmain()
{
ucharresult;
init_ad();
init_lcd();
P1=0xff;
while
(1)
{
//P1=0;
CS=0;
start();
delay(5);
RDD=0;
delay(8);
result=P1;
RDD=1;
delay(20);
//lcdinit();
P0=~result;
//while
(1);
//result=result/256*5;
/*lcdwritetable(0x83,"ADConvert",10);
lcddisplay(0x80+0x40+5,result*5/256+48);
lcddisplay(0x81+0x40+5,'.');
lcddisplay(0x82+0x40+5,result*5*10/256%10+48);
lcddisplay(0x83+0x40+5,result*5*100/256%10+48);
lcddisplay(0x84+0x40+5,'V');
delay(1000);
*///P0=P1;
write_com(0x80+0x40+5);
write_date(result*5/256+'0');
write_com(0x80+0x40+6);
write_date('.');
write_com(0x80+0x40+7);
write_date(result*5*10/256%10+'0');
write_com(0x80+0x40+8);
write_date(result*5*100/256%10+'0');
write_com(0x80+0x40+9);
write_date('V');
delay(10);
}
}
五、系统总电路图
六、系统的元件的选择及参数的设定
元件
型号
滑动变阻器
1K
电阻R1=R2
10K
电阻
1K
电容C1
150pF
电容C2=C3
33pF
晶振
振荡频率12MHz
模数转换器
ADC0804
单片机
AT89C52
显示器
LCD(LM016L)
电源部分:
电源电压设置为5V;仿真时用滑动变阻器RV1代替光敏电阻,电阻;
七、仿真调试界面及仿真结果说明
滑动变阻器的阻值的大小改变,显示器上电压的示数也随之改变。
八、系统的接线电路
该电路用滑动变阻器代替了光敏电阻,电阻值的变化引起电路输出电压的变化,电压这个模拟量经过ADC0804模数转换为数字量,数字量的电压信号进入单片机进行处理,最后通过LCD显示。
我们通过实验得到距离和光敏电阻两端电压的数据,从数据我们可以得到距离和电压的近似的关系,数据如下:
距离/mm
5
10
15
20
25
30
35
40
45
50
电压/V
3.61
2.66
1.71
1.2
0.94
0.75
0.61
0.51
0.43
0.37
通过表格中的数据,我们可以大概绘制出距离和电压的曲线图,如下:
从曲线图中我们我们可以看出,在一定的距离范围,随着距离的增大,光照强度变弱,光敏电阻的阻值增大,电路输出的电压值变小,所以我们就可以根据显示器显示的的电压的大小来大概判断出距离的
九、参考文献
1. 薛小玲、刘志群、贾俊荣编著《单片机接口模块应用于开发实例详解》 北京航空航天大学出版社 2010
2. 谭浩强 著《C程序设计》(第三版) 清华大学出版社 2005
3. 何桥、段清明、邱春玲编著《单片机原理及应用》 中国铁道出版社 2004 4. .曲波 肖圣兵 吕建平编著《工业常用传感器选型指南》 清华大学出版社 2002
5. .陈鸿茂编著《常用电子器件简明手册》 中南矿业大学出版社 2001