您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 基于单片机的距离量测设计
1基于单片机的距离量测设计光源发出的光线经过会聚透镜投射到被测物体表面,其漫反射光经成像在光电检测器件(PSD或CCD)上。在传感器上成像光斑的中心位置由传感器与被测物体表面之间的距离决定。光电检测器件输出的电信号与传感器上光斑的中心位置通过对光电检测器件输出信号进行运算处理就可获得传感器与被测物体表面之间的距离信息。一、基于PSD的三角测距的基本原理半导体激光器所发出的光束经透镜发射变成近似平行光束,照射在被测物上,被测物散射回来的光线通过接收透镜会聚到传感器并形成光斑。在被测物体、散射光线、传感器与接收透镜的光轴所在的平面形成两个相似三角形,只要测出光斑在传感器上的位置,就可根据已知的参数得到距离的比值关系。PSD具有位置分辨率高(PSD一般为几微米),响应速度快,器件小、噪声低、直接由光信号转换成为电流信号、外围电路简单等优点,所以采用它作为传感器件。已接收透镜所在的光轴为测量距离:光斑在O点以上,则ytanθ=d+CD,光斑在O点以下,则ytanθ=d﹣CDPSDABdfBθδOCD透镜y激光源图1激光源三角法测距原理2L可得推导公式为:y=fd/(ftanθ-δ)(1)δ为PSD的光斑到中心的距离,O点以上为正值,O点以下为负,y值为BC的距离。所以只要求出δ的值就可将y值算出来。根据PSD的原理有散射光入射时如图1:C点是被测物体在PSD上产生的光斑。设AC段的电阻值为Ra,BC段的电阻值为Rb,则光电流分为两路(分别通过Ra和)有电极AB流出。其值分别为I1和I2。I1Ra=I2Rb(2)I0=I1+I2(3)如果光敏面的表面电阻层具有理想的均匀性,则关于X’的距离公式:R0(L/2-X')I1=R0(L/2+X’)I2X’=L/2*(I2-I1)/(I2+I1)(4)其中X’为光斑中心位置对零点的偏移,L为PSD两电极间距离。二、系统实施方案(一)系统组成模块系统主要由以下几个模块构成,在需要测量时,给单片机发出信号,单片机启动激光器发射装置和A/D转换器。COPNIABX’X3被测物面发射装置接收装置I/V转换电压放大模拟运算A/D转换单片机处理数据显示电学部分光学部分(三)、电学部分的描述电学部分主要由信号的转换、处理、运算、以及显示四个部分组成由PSD出来的信号为两路电流信号,所以,需要两路的信号处理电路,参数方案如下:(三)、设计要求1、要求PSD输出的电流大小为微安级,经过I/V转换后的电压范围在(0.1~1V)范围内I/VI/VPSD放大放大减法器除法器A/D转换单片机加法器放大放大加法器电压跟随器42、电压放大电路要求:放大倍数范围为5~103、电压跟随电路:由于ADC0809只转换单极性模拟输入电压,由于被转换的信号可能是双极性的模拟信号,则需增加极性转换电路,双极性模拟信号转换为单极性模拟信号,再送入ADC0809进行A/D转换4、单片机数据处理选用的单片机位AT89C51,一个按钮接在INT0端,设置INT0为边沿触发方式,当需要测量时,按下按钮向51提出中断,并启动激光器发射,10ms后,89C51启动0809进行A/D转换,当转换完毕,0809提出中断,51读取其数据,通过动态扫描法将数据显示在LED上。5、程序流程图:包括主程序流程图和中断子程序流程图6、显示部分程序汇编编程程序三、电路参数确定及芯片选择1、I/V转换电路(放大器A1、A1′)U01=﹣Rf1I1设I1为1~10微安,当Rf1=100k时I/V转换后第电压范围为0.1~1V,同理得U011′=﹣Rf2I2,得Rf1=Rf2=100k2、放大部分取Av=5(反相放大器A2、A2′)根据虚断和虚短的概念有:Up≈Un,Ii=0可得:U01=Un≈Up,U02=-UR22=-R22U01/R21Av=-R22/R21=-5,得R22/R21=5,取R22=50K,R21=10K同理得R22′=50K,R21′=10K3、(1)同相加法器A35由虚短UP31-Un31=0,虚断的概念得:I33+I34=I35得(U02-UP31)/R33+(U02′-UP31)/R34=UP31/R35(1/R33+1/R34+1/R35)UP31=U02/R33+U02′/R34UP31=RP(U02/R33+U02′/R34),其中RP=(1/R33+1/R34+1/R35)U031=UP31(1+R32/R31)=RP(1+R32/R31)(U02/R33+U02′/R34)=(R31+R32)/R31*R32/R32*RP*(U02/R33+U02′/R34)=R32/(R31∥R32)*RP*(U02/R33+U02′/R34)=R32*RP/RN*(U02/R33+U02′/R34),其中RN=R31∥R32当RN=RP,即1/R32+1/R31=1/R33+1/R34+1/R35时U031=R32(U02/R33+U02′/R34)所以当R32=R33=R34且1/R32+1/R31=1/R33+1/R34+1/R35时,U031=U02+U02′取R32=R33=R34=1K,又1/R32+1/R31=1/R33+1/R34+1/R35,1/R31=1+1/R35取R31=500,R35=1K综上所述得R31=500,R32=R33=R34=R35=1K6(2)同相减法器A3′根据虚断和虚短的概念有:Up≈Un,Ii=0可得:I31′=I34′,即(U02-Un)/R31′=(Un–U032)/R34′I32′=I33′,即(U02′-Up)/R32′=Up/R33′当R31′=R32′=R33′=R34′时,U032=U02′-U02取R31′=R32′=R33′=R34′=5004、除法器(A4、A4′)利用虚地的概念有:U032/R41+U42/R42=0由乘法器A的功能可得:U42=kU031U041由上两式可得:U041=–R42/(kR41)*U032/U031由反相放大器A4′得:U042=-U041R42′/R41′,当取R42′=R41′=10K时U042=R42/(kR41)*U032/U031当取PSD两电极间距离L=2毫米时,取k=1000,R42=R41=10K综上所述得:R42=R41=R42′=R41′=10K7ALEP00~P07AD89C51WRP2.7RDP3.3INT1CLKREF(+)REF(-)ADDAADDBADDCIN0IN1IN2DB0IN3~IN4DB7IN5STARTIN6ALEIN7OEADC0809EOCDQCKQGQ0D0Q1~Q2D7。。U05AD89C51与ADC0809的接口逻辑。。5、电压跟随器A5根据虚断和虚短的概念有:Up5≈Un5,Ii=0可得:R52(5-U042)/(R51+R52)+U042=Up5=U05当R51=R52=10K时,U05=(5+U042)/2,当U042在-5V~5V之间变化时,其输出U05范围在0V~5V6、A/D转换部分ADC的8个模拟量输入通道IN0~IN7,每个通道号占一个地址号,由通道选择线ADDA、ADDB、ADDC来决定。由于A/D芯片在系统中相当于一个外围芯片,8现取P2.7低电平有效作为ADC0809的片选信号,则8个通道IN0~IN7的地址号分别为7FF8H~7FFFH。当片选信号与WR有效信号相配合,利用WR下降沿使START及ALE信号变高电平有效,来锁存地址信号。在WR上升沿时刻,START信号由高电平变低电平启动A/D转换。片选信号与单片机的读信号RD经一级或非门后产生正脉冲信号OE来控制读取转换数据。ALE经过双稳态触发器进行二分频,产生CLK所需的时钟信号。7、数据显示部分图示为共阴极动态显示接口电路,在AT89C51内部数据存储器RAM的55H、56H、57H中存放待显示的三位数据,编程并行接口芯片8155的PB口作为LED的字形输出口,PA口作为LED的字位输出口,显示时从最右边的一位LED(即个位)开始点亮,用AT89C51的P2.6(地址总线A14)作为8155的片选信号,由接线可知8155的RAM地址为BE00H~BEFFH,I/O口的地址为BF00H~BF05H,8155的PA口扫描输出总是仅有一位为高电平,经过反向驱动器后三位LED中只有一位公共阴极为低电平,其他位为高电平,8155的PB口输出相应位(阴极为低)的显示数据段的数据,使某一位显示出一个字符,其他位为暗,依次地改变PA口输出为高电平的位,PB口输出对应的段数据,三个LED就显示出待显示的三位数。四、程序流程图及数据显示子程序(一)流程图ALEP00~P07WRRDP2.0P2.6AT89C51ALEAD0PB0~~AD7PB7WRRDIO/MCEPA2~8155PA0驱动器反相驱动器LED3LED2LED1动态数据显示接口电路图740474079程序初始化(设置f,d,tanθ等的初值)中断初始化是否有按钮按下启动激光器开中断INT0等待开始NY主程序流程图保护现场初始化外部中断1初始化数据采集延时10ms启动A/D转换A/D转换是否结束开中断INT1现场恢复中断返回INT0中断入口NYINT0中断子程序流程图10清除显示置8155的PA口、PB口为输出方式显示缓冲器指针初值55H→R0置扫描模式初值01H→R2R2→8155PA口取显示数据,查表转换为段数据→8155PB口延迟5.151ms显示缓冲器指针R0加1(R2).2=1?R2左移一位返回开始YN数据显示流程图保护现场设置初值读A/D转换结果并转存到35H(X’=(35H))数据处理得到y值y→50Hy转换为三位十进制数个位→55H十位→56H百位→57H数据显示现场恢复中断返回INT1中断入口INT1中断子程序流程图11(二)显示部分程序汇编编程程序1、二进制转换成十进制的子程序:设y256,且y值存放在缓存单元50H中,假定转换后的十进制数的个位存放在55H中,十位存放在56H中,百位存放在57H中,则二进制转换成十进制的子程序如下:CONVERT:MOVA,50HMOVB,#64HDIVABMOV57H,A;百位→57HMOVA,#0AHXCHA,BDIVABMOV56H,A;十位→56HMOV55H,B;个位→55HRET2、显示子程序显示时从最右边的一位LED(即个位)开始点亮,由接线可知8155的RAM地址为BE00H~BEFFH,I/O口的地址为BF00H~BF05H,显示子程序如下:REMVDSP:MOVSP,#80HMOVDPTR,#BF00H;清除显示部分MOVA,#03HMOVX@DPTR,AMOVR2,#01HREMVDSP1:MOVDPTR,#BF01HMOVX@DPTR,AMOVDPTR,#BF10HMOVA,#00HMOVA,R2JBACC.2,DISPLAYRLA12MOVR2,AAJMPREMVDSP1DISPLAY:MOVDPTR,#BF00H;数据显示部分MOVA,#03HMOVX@DPTR,A;置8155的PA口、PB口为输出方式MOVR0,#55H;置显示缓冲器指针初值MOVR3,#01H;置扫描模式初值MOVA,R3DISPLAY1:MOVDPTR,#BF01H;扫描模式→8155PA口MOVX@DPTR,AMOVDPTR,#BF10HMOVA,@R0;取显示数据ADDA,#0DH;加偏移量MOVCA,@A+PC;查取段码值MOVX@DPTR,A;段码→8155PB口ACALLDELAY;延时5.151msINCR0MOVA,R3JBACC.2,DISPLAY2;判三位LED是否显示完RLA;扫描模式左移一位MOVR3,AAJMPDISPLAY1DISPLAY2:RETLOOP:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,67H;段码表DELAY:MOVR4,#0AH;延时子程序(5.151ms)DELAY1:MOVR5,#0FFHDELAY2:DJNZR5,DELAY
本文标题:基于单片机的距离量测设计
链接地址:https://www.777doc.com/doc-2574277 .html