本文主要是介绍MEMS振镜扫描的Lissajous图形Matlab仿真,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在激光扫描系统中主要有如下几种扫描方式:检流式扫描振镜(包括共振振镜),Nipkow盘扫描,里斯利棱镜,多面转镜和MEMS振镜,最常用的为采用光栅扫描的检流式振镜,其中MEMS振镜体积小巧,单镜即可实现二维扫描,在激光扫描系统中也有较多应用,但是MEMS振镜的扫描轨迹常为Lissajous图像,与相比光栅扫描,较为复杂,在图像采集或者图像输出时,需要将图像按照扫描轨迹进行重建。
Matlab 仿真图像如下.
clear;close all;clc;
Ax = 1; %振幅
Ay = 1; wy = 2;
wx = 3; %频率
deltaTheta = 1/2 * pi; %相位差(初始相位不考虑)
wf = gcd(wx,wy); %重复扫描频率(只扫一个周期)x = Ax * cos(wx * t );
t = linspace(0,2*pi/wf,10000);plot(x,y);
y = Ay * cos(wy * t + deltaTheta);
Lissajous图像
1).通过修改扫描频率和相位差可以改变图像轨迹的密集度,均匀度,甚至是是否闭环。
2).轨迹实现闭环的条件是:X向极点数与Y向极点数之比等于频率之比。
3).通过计算X或者Y的极点位置时,另一向的坐标分布的均匀性来判断Lissajous曲线分布是否较均匀。
以下程序是根据MEMS振镜(LM2120)计算的扫描路径规划,(暂未实物校验)
%% function 1
% 计算有效的fps,满足条件:图像帧频是x和y频率的最大公约数
% warining:fps也可能是小数,这里不考虑
wxMin = 25900; %查表得 x 的最大振动频率
wxMax = 25990; %查表得 x 的最小振动频率
wyMin = 2060; %查表得 y 的最大振动频率
wyMax = 2140; %查表得 y 的最小振动频率
wx = (wxMin+wxMax)/2; %暂时设定x频率
wy = (wyMin+wyMax)/2; %暂时设定y频率
validFps = zeros(1,100);
validNum = 0;
for nf = 5:100fps = nf; %设定 帧频wx = round(wx/fps)*fps; %优化设定x频率wy = round(wy/fps)*fps; %优化设定y频率wf = gcd(wx,wy); %扫描频率if((fps==wf)&&(wx>wxMin)&&(wx<wxMax)&&(wy>wyMin)&&(wy<wyMax))validNum = validNum + 1;validFps(validNum) = fps;end
end%% funciton 2
% step 1:设定采样点数和扫描帧频
nSpots = 1280; %设定 x 向采样点
nLine = 1024; %设定 y 向采样点
fps = 24; %设定 帧频
sT = 1 / fps; %得 扫描周期% step 2:根据输入电压,查表得到扫描频率工作范围
wxMin = 25900; %查表得 x 的最大振动频率
wxMax = 25990; %查表得 x 的最小振动频率
wyMin = 2060; %查表得 y 的最大振动频率
wyMax = 2140; %查表得 y 的最小振动频率% step 3:优化图像扫描频率和周期,满足周期的整数倍
wx = (wxMin+wxMax)/2; %暂时设定x频率
wy = (wyMin+wyMax)/2; %暂时设定y频率
wx = round(wx/fps)*fps; %优化设定x频率
wy = round(wy/fps)*fps; %优化设定y频率
wf = gcd(wx,wy); %验证扫描频率xT = 1 / wx; %对应 x 的振动周期
yT = 1 / wy; %对应 y 的振动周期nR = sT/yT; %y交叉扫描点数
nL = sT/xT; %y总扫描行数t = linspace(0,sT,nSpots*nLine);phi = 1/2 * pi;
x=cos(2*pi*wx*t);
y=sin(2*pi*wy*t + phi);
plot(x,y)
这篇关于MEMS振镜扫描的Lissajous图形Matlab仿真的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!