深圳幻海软件技术有限公司 欢迎您!

VSC/SMC(一)——基于趋近律的滑模控制(含程序模型)

2023-04-05

目录1.几种典型的趋近律1.1等速趋近律 1.2指数趋近律1.3幂次趋近律1.4一般趋近律2.控制器设计2.1被控对象 2.2选取滑膜面2.3定义跟踪误差2.4计算控制律3.Simulink仿真分析3.1利用S函数编写被控对象3.2利用S函数编写控制器3.3simulink模型&

目录

1.几种典型的趋近律

1.1等速趋近律

 1.2指数趋近律

1.3幂次趋近律

1.4一般趋近律

2.控制器设计

2.1被控对象

 2.2选取滑膜面

2.3定义跟踪误差

2.4计算控制律

3.Simulink仿真分析

3.1利用S函数编写被控对象

3.2利用S函数编写控制器

3.3simulink模型

 3.4结果分析


1.几种典型的趋近律

1.1等速趋近律

特点:ε表示趋近滑膜面/切换面s = 0的速率;ε越大,则到达切换面越快,但引起的抖动也较大。 

 1.2指数趋近律

 特点:-ks是指数趋近项,k越大,趋近滑模面速度越大;-εsgn(s)是等速趋近项,是为了消除抖振。所以为了保证快速趋近的同时削弱抖振,应增大k的同时减小ε。一般情况该趋近律使用较多。

1.3幂次趋近律

1.4一般趋近律

上述四种趋近律均能保证系统从任意初始状态趋向切换面,即做趋近运动:s-->0;满足滑模到达条件:s*s' ≤ 0。

2.控制器设计

2.1被控对象

 2.2选取滑模面

 为满足Huiwitz多项式条件,c > 0。

2.3定义跟踪误差

 其中:θd(t)为理想位置信号/跟踪信号。

2.4计算控制律

(1)选取指数趋近律:

(2)将误差代入选取的滑模面,并进行求导,有:

 (3)联立趋近律,即:

 (4)得到控制律/滑模控制器:

3.Simulink仿真分析

取理想信号θd(t) = sint(t),即跟踪该正弦曲线;选取被控对象状态变量为[θ θ’],初始状态为[-0.15 -0.15]

3.1利用S函数编写被控对象

程序如下:

  1. function [sys,x0,str,ts,simStateCompliance] = Plant_2_1(t,x,u,flag)
  2. switch flag,
  3. case 0,
  4. [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes;
  5. case 1,
  6. sys=mdlDerivatives(t,x,u);
  7. case 2,
  8. sys=mdlUpdate(t,x,u);
  9. case 3,
  10. sys=mdlOutputs(t,x,u);
  11. case 4,
  12. sys=mdlGetTimeOfNextVarHit(t,x,u);
  13. case 9,
  14. sys=mdlTerminate(t,x,u);
  15. otherwise
  16. DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag));
  17. end
  18. function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes
  19. sizes = simsizes;
  20. sizes.NumContStates = 2;
  21. sizes.NumDiscStates = 0;
  22. sizes.NumOutputs = 2;
  23. sizes.NumInputs = 1;
  24. sizes.DirFeedthrough = 0;%注无直接馈通关系
  25. sizes.NumSampleTimes = 1; % at least one sample time is needed
  26. sys = simsizes(sizes);
  27. x0 = [-0.15;-0.15];%设定状态变量初值
  28. str = [];
  29. ts = [0 0];
  30. simStateCompliance = 'UnknownSimState';
  31. function sys=mdlDerivatives(t,x,u)
  32. theta = x(1);%θ
  33. dtheta = x(2);%θ'
  34. ddtheta = -25*dtheta+133*u;%θ''
  35. sys = [dtheta;ddtheta];%dx
  36. function sys=mdlUpdate(t,x,u)
  37. sys = [];
  38. function sys=mdlOutputs(t,x,u)
  39. sys = x;
  40. function sys=mdlGetTimeOfNextVarHit(t,x,u)
  41. sampleTime = 1; % Example, set the next hit to be one second later.
  42. sys = t + sampleTime;
  43. function sys=mdlTerminate(t,x,u)
  44. sys = [];

3.2利用S函数编写控制器

程序如下:

  1. function [sys,x0,str,ts,simStateCompliance] = Controller_2_1(t,x,u,flag)
  2. switch flag,
  3. case 0,
  4. [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes;
  5. case 1,
  6. sys=mdlDerivatives(t,x,u);
  7. case 2,
  8. sys=mdlUpdate(t,x,u);
  9. case 3,
  10. sys=mdlOutputs(t,x,u);
  11. case 4,
  12. sys=mdlGetTimeOfNextVarHit(t,x,u);
  13. case 9,
  14. sys=mdlTerminate(t,x,u);
  15. otherwise
  16. DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag));
  17. end
  18. function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes
  19. sizes = simsizes;
  20. sizes.NumContStates = 0;
  21. sizes.NumDiscStates = 0;
  22. sizes.NumOutputs = 4;
  23. sizes.NumInputs = 3;
  24. sizes.DirFeedthrough = 1;
  25. sizes.NumSampleTimes = 1; % at least one sample time is needed
  26. sys = simsizes(sizes);
  27. x0 = [];
  28. str = [];
  29. ts = [0 0];
  30. simStateCompliance = 'UnknownSimState';
  31. function sys=mdlDerivatives(t,x,u)
  32. sys = [];
  33. function sys=mdlUpdate(t,x,u)
  34. sys = [];
  35. function sys=mdlOutputs(t,x,u)
  36. thetad = u(1);%理想位置信号θd
  37. dthetad = cos(t);%θd'
  38. ddthetad = -sin(t);%θd''
  39. theta = u(2);
  40. dtheta = u(3);
  41. e = thetad-theta;%跟踪误差
  42. de = dthetad-dtheta;
  43. c = 15;
  44. epsilon = 5;k = 10;%调节参数
  45. s = c*e+de;%滑模面
  46. ut = (epsilon*sign(s)+k*s+c*de+ddthetad+25*dtheta)/133;%控制律/滑模控制器
  47. sys = [ut;dthetad;e;de];
  48. function sys=mdlGetTimeOfNextVarHit(t,x,u)
  49. sampleTime = 1; % Example, set the next hit to be one second later.
  50. sys = t + sampleTime;
  51. function sys=mdlTerminate(t,x,u)
  52. sys = [];

3.3simulink模型

 3.4结果分析

 角度θ

 角速度θ'

 误差e

  误差变化率de

控制输入u 

结论:从角位置和角速度可见,该滑膜控制器能实现较好的追踪效果;从误差和误差变化率看,能够通过控制力较快消除误差;但是从控制输入看,出现了很糟糕的抖动,所以后续会提出改进的滑模控制设计。

注:仅为便利自己学习,错误在所难免,如有侵权,请联系删除,有兴趣的学者可以参考学习交流,谢谢!

文章知识点与官方知识档案匹配,可进一步学习相关知识
算法技能树首页概览43103 人正在系统学习中
悬架控制模型
QQ名片