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

2024-05-06 21:48

本文主要是介绍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仿真的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/965471

相关文章

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(五):Blender锥桶建模

前言 本系列教程旨在使用UE5配置一个具备激光雷达+深度摄像机的仿真小车,并使用通过跨平台的方式进行ROS2和UE5仿真的通讯,达到小车自主导航的目的。本教程默认有ROS2导航及其gazebo仿真相关方面基础,Nav2相关的学习教程可以参考本人的其他博客Nav2代价地图实现和原理–Nav2源码解读之CostMap2D(上)-CSDN博客往期教程: 第一期:基于UE5和ROS2的激光雷达+深度RG

matlab读取NC文件(含group)

matlab读取NC文件(含group): NC文件数据结构: 代码: % 打开 NetCDF 文件filename = 'your_file.nc'; % 替换为你的文件名% 使用 netcdf.open 函数打开文件ncid = netcdf.open(filename, 'NC_NOWRITE');% 查看文件中的组% 假设我们想读取名为 "group1" 的组groupName

利用matlab bar函数绘制较为复杂的柱状图,并在图中进行适当标注

示例代码和结果如下:小疑问:如何自动选择合适的坐标位置对柱状图的数值大小进行标注?😂 clear; close all;x = 1:3;aa=[28.6321521955954 26.2453660695847 21.69102348512086.93747104431360 6.25442246899816 3.342835958564245.51365061796319 4.87

C# double[] 和Matlab数组MWArray[]转换

C# double[] 转换成MWArray[], 直接赋值就行             MWNumericArray[] ma = new MWNumericArray[4];             double[] dT = new double[] { 0 };             double[] dT1 = new double[] { 0,2 };

perl的学习记录——仿真regression

1 记录的背景 之前只知道有这个强大语言的存在,但一直侥幸自己应该不会用到它,所以一直没有开始学习。然而人生这么长,怎就确定自己不会用到呢? 这次要搭建一个可以自动跑完所有case并且打印每个case的pass信息到指定的文件中。从而减轻手动跑仿真,手动查看log信息的重复无效低质量的操作。下面简单记录下自己的思路并贴出自己的代码,方便自己以后使用和修正。 2 思路整理 作为一个IC d

第六章习题11.输出以下图形

🌏个人博客:尹蓝锐的博客 希望文章能够给到初学的你一些启发~ 如果觉得文章对你有帮助的话,点赞 + 关注+ 收藏支持一下笔者吧~ 1、题目要求: 输出以下图形

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《考虑燃料电池和电解槽虚拟惯量支撑的电力系统优化调度方法》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源程序擅长文章解读,论文与完整源程序,等方面的知识,电网论文源程序关注python

libsvm在matlab中的使用方法

原文地址:libsvm在matlab中的使用方法 作者: lwenqu_8lbsk 前段时间,gyp326曾在论坛里问libsvm如何在matlab中使用,我还奇怪,认为libsvm是C的程序,应该不能。没想到今天又有人问道,难道matlab真的能运行libsvm。我到官方网站看了下,原来,真的提供了matlab的使用接口。 接口下载在: http://www.csie.ntu.edu.

Matlab/Simulink中PMSM模型的反电动势系数和转矩系数

Matlab/Simulink中PMSM模型的反电动势系数和转矩系数_matlab pmsm-CSDN博客