北理工激光测距实验1实验报告含代码综述文档格式.docx
《北理工激光测距实验1实验报告含代码综述文档格式.docx》由会员分享,可在线阅读,更多相关《北理工激光测距实验1实验报告含代码综述文档格式.docx(10页珍藏版)》请在冰豆网上搜索。
c=2.9971×
108m/s
可见,激光测距机的任务就是准确地测定时间间隔t。
当不考虑大气中光速的微小变化时,测距精度ΔR主要是由测时精度Δt确定的
实际脉冲激光测距机中是利用时钟晶体振荡器和脉冲计数器来测定时间间隔t的。
时钟晶体振荡器用于产生固定频率的电脉冲振荡,脉冲计数器的作用是对晶振产生的电脉冲个数进行计数。
设晶体振荡器产生的电脉冲频率为f,则脉冲间隔fT1=。
若从激光脉冲发出时刻脉冲计数器开始计数,到反射光被接收时刻停止计数,设这段时间内脉冲计数器共计得脉冲个数为m,则可计算出被测目标的距离为
相应的测距精度为
可见,脉冲激光测距机的测距精度由晶振的频率决定。
常用军用激光测距仪的晶振频率有15MHz、30MHz、75MHz和150MHz等,与其相对应的测距精度分别为±
l0m、±
5m、±
2m和±
lm。
晶振的频率愈高,测距精度就愈高,但随之而来的,不仅是计数器的技术难度增加,而且要求激光脉冲的宽度愈窄,激光器的难度也增加。
对脉冲测距系统,计数器的“开门”信号是由取出—小部分发射激光脉冲经光电探测器转换成电信号形成的,计数器的“关门”信号则是由目标激光回波到达测距机经光电探测器转换成电信号形成的。
这两个信号既可由同一探测器提供,也可用两个探测器提供。
脉冲激光测距机由激光器、发射光学系统、接收及瞄准光学系统、取样及回波探测放大系统、计数及显示器和电源几部分组成,如图所示
系统操作人员一旦下达发射激光的命令,激光器发射一束窄激光脉冲,经发射光学系统扩束后射向目标,其中一小部分经取样后启动计数器开始计数。
被目标反射回来的激光回波经测距机的接收和瞄准光学系统,聚焦到前面有窄带滤光片的光探测器上。
由探测器将其转变为电信号,再经过取样及回波探测放大系统处理后产生“关门”信号用于关闭计数器。
由计数器计得的脉冲个数计算出目标距离,再通过显示器显示出来。
实验装置包括“激光脉冲发射/接收电路板”和“单片机实验板”。
激光脉冲发射/接收电路板原理框图如图2.3所示。
图中EPM3032为CPLD;
MAX3656为激光驱动器;
MAX3747为限幅放大器;
T22为单端信号到差分信号转换芯片;
T23为差分信号到单端信号转换芯片;
LD为半导体激光器;
PD为光电探测器。
板子上端的EPM3032被编程为脉冲发生器,输出重复频率为1KHz,脉冲宽度为48ns的电脉冲信号。
此信号经MAX3656放大后驱动LD发光。
板子下端的EPM3032被编程为计数器,对125MHz晶振进行计数。
其计数的开门信号来自上端的TX信号,关门信号来自PD的输出。
计数器的计数结果采用12位二进制数据输出,对应的时间范围为0~32.76μs。
发射/接收模块实物如图2.4所示,TX、RX1、RX2为三个Q9插座。
其中,LD的驱动信号由TX口输出;
PD接收到的信号由RX输出。
该模块通过一个单独的5V电源进行供电。
插座J9为计数结果输出管脚,包括12位数据管脚和1位计数指示管脚:
★数据管脚的高八位(从第12到5位)分别对应J9的1,3,5,7,9,11,13,15;
数据管脚的低四位(从第4到1位)分别对应J9的16,14,12,10。
高电平为1,低电平为0;
★计数指示管脚为J9的第6位。
计数指示为1表示正在计数,0表示计数结束。
本实验的内容是搭建并调试一套室内模拟激光脉冲测距系统,实验系统组成框图见图2.5。
实验系统主要由激光脉冲发射/接收电路板(其上包括脉冲半导体驱动器、脉冲半导体激光器、光电探测接收系统、计数器)和单片机实验板(其上包括单片机及显示模块)组成。
其中,脉冲半导体激光驱动器产生重复频率为1KHz,脉冲宽度为24ns的电脉冲信号驱动半导体激光器工作,同时此脉冲信号作为计数器的开门信号启动计数器开始对高速晶振输出的脉冲个数计数。
半导体激光器输出光脉冲耦合到光纤中,经过一定长度的光纤传输后再被光电探测器接收转换成电信号,经过放大后作为计数器的关门信号,使计数器停止计数。
此时计数器计到的脉冲个数再乘以晶振的周期即为光脉冲在光纤中传输的时间,此时间乘以光在光纤中的传播速度即为光纤的长度。
单片机将计数器的计数值读入,计算出距离值并显示出来。
实验系统连接如图2.6所示。
将随机携带的20P的排线将实验系统和激光测距系统进行连接,然后分别供电。
单片机读取发射/接收模块输出的二进制计数结果,经过计算得到光纤长度,再通过数码管显示出来。
三.实验结果及程序
经过编程、烧录等过程,我组通过实验验收,结果为188.8。
针对实验要求,我们进行了如下的程序设计,以求得正确的结果,代码如下:
#include<
reg52.h>
//头文件
#defineucharunsignedchar//两个宏定义,只是为了方便
#defineuintunsignedint
ucharcodeSEG7[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
//数码管的编码
ucharSAV[6]={0xa0,0xa0,0xa0,0xa0};
ucharcodeACT[6]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
//位选的编码
voiddelay(uchar);
//头文件的声明,延时子函数
voiddisplay();
voidcount(uint);
uintGet_Data();
voidmain()//主函数
{
uintRe_Data=Get_Data();
count(Get_Data());
//进行计算,得到想要的数据
while
(1)//主循环
display();
//显示函数
};
}
voiddelay(uchartime)//延时函数,这里的作用不明显,没有调用
while(time>
0)time--;
voidcount(uintCon_Data)
SAV[0]=Con_Data%10;
//计算个位数据
SAV[1]=Con_Data/10%10;
//计算十位数据
SAV[2]=Con_Data/100%10;
//计算百位数据
SAV[3]=Con_Data/100/10%10;
//计算千位数据
voiddisplay()//显示函数
uchari=0;
for(i=0;
i<
4;
i++)//for循环用于进行循环显示
{if(i==1)
{P0=SEG7[SAV[i]]|0x80;
用于显示小数点。
P2=ACT[i];
}
else
{P0=SEG7[SAV[i]];
//显示函数的主体,P0作为字线输出
}//P2作为实验板的位线
delay(200);
//延时函数
P0=0xff;
//防止出现余辉现象
uintGet_Data()
uintLast_Data;
ucharData;
P3=0xff;
//P3口置高,这是读取数据的需要
Data=P3;
//读取P3口数据
Last_Data=Data&
0xf0;
//获取P3口数据的高四位
Last_Data=Last_Data<
<
4;
//数据左移4位,因为读入的是高位
P1=0xff;
//P1口数据的操作,同P3口相同
Data=P1;
Last_Data=Last_Data+Data;
returnLast_Data*16;
}
四.加分实验(在单片机上显示“HELLO”)代码
#defineuintunsignedint
ucharcodeSEG7[]={0x76,0x79,0x38,0x38,0x3f};
//头文件的声明
{
//uintRe_Data=Get_Data();
while(time>
voidcount(uintCon_Data)
SAV[0]=4;
SAV[1]=3;
SAV[2]=2;
SAV[3]=1;
SAV[4]=0;
uchari=0;
for(i=0;
5;
i++)//for循环用于进行循环显示21
P0=SEG7[SAV[i]];
P2=ACT[i];
//P2作为实验板的位线
uintGet_Data()
P3=0xff;
Data=P3;
Last_Data=Data&
Last_Data=Last_Data<
Data=P1;
Last_Data=Last_Data+Data;
Last_Data=Last_Data*16;
returnLast_Data;
五.实验中遇到的问题
刚开始时,由于不清楚如何在单片机中显示小数点,于是询问同学,经讨论后得知其原理。
实验中遇到的主要问题就是这个。
六.实验心得与反思
通过过去几周的学习,我们对脉冲式激光测距有了一定的认识,掌握了单片机程序的编写、烧录、调试方法,完成了这一实验。
我们认为这为我们今后的学习打下了良好的基础。