目录
1 概述
2 运行结果
3 参考文献
4 Matlab代码
磁悬浮列车作为一种新型地面交通工具,已经在实践中得到了成功的应用。传统的EMS型磁悬浮系统在结构上简单可靠,而且在技术上已经相当成熟,但是由于悬浮力全部由电磁铁来提供,因而电流和功耗都很大,而且影响悬浮气隙的进一步增大。
本项目利用Matlab软件探索了线性磁悬浮多输入多输出(MIMO)系统的线性系统控制器设计、实现和分析。控制器是使用经典控制和现代控制方法为系统工厂设计的。为工厂设计并实施了两个PID控制器(每个输入输出模式一个)和一个带观察器的状态反馈控制器,以满足所需的设计规范。
2 运行结果
主函数部分代码:
clc
clear
close all
% Since there is no motion in magnets so d^2y1=d^2y2=0
syms y1 y2 u1 u2 a b c d m g yc y1_0 y2_0 u1_0 u2_0
a = 1.65;
b = 6.2;
c = 2.69;
d = 4.2;
N = 4;
m = 0.12;
g = 9.8;
yc = .12;
y1_0=.02;
y2_0=-0.02;
% Calculation of u10 and u20
u1_0= a*(b + y1_0)^4*(g*m + c/(d - y1_0 + y2_0 + yc)^4)
u2_0=a*(g*m - c/(d - y1_0 + y2_0 + yc)^4)*(b - y2_0)^4
E= (4*c) /(((d - y1_0 + y2_0 + yc)^5))
F= (4*u1_0)/(a*(b + y1_0)^5)
G= 1 /(a*(b + y1_0)^4)
H= (4*u2_0)/(a*(b - y2_0)^5)
I= 1 /(a*(b - y2_0)^4)
% ***************************************************88
fprintf( '\n ------------------------------------------------------------------------------------------------------------\n')
fprintf('x=Ax+Bu\n')
fprintf('Y=Cx+Du\n')
% [0 1 0 0, -(F+E)/m 0 E/m 0 , 0 0 0 1, E/m 0 (H-E)/m 0 ]
fprintf('A=\n')
fprintf(' 0 1 0 0 \n')
fprintf('-(F+E)/m 0 E/m 0 \n')
fprintf(' 0 0 0 1 \n')
fprintf(' E/m 0 (H-E)/m 0 \n')
fprintf('B=\n')
fprintf(' 0 0 \n')
fprintf(' G/m 0 \n')
fprintf(' 0 0 \n')
fprintf(' 0 I/m \n')
fprintf('\n ------------------------------------------------------------------------------------------------------------\n')
A=[0 1 0 0; -(F+E)/m 0 E/m 0 ; 0 0 0 1; E/m 0 (H-E)/m 0 ]
B=[0 0 ; G/m 0; 0 0 ; 0 I/m]
C=[1 0 0 0; 0 0 1 0 ]
D=[ 0 0 ; 0 0 ]
fprintf('\n ------------------------------------------------------------------------------------------------------------\n')
fprintf('\n State Space Model \n')
sys=ss(A,B,C,D)
%3 Transfer function of the open-loop system.
fprintf('\n ------------------------------------------------------------------------------------------------------------\n')
fprintf('\n Transfer function of the open-loop system.\n')
fprintf(' Y ( S ) − 1 \n')
fprintf('TF ( S ) =---------- = C ( SI − A ) B + D \n')
fprintf(' U ( S )\n')
TF=tf(sys)
TF11=TF(1,1)
TF22=TF(2,2)
fprintf('\n ------------------------------------------------------------------------------------------------------------\n')
[num1,den1] = tfdata ( TF11,'v')
[A1,B1,C1,D1] = tf2ss ( num1, den1 )
fprintf('************************* \n')
sys1 = ss ( A1, B1, C1, D1 )
[num2,den2] = tfdata ( TF22,'v')
[A2,B2,C2,D2] = tf2ss ( num2, den2 )
sys2 = ss ( A2, B2, C2, D2 ) ;
fprintf('\n ------------------------------------------------------------------------------------------------------------\n')
%%4 Controllable, Observable, and Jordan canonical forms.
fprintf('---------------------------------------------------------------------------------------\n')
fprintf('3----Obtain the controllable, observable, and Jordan canonical forms.\n')
fprintf('---------------------------------------------------------------------------------------\n')
Cx=ctrb(A,B);
Rank_Cx=rank(Cx);
Cx=ctrb(A,B);
Rank_Cx=rank(Cx);
B1=B(:,1)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if (Rank_Cx==size(A,1))
fprintf("This system is Controllable")
CP_A =round(poly(A),6)
n=size(A,1)
IA1 = eye(n-1,n-1);
Ac1=zeros(n,n);
Bc1=zeros(n,1);
Ac1(1:n-1,2:n)=IA1;
Ac1(n,:)=-CP_A(:,n+1:-1:2)
Bc1(n,1)=1
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Cx1=ctrb(A,B1)
Cxc1=ctrb(Ac1,Bc1)
Tc1=Cx1*inv(Cxc1)
Cc1=C*Tc1
Dc1=D
if Bc1==round(inv(Tc1)*B1,4)
disp('******************** Successfull ')
else
disp('you did wrong')
inv(Tc1)*B1
pause
end
[1]李才永. 非线性系统多模型分析及增益调度PID控制器设计[D].华北电力大学(河北),2004.
点击文章左下角【阅读全文】
部分理论引用网络文献,若有侵权联系博主删除。