Matlab 仿真——直流电机速度控制(3)PID控制器设计

123
0
2021年1月12日 09时24分

文章目录

    • 0. 被控对象与设计要求
    • 1. 比例控制
    • 2.PID 控制
    • 3. 调参

0. 被控对象与设计要求

 

上一节我们知道了我们的开环响应并不能满足设计需求,这一节我们通过一个PID控制器使我们的系统满足设计需求。

 

这里把设计需求和系统转换方程粘贴在这里:

 

设计需求(阶跃响应):

 

  • 稳定时间<2s
  • 超调<5%
  • 稳态误差<1%

 

转换方程:

捕获

 

1. 比例控制

 

首先来看一个加了控制器的单位负反馈系统的框图

 

在这里插入图片描述

 

我们的目标是通过设计控制器 C ( s ) C(s)C(s) 来使系统满足要求。我们先从单纯的比例控制开始,在电机Plant前面加一个比例控制器,然后得到新的系统(这里我们随意定了比例系数为100)

 

%motor parameter
J = 0.01;
b = 0.1;
K = 0.01;
R = 1;
L = 0.5;
%motor tf function
s = tf('s');
P_motor = K/((J*s+b)*(L*s+R)+K^2)
%定义我们的纯比例控制器
Kp = 100;
C = pid(Kp);
%新的单位负反馈系统
sys_cl = feedback(C*P_motor,1);
linearSystemAnalyzer('step',sys_cl,0:0.01:5);

 

得到新系统的单位阶跃响应

 

在这里插入图片描述

 

新的系统稳定时间控制在了0.567s,满足了稳定时间<2s的要求。但是新系统的超调很大,变得不满足要求。

 

回顾控制理论知识,增大Kp在减小稳态误差的同时也会增大超调,我们来检查一下是不是这样。

运行以下代码打开matlab的控制系统设计工具(输入是开环转换方程)

 

controlSystemDesigner(P_motor)

 

在弹出的窗口选择添加新的阶跃输入图像

 

在这里插入图片描述

 

选择IOTransfer_r2y(画出输入输出图像),然后点击plot

 

在这里插入图片描述

 

接下来双击左边的C,该变它的值之后按Enter,看系统响应如何变化

 

在这里插入图片描述

 

可以发现,增加比例系数确实能够减少稳态误差,但是增加超调。因此我们还需要微分和积分控制。

 

2.PID 控制

 

这次我们给控制器加上微分和积分系数(随便定的值)

 

%PID 控制器(未调参)
Kp = 75;
Ki = 1;
Kd = 1;
C = pid(Kp,Ki,Kd);
sys_cl = feedback(C*P_motor,1);
linearSystemAnalyzer('step',sys_cl,0:1:200);

 

在这里插入图片描述

 

系统的稳定时间变长,依旧不满足设计要求,因此我们需要调节我们的PID参数知道系统满足设计要求。

 

3. 调参

 

稳定时间很长的原因是Ki太小,系统不能很快的收敛,我们增大Ki至200,重新绘制响应图

 

%PID 控制器(调节Ki)
Kp = 75;
Ki = 200;
Kd = 1;
C = pid(Kp,Ki,Kd);
sys_cl = feedback(C*P_motor,1);
linearSystemAnalyzer('step',sys_cl,0:0.01:4);

 

在这里插入图片描述

 

系统稳定时间快了很多,但是超调很大。现在我们增大Kd,来试着减少超调

 

%PID 控制器(调节Kd)
Kp = 75;
Ki = 200;
Kd = 10;
C = pid(Kp,Ki,Kd);
sys_cl = feedback(C*P_motor,1);
linearSystemAnalyzer('step',sys_cl,0:0.01:4);

 

在这里插入图片描述

 

发现系统已经完全满足设计要求,因此Kp=75, Ki=200,Kd=10 定义的PID控制器可以用在这里作为电机控制器。

 

这里也可以用Matlab自带的PID tunner工具箱来调参,不再赘述

发表评论

后才能评论