第一篇:amesim与matlab联合仿真步骤(自己总结)(精)
Amesim 与 matlab 联合仿真参数设置 实验软件平台
Matlab2009a , amesimR8a , VC6.0 企业版(英文版 步骤: 1 将 VC++中 的 “vcvar32.bat” 文 件 从 Microsoft Visual C++目录(通常是.Microsoft Visual StudioVC98Bin 中拷 贝至 AMESim 目录下。设置环境变量:我的电脑〉环境变 量。设置 AMESim 环境变量:变量名 AME ,值为其安装路 径如安装在 C 盘中则值为 C:+amesim 安装路径。设置 Matlab 环境变量:变量名 MATLAB 值为 D:MATLAB,此 处我安装的 matlab 在 D 盘根目录下。确认在系统环境变量 PATH 中包含系统安装目录 C:WINDOWSsystem32 3 在 Matlab 的目录列表里加上 AMESim 与 Matlab 接口文 件所在的目录 %AME%matlabamesim。File-〉 Set Path-〉 Add Folder 加 上 需 要 联 合 仿 真 的 amesim 文 件 目 录 和 C:AMEsimmatlabamesim(注 意 R8A 版 本 是
将 %AME%scriptingmatlabamesim 设置到 MATLAB 路径中 加入 matlab 默认路径中 将联合仿真的许可证文件 licnese.dat 拷贝到 AMESim 安 装目录下的 licnesing 文件夹中 确认是否在 AMESim 中选择 VC 作为编译器。具体操作 在 AMESim-〉 Opions-> AMESim Preferences->Compilation/Parameters中。.在 MATLAB 命令窗口中输入命令 Mex-setup ,选择 VC 作为编译器
注意点: 1, Vc 建议安装企业版而且是英文的,其第一次打开安装 文件安装并不完全,重启动以后再次点安装文件,会出现于 第一次安装文件不同的界面,就说明没有安装完全
2, Matlab 的安装目录和 amesim 的安装目录都不能在中文 路径下,而去文件夹的名称不能有空格
3, 联合仿真设置成功的标志 : 可以运行 amesim-〉 HELP-〉 GET AMESIM DEMO-〉 interface-〉 amesimsimulink 下的范例
4, 如果运行的现实找不到 matlab bin 则说明系统环境变 量中没有设置 matlab 路径,设置方法见上面,再重启电脑, 再次用 amesim 打开范例并到参数模式下, 运行 TOOLS-〉 Start matlab ,系统会调用 matlab 程序,再在打开的 matlab 中找 到与 amesim 中打开的文件同目录且同名的.mdl 文件,在 matlab 中运行仿真, 如果没有错误则在 amesim 中进入仿真 模式打开相应的元件就可
以看到曲线(注意在 amesim 中不用运行仿真 如果上面设置成功下面不用看 下面给出 amesim4.0 版本设置方法
为了实现二者的联合仿真,需要在 Windows2000 或更高级 操作系统下安装 Visual C++ 6.0,AMESim4.2以上版本与 MATLAB6.1上版本(含 Simulink 1.将 VC++中 的 “vcvar32.bat” 文 件 从 Microsoft Visual C++目录(通常是.Microsoft Visual StudioVC98Bin 中拷 贝至 AMESim 目录下。
2.环境变量确认: 1, 选择“ 控制面板-系统” 或者在“ 我的电脑” 图标上 点右键,选择“ 属性”;
2, 在弹出的“ 系统属性” 窗口中选择“ 高级” 页,选择 “ 环境变量”;
3, 在弹出的“ 环境变量” 窗口中找到环境变量“ AME ” , 它的值就是你所安装 AMESim 的路径,选中改环境变量;4, 点击“ 确认” 按键,该变量就会加到系统中;5, 如上 法确认环境变量 “ MATLAB", 该 值 为你所安装 的 MATLAB 的路径 3.确认是否在 AMESim 中选择 VC 作为编译器。具体操作 在 AMESim-〉 Opions-> AMESim Preferences->Compilation/Parameters中。
4.在 MATLAB 命令窗口中使用 Mex – setup , 选择 VC 作为 编译器。5.在 Matlab 的目录列表里加上 AMESim 与 Matlab 接口文 件所在的
目录 %AME%matlabamesim,其中 %AME% 是 AMESim 的 安 装 目 录 , 如 果 安 装 在 C:AMEsim , 则 就 加 上 C:AMEsimmatlabamesim。
6.The name of the S-Function is the name of the system with an ‘_’ added.7.The input of the interface block in AMESim has its ports in reverse order compared with Simulink.(注意 : 这里的模块的输入口是指在 matlab 中显示 的输入口,而且在 matlab 中的输出口和 simulink 中的接口 是对应的.可以参考帮助文件,里面有详细的提示 8.Remember to change from Parameters to Run mode in AMESim before running the simulation in Simulink or to use File->Write aux.files.注意 : 如果上面的设置还是不成功 , 甚至运行 Amesim 中自带的范例
也会出错 , 那可能是你的软件本身就有问题 , 可以下载一个补 丁就能解决.
第二篇:MATLAB与控制系统仿真实验报告
《MATLAB与控制系统仿真》
实验报告
2013-2014学年 第 1 学期
专业: 班级: 学号: 姓名:
实验三 MATLAB图形系统一、实验目的:
1.掌握绘制二维图形的常用函数。2.掌握绘制三维图形的常用函数。3.熟悉利用图形对象进行绘图操作的方法。4.掌握绘制图形的辅助操作。
二、实验原理:
1,二维数据曲线图
(1)绘制单根二维曲线 plot(x,y);(2)绘制多根二维曲线 plot(x,y)当x是向量,y是有一维与x同维的矩阵时,则绘制多根不同颜色的曲线。当x,y是同维矩阵时,则以x,y对应列元素为横、纵坐标分别绘制曲线,曲线条数等于矩阵的列数。(3)含有多个输入参数的plot函数 plot(x1,y1,x2,y2,…,xn,yn)(4)具有两个纵坐标标度的图形 plotyy(x1,y1,x2,y2)2,图形标注与坐标控制 1)title(图形名称); 2)xlabel(x轴说明)3)ylabel(y轴说明)4)text(x,y图形说明)5)legend(图例1,图例2,…)
6)axis([xmin xmax ymin ymax zmin zmax])3, 图形窗口的分割 subplot(m,n,p)4,三维曲线
plot3(x1,y1,z1,选项1,x2,y2,选项2,…,xn,yn,zn,选项n)5,三维曲面
mesh(x,y,z,c)与surf(x,y,z,c)。一般情况下,x,y,z是维数相同的矩阵。X,y是网格坐标矩阵,z是网格点上的高度矩阵,c用于指定在不同高度下的颜色范围。6,图像处理
1)imread和imwrite函数 这两个函数分别用于将图象文件读入matlab工作空间,以及将图象数据和色图数据一起写入一定格式的图象文件。
2)image和imagesc函数 这两个函数用于图象显示。为了保证图象的显示效果,一般还应使用colormap函数设置图象色图。
三、实验仪器和设备:
计算机一台(带有MATLAB6.5以上的软件环境)。
四、预习要求:
1.复习二维与三维图形的绘图函数。2.复习图形辅助操作。
五、实验内容及步骤:
1,设y[0.53sinx]cosx,在x=0~2π区间取101点,绘制函数曲线。21x
2,已知y1=x2,y2=cos(2x),y3=y1*y2,完成下列操作:
(1)在同一坐标系下用不同的颜色和线型绘制三条曲线;
(2)分别用条形图、阶梯图、杆图和填充图绘制三条曲线。
3,已知
x,x02e y1In(x1x2),x02在-5<=x<=5区间绘制函数曲线。
4,绘制函数的曲面图和等高线
zcosxcosyex2y24
其中x的21个值均匀分布在[-5,5]范围,y的31个值均匀分布在[0,10],要求使用subplot(2,1,1)和subplot(2,1,2)将产生的曲面图和登高图画在同一个窗口上。
5.画出函数
zx2y2sin(xy)的曲面及等高线图。
x2y21绘制平面曲线,并分析参数a对其形状的影响。6.根据2a25a2
四、心得体会:
通过这次实验我能熟练掌握二维和三维图以及其他特殊图形的制作,弄清楚了基本的图形操作规则,大大加深了我对matlab的兴趣。
实验二 MATLAB程序设计
一、实验目的
1.掌握利用if语句实现选择结构的方法。
2.掌握利用switch语句实现多分支选择结构的方法。3.掌握利用for语句实现循环结构的方法。4.掌握利用while语句实现循环结构的方法。
二、实验设备及条件
计算机一台(带有MATLAB6.5以上的软件环境)。
三、实验内容
1.编写求解方程ax2bxc0的根的函数(这个方程不一定为一元二次方程,因a、b、c的不同取值而定),这里应根据a、b、c的不同取值分别处理,有输入参数提示,当a0,b0,c~0时应提示“为恒不等式!”。并输入几组典型值加以检验。
clear,clc a=input('请输入一个数a=');b=input('请输入一个数b=');c=input('请输入一个数c=');m=b^2-4*a*c;if a==0
if b==0
'为恒不等式'
end end
m=b^2-4*a*c;if m>0
x1=(-b+sqrt(m))/(2*a)
x2=(-b-sqrt(m))/(2*a)elseif m==0
x=(-b)/(2*a)else
'不存在正实根' end
2.输入一个百分制成绩,要求输出成绩等级A+、A、B、C、D、E。其中100分为A+,90分~99分为A,80分~89分为B,70分~79分为C,60分~69分为D,60分以下为E。
要求:(1)用switch语句实现。
(2)输入百分制成绩后要判断该成绩的合理性,对不合理的成绩应输出出错信息。
clear,clc for k=1:10
a(k)={89+k};b(k)={79+k};
c(k)={69+k};d(k)={59+k};end A=cell(3,6);A(1,:)={'a','b','c','d','e','f'};A(2,:)={85,76,95,100,40,65};for k=1:6
switch A{2,k}
case 100
r='A+';
case a
r='A';
case b
r='B';
case c
r='C';
case d
r='D';
otherwise
r='E';
end
A(3,k)={r};end A A =
'a'
'b'
'c'
[85]
[76]
[95]
'B'
'C'
'A'
'd'
'e'
[100]
[40]
'A+'
'E'
'f' [65] 'D'
3.利用for循环语句编写计算n!的函数程序,取n分别为-89、0、3、5、10验证其正确性(输入n为负数时输出出错信息)。
clear,clc n=input('请输入一个正数n=');if n<0
'输入错误' elseif n==0
'n!=0' elseif n==1
'n!=1' else
y=1;
for i=1:1:n
y=y*i;
i=i+1;
end
y end 请输入一个正数n=-89
ans =输入错误 请输入一个正数n=0
ans =n!=0 请输入一个正数n=1
ans =n!=1 请输入一个正数n=3
y =6 请输入一个正数n=10
y =3628800
四、实验心得体会:
通过本次实验课,我能熟练运用for循环语句,switch条件语句以及if条件语句的新用法,和在C中的区别。尽管如此,但是在实验中依然容易把for循环跟C语言中的for语句弄混,最后经过不懈努力下,终于弄明白了两者之间的差别,使我能更好的运用这些指令语句。
第三篇:Matlab与Simulink仿真学习心得
Matlab与Simulink仿真学习心得
班级:07610 学号:072016 姓名:吕天雄
一 Matlab学习心得体会与编程实践
<1>学习Matlab的心得体会
真正开始接触Matlab是大二上就开始了,到现在已经一年多了,在此之间,Matlab的确为我提供了很多便利。Matlab的确不愧成为是草稿纸上的语言。我们不必去为很简单的显示效果图形去找一些什么其他软件或者研究比较复杂的计算机图形学,一个plot或者别的函数往往就可以得到很满意的效果。
其实最初开始学习matlab的时候感觉这个东西和C没什么两样,但是后来具体到一些 东西,比如信号处理和数学建模上以后才感觉到使用matlab编写程序去验证结果比C要节 省很多时间,而且matlab写东西基本都是按照自己的思路平铺直叙很少去考虑什么函数的 嵌套调用或者指针等等很头疼的东西。
关于matlab的学习,我感觉其实百度和matlab自带的help基本能够解决绝大数问题,而且一些比较好的论坛比如www.xiexiebang.com都会为你产生很大的帮助,关键是在于多动手实践,多思考。但是matlab毕竟只是一个工具,原理和一些基本的编程素质还是必须有的,否则matlab最多也只能是验证一些别人的东西而已,根本帮不上什么忙的。
<2>遇到的一些问题的思考方式与解决办法
最开始用matlab的时候是在大物实验,实验要求去根据测量得到的数据作出图。但是 手动用铅笔去画确实很麻烦,所以用matlab确实可以省去很大的麻烦。但是第一次遇到问 的时候是有关极化坐标下的曲线拟合。
首先是一个物理实验的问题;在做一个关于光的偏振的实验的时候,最后的结果要在一个极化坐标下显示出来;因为数据是离散的,所以显示出来的图像是一个折来折去的一个东东; 然后很自然的想法是对这个曲线进行插值处理。
但是极化坐标下MATLAB并未提供插值处理的函数,interp1这个函数只能在笛卡尔坐标系,也就是直角坐标系下使用。
然后就想到把极坐标的数据转换的直角坐标系下,pol2cart可以实现这个想法,但是随后而来,也就是最后导致整个问题失败的关键也在这里。
pol2cart以后产生的一串数据中出现了重复的数据,那么interp1这个东西也就无能为力了,因为interp1不能处理一串数据中有重复出现的情况。最后的处理办法是把这些数据c os,sin这些东西变换一下后,使其大致规则,然后再用polar画出极坐标下的图形。
接下来这个问题就有点超过我的范围了,可能会有点叙述不清楚。问题可以概要为:人脸网格插值。
这是一个用三角形网格表示的一个人脸模型。需要通过插值使其变得光滑,当然问题的复杂之处在于,插值会改变原本的网格结构。
对于这个问题许多人都给出了解决的办法,当然是一些关于人脸识别技术和运动图像处理的范畴之内的。
主要有两种,第一种是face—ls算法。这种算法是基于RBF(径向插值函数)和loop细分原则的一种算法,当然其精确程度比较差点。但是速度挺好。原理是:基于网格上的点,产生出顶点的迭代函数,从而产生出新的定点,进行细化。然后进行插值。也就是引进新的顶点。分为两个过程内部插值和边缘插值。具体可以去看兰州大学信息工程学院的学报。
第二种也就是基本的老办法RBF。首先解释一下什么叫做径向插值 径向基函数
主要是考虑多维空间的数据插值问题,径向基函数在三维图形的变形中常常被采用,用其来变分三维人脸的时候还应结合人脸的固有特征。确定该方法来实现三维人脸变形是可行的,但要构造好的基函数,以及解这些高维方程的解仍是难点。插值方法:
假设大多数人脸的形状都可以由一个拓扑原型变化得来,那么,通过调整一个一般模型的构造参数可以建立不同的面部模型。但是,这种参数模型仅仅局限于那些构造参数已知的情况,并且对特定人脸参数的调整非常困难。在离散数据的多变量插值问题方面,径向基函数(radial basis function,RBF)插值方法是一个行之有效的工具,所以也适用于类似人脸这样高维曲面的近似或平滑插值。现有的许多方法使用了基于RBF的插值技术,将一般人脸网格变化到特定人脸的形状。这种方法的优点在于:(1)通过插值可以得到丢失的数据点,所以源网格和目标网格不需要相同数目的结点;(2)如果选择了合适的匹配点,数学上可以保证能够将源网格变形到目标网格。
当然我也不是很懂,只是理解了部分。这种方法的关键是找到一个很好的核函数来计算出新的顶点。
最后问题解决的方式是查着了一些图书馆的学报。然后而且在网上找到了部分代码。然后做出来的。这是我校大四一个同学毕设中的一个东西。
其实这个事件最好的解决办法是在3D-MAX中,不过因为没能找到MATLAB与3D-MAX是怎么接口的,所以作罢了。
第三次遇到的问题是我在数学建模课上遇到的一个关于矩阵LU分解的问题:
Matlab作出的结果和手算的结果竟然不一样。
10111
U=1 一个矩阵 A= 经过三角分解为L=10111因为1/为一个极大数 则1—1/可以看成—1/;
设=0.***000000001%10的负24次方
从而L*U=则最后一位1没有了 变成了0
其中L=
U=Matlab 程序为
epusino=0.***000000001;U=[epusino 1;0-1/epusino];L=[1 0;1/epusino 1];L*U ans =
0.***
1.***
1.***
0 而直接用lu函数对矩阵A分解的结果为
A=[epusino 1;1 1] A =
0.0000
1.0000
1.0000
1.0000
>> [L,U]=lu(A)L =
0.0000
1.0000
1.0000
0
U =
0 我们老师当时的解释是这是由于我们所用matlab是破解版的缘故,破解版的计算精度 没正版的高所以导致运算结果的错误,后来我看了一些LU这个函数的help文档 psychologically lower triangular matrix"(i.e.a product of lower triangular and permutation matrices)in L。翻译过来是L是一个心理上的下三角矩阵,其实是下三角矩阵和置换矩阵也就是最后的结论。P*A = L*U.。由此可见这并不是什么精度的问题导致的结果只是LU分解的矩阵意义和书本上的不同而已。
以下是我自己写的一些程序的代码
1:网络随机拓扑图
目的是要生成一个度数随机、权值随机的拓扑图。首先的理解是利用邻接矩阵,先随机生成一个矩阵,该矩阵为一个对称矩阵。然后画出这个矩阵就行了。
随机拓扑图10026516398191 ***0430 ***065
%产生数组A用来存放表示两点之间权值的矩阵A,也就是临接矩阵,那么两点之间权值不为零元素的个数即为该点的度数
DEF=5;%设定一个东东 方便改变随机点的个数 A=rand(DEF,DEF);%产生DEF*DEF的随机矩阵 for i=1:DEF A(i,i)=0%将对角线上的数置为0 end A=10*A;A=floor(A);%向下去整 for i=1:DEF for j=1:i A(j,i)=A(i,j)%将A矩阵变为一个上三角或者下三角矩阵 end end x=100*rand(1,DEF);y=100*rand(1,DEF);%产生10个随机的点 plot(x,y,'r+');
for i=1:DEF a=find(A(i,:)>0)%将A矩阵每行大于0的数的在该行的地址找出来放在a中
for j=1:length(a)
c=num2str(A(i,j));%将A中的权值转化为字符型
if c~='0'%不显示为0的值 因为A矩阵为零代表两点不相连 text((x(i)+x(j))/2,(y(i)+y(j))/2,c,'Fontsize',18);%将权值显示在两点连线中间 end hold on;
line([x(i)x(a(j))],[y(i)y(a(j))]);%连线 end end
title('随机拓扑图');e=num2str(DEF);legend(e);%左上角显示节点的个数 for m=1:DEF A(m,m)=m;f=num2str(A(m,m));hold on;text((x(m)+x(m))/2,(y(m)+y(m))/2,f,'Fontsize',18);%将权值显示在两点连线中间 end 接下来是一个在信息安全课上写的一个关于256色图分层的程序,一副图像有m*n个像素然后每个像素是一个8bit的二进制数据换算为十进制是0-255之间。要做的就是把每bit的信息提取出来。
I=imread('bupt副本.bmp');%读入源图像
I=double(I);%将图像转换为double类型便于MATLAB中的计算 %确定图像的长宽 M=size(I,1);%长 N=size(I,2);%宽 l=M*N;%图像长宽之积 for n=1:8;%剔除每层 for i=1:M
for j=1:N
B=numdec2bin(I(i,j),8);%先将每个像素转换为8位2进制序列
B(n)=[];%删除相应位置的元素
y(i,j)=numbin2dec(B);%将剩下的7个元素转换为10进制数放入y矩阵中
end end
y=uint8(y);%将10进制的矩阵转换为无符号整形
subplot(4,2,9-n);%显示n个图像,每层是相应的剔除该层的结果
imshow(y);%显示这个图像
title(strcat('去除第',num2str(9-n),'层后的结果'));%显示标题 end
附带的两个函数:
function y=numdec2bin(x,n);%从函数将十进制数x转化为n位二进制 y=zeros(1,n);a=x;i=n;while a>0 y(i)=mod(a,2);a=floor(a/2);i=i-1;end function y=numbin2dec(x)%将二进制数转换为十进制数 a=0;lx=length(x);for i=1:lx a=a+x(i)*2^(lx-i);end y=a;
去除第1层后的结果去除第2层后的结果去除第3层后的结果去除第4层后的结果去除第5层后的结果去除第6层后的结果去除第7层后的结果去除第8层后的结果
Matlab的RGB转换为YCbCr之后转换回来和原图不符
这个是做JPEG图像压缩的时候遇到的一个问题,当时的代码是用C写的但是结果不对,后来想到用matlab进行验证结果发现通过公式转换得到的图是错的。
原理:BMP图像压缩为JPEG的第一步是将RGB色彩空间通过这个公式映射到YCbCr空间上。
Y=0.299 R + 0.587 G + 0.114 B Cb =0.3313G + 0.5 B + 128 Cr = 0.5 R0.0813 B + 128 然后再进行量化,DCT,编码等等步骤。JPEG解压时需要将YCbCr空间的图像又转化回来到RGB上。
R = Y + 1.402(Cr0.34414(Cb-128)128)
B = Y + 1.772(Cb-128)
但是通过书上给的公式和网上大部分公式却发现根本转化不会来。下面是写的程序代码以及测试得到的结果图像。
clc,clear;Source=imread('hl.jpg');%读入原始RGB图像
figure(1);subplot(1,2,1);imshow(Source):title('original image');%显示图像 [r c d]=size(Source);%计算图像大小 %------计算红色分量并显示分解图------% R(:,:,1)=Source(:,:,1);R(:,:,2)=zeros(r,c);R(:,:,3)=zeros(r,c);R=uint8(R);whos;figure(2);subplot(1,3,1);imshow(R)title('Red Component');%-------计算绿色分量并显示分解图-------% G(:,:,2)=Source(:,:,2);G(:,:,1)=zeros(r,c);G(:,:,3)=zeros(r,c);G=uint8(G);figure(2);subplot(1,3,2);imshow(G)title('Green Component');%--------计算蓝色分量并显示分解图-------% B(:,:,3)=Source(:,:,3);B(:,:,1)=zeros(r,c);B(:,:,2)=zeros(r,c);B=uint8(B);figure(2);subplot(1,3,3)imshow(B)title('Blue Component');%------------合成-------------% Comp(:,:,1)=R(:,:,1);Comp(:,:,2)=G(:,:,2);Comp(:,:,3)=B(:,:,3);figure(1);subplot(1,2,2);imshow(Comp):title('composition image');Y=0.229*R+0.587*G+0.114*B;Cb=0.5*B-0.1687*R-0.3313*G+128;Cr=0.5*R-0.4187*G-0.0813*B+128;red=Y+1.402*(Cr-128);green=Y-0.34414*(Cb-128)-0.71414*(Cr-128);blue=Y+1.772*(Cb-128);Comp2(:,:,1)=red(:,:,1);Comp2(:,:,2)=green(:,:,2);Comp2(:,:,3)=blue(:,:,3);figure(3);imshow(Comp2);title('RGB转换为YCrCb后又转换为RGB的图像');RD=R(:,:,1)-red(:,:,1);GD=G(:,:,2)-green(:,:,2);BD=B(:,:,3)-blue(:,:,3);figure(4);subplot(1,3,1);imshow(RD);title('红色分量差异');subplot(1,3,2);imshow(GD);title('绿色分量差异');subplot(1,3,3);imshow(BD);title('蓝色分量差异');
然而可以通过figure(4)的图像清楚看到R 和G分量转换后恢复 与以前的差别很大。而且看了一下matlab自带的rgb2ycbcr和ycbcr2rgb并且用了这两个函数测试后图像是一样的。很是不解
实验得到的图为: original imagecomposition image
将源图像分为RGB三个部分。
Red ComponentGreen ComponentBlue Component
将源图像的RGB分量转换到YCbCr上后又转化为RGB得到的三个分量差异的图。
红色分量差异绿色分量差异蓝色分量差异 公式转换的y分量公式转换的cb分量公式转换的Cr分量matlab函数转换的y分量matlab函数转换的Cb分量matlab函数转换的Cr分量
从最后的结果可以看出原图转换到YCbCr空间之后又转化回来得到的图像与原图不符….RGB转换为YCrCb后又转换为RGB的图像
以上只是我自己用Matlab做过的部分问题,还有一些比如场声源定位Music算法仿真,DES加密算法。神经网络滤波器等等,鉴于代码量太大,就不再敖述。二 Simulink学习心得与编程实践
SIMILINK模块库按功能进行分类,包括以下8类子库: Continuous(连续模块)Discrete(离散模块)
Function&Tables(函数和平台模块)Math(数学模块)
Nonlinear(非线性模块)
Signals&Systems(信号和系统模块)Sinks(接收器模块)Sources(输入源模块)
对于simulink来说其实没什么好说的,需要什么就把什么拖到Model里面,连线之后设定参数。不是很麻烦的。但是重要的是对于系统的设计与仿真思想才是最重要的。而且里面的S-Function也是比较好的一个设计,用S-Function可以自定义一些组件,使自己的仿真看上去更加清晰与精简。
Simulink的工作方式:
(1)模块内的参数值首先会送到Matlab中进行计算,得到的参数值会用来当做以后需要调用的参数。
(2)模型系统中的各个层级将被平展开来,每一个子系统将被相应的模块所代替。(3)模块按被处理的顺序排列,此时代数回路结构也被检查出来,此种排列产生一个列表,以确保具有代数回路的模块驱动输入的模块被更新后才更新。
(4)检查块之间的链接,是否每一个块的输出端口与它所连接的模块输入端口有相同的信号宽度。
现在可以准备执行仿真操作,仿真时使用数值迭代求的的结果,每种数值积分模型提供的连续状态的微分能力。
Simulink中的模型都是分级的,因此可以通过自上而下或者自下而上的方式建立模型。定义了一个模型以后,就可以通过Simulink的菜单或者在Matlab的Command中输入命令进行仿真。
关于学习的心得就写到这里了,接下来是一些自己做的仿真。
1:观察一个信号与积分之后的区别,目的是了解Scope的功能和用法。
仿真结果,左边为原始信号,右边为积分后的信号。
用XYGraph看到的对比
Rossler吸引子产生仿真:
Rossler 吸引子产生是服从下面这个方程的 1
212 331
仿真图 (xx)xxaxxbx(xc)xab0.2c5.7
仿真结果
LMS自适应滤波器: 仿真图:
遇到的问题
问题的解决办法:
将Spectrum Scope中的buffer input打勾就行了。
仿真结果图形:
1:Spectrum Scope的输出图形
2:Vector Scope的输出结果
3:Scope的输出结果图形
第四篇:基于ADAMS与MATLAB的倒立摆联合仿真实验
基于ADAMS与MATLAB的倒立摆联合仿真实验
一、实验目的
在传统的机电一体化研究设计过程中,机械工程师和控制工程师虽然在共同设计开发一个系统,但是他们各自都需要建立自己的模型,然后分别采用不同的分析软件,对机械系统和控制系统进行独立的设计、调试和试验,最后进行机械系统和控制系统各自的物理样机联合调试,如果发现问题又要回到各自的模型中分别修改,然后再联合调试,显然这种方式费时费力。
基于多领域的建模与联合仿真技术很好的解决了这个问题,为机械和控制系统进行联合分析提供了一种全新的设计方法。机械工程师和控制工程师就可以享有同一个样机模型,进行设计、调试和试验,可以利用虚拟样机对机械系统和控制系统进行反复联合调试,直到获得满意的设计效果,然后进行物理样机的建造和调试。
ADAMS与MATLAB是机械系统仿真和控制系统仿真领域应用较为广泛的软件,其中ADAMS为用户提供了强大的建模、仿真环境,使用户能够对各种机械系统进行建模、仿真和分析,具有十分强大的运动学和动力学分析功能;而MATLAB具有强大的计算功能、极高的编程效率及模块化的建模方式,因此,把ADAMS与MATLAB联合起来仿真,可以充分将两者的优势相结合,将机械系统仿真分析同控制系统设计有机结合起来,实现机电一体化的联合分析。
本实验以倒立摆为例,进行ADAMS与MATLAB的联合仿真,对倒立摆的运动性能和运动规律进行分析。
二、实验方法
软件环境:MD ADAMS R3,MATLAB R2009b 2.1 建立倒立摆的动力学模型
启动ADAMS/View模块弹出如图1所示对话框,建立小车及摆杆模型。首先选择“Create a new model”选项,创建一个新的模型,将该文件保存在相应的文件夹下,本实验将结果保存在E:daolibai_adams文件夹下,将文件名取为“daolibai_adams”,其余选项保持默认。注意,在ADAMS中路径名和文件名最好采用英文字符,否则有可能在运行的过程中出现意想不到的错误。
图1 启动ADAMS/View模块
进入ADAMS/View界面后,需要对相关参数进行设置。选择菜单栏中的“Settings→Working Grid”选项,弹出如图2所示的对话框,设置网格的大小。将“Spacing”设置为X:10mm,Y:10mm,其余参数保持默认。在“Settings”选项中还可以设置图标的大小,单位等等参数,在本实验中这些参数都保持默认即可。
图2 设置网格的大小
与此同时,单击菜单栏“View”选项下的“Coordinate Window”(或者按下键盘上的F4按钮),如图3所示。可随时在窗口中观察鼠标的当前空间坐标位置,方便我们进行建模。
图3 打开鼠标当前空间位置观察窗口
右键点击ADAMS建模工具箱中的图标,选择工具Box,在视图中(0,0,0)处建一个长、宽、高分别为30cm,20cm,20cm的长方体代替小车模型,如图4所示。
图4 长方体尺寸设置
图5 在视图中建立的长方体前视图
长方体建立完毕后,需要进一步在视图中调整其位置。在当前视角下,点击工具箱中的图标,进入如图6所示的界面。在Distance选项中输入15cm,选择长方体,然后点击向左的箭头,小车模型即向左平移15cm。单击工具箱中的按钮,即可返回工具箱主界面。点击图标,切换到右视角视图,再次运用按钮,在Distance选项中输入10cm,选择长方体,然后点击向右的箭头,将小车模型向右平移10cm,如图7所示。
图6 将小车模型向左平移15cm
图7 将小车模型向右平移10cm
小车模型位置修改完毕后,右键点击小车模型,选择Rename,将模型的名称修改为xiaoche,如图8所示。与此同时,在右键菜单中选择Modify,将小车的质量修改为0.5KG,其修改方法如图9所示。
图8 修改模型名称
图9 修改小车模型的质量
至此,小车模型及参数设置完毕,接下来建立摆杆的模型。在建模工具箱中选择(Cylinder)工具建立摆杆模型,其参数设置如图10所示。
图10 摆杆参数的设置
摆杆参数设置完毕后,沿小车垂直向上的方向建立该圆柱体,建好后单击右键修改其特性参数,将部件名称修改为baigan,将摆杆质量修改为0.2kg,转动惯量修改为0.006kg·㎡。建好后,运用工具箱中的顺时针旋转5°,建完后的模型如图11所示。
工具,将摆杆绕端点
图11 倒立摆模型前视图与三维视图
倒立摆的三维模型建立好后,我们需要为模型添加相应的运动副和运动。小车与地面用平移副约束,右键单击图标,在弹出菜单中选择工具,添加方式选择2 Bod-1 Loc方式,分别选择小车和大地,在小车质心处添加水平方向的平移约束副,如图12。
图12 在小车与大地之间添加移动副
摆杆与小车之间存在旋转运动,故需要在小车与摆杆之间添加一个转动副。单击工具中的图标,添加方式选择2 Bod-1 Loc方式,分别选择摆杆和小车,在摆杆与小车的铰接处建立旋转副,如图13所示。
图13 在摆杆与小车之间建立旋转副JOINT_2
倒立摆模型的约束添加完毕之后,我们可以对模型进行运动测试。点击工具,进入运动仿真测试对话框,设置仿真时间为1秒,步长为1000,如图14所示。
图14 运动仿真参数设置
点击按钮开始运动仿真测试,可以看到小车沿着水平方向作直线运动,摆杆绕着铰接点作旋转运动。
2.2 定义倒立摆机械系统的输入输出变量
1)定义输入变量
本实验中需要在ADAMS中定义一个状态变量接收控制小车运动的水平力。选择Build菜单下的System Elements创建一个名为controlforce的状态变量,如图15所示。
图15 创建输入状态变量
由图15可以看出F(time,„)后面输入栏中的数值为0,表示该控制力的数值将从控制软件的输出获得。
给小车定义一个水平力,单击ADAMS工具箱中的工具,选择Body Moving的建模方式,一次选择小车质心作为力的作用点,选择水平向右作为其加载方向(如图16),这样该水平力将一直随着小车的移动而移动。
图16 为小车添加水平方向作用力
上述过程完成以后,右键单击该水平力,选择Modify,将其函数值定义为VARVAL(.daolibai_adams.controlforce),以实时从状态变量controlforce中接收力的数值,如图17。
图17 函数值的定义
2)定义输出变量
定义输出变量的方法与定义输入变量的方法相同,定义ADAMS状态变量以输出动力学模型的运动状态至控制软件,本实验就是要输出摆杆的摆角。选择Build菜单下的System Elements创建一个名为rotateangle的状态变量,选择摆杆的上端点和小车的铰接点出的MARKER点为摆杆绕Z轴旋转运动的参考点,如图18所示。
图18 定义输出变量
其中,在F(time,„)后面的文本输入栏输入摆杆摆角表达式AZ(MARKER_11,MARKER_12),AZ函数用来测量绕Z轴旋转的角度,本实验中即表示摆杆绕着Z轴旋转的角度。利用ADAMS工具箱中的工具,在摆杆的上端点创建一个测点MARKER_11,在小车上创建测点MARKER_12,此点为小车与摆杆的铰接点。设置完毕后单击OK按钮保存设置。3)将状态变量指定为输入/输出变量
上述状态变量定义完成之后,还需要将定义好的状态变量指定为输入或输出变量。
指定状态变量controlforce为输入变量。单击主菜单Build→Data Elements→Plant→Plant Input→New后,弹出输入变量定义对话框,如图19所示。将Variable Name栏中输入controlforce,然后单击OK按钮即完成设置。
图19 输入变量定义对话框
指定状态变量rotateangle为输入变量。单击主菜单Build→Data Elements→Plant→Plant Output→New后,弹出输入变量定义对话框,如图20所示。将Variable Name栏中输入rotateangle,然后单击OK按钮即完成设置。
图20 输出变量定义对话框 4)导出ADAMS模型
通过以上工作,已经在ADAMS机械系统模型中定义了同控制系统交互的相关状态变量和函数,接下来需要利用ADAMS/Controls模块将这些状态变量定义为输入输出信号,并将相关信息导出,以便和其他控制程序连接。
单击Controls菜单下的Plant Export子菜单,弹出如图21所示的设置窗口。将输出文件名修改为test123;在输入信号定义栏中,单击From Input按钮后,弹出数据库浏览窗口,选择定义的PINPUT_1为输入项,双击后,定义的状态变量controlforce将自动出现在输入信号一栏中,同理,输出信号的设置方法同上。目标控制软件下拉菜单可以根据需要选取,本实验目标软件选为MATLAB,其他选项保持默认。单击OK按钮,ADAMS将导出*.m文件,同时产生调用ADAMS/Solver的cmd文件和*.adm的ADAMS模型文件。
图21 ADAMS变量导出设置 上述过程完成后,MATLAB已经可以读取ADAMS模型的相关信息了。
2.3 在MATLAB/Simulink中导入ADAMS模型
1)变量的导入
启动MATLAB后,在命令窗口中输入导出的ADAMS模型名称test123,在MATLAB窗口将出现如下信息:
>> clear all >> test123 ans = 26-Jun-2013 08:53:34 %%% INFO : ADAMS plant actuators names : 1 controlforce %%% INFO : ADAMS plant sensors names : 1 rotateangle 在MATLAB命令提示符下输入who命令,显示文件中定义的变量列表,在MATLAB命令窗口中返回如下结果:
Your variables are: ADAMS_cwd ADAMS_mode ADAMS_solver_type arch ADAMS_exec ADAMS_outputs ADAMS_static flag ADAMS_host ADAMS_pinput ADAMS_sysdir machine ADAMS_init ADAMS_poutput ADAMS_uy_ids temp_str ADAMS_inputs ADAMS_prefix ans topdir 可以选择以上显示的任何一个变量名,检验变量,例如,如果输入ADAMS_outputs,则MATLAB将显示在ADAMS中定义的输出变量:
ADAMS_outputs = Rotateangle 注意:ADAMS导出的文件必须置于MATLAB工作目录下,即ADAMS与MATLAB共用同一个工作目录,否则上述过程不能进行。与此同时,还要把ADAMS/win32文件夹下的“adams_plant.mexw32”及ADAMS/Controls/win32/文件夹下的“plant.lib”放在ADMAS与MATLAB的共用工作目录下。这两个文件是adams_sub模块的核心。ADAMS提供一个S函数,用于ADAMS和simulink联合仿真的调度和通信,如果simulink找不到它,联合仿真就不能进行。2)ADAMS模块的导入
在MATLAB命令窗口中输入“adams_sys”命令,即可导入ADAMS模块,如图22所示。
图22 adams_sys模块
3)仿真参数的设置
点击图22中的adams_sys模块,即可进入adams_sub模块,如图23所示。
图23 adams_sub模块 点击图23中的MSC.Software模块,弹出如图24所示的对话框,在对话框中设置如下参数:
图24 仿真参数的设置
将联合仿真的通信间隔Communication Interval选项设置为0.001,该选项定义了ADAMS与MATLAB/Simulink交换数据的通信间隔,调整该参数将控制联合仿真的速度,并影响计算的速度。
将simulation mode选项设置为continuous,即连续仿真模式。其余参数保持默认,单击OK按钮,保存参数设置。3)联合仿真分析
在MATLAB/Simulink中建立如下控制框图(图25),设置仿真时间为5s。
图25 联合仿真控制框图
点击start命令,开始进行联合仿真,几秒钟后,将弹出一个DOS窗口,显示ADAMS在联合仿真分析中的各种数据。联合仿真结束后,仿真结果既可以在MATLAB/Simulink中查看,也可以在ADAMS后处理器中查看。图26和图27分别为Simulink模型中示波器输出的摆杆摆角随时间变换曲线和输入力矩随时间变化曲线。
图26 摆杆摆角随时间变化曲线 图27 输入力矩随时间变化曲线
一、实验结果
由图26和图27可以看出,摆杆的摆角在输入力矩的作用下,转角由0逐渐增大,当到达最大摆角(5°)时,保持不变。
第五篇:基于adams和matlab的一级倒立摆联合仿真
基于PRO/E,ADAMS和MATLAB/SIMULINK的双回路PID控制一级倒立摆联合仿真
目录
一、倒立摆简介
1、概述
2、倒立摆分类
3、倒立摆控制方法
二、联合仿真流程
三、基于PRO/E的一级倒立摆三维建模
四、基于ADAMS的一级倒立摆模型设计
五、ADAMS和MATLAB/SIMULINK的联合仿真 六、一级倒立摆的双回路PID控制策略
1、一级倒立摆的角度控制
2、一级倒立摆的双闭环控制
3、一级倒立摆摆杆长度参数对控制策略的影响
七、问题总结
参考文献
一、倒立摆简介
1、概述
倒立摆控制系统是一个复杂的、不稳定的、非线性系统,是进行控制理论教学及开展各种控制实验的理想实验平台。对倒立摆系统的研究能有效的反映控制中的许多典型问题:如非线性问题、鲁棒性问题、镇定问题、随动问题以及跟踪问题等。通过对倒立摆的控制,用来检验新的控制方法是否有较强的处理非线性和不稳定性问题的能力。同时,其控制方法在军工、航天、机器人和一般工业过程领域中都有着广泛的用途,如机器人行走过程中的平衡控制、火箭发射中的垂直度控制和卫星飞行中的姿态控制等。
倒立摆系统按摆杆数量的不同,可分为一级,二级,三级倒立摆等,多级摆的摆杆之间属于自由连接(即无电动机或其他驱动设备)。
倒立摆的控制问题就是使摆杆尽快地达到一个平衡位置,并且使之没有大的振荡和过大的角度和速度。当摆杆到达期望的位置后,系统能克服随机扰动而保持稳定的位置。
图1.1 一级倒立摆
2、倒立摆分类
(1)直线型倒立摆
它是最常见倒立摆系统,也称车摆装置,根据目前的研究它又分为1,2,3,4级车摆,典型结构图如图11.2所示,图中以三级车摆为例,它是由可以沿直线导轨运动的小车以及一端固定于小车之上的匀质长杆组成的系统,小车可以通过转动装置由力矩电机、步进电机、直流电机或者交流伺服电机驱动,车的导轨一般有固定的行程,因而小车的运动范围都是受到限制的。
图1.2 直线型倒立摆
(2)环型倒立摆
环型倒立摆也称摆杆式倒立摆,如图1.3所示,图中以二级为例,一般是由水平放置的摆杆和连在其端接的自由倒摆组成,原理上也可以看成是车摆的轨道为圆轨情况,摆杆是通过传动电机带动旋转的。此摆设计好了可以摆脱普通车摆的行程限制,但是同时带来了一个新的非线性因素:离心力作用。
图1.3 环形倒立摆
(3)旋转式倒立摆
环型摆也叫旋转式倒立摆,但是这里的旋转式倒立摆不同于第二种的环型摆,它的摆杆(旋臂)是在竖直平面内旋转的,而环型摆摆杆是在水平面旋转的,如图1.4所示。图中倒立摆系统是单级旋转倒立摆,将摆杆安装在与电机转轴相连的旋臂上,通过电机带动旋臂的转动来控制倒摆的倒立,整个系统复杂,不稳定。
图1.4 单级旋转式倒立摆
(4)复合倒立摆系列
复合倒立摆为一类新型倒立摆,由运动本体和摆杆组件组成,其运动本体可以很方便的调整成三种模式,一是(2)中所述的环形倒立摆,还可以把本体翻转90度,连杆竖直向下和竖直向上组成托摆和顶摆两种形式的倒立摆。
3、倒立摆控制方法
控制器设计是倒立摆系统的核心内容,因为倒立摆是一个绝对不稳定的系统,为了实现倒立摆稳定性控制并且可以承受一定的干扰,需要给系统设计控制器,目前典型的控制器设计理论有: a.PID控制。通过机理分析建立动力学模型,使用状态空间理论推导出非线性模型,并在平衡点处进行线性化得到系统的状态方程和输出方程,从而设计出PID控制器实现控制。
b.状态反馈控制。使用状态空间理论推导出状态方程和输出方程,应用状态反馈实现控制“如刘珊中等应用状态反馈和Kalman滤波相结合的方法,对二级倒立摆平衡系统进行控制。
c.利用云模型实现对倒立摆的控制。用云模型构成语言值,用语言值构成规则,形成一种定性的推理机制。
d.模糊控制。模糊控制是采用模糊化,模糊推理,解模糊运算等的模糊控制方法。其主要工作是模糊控制器的设计。现以倒立摆控制来简单说明模糊控制器设计的一般方法。以摆杆的倾角和速度作为输入变量”可以将倾角描述成:向左倾角大;中;小;向右倾角小;中;大。速度描述成:倒得非常快;快;慢;静止;升得慢;快;非常决。它们都可以用模糊语言变量来表示用类似的模糊集合可以对控制小车运动的输出进行定义。接着定义某些隶属函数,这个安排隶属度的过程就是对变量实现模糊化的过程“接着是建立一系列的模糊规则,如:如果摆杆向左倾斜大并倒的非常快,那么向左作快运动;如果摆杆向左倾斜大并升的慢,那么向左作慢运动,等等。最后,模糊输出被分解成可以加到小车上的确切的驱动电压,这个过程为解模糊判决。此外,还有对倒立摆的双闭环模糊控制方案。
e.神经网络控制。神经网络能够任意充分地逼近复杂的非线性关系,它能够学习和适应严重不确定性系统的动态特性,所有定量或定性的信息按等势分布储存与网络内的神经元,有很强的鲁棒性和容错性,也可将Q学习算法和BP神经网络有效结合,实现状态未离散化的倒立摆的无模型学习控制。以及杨振强等为解决模糊神经网络在控制多变量系统时的规则组合爆炸问题,提出用状态变量合成模糊神经网络控制倒立摆。
f.自适应控制。主要为倒立摆设计各种自适应控制器。上述控制算法大都针对倒立摆工作在平衡点的稳定控制”本论文设计的控制器首先是能实现倒立摆的起摆,在摆起到平衡位置附近时再切换至稳定控制。
二、联合仿真流程
本文以一级倒立摆为研究对象,建立的倒立摆由轨道,滑块,摆杆和转轴组成,滑块在轨道上做往复的直线运动,摆杆绕滑块做转动。具体的联合仿真流程如下:
1、在PRO/E软件里建立上述各个零件的三维模型,然后进行装配。装配后的组件另存为x_t文件,输入到ADAMS里。
2、将PRO/E的生成的三维模型导入ADAMS中,在ADAMS中定义各零件的质量,施加固定副、移动副和转动副,然后建立输入和输出的状态变量(输入为作用在滑块上的水平力,输出为滑块的位移和摆杆相对于竖直方向的角度),最后将生成的adm文件导出到MATLAB。
3、将ADAMS生成的倒立摆模型导入MATLAB,建立控制模型(采用PID双闭环的控制方法),设置好参数之后进行联合仿真。
三、基于PRO/E的一级倒立摆三维建模
1、在PRO/E中建立一级倒立摆的三维模型,摆杆的初始位置为竖直方向。
2、在组装零件时需要注意,为了保证倒立摆模型导入ADAMS里面之后位置正确(即摆杆摆动平面为X-Y平面),需要使导轨安装的长度方向沿组件默认坐标轴的x轴方向,其中心与组件坐标轴中心重合。
3、建立倒立摆之后,保存副本,选择x_t文件格式保存。
图3.1 一级倒立摆的PRO/E模型
四、基于ADAMS的一级倒立摆模型设计
1、将PRO/E生成的x_t文件导入ADAMS中,选择file-import,文件类型选择x_t,找到PRO/E的文件导入。导入的文件如下图所示,可以看到,摆杆的运动平面在x-y平面内,轨道的质心与ADAMS的默认坐标轴原点重合。图4.1 导入ADAMS的倒立摆三维模型
2、设置文件的保存路径。为了避免PRO/E文件导入和MATLAB程序运行失败,我们将ADAMS的保存路径设在根目录下,文件名为英文字符,PRO/E的所有文件放入此目录下。
3、将导入的PART2,PART3,PART4和PART5分别命名为guidao,huakuai,baigan和zhou。然后定义各零件质量,材料选择steel.4、添加约束。这里需要添加的约束有三个:
(1)ground和guidao之间的固定副,用来固定轨道。
图4.2 固定副定义界面
图4.3 固定副
(2)huakuai和baigan之间的转动副,保证摆杆相对滑块作转动。
图4.4 转动副定义界面
图4.5 转动副(3)guidao和huakuai之间的移动副,保证滑块沿轨道作水平运动。
图4.6 移动副定义界面
图4.7 移动副
5、定义作用力。初始力作用在滑块上,方向选择与摆杆偏移方向一致。
图4.8 滑块上的水平作用力
6、建立输入和输出状态变量。建立三个system elements,包括输入变量(force),输出变量(angle,position)。(1)Force的参数设为零,由MATLAB输入。
图4.9 定义状态变量force(2)Angle为摆杆距离竖直方向的角度,使用AZ函数测量。选取的参考点为摆杆上的MARKER_16和滑块上的MARKER_17。
图4.10 定义状态变量angle
(3)Position为滑块质心到全局坐标原点的距离。位移的测量值使用DZ函数。需要注意的是,由于轨道在PRO/E 中的坐标轴与ADAMS的默认坐标系不一致,所以要修改MARKER_20以保持和滑块的质心坐标一致。修改方式见下图的orientation参数栏。
图4.11 定义状态变量position
图4.12MARKER点定义界面
(4)完成状态变量的设置后,需要将force与上面建立的作用力SFORCE_1关联,使用函数VARVAL。
图4.13 SFORCE_1与force关联
7、创建输出文件。这一步我们要创建一个可以输入到MATLAB的文件。(1)首先要创建输入和输出元素,选择build—-data elements---plant---plant input,设置输入文件名和变量名。输出元素同理。
图4.14 创建plant input
图4.15 创建plant output(2)打开controls---plant export New controls plant一栏中填入inverted_pendulum,file prefix同理。输入和输出信号选择刚才建立的两个变量。Target software选择MATLAB。其他选项默认。点击OK即可。这样就会有相关的文件在我们最初设置的保存路径中生成。
图4.16 设置ADAMS和MATLAB接口
图4.17 ADAMS输出文件
这一步完成之后就完成了ADAMS里的建模。下图为倒立摆的完成模型。
图4.18 ADAMS的倒立摆最终模型
五、ADAMS和MATLAB/SIMULINK的联合仿真
完成ADAMS建模之后,我们将输出的文件导入到MATLAB里进行仿真。
使用ADAMS和MATLAB/SIMULINK的联合仿真有一个好处,即不用对物理模型进行分析,再建立传递函数。ADAMS导出的模型直接包含其所有的力学特性,更加方便进行相关控制。联合仿真的步骤:
1、将MATLAB的当前文件夹设为ADAMS的文件夹,然后在命令窗口输入inverted_pendulum(即ADAMS输出的文件名),会导入倒立摆的参数和变量。最后输入adams_sys指令,会弹出一个SIMULINK的仿真窗口,我们可以在里面添加控制模块进行倒立摆仿真。
图5.1 MATLAB导入ADAMS文件命令
图5.2 生成的adams_sys
2、MATLAB控制方法设计。
在这里我们采用双闭环的PID控制方法,一路是角度控制,一路是位移控制。
首先给倒立摆系统一个扰动,这里用阶跃信号实现(持续时间0.1秒,幅值为1),使系统不稳定,然后通过角度和位移反馈控制系统,达到稳态。摆杆角度给定值设定为0度,位移给定值设为0,分别与模型输出的实际角度和实际位移进行比对,差值输入到PID中进行反馈控制,控制的结果输入到force接口,实现系统的控制。建立的模块图如下:
图5.3 MATLAB/SIMULINK的倒立摆PID控制模块图
3、动态仿真。先确定PID参数(PID参数设置下一章会讲到)。然后设置adams sub模块参数,将animation mode改为interactive,communication interval设为0.005。最后将仿真时间设为10秒,开始仿真。仿真时会打开ADAMS软件,动画演示倒立摆的平衡控制过程。
图5.4联合仿真时调用的ADAMS界面 六、一级倒立摆的PID控制策略
1、一级倒立摆的角度控制
前面我们提到了对一级倒立摆的控制目标有摆角和滑块位移,下面先对角度控制的PID参数进行设置,然后再加上位移控制环。
首先使用PI调节,调节比例参数使系统出现震荡,然后加上积分环节进行微调,最后取Kp=20,Ki=0.1,系统的摆角响应曲线如下:
10.80.60.40.20-0.2-0.4-0.6-0.800.511.522.533.544.55图6.1 采用PI控制方案的角度响应曲线 从输出曲线可以看出,尽管PI的控制作用总是趋于消除稳态误差,但由于积分环节的缺陷而延缓了响应速度,所以不能及时地将超调遏制住,控制效果也就不怎么好了。
基于上述问题,可以加入微分环节(相当于加入了角速度反馈),参数设置为Kp=20,Ki=0.1,Kd=3。进行动态仿真后,得到的角度响应曲线如下。
0.035
0.030.0250.020.0150.010.0050-0.00500.511.522.533.544.55图6.2 采用PID控制方案的角度响应曲线
可以看到加入微分环节后,系统的动态特性得到了很大的改善,系统受到0.1s的扰动后,在0.6s左右就达到了稳态,而且稳态精度也大大提高。
但是由于角度有稳态误差的存在,所以不加位置反馈控制的话,滑块会一直向一个方向偏移,如图6.4所示为滑块的位移曲线。
-4x 10420-2-4-611.051.11.15图6.3 采用PID控制方案后角度的稳态误差
500-50-100-150-200-250-300
00.511.522.533.544.55图6.4 采用PID控制方案的位移响应曲线
2、一级倒立摆的双闭环控制
在角度反馈的基础上,加入位置反馈。由于两路反馈并不是相互独立的,所以单单设置位移的PID参数必定会影响到角度的反馈。所以这里PID参数的设置思想是,先调好角度反馈,然后根据角度的稳态误差设定位移的PID参数,使两路的反馈可以将这一稳态误差抵消,最后微调两路的参数优化控制效果。经过调试,确定角度反馈的PID参数为Kp=40,Ki=0.02,Kd=10;位移反馈的PID参数为Kp=-0.04,Ki=-0.01,Kd=-0.02。经过仿真后,得到的摆杆摆角和滑块位移的响应曲线如下
0.030.020.010-0.01-0.02-0.03012345678910图6.5 双回路PID控制的角度响应曲线(L=500mm)
50-5-10-***910图6.6 双回路PID控制的位移响应曲线(L=500mm)
双回路控制的平衡时间比单独的角度控制要长,但是在2s左右也基本达到了平衡,控制效果很好。
3、一级倒立摆摆杆长度参数对控制策略的影响
之前我们建立的一级倒立摆模型的摆杆长度是L=500mm,下面将摆杆长度设为L=250mm,分析上面PID的控制策略对该系统动态响应的影响。
使用PRO/E对一级倒立摆重新建模,将摆杆长度设为250mm,然后将模型导入到ADAMS中,完成系统力学定义后导入MATLAB进行仿真。
系统的控制策略仍采用双回路的PID控制。这里将上一节得到的角度和位移PID参数输入到此模型,观察其动态响应与之前的模型有何不同。
经过联合仿真,得到的角度和位移响应曲线如下
0.0150.010.0050-0.005-0.01012345678910图6.7双回路PID控制的角度响应曲线(L=250mm)
420-2-4-6-8
012345678910图6.8双回路PID控制的位移响应曲线(L=250mm)
分析:
角度响应:L=500模型的超调量和二次超调量分别为0.025和0.02,平衡时间大概为2.5s;L=250模型的超调量和二次超调量分别为0.015和0.008,平衡时间为4.5s。
位移响应:L=500模型的超调量和二次超调量分别为7和13,平衡时间为6s;L=250模型的超调量和二次超调量分别为2和7,平衡时间为8s。
可以看出来,L=250模型要比L=500模型容易稳定,即在受到相同的扰动状况下,使用较小的PID参数就可以达到平衡。
七、问题总结
本文利用PRO/E、ADAMS和MATLAB软件成功地对一级倒立摆控制系统进行了仿真分析.在仿真过程中不需要推导机械系统的复杂微分方程,直接用ADAMS建立的虚拟模型进行分析,大大方便了建模过程.而且通过ADAMS软件建立的虚拟模型能更好地接近实际物理模型,与那些近似线性化的简易数学模型相比,这为我们以后的物理样机试验提供了更为可靠的依据。
在联合仿真过程中,遇到了一些问题:
1、PRO/E导入ADAMS会有模型位置放错的情况,这个时候需要保证两个软件里设定的坐标轴一致。
2、对于各零件的MARKER点局部坐标和ADAMS全局坐标不一样情况,需要修改orientation,否则会出现测量错误的情况。
3、在使用角度测量函数AZ和DZ时,如果将FROM MARKER 和TO MARKER位置搞反的话,后面输出的角度值可能为负,后面的PID参数也随之改变。
4、使用PID调节,发现如果时间足够长的话,倒立摆不能保持位置上的稳定,滑块也会越走越远,直到脱离轨道。这是因为使用PID控制角度时,总会有微小的稳态误差,这个误差最终会导致位置上的不平衡。
5、本文PID参数的确定采用的是试凑法,即通过控制经验和多次系统调试来确定参数,往往比较繁琐,难以达到期望的精度。而且双回路控制比单回路控制的难度更大。这种情况下可以采用极点配置法或扩充临界比例法等。
参考文献
1、范成建等(2006).虚拟样机软件MSC.ADAMS应用与提高.北京市, 机械工业出版社.2、贾长治,殷军辉(2010).MD ADAMS虚拟样机从入门到精通.北京市, 机械工业出版社.3、姜学军(2009).计算机控制技术.北京市,清华大学出版社.4、应再恩,平雪良.(2012).“基于ADAMS和MATLAB的双回路PID控制倒立摆联合仿真.” 机械传动(08): 64-67.5、杨世勇,徐莉苹.(2007).“单级倒立摆的PID控制研究.” 控制工程(S1): 23-24+53.6、肖力龙(2007).直线一级倒立摆起摆与稳摆控制研究及控制系统设计, 中南大学.硕士: 77.