线性磁悬浮多输入多输出(MIMO)系统的线性系统控制器设计、实现和分析(Matlab代码实现)

       目录

1 概述

2 运行结果

3 参考文献

‍4 Matlab代码


1 概述

​磁悬浮列车作为一种新型地面交通工具,已经在实践中得到了成功的应用。传统的EMS型磁悬浮系统在结构上简单可靠,而且在技术上已经相当成熟,但是由于悬浮力全部由电磁铁来提供,因而电流和功耗都很大,而且影响悬浮气隙的进一步增大。

本项目利用Matlab软件探索了线性磁悬浮多输入多输出(MIMO)系统的线性系统控制器设计、实现和分析。控制器是使用经典控制和现代控制方法为系统工厂设计的。为工厂设计并实施了两个PID控制器(每个输入输出模式一个)和一个带观察器的状态反馈控制器,以满足所需的设计规范。

2 运行结果

线性磁悬浮多输入多输出(MIMO)系统的线性系统控制器设计、实现和分析(Matlab代码实现)_第1张图片

线性磁悬浮多输入多输出(MIMO)系统的线性系统控制器设计、实现和分析(Matlab代码实现)_第2张图片

线性磁悬浮多输入多输出(MIMO)系统的线性系统控制器设计、实现和分析(Matlab代码实现)_第3张图片

线性磁悬浮多输入多输出(MIMO)系统的线性系统控制器设计、实现和分析(Matlab代码实现)_第4张图片

线性磁悬浮多输入多输出(MIMO)系统的线性系统控制器设计、实现和分析(Matlab代码实现)_第5张图片

线性磁悬浮多输入多输出(MIMO)系统的线性系统控制器设计、实现和分析(Matlab代码实现)_第6张图片

线性磁悬浮多输入多输出(MIMO)系统的线性系统控制器设计、实现和分析(Matlab代码实现)_第7张图片

线性磁悬浮多输入多输出(MIMO)系统的线性系统控制器设计、实现和分析(Matlab代码实现)_第8张图片

线性磁悬浮多输入多输出(MIMO)系统的线性系统控制器设计、实现和分析(Matlab代码实现)_第9张图片

线性磁悬浮多输入多输出(MIMO)系统的线性系统控制器设计、实现和分析(Matlab代码实现)_第10张图片

主函数部分代码:

clcclearclose all   % Since there is no motion in magnets so d^2y1=d^2y2=0syms 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)^4E= (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)% ***************************************************88fprintf( '\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      pauseend

3 参考文献

[1]李才永. 非线性系统多模型分析及增益调度PID控制器设计[D].华北电力大学(河北),2004.

点击文章左下角【阅读全文】

部分理论引用网络文献,若有侵权联系博主删除。

你可能感兴趣的:(matlab,开发语言)