激光干涉测长仪报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
贵州民族学院
《激光原理及应用》
《激光干涉测长仪》课程设计
学院计算机与信息工程学院
专业09 光信息
班级09 光信息
姓名张家文许毅强
学号200907040054 200907040047
指导教师葛一凡老师
激光干涉测长仪
摘要:本系统利用激光优异的单色性、方向性和高度相干性,光电传感器,移向电路,仪用放大整形,细分辨向电路,单片机控制计数等完成了通过激光干涉来测量物体的长度。
关键词:激光干涉光电传感器移向细分辨向计数
目录
一激光干涉仪基本原理及系统组成 (4)
1 激光干涉仪基本原理 (4)
2 激光干涉仪系统组成 (5)
二信号处理部分系统设计 (6)
1 第一种方案 (6)
2 第二种方案 (11)
三测试结果 (19)
四参考文献 (22)
系统程序及系统原理图 (22)
一 激光干涉仪基本原理及系统组成
1 激光干涉测长仪的基本原理
激光干涉测长的基本光路是一个迈克尔逊干涉仪(如图1),用干涉条纹来反映被测量的信息。
干涉条纹是接收面上两路光程差相同的点连成的轨迹。
激光器发出的激光束到达半透半反射镜P 后被分成两束,当两束光的光程相差激光半波长的偶数倍时,它们相互加强形成亮条纹;当两束光的光程相差半波长的奇数倍时,它们相互抵消形成暗条纹。
两束光的光程差可以表示为
j
M
J j N
i i i l
n l n ∑
∑
==-
=
∆1
1
(1)
式中j i n n ,分别为干涉仪两支光路的介质折射率;j i l l ,分别为干涉仪两支光路的几何路程。
将被测物与其中一支光路联系起来,使反光镜M 2沿光束2方向移动,每移动半波长的长度,光束2的光程就改变了一个波长,于是干涉条纹就产生一个周期的明、暗变化。
通过对干涉条纹变化的测量就可以得到被测长度。
P
光束1
单模稳频He-Ne 激光器
光电计数器
显示记录装置
待测物体
激光束
光束2
光电显微镜
迈克尔逊干涉仪
M 1
M 2
可移动平台
图1 激光干涉测长仪的原理图
被测长度L 与干涉条纹变化的次数N 和干涉仪所用光源波长λ之间的关系是
2
λN
L = (2)
式(2)是激光干涉测长的基本测量方程。
从测量方程出发可以对激光干涉测长系统进行基本误差分析
δλδδλ
λ
+=∆+∆=∆N L N
N L L 即
(3)
式中δλδδ和N ,L 分别为被测长度、干涉条纹变化计数和波长的相对误差。
这说明被测长度的相对误差由两部分组成,一部分是干涉条纹计数的相对误差,另一部分是波长也就是频率的相对误差。
前者是干涉测长系统的设计问题,不是本书研究的内容。
后者除了与前面讲过的激光稳频技术有关之外还与环境控制,即对温度、湿度、气压等的控制有关。
因此激光干涉测长系统测量误差必须根据具体情况进行具体分析。
2 激光干涉仪系统组成
迈克尔逊干涉仪是激光干涉测长系统的核心部分,其分光器件、反射器件和总体布局有若干可能的选择。
干涉仪的分光器件原理可以分为分波阵面法、分振幅法和分偏振法等。
激光干涉测长系统的另一个重要组成部分是干涉条纹计数与测量结果处理系统。
干涉仪在实际测量位移时,由于测量反射镜在测量过程中可能需要正反两个方向的移动,或由于外界振动,导轨误差等干扰,使反射镜在正向移动中,偶然有反向移动,所以干涉仪中需设计方向判别部分,将计数脉冲分为加和减两种脉冲。
当测量镜正向移动时所产生的脉冲为正脉冲,而反向移动时所产生的脉冲为减脉冲。
将这两种脉冲送入可逆计数器进行可逆计算就可以获得真正的位移值。
如果测量系统没有判向能力,光电接收器接收的信号是测量镜正反两方向移动的总和,就不代表真正的位移值。
另外为了提高仪器分辨力,还要对干涉条纹进行细分。
为达到这些目的,干涉仪必须有两个位相差为90度的电信号输出,一个按光程的正弦变化,一个按余弦变化。
所以,移相器也是干涉仪测量系统的重要组成部分。
常用的移相方法有机械移相,翼形板移相,金属膜移相和偏振法移相。
干涉条纹计数时,通过移相获得两路相差π/2的干涉条纹的光强信号,该信号经放大,整形,细分及倒向等处理,可以获得四个相位依次相差π/2的脉冲信号。
若将脉冲排列的相位顺序在反射镜正向移动时定为1、2、3、4,反向移动时定为1、4、3、2;后续的逻辑电路便可以根据脉冲1后面的相位是2还是4判断脉冲的方向,并送入加脉冲门或减脉冲门,便实现了判向的目的。
同时经判向电路后,将一个周期的干涉信号变成四个脉冲输出信号。
实现干涉条纹的四倍频计数,相应的测量方程变为
8λ
N
L = 本文着重对信号处理部分的分析:
二 信号处理部分系统设计
第一种设计方案
根据课题设计要求可分为5方面来设计与论述: 系统设计框架
光电传感器光电传感器
信号变换
信号变换
Sin x
-sin x
Cos x
-cos x
整形
整形
电压抬升和异或电路
数字化处理及电压
抬升
判向电路
采集显示
判向
计数
1.信号变换放大部分
课题设计要求用光电传感器采集到的信号sinx和cosx进行不失真的放大且转换为双端输出信号,即放大后位sinx、-sinx、cosx、-cosx,用来给后级信号处理为脉冲信号。
为使信号不失真,就必须保证电路的对称性,所以我们采用单端输入双端输出的差动放大级进行信号的变换,同时用高精度,低漂移的运放来代替晶体三极管。
本电路用的运放是OP07
电路如图所示。
OP07是一种低噪声,非斩波稳零的双极性运算放大器集成电路。
由于OP07具有非常低的输入失调电压,所以OP07在很多应用场合不需要额外的调零措施。
OP07同时具有输入偏置电流低和开环增益高的特点。
2.整形电路
为了倍频和产生判向信号,需要将sinx、-sinx、cosx、-cosx的波形变换成占空比小于20%和占空比为50%的脉冲。
所以设计的是可改变占空比的整形电路,电路如图所示。
由电路图可知Vres=
R1/(R1+RW)*VCC,于是当输入的信号大于Vres时,比较器变为高电平。
当输入的信号大于Vres时比较器输出为低电平。
芯片采用2运放LM393.LM393是双运放,高增益消耗电流小,输入失调电压小,共模输入电压范围宽,高精度电压比较器组成的集成电路,输出与TTL,DTK,MOS,CMOS等兼容,输出可以用开路集电极连接“或”门。
3电压抬升电路
太高电压可以用运放组成的加法器,将一个直流电压和一个输入信号接在运放的正端,即正反馈效用,然而电平抬高多少就是加在输入信号端的直流电压。
芯片采用4运放LM324.电路图如图所示,电压太高值Vh=(R4/R5*V+R4/R6*Vin),当Vh大于输入波形的负电压是即可将输入信号太高至0V以上,从而对后面的电路处理信号带来方便且使信号更加的稳定。
LM324运行放大器是价格便宜的带差动输入功能的4运算放大器,可工作在单电源下,电压范围是3.0V—32V或16V。
LM324具有短跑保护输出,真差动输入级,可在单电源下工作,低偏置电流,每封装含有4个运算放大器,共模范围扩展到负电源,行业标准的引脚排列,输入端具有静电保护功能。
4异或电路
异或电路的主要作用是信号的合成,使多路信号合成一路在数据总线上传输,使之能够处理4路信号变为处理1路信号,而且将信号的频率进行了4倍频,可供后面电路进行计数,从而也是计数更加的稳定不受干扰,使系统不容易受外界的影响。
这种将多路信号合并成一路的方法具有电路简单,容易实现。
5判向与计数
(1)判向
这种思想是基于简单的数字电路处理信号,主要是用D触发器来判断2路输入信号哪一路超前哪一路落后,假设有pulse、
Pulse-90的2相位相差为90度的方波,当pulse信号超前pulse-90信号落后时,而pulse 接在触发器的D端,pulse-90接在触发器的CLK端时,这时触发器的输出端Q永远都是高电平,而~Q的输出永远都是低电平,这样以来可以通过电路来看,DOWN_COUNT永远都是高电平,即不可计数,但UP_COUNT
的输出端的高低电平是由计数脉冲决定的,即可在UP_COUNT端产生跟计数脉冲同步的脉冲,所以就可以计数了。
当PULSE-90接在触发器的D端,而PULSE接在触发器的CLK端所产生的计数效果是跟上述的结果相反的。
所以综上所述输入的波形只要有相位差为90的脉冲,计数器即可以自动加减计数。
(2)计数
将输入信号产生的2路加减脉冲信号连接到单片机的P32和P33的2个外部中断进行计数设设置为下降沿触发,这种计数的效果是单片机的外部中断分辨脉冲的响应时间快,而且节省了很多的I/O和计数芯片。
P32有计数脉冲时通过程序来处理使之做加法运算,P33有计数脉冲时通过程序来处理使之做减法运算,
最后的计数结果在通过程序处理用液晶屏显示出来。
第二种方案:
系统原理框图:
光电传感
器
光电传感
器
移向系统
放大整
形及电
压抬升
系统
Sin x
Sin x Cos x
单稳态细
分系统判向系
统
单片机控
制及显示
系统
加计数脉冲
减计数脉冲
干涉条纹
二各部分电路设计
1 光电传感器及移向系统
移向系统我们采用最简单的模拟移相电路RC移相和LC移相,这里我们采用RC移相电路。
因为这里需要移向90度,所以设计一个0~180°超前有源移相电路。
移向波形如图所示:
2 放大整形及电压抬升系统
(1) 放大电路采用低噪声的仪用放大器,电路结构简单,输入阻抗较高,放大陪数可调且共模抑制比较高等仪用放大用OP07构成,OP07是一种低噪声,非斩波稳零的双极性运算放大器集成电路。
且OP07具有非常低的输入失调电压,所以OP07在很多应用场合不需要额外的调零措施。
电路如图所示:
(2) 电压抬升电路:
(2)利用电压跟随器输入等于输出及加法电路的原理把输入信号正负的信号电压抬升
到0V以上,便于数字电路信号处理。
(3)整形电路:整形电路可以用集成运放构成斯密特触发器来进行整形,但是电路相对来说有点复杂且波形有一些失真,所以这里运用普通的反相器(74LS04)来进行整形。
电路如图所示。
3 单稳态细分电路:信号细分电路有称插补器,是采用电路手段对周期的增量码信号进行插值提高仪器分辨力的一种方法。
细分的基本原理是:根据周期性测量信号的波形,幅值或者相位(两路相位相差90度)的变化规律,在一个周期内具有两个上升沿和两个下降沿,通过对边沿的处理实现四细分,从而得优于一个信号周期的更高的分辨力。
单稳态电路如图所示:
由四个单稳态电路可构成四细分电路,把两路相位相差90度的信号细分为四路(A、A'、B、B')取上升沿输出。
四细分的波形如图所示:
4 判向系统:根据两路方波相位的相对导前和滞后的关系作为判别依据。
如果A’出现在B为负的半周期,则A滞后于B,正向运动;如果A'出现在B为正的半周期,则A超前于B反向运动。
前进后退
辨向电路是以与门和或门构成,取四细分的信号的相位关系来进行辨向。
辨向电路如图所示:
得到的加计数脉冲和减计数器脉冲:
加计数脉冲:
减计数脉冲:
5 单片机控制及显示系统:利用单片机的两个外部中断来进行计数,即将输入信号产生的2路加减脉冲信号连接到单片机的P32和P33的2个外部中断进行计数设设置为下降沿触发,这种计数的效果是单片机的外部中断分辨脉冲的响应时间快,而且节省了很多的I/O 和计数芯片。
P32有计数脉冲时通过程序来处理使之做加法运算,P33有计数脉冲时通过程序来处理使之做减法运算。
最后的通过公式8λ
N
L = 计算出结果用液晶屏显示出来,
这里液晶显示的数据为四倍频的频率。
电路图如图所示:
测试结果:
最后测试的第二个方案的数据:
1 模拟正弦波输入信号(300mv 760HZ)进行移向放大整形,细分判向都能达到设计的效果。
测试效果图为:
2 得到的加减计数脉冲的频率是输入信号频率的4陪,测试用液晶显示的效果图如图所示:显示的频率3050HZ。
其他数据记录情况:
输入信号频率加计数脉冲频率输入信号频率减计数脉冲频率50HZ 200HZ 50HZ 200HZ 100HZ 400HZ 100HZ 400HZ 150HZ 600HZ 150HZ 600HZ 200HZ 801HZ 200HZ 802HZ 250HZ 1002HZ 250HZ 1003HZ 300HZ 1202HZ 300HZ 1203HZ 400HZ 1603HZ 400HZ 1602HZ 600HZ 2405HZ 600HZ 2404HZ 700HZ 2806HZ 700HZ 2805HZ 800HZ 3210HZ 800HZ 3208HZ 900HZ 3611HZ 900HZ 3610HZ 1000HZ 4014HZ 1000HZ 4013HZ 1100HZ 4414HZ 1100HZ 4414HZ 1200HZ 4815HZ 1200HZ 4815HZ 1300HZ 5216HZ 1300HZ 5215HZ
系统总体实物图:
参考文献:
【1】陈家壁彭润玲激光原理及应用电子工业出版社
【2】江晓安董秀峰模拟电子技术西安电子科技大学出版社
【3】江晓安董秀峰杨颂华数字电子技术西安电子科技大学出版社
【4】彭伟单片机程序C语言程序设计100例电子工业出版社
系统整体程序:
/***************************************************************************** **********************************************************
说明:以下程序是用单片机的2个外部中断来采集数据,在采集过程中只有一个外部中断
接收数据,即下降沿触发方式,
液晶所显示的是1s所采集的脉冲数,操作是无需改动程序,只需接好外部的I/O口即可********************************************************************
*******************************************************************/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit E=P2^3; //1602使能引脚
sbit RW=P2^2; //1602读写引脚
sbit RS=P2^1; //1602数据/命令选择引脚
uchar code table[]={0,1,2,3,4,5,6,7,8,9}; //数字显示所需要的数组
uchar code table1[]={"forward= 0"}; //显示提示,forward计数为物体向前移动所接收到的波形个数
uchar code table2[]={"back= 0"}; //显示提示,back计数为物体向后移动所接收到的波形个数
uint num=0,forward=0,back=0,count_forward=0,count_back=0;
/********************************************************************
函数名:void delay(uchar xms)
功能:延时xms
参数:所需要延时的时间数
返回;无
********************************************************************/
void delay(uchar xms)
{
uchar i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
/*******************************************************************
函数名:void LCD_delay()
功能:延时
参数:无
返回:无
*******************************************************************/
void LCD_delay() //延时
{
int i,j;
for(i=0; i<=100; i++)
for(j=0; j<=20; j++);
}
/******************************************************************* 函数名:void write_com(uchar del)
功能:写指令给液晶
参数:所要操作的具体指令
返回:无
*******************************************************************/ void write_com(uchar del) //写指令
{
P0 = del;
RS = 0;
RW = 0;
E = 0;
LCD_delay();
E = 1;
LCD_delay();
}
/******************************************************************* 函数名:void write_date(uchar del)
功能:写数据给液晶
参数:所要操作的具体数据
返回:无
*******************************************************************/ void write_date(uchar del) //写数据
{
P0 = del;
RS = 1;
RW = 0;
E = 0;
LCD_delay();
E = 1;
LCD_delay();
}
/******************************************************************* 函数名:void LCD1602_char(uchar hang,uchar lie,char sign)
功能:写字符给液晶,位置为(hang,lie)
参数:hang,lie
返回:无
*******************************************************************/ void LCD1602_char(uchar hang,uchar lie,char sign) //写字符
{
uchar a;
if(hang == 1) a = 0x80;
if(hang == 2) a = 0xc0;
a = a + lie - 1;
write_com(a);
write_date(sign);
}
/******************************************************************* 函数名:void LCD1602_string(uchar hang,uchar lie,uchar *p)
功能:写字符串给液晶,位置为(hang,lie),用数组的头指针
参数:hang,lie
返回:无
*******************************************************************/ void LCD1602_string(uchar hang,uchar lie,uchar *p) //写字符串
{
uchar a;
if(hang == 1) a = 0x80;
if(hang == 2) a = 0xc0;
a = a + lie - 1;
write_com(a);
while(1)
{
if(*p == '\0') break;
write_date(*p);
p++;
}
}
/******************************************************************* 函数名:void LCD1602_init(void)
功能:1602初始化
参数:hang,lie
返回:无
*******************************************************************/ void LCD1602_init(void) //初始化
{
write_com(0x01);
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0xd0);
LCD1602_string(1,1,table1);
LCD1602_string(2,1,table2);
}
/******************************************************************* 函数名:void init_interrupr()
功能:外部中断0、外部中断1、定时器0的初始化
参数:无
返回:无
*******************************************************************/ void init_interrupr()
{
TMOD=0x10; //设置定时器工作方式为0
TH1=0xd8; //TH1=(65536-10000)/256
TL1=0xf0; //TL1=(65536-10000)%256
ET1=1; //开定时器中断
TR1=1; //定时器运行
EA=1; //开总中断
EX0=1; //开外部中断
IT0=1; //外部中断负跳沿有效
EX1=1; //开外部中断
IT1=1; //外部中断负跳沿有效
}
/******************************************************************* 函数名:void display(uint forward,uint back)
功能:显示数据forward、back
参数:forward、back
返回:无
*******************************************************************/ void display(uint forward,uint back)
{
LCD1602_char(1,9,(forward/1000)+0x30);
LCD1602_char(1,10,(forward%1000/100)+0x30);
LCD1602_char(1,11,(forward%100/10)+0x30);
LCD1602_char(1,12,(forward%10)+0x30);
LCD1602_char(2,6,(back/1000)+0x30);
LCD1602_char(2,7,(back%1000/100)+0x30);
LCD1602_char(2,8,(back%100/10)+0x30);
LCD1602_char(2,9,(back%10)+0x30);
}
/******************************************************************* 函数名:void main()
功能:用while循环一直显示所采集的数控
参数:无
返回:无
*******************************************************************/
void main()
{
LCD1602_interrupr();
init_irq();
while(1)
{
display(count_forward,count_back);
}
}
/******************************************************************* 函数名:void irq0() interrupt 0
功能:外部中断0采集数据forward
参数:无
返回:无
*******************************************************************/ void irq0() interrupt 0 //外部中断0
{
forward++;
}
/******************************************************************* 函数名:void irq0() interrupt 2
功能:外部中断1采集数据back
参数:无
返回:无
*******************************************************************/ void irq1() interrupt 2 //外部中断0
{
back++;
}
/******************************************************************* 函数名:void timer0() interrupt 3
功能:定时器0,0.1s采集一次数据
参数:无
返回:无
*******************************************************************/ void timer0() interrupt 3 //定时器中断1 10ms中断一次
{
TH1=0xd8; //TH1=(65536-10000)/256;
TL1=0xf0; //TL1=(65536-10000)%256;
num++;
if(num==10) //0.1s采集信息一次
{
num=0;
count_forward=forward;
forward=0;
count_back=back;
back=0;
}
}
系统总体原理图:
放大电压抬升整形电路图:
细分判向电路图:。