红外测距系统设计光电系统设计.docx
《红外测距系统设计光电系统设计.docx》由会员分享,可在线阅读,更多相关《红外测距系统设计光电系统设计.docx(27页珍藏版)》请在冰点文库上搜索。
红外测距系统设计光电系统设计
本科生课程论文
论文题目
红外光电测距系统设计
课程名称
光电系统设计
学生姓名
谷幸东、郭晓龙、何志毅、胡健辉
学号
201211911309、10、11、12
所在学院
理学院
所在班级
电科1123班
指导教师
汤照
第一章绪论
1.1红外线概述
红外辐射俗称红外线,又称红外光,它是一种人眼看不见的光线。
但实际上它和其他任何光线一样,也是一种客观存在的物质。
任何物体,只要它的湿度高于绝对零度,就有红外线向周围空间辐射。
它的波长介于可见光和微波之间。
红外辐射的物理本质是热辐射。
物体的温度越高,辐射出来的红外线越多,红外辐射的能量就越强。
研究发现,太阳光谱各种单色光的热效应从紫色光到红色光是逐渐增大的,而且最大的热效应出现在红外辐射的频率范围内,因此人们又将红外辐射称为热辐射或热射线。
目前红外发射器件(红外发光二极管)发出的是峰值波长0.88uM~0.94uM之间的近红外光,红外接收器件(光敏二极管、光敏三极管)的受光峰值波长为0.88uM~0.94uM之间,恰好与红外发光二极管的光峰值波长相匹配。
红外线在通过云雾等充满悬浮离子的物质时不易发生散射,有较强的穿透能力,还具有抗干扰能力强、易于产生、对环境影响小、不会干扰临近的无线电设备的特点,因而被广泛应用。
1.2红外传感器的分类
常见红外传感器可分为热传感器和光子传感器。
1)热传感器
热传感器是利用入射红外辐射引起传感器的温度变化,进而使有关物理参数发生相应的变化,通过测量有关物理参数的变化来确定红外传感器所吸收的红外辐射。
热探测器的主要优点是相应波段宽,可以在室温下工作,使用简单。
但是,热传感器相应时间较长,灵敏度较低,一般用于低频调制的场合。
热传感器主要类型有:
热敏传感器型,热电偶型,高莱气动型和热释放电型四种。
2)光子传感器
光子传感器是利用某些半导体材料在入射光的照射下,产生光子效应,使材料电学性质发生变化。
通过测量电学性质的变化,可以知道红外辐射的强弱。
利用光子效应所制成的红外传感器。
统称光子传感器。
光子传感器的主要特点灵敏度高,响应速度快,具有较高的响应频率。
但其一般须在低温下工作,探测波段较窄。
按照光子传感器的工作原理,一般可分为内光电和外光电传感器两种,后者又分为光电导传感器、光生伏特传感器和光磁电传感器等三种。
1.3红外传感器的应用
红外技术是最近几十年中发展起来的一门新兴技术。
它已在科技、国防和工农业生产等领域获得广泛的应用。
红外传感器的应用主要体现在以下几个方面:
红外辐射计:
用于辐射和光谱辐射测量。
1)搜索和跟踪系统:
用于搜索和跟踪红外目标,确定其空间位置并对其运动进行跟踪。
2)热成像系统:
能形成整个目标的红外辐射分布图像。
3)红外测距系统:
实现物体间距离的测量。
4)通讯系统:
红外线通信作为无线通信的一种方式。
5)混合系统:
是指以上各类系统中的两个或多个的组合。
1.4AT89C52单片机概述
AT89C52是美国Atmel公司生产的低电压、高性能CMOS8位单片机,片内含8KB的可反复檫写的程序存储器和12B的随机存取数据存储器(RAM),器件采用Atmel公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内配置通用8位中央处理器(CPU)和Flash存储单元,功能强大的AT89C52单片机可灵活应用于各种控制领域。
AT89C52单片机属于AT89C51单片机的增强型,与Intel公司的80C52在引脚排列、硬件组成、工作特点和指令系统等方面兼容。
其主要工作特性是:
●片内程序存储器内含8KB的Flash程序存储器,可擦写寿命为1000次;
●片内数据存储器内含256字节的RAM;
●具有32根可编程I/O口线;
●具有3个可编程定时器;
●中断系统是具有8个中断源、6个中断矢量、2个级优先权的中断结构;
●串行口是具有一个全双工的可编程串行通信口;
●具有一个数据指针DPTR;
●低功耗工作模式有空闲模式和掉电模式;
●具有可编程的3级程序锁定位;
●AT89C52工作电源电压为5(1+0.2)V,且典型值为5V;
●AT89C52最高工作频率为24MHz
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:
振荡器反相放大器的输出端。
1.5MCP3001简介
Miclodip的MCP3001是款具有片上采样和保持电路的10位逐次逼近型A/D转换器(ADC),该器件提供个伪差分输入通道。
指定差分非线性和积分非线性的最大值为±1LSB:
它使用符合SPl协议的简单串行接口与器件通信。
当时钟速率为28MHz时,该器件的采样速率最大可为200ksps。
McP3001器件的匚作电压范围很宽,为2.7V-5.5V.低电流设计允许器件在典型待机电流仅为5nA和典型工作电流为400uA的条件下工作。
该器件以8引脚PDIP、MSOP、TSSOP和150milSOC封装形式提供。
MCP3001的特性:
●10位分辨率
●±1LSBDNL(最大值)
●±1LSBINL(最大值)
●片上采样和保持电路
●SPI串行接口(模式0.0和1.1)
●单电源供电的电压范围:
2.7V~5.5V
●5V时的采样速度为200ksps
●低功耗CMOS技术
●8引脚PDIP、SOIC、MSOP和TSSOP封装应用
封装类型:
功能框图:
第二章红外测距的工作原理与基本结构
2.1红外测距传感器简介
红外测距传感是用红外线为介质的测量系统,按照功能可分成五类:
(1)辐射计,用于辐射和光谱测量;
(2)搜索和跟踪系统,用于搜索和跟踪红外目标,确定其空间位置并对它的运动进行跟踪;(3)热成像系统,可产生整个目标红外辐射的分布图像;(4)红外测距和通信系统;(5)混合系统,是指以上各类系统中的两个或者多个的组合。
按探测机理可分成为光子探测器和热探测器。
红外传感技术已经在现代科技、国防和工农业等领域获得了广泛的应用。
2.2红外线测距的工作原理
红外测距传感器利用红外信号遇到障碍物距离的不同反射的强度也不同的原理,进行障碍物远近的检测。
红外测距传感器具有一对红外信号发射与接收二极管,发射管发射特定频率的红外信号,接收管接收这种频率的红外信号,当红外的检测方向遇到障碍物时,红外信号反射回来被接收管接收,经过处理之后,通过数字传感器接口返回到单片机。
利用的是红外线传播时的不扩散原理,因为红外线在穿越其它物质时折射率很小,所以长距离的测距仪都会考虑红外线,而红外线的传播是需要时间的,当红外线从测距仪发出碰到反射物被反射回来被接受到,再根据红外线从发出到被接受到的时间及红外线的传播速度就可以算出距离,红外线的工作原理:
利用高频调制的红外线在待测距离上往返产生的相位移推算出光束度越时间△t,从而根据D=C△t/2得到距离D。
红外传感器的的测距基本原理为发光管发出红外光,光敏接收管接收前方物体反射光,据此判断前方是否有障碍物。
根据发射光的强弱可以判断物体的距离,它的原理 是接收管接收的光强随反射物体的距离而变化的,距离近则反射光强,距离远则反射光弱。
目前,使用较多的一种传感器-红外光电开关,它的发射频率一般为38kHz左右,探测距离一般比较短,通常被用作近距离障碍目标的识别。
本系统采用的即为此种传感器。
2.3红外线测距的特点
1)远距离测量,在无反光板和反射率低的情况下能测量较远的距离;
2)有同步输入端,可多个传感器同步测量;
3)测量范围广,响应时间短;
4)外形设计紧凑,易于安装,便于操作;
2.4红外测距传感器接线
本模块选用的是由日本夏普公司研发的型号为GP2Y0A21的红外传感器。
引脚图如图所示。
此红外传感器一共有三个引脚,其中VCC(电源电压)为信号接入,接入电源电压为4.5-5.5V,单片机5V工作电压即可;GND为接地引脚,连接地线即可;Vout为模拟电压输出引脚,此引脚输出的模拟电压值为0.4-2.4V,相对应的距离范围是80-10㎝。
此引脚需要接入单片机处理模块中的多路A/D转换通道上的任意一路上。
根据红外传感器的电压和相对应的距离测量值可知,夏普GP2Y0A21系列的红外传感器输出曲线是非线性的,且每个型号的红外传感器输出曲线都不相同。
所以对所使用红外传感器的矫正是必须要做的,创建出一张实测输出曲线图,以便在实际测量的过程中获得真实准确的测量数据。
2.5红外测距系统的基本结构
红外测距系统主要有红外测距传感器模块(包括红外发射端和红外接收端两部分)、单片机处理模块、LCD显示模块三大部分组成。
如图所示。
单片机
红外模块
A/D模块
电压距离公式
显示模块
第三章红外测距的硬件设计
3.1红外测距的实现构想
为了实现红外测距,在硬件设计中,我们使用红外测距传感器,它具有一对红外信号发射与接收二极管,发射管发射特定频率的红外信号,接收管接收这种频率的红外信号,当红外的检测方向遇到障碍物时,红外信号反射回来被接收管接收,经过处理之后,通过数字传感器接口经过A/D转换电路。
将输入单片机的模拟电压信号Vout转换为单片机可识别的数字信号,并经过电压距离转换程序,转换出要测量的距离,最后在通过液晶显示屏LCD1602显示出测量结果。
3.2系统硬件结构电路图
整个红外测距系统由AT89C52芯片、红外测距传感器、A/D转换电路与LCD显示器等构成。
硬件结构电路图如图所示:
单片机AT89C52左端分别接了开关、时钟电路和复位电路,这是单片机最小的系统。
XTAL1和XTAL2串连一个晶振,并且分别接上一个20p的电容,两个电容另一端都接地,构成时钟电路。
单片机AT89C52右端P0端同时接LED的D1-D7端口和排阻,P2.0接CLK,P2.1接DO,P2.2接CS,P2.5接E,P2.6接RW,P2.7接RS。
MCP3001的VREF接vcc,IN+接红外距离传感器的Vo。
3.3各硬件电路设计
3.3.1复位电路
单片机小系统常采用上电自动复位和手动按键复位两种方式实现系统的复位操作。
上电复位要求接通电源后,自动实现复位操作。
手动复位要求在电源接通的条件下,在单片机运行期间,用按钮开关操作使单片机复位。
其结构如下图。
上电自动复位通过电容C3充电来实现。
3.3.2时钟电路
单片机内部具有一个高增益反相放大器,用于构成振荡器。
通常在引脚XTALl和XTAL2跨接石英晶体和两个补偿电容构成自激振荡器,结构图中X1、C1、C2。
可以根据情况选择6MHz、12MHz或24MHz等频率的石英晶体,补偿电容通常选择20pF左右的瓷片电容。
3.3.3A/D转换电路
A/D转换电路如图所示
3.3.4LCD显示电路
LCD与单片机的接口电路如图所示,单片机通过P0口向LCD输送数据,显示测得的距离。
值得注意的是,P0口要接上拉电阻来保证对LCD的成功驱动。
第四章红外测距的软件设计
4.1系统软件结构框图
在整个系统运行过程中。
当红外系统被启动后,首先,对AT89C52单片机进行初始化。
然后,当AT89C52单片机接收到红外接收电路传输的电压信号后,经A/D转换程序,将片外的模拟信号转换为单片机可识别的数字信号,并经电压—距离转换子程序,将变化的电压转换为距离。
最后,在动态扫描LCD显示器上显示出来。
4.2软件程序设计
红外测距系统软件程序主要由主程序、A/D转换程序、延时函数、LCD显示程序等等,在红外测距系统硬件已经确定的情况下,程序设计步骤为:
1)分析红外测距系统功能,对已知条件及运算控制的要求进行掌握,准确地编写出能完成规定任务的程序。
2)确定所需要函数及算法,根据系统设计要求及功能特点,选择相应的解决方法。
3)设计系统工作流程图,采用直观的方式清晰地表达出程序的整体设计思想。
4)根据系统工作流程图编写源程序,对主函数及子函数的功能进行逐一分析,并写出相应的程序。
5)调试源程序,将编好的程序通过编译去除语法及功能上的错误,然后将程序烧入单片机中以达到最终要求。
4.3源代码
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
#defineulongunsignedlong
sbitRS=P2^0;//LCD命令/数据端
sbitRW=P2^1;//LCD读/写端
sbitLCDE=P2^2;//LCD使能端
sbitMCP_CS=P2^3;//MCP3001与AT89S52的管脚接线定义
sbitMCP_DO=P2^4;
sbitMCP_CLK=P2^5;
uintmeasure;
ucharflag;//Busy标志
ucharcodedis[]={"MeasureStart"};//显示
ucharcodedis1[]={"V=.V,L=CM"};
ucharcodedis2[]={"0123456789."};//显示代码
ucharcodedis3[]={"OutMeasure!
"};//显示
uchardis_buf[8];//显示缓冲区
voidL_delay(void);//短延时
voiddelay_ms(uintn);//延时函数
uintread_MCP(void);//读MCP3001
voidinit_1602(void);//1602初始化函数
voidbusy(void);//LCD忙标志判断函数
voiddat_wrt(uchardat);//写数据子函数
voidcmd_wrt(ucharcmd);//写命令子函数
uintdistance(void);//距离计算函数
voidlcd_start(ucharstart);//设定显示位置函数
voidLCD_Clear(void);//LCD清屏函数
uchardat_adj(uintdat1);//显示数据调整函数
voidprint(uchar*str);//字符串显示函数
voiddisp(uintdat);//显示子函数
uintaverage(void);//算术平均滤波程序
/****************************主函数*******************************/
main()
{
init_1602();
print(dis);//显示测量开始
delay_ms(1000);
while
(1)
{
measure=distance();
disp(measure);//显示高度
delay_ms(100);
}
}
/**************************延时函数**************************/
voiddelay_ms(uintn)
{
uintj;
while(n--)
for(j=0;j<125;j++);
}
/***************************短延时****************************/
voidL_delay(void)
{
uchari;
for(i=0;i<5;i++)_nop_();
}
/************************读MCP3001函数*************************/
uintread_MCP(void)/////////////////////read_MCP采集的数据并转换后的值//////////////////////
{
uchari;
uinttemp=0;
MCP_CS=1;
L_delay();
MCP_CS=0;//CS置低,开始采样数据
for(i=0;i<13;i++)//读转换的10位数据
{
MCP_CLK=0;
L_delay();
MCP_CLK=1;
temp<<=1;
if(MCP_DO==1)temp|=0x01;
}
MCP_CS=1;
temp&=0x03ff;//获取有效转换值
return(temp);
}
/************************LCD忙标志判断函数*******************/
voidbusy(void)
{
flag=0x80;//赋初值高位为1禁止
while(flag&0x80)//读写操作使能位禁止时等待继续检测
{
P0=0xff;
RS=0;//指向地址计数器
RW=1;//读
LCDE=1;//信号下降沿有效
flag=P0;//读状态位元高位为状态
LCDE=0;
}
}
/************************写数据子函数************************/
voiddat_wrt(uchardat)
{
busy();//检测读写操作使能吗
LCDE=0;
RS=1;//指向数据寄存器
RW=0;//写
P0=dat;//写数据
LCDE=1;//高电平有效
LCDE=0;
}
/*************************写命令子函数************************/
voidcmd_wrt(ucharcmd)
{
LCDE=0;
busy();//检测读写操作使能吗
P0=cmd;//命令
RS=0;//指向命令计数器
RW=0;//写
LCDE=1;//高电平有效
LCDE=0;
}
/***********************距离计算函数***************************/
uintdistance(void)
{
uinttemp1;
temp1=average();/////////////////////////////////temp1平均数据转换的距离//////////////////////////////
if((temp1>60)&(temp1<960))//在正常测量范围?
{
temp1=13569/(temp1+7)-4;//转换测量数据
}
else
{
temp1=0x00ff;//超出测量范围,返回错误标志
}
return(temp1);
}
/************************算术平均滤波程序********