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:100
    fps    = 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)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值