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)

  • 5
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
很抱歉,我的回答似乎有误,与您的问题不符,我重新回答一下。 PSO振镜扫描是一种利用粒子群算法(PSO)来优化振镜的控制参数,从而实现高速且精确的扫描。下面是一个PSO振镜扫描的实例解析: 假设我们要实现一个具有10个像素的行扫描,每个像素的扫描时间为1毫秒。我们使用PSO算法来寻找最佳的振镜控制参数,以便在最短的时间内完成扫描。 首先,我们需要定义目标函数,用于衡量每个粒子在当前控制参数下的扫描效果。目标函数可以是扫描时间的倒数,因为我们的目标是在最短的时间内完成扫描。由于PSO算法是一个优化算法,因此我们需要最小化目标函数,而不是最大化它。 然后,我们初始化一个粒子群,每个粒子代表一个振镜的控制参数。我们需要为每个粒子随机生成初始位置和速度,并计算其当前的扫描时间。接下来,我们需要为每个粒子计算其个体最优解和全局最优解。个体最优解是指粒子在其运动历史中达到的最佳位置,而全局最优解是所有粒子中最佳的位置。 然后,我们开始迭代PSO算法。在每个迭代中,粒子将根据其当前位置和速度更新其位置和速度。更新公式包括三个部分:惯性项、个体项和全局项。惯性项使粒子保持其当前的速度方向,个体项使粒子向其个体最优解移动,全局项使粒子向全局最优解移动。更新后,我们需要重新计算每个粒子的扫描时间和最优解。 最后,当满足停止条件时,PSO算法停止迭代。停止条件可以是达到最大迭代次数或达到目标精度。 通过PSO算法,我们可以找到最佳的振镜控制参数,从而实现高速且精确的扫描

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值