电动汽车原理基于Matlab的伺服电机正反转动画仿真.docx

上传人:b****5 文档编号:29525240 上传时间:2023-07-24 格式:DOCX 页数:14 大小:163.15KB
下载 相关 举报
电动汽车原理基于Matlab的伺服电机正反转动画仿真.docx_第1页
第1页 / 共14页
电动汽车原理基于Matlab的伺服电机正反转动画仿真.docx_第2页
第2页 / 共14页
电动汽车原理基于Matlab的伺服电机正反转动画仿真.docx_第3页
第3页 / 共14页
电动汽车原理基于Matlab的伺服电机正反转动画仿真.docx_第4页
第4页 / 共14页
电动汽车原理基于Matlab的伺服电机正反转动画仿真.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

电动汽车原理基于Matlab的伺服电机正反转动画仿真.docx

《电动汽车原理基于Matlab的伺服电机正反转动画仿真.docx》由会员分享,可在线阅读,更多相关《电动汽车原理基于Matlab的伺服电机正反转动画仿真.docx(14页珍藏版)》请在冰豆网上搜索。

电动汽车原理基于Matlab的伺服电机正反转动画仿真.docx

电动汽车原理基于Matlab的伺服电机正反转动画仿真

电动汽车原理基于Matlab的伺服电机正反转动画仿真

LT

据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。

MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室)。

是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。

它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。

MATLAB由一系列工具组成。

这些工具方便用户使用MATLAB的函数和文件,其中许多工具采用的是图形用户界面。

包括MATLAB桌面和命令窗口、历史命令窗口、编辑器和调试器、路径搜索和用于用户浏览帮助、工作空间、文件的浏览器。

随着MATLAB的商业化以及软件本身的不断升级,MATLAB的用户界面也越来越精致,更加接近Windows的标准界面,人机交互性更强,操作更简单。

而且新版本的MATLAB提供了完整的联机查询、帮助系统,极大的方便了用户的使用。

简单的编程环境提供了比较完备的调试系统,程序不必经过编译就可以直接运行,而且能够及时地报告出现的错误及进行出错原因分析。

Matlab是一个高级的矩阵/阵列语言,它包含控制语句、函数、数据结构、输入和输出和面向对象编程特点。

用户可以在命令窗口中将输入语句与执行命令同步,也可以先编写好一个较大的复杂的应用程序(M文件)后再一起运行。

新版本的MATLAB语言是基于最为流行的C++语言基础上的,因此语法特征与C++语言极为相似,而且更加简单,更加符合科技人员对数学表达式的书写格式。

使之更利于非计算机专业的科技人员使用。

而且这种语言可移植性好、可拓展性极强,这也是MATLAB能够深入到科学研究及工程计算各个领域的重要原因。

一、伺服电机简介与仿真结构图

伺服电机(servomotor)是指在伺服系统中控制机械元件运转的发动机,是一种补助马达间接变速装置。

伺服电机可使控制速度,位置精度非常准确,可以将电压信号转化为转矩和转速以驱动控制对象。

伺服电机转子转速受输入信号控制,并能快速反应,在自动控制系统中,用作执行元件,且具有机电时间常数小、线性度高、始动电压等特性,可把所收到的电信号转换成电动机轴上的角位移或角速度输出。

分为直流和交流伺服电动机两大类,其主要特点是,当信号电压为零时无自转现象,转速随着转矩的增加而匀速下降。

伺服系统(servomechanism)是使物体的位置、方位、状态等输出被控量能够跟随输入目标(或给定值)的任意变化的自动控制系统。

伺服主要靠脉冲来定位,基本上可以这样理解,伺服电机接收到1个脉冲,就会旋转1个脉冲对应的角度,从而实现位移,因为,伺服电机本身具备发出脉冲的功能,所以伺服电机每旋转一个角度,都会发出对应数量的脉冲,这样,和伺服电机接受的脉冲形成了呼应,或者叫闭环,如此一来,系统就会知道发了多少脉冲给伺服电机,同时又收了多少脉冲回来,这样,就能够很精确的控制电机的转动,从而实现精确的定位,可以达到0.001mm。

直流伺服电机分为有刷和无刷电机。

有刷电机成本低,结构简单,启动转矩大,调速范围宽,控制容易,需要维护,但维护不方便(换碳刷),产生电磁干扰,对环境有要求。

因此它可以用于对成本敏感的普通工业和民用场合。

无刷电机体积小,重量轻,出力大,响应快,速度高,惯量小,转动平滑,力矩稳定。

控制复杂,容易实现智能化,其电子换相方式灵活,可以方波换相或正弦波换相。

电机免维护,效率很高,运行温度低,电磁辐射很小,长寿命,可用于各种环境。

2、交流伺服电机也是无刷电机,分为同步和异步电机,目前运动控制中一般都用同步电机,它的功率范围大,可以做到很大的功率。

大惯量,最高转动速度低,且随着功率增大而快速降低。

因而适合做低速平稳运行的应用。

3、伺服电机内部的转子是永磁铁,驱动器控制的U/V/W三相电形成电磁场,转子在此磁场的作用下转动,同时电机自带的编码器反馈信号给驱动器,驱动器根据反馈值与目标值进行比较,调整转子转动的角度。

伺服电机的精度决定于编码器的精度(线数)。

交流伺服电机和无刷直流伺服电机在功能上的区别:

交流伺服要好一些,因为是正弦波控制,转矩脉动小。

直流伺服是梯形波。

但直流伺服比较简单,便宜。

伺服电机的如此多的优点与应用面,在这里我们基于图2.1作伺服电机的动画仿真。

 

二、仿真结果

根据图2.1简图,查阅相关资料,编写Matlab程序(程序见附录1),运行结果如下:

仿真结果分析:

通过Matlab软件编写了伺服电机转动的动画图程序,实现了PLC模拟系统的简易仿真,简单掌握了Matlab软件的操作。

 

三、附录

附录1:

clc;clearall

figure('numbertitle','off','name','MATLAB动画演示(PLC模拟系统仿真)');

%figure('name','自控门');

axis([0,70,0,70]);holdon;axisoff;

%text(23,55,'自控门','fontsize',20,'color','r');

text(7,32,'放大器','fontsize',8,'color','k');

text(27,35,'伺服电动机','fontsize',8,'color','r');

%text(18,14,'门','fontsize',10,'color','r');

text(43.5,24,'电机启动','fontsize',10,'color','k');

text(43.5,12,'电机关闭','fontsize',10,'color','k');

text(43.5,0,'GND','fontsize',10,'color','k');

%画导线

c1=line([1;65],[50;50],'color','g','linewidth',2);

c2=line([2;58],[45;45],'color','g','linewidth',2);

c22=line([4;55],[40;40],'color','g','linewidth',2);

c3=line([4;7],[35;35],'color','g','linewidth',2);

c4=line([1;1],[25;50],'color','g','linewidth',2);

c44=line([1;7],[25;25],'color','g','linewidth',2);

c5=line([4;4],[35;40],'color','g','linewidth',2);

c55=line([2;2],[30;45],'color','g','linewidth',2);

c6=line([2;7],[30;30],'color','g','linewidth',2);

c7=line([65;65],[2;50],'color','g','linewidth',2);

c77=line([58;58],[8;45],'color','g','linewidth',2);

c777=line([55;55],[23;40],'color','g','linewidth',2);

c8=line([49;55],[23;23],'color','g','linewidth',2);

c88=line([49;58],[8;8],'color','g','linewidth',2);

c888=line([49;65],[2;2],'color','g','linewidth',2);

%画放大器

c9=line([7,7],[23;37],'color','g','linewidth',2);

c10=line([7,12],[37;37],'color','g','linewidth',2);

c11=line([12,12],[23;37],'color','g','linewidth',2);

c12=line([7,12],[23;23],'color','g','linewidth',2);

holdon;

%画箭头

j1=line([6;7],[35.5;35],'linewidth',2);

j2=line([6;7],[34.5;35],'linewidth',2);

j3=line([6;7],[30.5;30],'linewidth',2);

j4=line([6;7],[29.5;30],'linewidth',2);

j55=line([6;7],[25.5;25],'linewidth',2);

j66=line([6;7],[24.5;25],'linewidth',2);

j5=line([43;44],[20;20.5],'linewidth',2);

j6=line([43;44],[20;19.5],'linewidth',2);

j7=line([43;44],[10;10.5],'linewidth',2);

j8=line([43;44],[10;9.5],'linewidth',2);

holdon;

%画电阻

fill([37,38,38,37],[28,28,2,2],[1,0.1,0.5]);

fill([42,43,43,42],[28,28,2,2],[1,0.1,0.5]);

c111=line([49,44],[23,20],'color','g','linewidth',2);

c222=line([49,44],[8,10],'color','g','linewidth',2);

c333=line([49,49],[0,3],'color','g','linewidth',2);

c444=line([48.5,48.5],[0.5,2.5],'color','g','linewidth',2);

c555=line([48,48],[1,2],'color','g','linewidth',2);

%画连接电阻的导线

f3=line([37.5;37.5],[1;2],'color','g','linewidth',2);

f4=line([37.5;42.5],[1;1],'color','g','linewidth',2);

f5=line([42.5;42.5],[1;2],'color','g','linewidth',2);

f6=line([37.5;37.5],[28;29],'color','g','linewidth',2);

f7=line([37.5;42.5],[29;29],'color','g','linewidth',2);

f8=line([42.5;42.5],[28;29],'color','g','linewidth',2);

f9=line([40;40],[17;29],'color','g','linewidth',2);

f10=line([40;40],[1;15.5],'color','g','linewidth',2);

%画电源

f11=line([39;41],[15.5;15.5],'color','r','linewidth',2);

f12=line([38.5;41.5],[17;17],'color','r','linewidth',2);

holdon;

%画电机的两端

t=0:

pi/100:

2*pi;

fill(18+2*sin(t),32.5+5*cos(t),[0.7,0.85,0.9]);

fill(25+2*sin(t),32.5+5*cos(t),[0.7,0.85,0.9]);

e0=line([12;18],[32.5;32.5],'color','r','linewidth',2);

%画电机的表面(用八根不同颜色的线代替,每根之间相差pi/4)

%简便起见,初始条件下可将八根线分成两组放在电机的顶端和底端

sig1=line([18;25],[37.5;37.5],'color','r','linestyle','-','linewidth',2);

sig2=line([18;25],[27.5;27.5],'color','m','linestyle','-','linewidth',2);

sig3=line([18;25],[37.5;37.5],'color','w','linestyle','-','linewidth',2);

sig4=line([18;25],[27.5;27.5],'color','b','linestyle','-','linewidth',2);

sig5=line([18;25],[37.5;37.5],'color','c','linestyle','-','linewidth',2);

sig6=line([18;25],[27.5;27.5],'color','g','linestyle','-','linewidth',2);

sig7=line([18;25],[37.5;37.5],'color','k','linestyle','-','linewidth',2);

sig8=line([18;25],[27.5;27.5],'color','b','linestyle','-','linewidth',2);

a=0;%设定电机运转的初始角度

da=0.015;%设定电机正转的条件

s=0;%设定门运动的初始条件

ds=0.015;%设定门运动的周期

whiles<200

a=a+da;

%(当线运动到电机背面时会覆盖电机左端,用abs可解决这一问题)

xa1=18+abs(2*sin(a));

xa2=25+2*sin(a);

ya1=32.5+5*cos(a);

ya2=32.5+5*cos(a);

xb1=18+2*abs(sin(a+pi));

xb2=25+2*sin(a+pi);

yb1=32.5+5*cos(a+pi);

yb2=32.5+5*cos(a+pi);

xc1=18+abs(2*sin(a+pi/2));

xc2=25+2*sin(a+pi/2);

yc1=32.5+5*cos(a+pi/2);

yc2=32.5+5*cos(a+pi/2);

xd1=18+2*abs(2*sin(a-pi/2));

xd2=25+2*sin(a-pi/2);

yd1=32.5+5*cos(a-pi/2);

yd2=32.5+5*cos(a-pi/2);

xe1=18+abs(2*sin(a+pi/4));

xe2=25+2*sin(a+pi/4);

ye1=32.5+5*cos(a+pi/4);

ye2=32.5+5*cos(a+pi/4);

xf1=18+2*abs(2*sin(a+pi*3/4));

xf2=25+2*sin(a+pi*3/4);

yf1=32.5+5*cos(a+pi*3/4);

yf2=32.5+5*cos(a+pi*3/4);

xg1=18+abs(2*sin(a-pi*3/4));

xg2=25+2*sin(a-pi*3/4);

yg1=32.5+5*cos(a-pi*3/4);

yg2=32.5+5*cos(a-pi*3/4);

xh1=18+2*abs(sin(a-pi/4));

xh2=25+2*sin(a-pi/4);

yh1=32.5+5*cos(a-pi/4);

yh2=32.5+5*cos(a-pi/4);

%绘制电机表面各线条的运动

set(sig1,'xdata',[xa1;xa2],'ydata',[ya1;ya2]);

set(sig2,'xdata',[xb1;xb2],'ydata',[yb1;yb2]);

set(sig3,'xdata',[xc1;xc2],'ydata',[yc1;yc2]);

set(sig4,'xdata',[xd1;xd2],'ydata',[yd1;yd2]);

set(sig5,'xdata',[xe1;xe2],'ydata',[ye1;ye2]);

set(sig6,'xdata',[xf1;xf2],'ydata',[yf1;yf2]);

set(sig7,'xdata',[xg1;xg2],'ydata',[yg1;yg2]);

set(sig8,'xdata',[xh1;xh2],'ydata',[yh1;yh2]);

s=s+ds;

set(gcf,'doublebuffer','on');

drawnow

end

b=0;%设定电机反转条件

db=0.015;

whiles<200

b=b-db;

xa1=18+abs(2*sin(a+b));

xa2=25+2*sin(a+b);

ya1=32.5+5*cos(a+b);

ya2=32.5+5*cos(a+b);

xb1=18+2*abs(sin(a+pi+b));

xb2=25+2*sin(a+pi+b);

yb1=32.5+5*cos(a+pi+b);

yb2=32.5+5*cos(a+pi+b);

xc1=18+abs(2*sin(a+pi/2+b));

xc2=25+2*sin(a+pi/2+b);

yc1=32.5+5*cos(a+pi/2+b);

yc2=32.5+5*cos(a+pi/2+b);

xd1=18+2*abs(2*sin(a-pi/2+b));

xd2=25+2*sin(a-pi/2+b);

yd1=32.5+5*cos(a-pi/2+b);

yd2=32.5+5*cos(a-pi/2+b);

xe1=18+abs(2*sin(a+pi/4+b));

xe2=25+2*sin(a+pi/4+b);

ye1=32.5+5*cos(a+pi/4+b);

ye2=32.5+5*cos(a+pi/4+b);

xf1=18+2*abs(2*sin(a+pi*3/4+b));

xf2=25+2*sin(a+pi*3/4+b);

yf1=32.5+5*cos(a+pi*3/4+b);

yf2=32.5+5*cos(a+pi*3/4+b);

xg1=18+abs(2*sin(a-pi*3/4+b));

xg2=25+2*sin(a-pi*3/4+b);

yg1=32.5+5*cos(a-pi*3/4+b);

yg2=32.5+5*cos(a-pi*3/4+b);

xh1=18+2*abs(sin(a-pi/4+b));

xh2=25+2*sin(a-pi/4+b);

yh1=32.5+5*cos(a-pi/4+b);

yh2=32.5+5*cos(a-pi/4+b);

%绘制电机表面各线条的运动

set(sig1,'xdata',[xa1;xa2],'ydata',[ya1;ya2]);

set(sig2,'xdata',[xb1;xb2],'ydata',[yb1;yb2]);

set(sig3,'xdata',[xc1;xc2],'ydata',[yc1;yc2]);

set(sig4,'xdata',[xd1;xd2],'ydata',[yd1;yd2]);

set(sig5,'xdata',[xe1;xe2],'ydata',[ye1;ye2]);

set(sig6,'xdata',[xf1;xf2],'ydata',[yf1;yf2]);

set(sig7,'xdata',[xg1;xg2],'ydata',[yg1;yg2]);

set(sig8,'xdata',[xh1;xh2],'ydata',[yh1;yh2]);

s=s+ds;

set(gcf,'doublebuffer','on');

drawnow;

end

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 兵器核科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1