m基于滑膜变结构的倒立摆控制系统matlab仿真

目录

1.算法仿真效果

2.算法涉及理论知识概要

3.MATLAB核心程序

4.完整算法代码文件


1.算法仿真效果

matlab2022a仿真结果如下:

 

 

 

 

2.算法涉及理论知识概要

       在控制系统中,改变系统结构的思想最早是Wunch在1953年提出的。随后,各国学者在其研究成果的基础上提出了变结构控制系统的改进,并逐渐得到了一个全新控制系统的理论。而滑膜变控制理论(SMVSCS)属于变结构控制理论的主要研究方向之一[24,25]。滑膜变控制方法是首先是将控制系统的状态估计曲线转换到滑模超平面上,然后逐渐达到平衡点。通过滑膜变结构控制系统,可以原始高维度的控制系统降维成低维度系统,从而降低了整个系统的控制复杂度。

    目前,国内外关于滑膜变结构控制器设计方面做了诸多研究,如目前比较常用的有通过Lyapunov方法,在保证控制系统稳定的前提下获得总的系统控制量。此外还有发现,当控制对象受到限制的时候,控制系统状态空间中只要存在满足条件的点,就可以将控制系统在变结构控制律的作用下进入滑动模态。从控制效果方面来讲,关于滑膜变结构的控制研究总的来讲包括如下几个方面:

    第一、关于滑膜变切换面的选择的研究。现有的研究成果,主要包括通过线性切换面进行选择,还有通过非线性滑动模态的方式进行切换的方法。

    第二、关于抖振现象的解决方案的研究。在滑膜变结构控制过程中,往往会出现抖振现象,这将极大影响控制对象的稳定性。产生抖振现象的主要原因包括系统模型不精确,控制反馈时间滞后,惯性滞后以及离散系统本身所代码的问题。其中,系统模型不精确主要是由于在建模过程中,由于采用了近似的线性建模方法,导致系统固有的高阶项被省略,从而导致实际中,系统的高频部分出现抖振;控制反馈时间滞后的问题,会导致在控制反馈达到之前,控制对象的状态空间中出现了死区现象,这个时候,没有任何控制反馈输入,从而影响了实际的控制效果;对于惯性滞后的问题,通过系统的切换函数对控制对象产生一个适当的控制力矩,使得控制对象发生一系列改变。对于离散系统本身而言,由于离散系统在采样过程中和系统实际的状态运动到滑膜面的时刻不一致,从而导致抖振现象。

    因此,有较多学者对消除抖振方面的问题进行了研究。Slotine等人提出了一种基于连续边界层的控制方式,该其控制方法中,通过自适应调整边界层厚度来达到抖振抑制的目的,但是这种方法会导致控制对象丧失原有的特性。高为炳提出了通过Lyapunov指数的方法来抑制抖振,这个方法取得了一定的控制效果,且控制方法较为简单。

    第三、关于控制策略之间的相互结合的研究。关于这个方面的研究成果主要包括将一些现有的控制策略和滑膜变结构控制方法结合,如模糊滑膜变结构控制方法,基于神经网络的滑膜变结构控制方法等待。

3.MATLAB核心程序

...............................................................................

    c    = 1e-4;
    if k==1
       X_back2=0;
    else
       X_back2=X_back(k)-X_back(k-1);
    end
    s    = c*X_back2;
    y    =-inv(C*B)*(C*A*s+5*s+0.05*sign(s));
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    X(k)    = min(y);
    u_0     = X(k);
    x1_0    = x1(k);
    x2_0    = x2(k);
    x3_0    = x3(k);
    x4_0    = x4(k);
    x5_0    = x5(k);    
    x6_0    = x6(k);    
end
x1a=x1;
x2a=x2;
x3a=x3;
x4a=x4;
x5a=x5;
x6a=x6;
A  = [0,0 ,0 ,1,0,0;
      0,0,0,0,1,0;
      0,0,0,0,0,1;
      0,0,0,0,0,0;
      0,K12,K13,0,0,0;
      0,K22,K23,0,0,0;];
  
B   = [0;
       0;
       0;
       1;
       K17;
       K27];  
 C  = [0.4495,4.1930,-8.8675,0.8035,0.0151,-1.5196]; 
[F,G]   = c2d(A,B,ts);
Q       = diag([1 0 1 1 0 1]);
R       = [1];
[K,p,e] = dlqr(F,G,Q,R);
F       = F-G*K;  

%初始条件
x1_0 = 1;
x2_0 = 0;
x3_0 = 0;
x4_0 = 1;
x5_0 = 0;
x6_0 = 0;
u_0  = 0;

for k=1:1:LEN
    k
................................................................. 
end
x1b=x1;
x2b=x2;
x3b=x3;
x4b=x4;
x5b=x5;
x6b=x6;

figure;
plot(time,x1a,'linewidth',2)
hold on
plot(time,x1b,'r--','linewidth',2)
xlabel('time/s');
ylabel('x');
grid on
legend('控制率函数1','控制率函数2');

figure;
plot(time,x1a,'linewidth',2)
hold on
plot(time,x1b,'r--','linewidth',2)
xlabel('time/s');
ylabel('x');
grid on
legend('控制率函数1','控制率函数2');
axis([30,80,-6e-3,6e-3]);

figure;
plot(time,x2a,'linewidth',2)
hold on
plot(time,x2b,'r--','linewidth',2)
xlabel('time/s');
ylabel('\theta_1');
grid on
legend('控制率函数1','控制率函数2');
figure;
plot(time,x2a,'linewidth',2)
hold on
plot(time,x2b,'r--','linewidth',2)
xlabel('time/s');
ylabel('\theta_1');
grid on
legend('控制率函数1','控制率函数2');
axis([20,90,-4e-3,4e-3]);


figure;
plot(time,x3a,'linewidth',2)
hold on
plot(time,x3b,'r--','linewidth',2)
xlabel('time/s');
ylabel('\theta_2');
grid on
legend('控制率函数1','控制率函数2');
figure;
plot(time,x3a,'linewidth',2)
hold on
plot(time,x3b,'r--','linewidth',2)
xlabel('time/s');
ylabel('\theta_2');
grid on
legend('控制率函数1','控制率函数2');
axis([20,80,-1.5e-3,1.5e-3]);



figure;
plot(time,x4a,'linewidth',2)
hold on
plot(time,x4b,'r--','linewidth',2)
xlabel('time/s');
ylabel('x''');
grid on
legend('控制率函数1','控制率函数2');
figure;
plot(time,x4a,'linewidth',2)
hold on
plot(time,x4b,'r--','linewidth',2)
xlabel('time/s');
ylabel('x''');
grid on
legend('控制率函数1','控制率函数2');
axis([20,80,-1.2e-2,1.2e-2]);

figure;
plot(time,x5a,'linewidth',2)
hold on
plot(time,x5b,'r--','linewidth',2)
xlabel('time/s');
ylabel('\theta_1''');
grid on
legend('控制率函数1','控制率函数2');
figure;
plot(time,x5a,'linewidth',2)
hold on
plot(time,x5b,'r--','linewidth',2)
xlabel('time/s');
ylabel('\theta_1''');
grid on
legend('控制率函数1','控制率函数2');
axis([20,100,-5e-2,5e-2]);

figure;
plot(time,x6a,'linewidth',2)
hold on
plot(time,x6b,'r--','linewidth',2)
xlabel('time/s');
ylabel('\theta_2''');
grid on
legend('控制率函数1','控制率函数2');
  
figure;
plot(time,x6a,'linewidth',2)
hold on
plot(time,x6b,'r--','linewidth',2)
xlabel('time/s');
ylabel('\theta_2''');
grid on
legend('控制率函数1','控制率函数2');
axis([20,80,-15e-3,15e-3]);  
08_082_m

4.完整算法代码文件

V

猜你喜欢

转载自blog.csdn.net/hlayumi1234567/article/details/130781441
今日推荐