机械运动系统设计与实践报告.docx
- 文档编号:29187393
- 上传时间:2023-07-21
- 格式:DOCX
- 页数:47
- 大小:1.43MB
机械运动系统设计与实践报告.docx
《机械运动系统设计与实践报告.docx》由会员分享,可在线阅读,更多相关《机械运动系统设计与实践报告.docx(47页珍藏版)》请在冰豆网上搜索。
机械运动系统设计与实践报告
机械运动系统设计与实践报告
学院:
工程学院
专业:
机械设计及理论
姓名:
学号:
指导教师:
2012年3月
环形倒立摆Adams与Matlab联合仿真分析
一、实践目的
1.熟悉和理解环形倒立摆的组成部件及运动原理。
2.通过ADAMS软件对环形倒立摆进行建模,熟练该款软件。
3.通过运用ADAMS导出模块与matlab进行对接处理,熟悉matlab软件的PID运行控制以及掌握simulink的相关设置。
二、实验原理
环形倒立摆是通过电机驱动,带动连杆,同时连杆来带动摆杆运动。
中间需要测量的物理参数主要有:
连杆的角度、连杆的角速度、摆杆的角度、摆杆的角速度。
通过两个光电编码器进行反馈。
从反馈过程中来调节电机的转速及转向,进而达到摆杆的倒立并保持相对平衡。
下图1即为实验室固高环形倒立摆系统组成框架:
图1环形倒立摆组成框架
机房中matlab6.5中控制倒立摆的原理
图二
老师给的程序
%thisisanewsimulationprogramfornewarm-typeinvertedpendulum
%bylgrinputonthestateof0ofarmandthatof0ofpendulum
%!
CAUTION,changedbaseofdirectionofarm
%Suc.
clearall
closeall
%---------------------------------
Ma=0.21;
Mp=0.062;
la=0.133;
lp=0.068;
La=0.25;
Lp=0.19;
Ja=5E-3;
Jp=5.65E-4;
Ca=5.52E-3;
Cp=1.69E-4;
kt=0.0419;
g=9.8;
%------------------continuousstateequation--------------------
ce=[1000;
0100;
00Mp*La^2+JaMp*La*lp;
00Mp*La*lpJp];
ca=[0010;
0001;
-(Mp*la+Mp*La)*g0-(Ca+Cp)Cp;
0Mp*g*lpCp-Cp];
cb=[0;0;kt;0];
CA=inv(ce)*ca;
CB=inv(ce)*cb;
C=[1000;0100];
%---------------------------------------------------------------
Q=diag([100,10,1,1]);
R=1;
[f,s,e]=lqr(CA,CB,Q,R);
%---------------------------------------------------------------
dt=0.005;%samplingtime
th_a=0.1%accdd('Initialangleofarm',0.1);%!
caution,clockdi
%rection
th_p=pi;%=accdd('Initialangleofpendulum',pi);%!
caution,clockdir
%ection+
d_th_a=0.0;%
d_th_p=0.0;%initialvaluesofstates
dd_th_a=0.0;%
dd_th_p=0.0;%
u=0.0;
z=0.0;
energy=0.0;
i=1;
%--------------------------inputparameter---------------------
alpha=30.0;%alpha=accdd('DesignParameteralpha',30.0);
energy_d=1.5*Mp*g*lp;%accdd('DesiredEnergy',1.5*Mp*g*lp);
zeta=1%accdd('DampingFactor',1.0);
wc=1%accdd('DampingFactor',1.0);
flag=0;
%--------------------------startingloop----------------------
fori=1:
6.0/dt
th_a_0=th_a;%
th_p_0=th_p;%
d_th_a_0=d_th_a;%
d_th_p_0=d_th_p;%
dd_th_a_1=dd_th_a;%
dd_th_p_0=dd_th_p;%
ifcos(th_p)>=cos(0.2);
flag=1;
end
ifflag==0%-----------------------swimpingup------------------
dd_th_a=z-(2*zeta*wc*d_th_a+wc^2*th_a);
ydd_temp=-Mp*La*lp*cos(th_a-th_p)*dd_th_a+Mp*La*lp*d_th_a^2*sin(th_a-th_p);
dd_th_p=(ydd_temp+Mp*g*lp*sin(th_p)+Cp*d_th_a-Cp*d_th_p)/Jp;
d_th_a=d_th_a_0+dd_th_a*dt;
d_th_p=d_th_p_0+dd_th_p*dt;
th_a=th_a_0+d_th_a_0*dt+dd_th_a*dt^2*0.5;
th_p=th_p_0+d_th_p_0*dt+dd_th_p*dt^2*0.5;
else
eq_1_1=-Mp*La*lp*d_th_p^2*sin(th_a-th_p)-(Mp*la+Mp*La)*g*sin(th_a);
eq_1_2=-(Ca+Cp)*d_th_a+Cp*d_th_p+kt*u;
eq_1_left=eq_1_1+eq_1_2;
eq_2_1=Mp*La*lp*d_th_a^2*sin(th_a-th_p)+Mp*lp*g*sin(th_p);
eq_2_2=Cp*d_th_a-Cp*d_th_p;
eq_2_left=eq_2_1+eq_2_2;
%--------------------------calculationofinversematrix-------------
M11=Mp*La^2+Ja;
M12=Mp*La*lp*cos(th_a-th_p);
M21=Mp*La*lp*cos(th_a-th_p);
M22=Jp;
M=[M11M12;M21M22];
MI=inv(M);
%-------------------calculationofparameters------------------
dd_th_a=MI(1,1)*eq_1_left+MI(1,2)*eq_2_left;
dd_th_p=MI(2,1)*eq_1_left+MI(2,2)*eq_2_left;
d_th_a=d_th_a_0+dd_th_a*dt;
d_th_p=d_th_p_0+dd_th_p*dt;
th_a=th_a_0+d_th_a_0*dt+dd_th_a*dt^2*0.5;
th_p=th_p_0+d_th_p_0*dt+dd_th_p*dt^2*0.5;
end
energy=0.5*Jp*d_th_p^2+Mp*g*lp*cos(th_p);%energyofpendulum
potential=Mp*g*lp*cos(th_p);
kinetic=0.5*Jp*d_th_p^2;
%------------------------------------------------------------------------
ifflag==0
error=energy-energy_d;
u1=(Mp*La^2+Ja)*dd_th_a+Mp*La*lp*cos(th_a-th_p)*dd_th_p+(Ca+Cp)*d_th_a;
u2=Mp*La*lp*d_th_p^2*sin(th_a-th_p)+(Ma*la+Mp*La)*g*sin(th_a)-Cp*d_th_p;
u=(u1+u2)/kt;
z=alpha*d_th_p*cos(th_p)*error;
else
u=-f*[th_a;th_p;d_th_a;d_th_p];
end
%-----------------Limitinput--------------
ifu>=4.995
u=4.995;
elseifu<=-4.995
u=-4.995;
end
end
%----------------------------savedata----------------------------
accel_th_a(i)=dd_th_a;a的加速度
accel_th_p(i)=dd_th_p;p的加速度
veloc_th_a(i)=dd_th_a;a的速度
veloc_th_p(i)=dd_th_p;p的速度
angle_th_a(i)=th_a;a的角度
angle_th_p(i)=th_p;p的角度
Energy1(i)=energy;能量方程
Energy2(i)=kinetic;动力方程
Energy3(i)=potential;
input(i)=u;
t(i)=i*dt;
end
%----------------------------endloop-------------------------------
subplot(221);plot(t,angle_th_a);
xlabel('time[sec]');
ylabel('AngleofArm[rad]');
grid
subplot(222);plot(t,angle_th_p);
xlabel('time[sec]');
ylabel('AngleofPendulum[rad]');
grid
subplot(223);
plot(t,input);
xlabel('time[sec]');
ylabel('Input');
grid
subplot(224);
plot(t,Energy1,t,Energy2,':
',t,Energy3,'--');
xlabel('time[sec]');
ylabel('EnergyofPendulum');
程序中的一些句子
%thisisanewsimulationprogramfornewarm-typeinvertedpendulum这是一个新臂型倒立摆的新的仿真程序
%bylgrinputonthestateof0ofarmandthatof0ofpendulum由lgr输入的手臂0和0摆的状态
%!
CAUTION,changedbaseofdirectionofarm注意,改变基于手臂的方向
%Suc.成功
%------------------continuousstateequation--------------------连续状态方程
samplingtime取样时间
accdd('Initialangleofarm',0.1);accdd('的手臂的初始角度,'0.1);
%!
caution,clockdi%rection注意,时钟迪%反应=accdd('初始摆角'pi)
=accdd('Initialangleofpendulum',pi);
%!
caution,clockdirection+initialvaluesofstates注意时钟方向+状态的初始数值
%--------------------------inputparameter---------------------输入参数
%alpha=accdd('DesignParameteralpha',30.0);alpha=accdd('设计参数alpha',30.0);
%accdd('DesiredEnergy',1.5*Mp*g*lp);accdd('所需能源',1.5*Mp*g*lp)
%accdd('DampingFactor',1.0);accdd('阻尼因子',1.0)
%accdd('DampingFactor',1.0);accdd('阻尼因子',1.0)
%--------------------------startingloop----------------------启动回路
%-----------------------swimpingup------------------
%--------------------------calculationofinversematrix-------------逆矩阵的计算
%-------------------calculationofparameters------------------参数的计算
%energyofpendulum摆的能量
%-----------------Limitinput--------------限制输入
%----------------------------savedata----------------------------保存数据
%----------------------------endloop-------------------------------结束循环
最后输出的图形
控制曲线如图3所示:
图3控制曲线
结果图中的数据跟程序中一一对应,当对程序中的某些数据进行修改后,结果图中的数据也相应的改变,从图中可以看出臂和摆最后都平衡了。
三、ADAMS建模及参数设置处理
1.建模
此处为了更为清晰的建模,将电机驱动以及连杆、摆杆的模型简化。
通过Adams建立的模型效果整体图如图4所示:
图4倒立摆模型
2.模型参数化设置
(1)首先需要对整体模型进行重力参数设置,即在本实验中取消重力。
然后添加相关的旋转副以及驱动力。
(2)新建状态变量,此题中需要新建5个状态变量。
包括:
1个输入驱动力,连杆的角度、角速度,摆杆的角度、角速度。
新建状态变量时注意命好相关的名字,以免混淆。
新建相关的状态变量如下图5所示:
图5新建状态变量
(3)建立测量量。
对于输入变量—力矩。
需要设定它的function参数,具体做法如图6所示:
图6力矩function方程
对于连杆的角速度和摆杆的角速度同样也需要进入bulid—systemelement—statevariable—modify进行设置。
具体见图7所示:
图7设置测量变量
在建立连杆的角度和摆杆的角度测量时需要建立marker点,本例中的marker点都建立在地面上。
通过杆上的两点加上地面上的一个点来建立角度的测量。
如图8和图9所示即为一个角度测量的建立过程:
图8建立角度测量
图9角度测量取点
本例中四个输出变量为如图10-a,10-b,10-c,10-d所示。
在状态变量与测量量一一相对应的情况下,即可在controls—plantExplot中输出如图11所示(1个输入变量,4个输出变量):
图10-a连杆的角速度图10-b连杆的角度
图10-c摆杆的角速度图10-d摆杆的角度
图11输出模块
四、Matlab仿真分析
1.在Adams建立Controls_Plant_1文件之后,即可开启Matlab,
2.Matlab中第一步先设置导入路径,I:
\daolibai,command窗口中输入文件名:
Controls_Plant_1。
第二步:
输入:
adams_sys。
此刻commond窗口出现如下程序:
>>Controls_Plant_1
ans=
16-Mar-201216:
59:
13
%%%INFO:
ADAMSplantactuatorsnames:
1VARIABLE_liju
%%%INFO:
ADAMSplantsensorsnames:
1VARIABLE_3
2VARIABLE_baiganjiaodu
3VARIABLE_baiganjiaosudu
4VARIABLE_lianganjiaosudu
>>adams_sys
Warning:
Loadingmodel'adams_sys_template'generatedwithanewerversion(7.3)of
Simulink.
>Inadams_sysat86
Warning:
adams_sys_template.mdl,line32:
block_diagramdoesnothaveaparameternamed
'SampleTimeAnnotations'.
>Inadams_sysat86
Warning:
adams_sys_template.mdl,line41:
block_diagramdoesnothaveaparameternamed
'ShowSignalResolutionIcons'.
>Inadams_sysat86
Warning:
adams_sys_template.mdl,line72:
block_diagramdoesnothaveaparameternamed
'CovModelRefEnable'.
>Inadams_sysat86
Warning:
adams_sys_template.mdl,line73:
block_diagramdoesnothaveaparameternamed
'CovExternalEMLEnable'.
>Inadams_sysat86
Warning:
adams_sys_template.mdl,line131:
Value'Nonadaptive'isincompatibleto
parameter'ZeroCrossAlgorithm'.
>Inadams_sysat86
Warning:
adams_sys_template.mdl,line524:
block_diagramdoesnothaveaparameternamed
'BlockRotation'.
>Inadams_sysat86
Warning:
adams_sys_template.mdl,line525:
block_diagramdoesnothaveaparameternamed
'BlockMirror'.
>Inadams_sysat86
Warning:
adams_sys_template.mdl,line821:
AdamsPlantblock(mask)doesnothavea
parameternamed'MaskPortRotate'.
>Inadams_sysat86
Warning:
adams_sys_template.mdl,line964:
ToWorkspaceblockdoesnothaveaparameter
named'BlockMirror'.
>Inadams_sysat86
>>
3.在程序运行一段时间后即可出现PID控制模块如图12所示:
图12控制模块
为了验证改控制模块的功能,可以新建一个分析界面,同时开始采取输入值为定常量,加入simulink模块,加入定常量1。
观察四个输出的结果。
新建的分析界面如图13所示
图13新建控制模块
单击运行后,即可观察到四个输出变量分别如图14-a、14-b、14-c、14-d所示:
图14-a连杆的角速度图14-b连杆的角度
图14-c摆杆的角速度图14-d摆杆的角度
4.结论:
分析对比matlab中得到的运动图像和admas中的图像基本吻合,但也存在一定的误差,此属于正常范围。
因此可以看到此次admas和matlab联合仿真成功。
5.改变输入变量参数模型,将上一步运用的定常量1换为正弦输入,整体效果如图15:
图15正弦输入图
单击运行后,即可观察到四个输出变量分别如图16-a、16-b、16-c、16-d所示:
图16-a连杆的角速度
(2)图16-b连杆的角度
(2)
图16-b摆杆的角速度
(2)图16-b摆杆的角度
(2)
由以上图可以知道,matlab仿真的效果与adams的模拟比较接近。
两者模拟仿真结合还算比较成功。
5、总结
通过本次环形倒立摆实验的操作,我感觉自己收获很大。
基本掌握了Adams的建模、参数化设置以及Matlab的控制模块的建立。
通过这个实验,可以说是达到真正意义上的Adams和Matlab的联合仿真。
自己在下面的一些练习
IMULINK交互式仿真集成环境
向量化模块和标量扩展
参数扩展
常用的Sourse库信源
.如何调用MATLAB工作空间中的信号矩阵作为模型输入
编译程序:
functionTU=source925_1(T0,N0,K)
t=linspace(0,K*T0,K*N0+1);
N=length(t);u1=t(1:
(N0+1)).^2;
u2=(t((N0+2):
(2*N0+1))-2*T0).^2;
u3(1:
(N-(2*N0+2)+1))=0;
u=[u1,u2,u3];
TU=[t',u'];
TU=source925_1(1,100,4);
Sg25-1,TU模块没有找到?
积分模块的功用
搭建好siulink模块,然后点击运行,观察scope输出的图像为下图:
传递函数模块
弹簧—质量—阻尼Simulink仿真
曲柄滑块机构
function[x]=compv(u)%x为函数的输出,u为m函数的输入;
%u
(1)=w2
%u
(2)=sita2%
u(3)=sita3
r2=15;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 机械运动 系统 设计 实践 报告