MEMS振镜扫描的Lissajous图形Matlab仿真

来源:互联网 发布:人力资源管理 知乎 编辑:程序博客网 时间:2024/06/06 12:55

     激光扫描系统中主要有如下几种扫描方式:检流式扫描振镜(包括共振振镜),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;    endend%% 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)

原创粉丝点击