建立系统的数学模型后,可以初步分析系统的动态响应、稳定性等特征,当系统响应达不到要求时,就需要对原系统进行控制以实现目标响应。

PID是一种简单但应用极其广泛的基于误差补偿的控制器,PID控制器的输出为:

拉普拉斯变换后得到其传递函数:

其中kp为比例增益,ki为积分增益,kd为微分增益。
在Matlab中可以通过前面构建普通传递函数的方法构建,也可以使用专门的函数 C = pid(kp,ki,kd) ,然后 tf(C) 就可以得到如上分式表示的传递函数。设系统原传递函数为G,PID作用后的单位反馈的传递函数则为 T = feedback(G*C,1)

如何调节各参数使系统得到理想的动态响应本身就是一门学问,甚至有专门的书籍和总结出的口诀。单独而言,PID各参数对于系统响应的影响如下:

关于设计PID控制器的几点建议:
1> 先观察系统开环的动态响应,观察需要调节的特征,然后根据2> 3> 4>对应调节
2> 使用比例环节来减小上升时间,加快动态响应
3> 使用微分环节来减小超调
4> 使用积分环节来消除稳态温差
5> 综合调节P、I、D的参数值使得系统得到理想的动态响应
最后,注意不一定PID各环节都要使用,如果PI已经得到很理想的动态响应,那么,完全没有必要再增加微分环节,使系统越简单越好。
Matlab PID调节工具:直接使用函数 pidtune 或通过 pidtool 调用 GUI
例.现有一系统,其传递函数为1/(s^2 + 10*s + 20),设计PID控制器使其带宽为32,相角裕度为90,可以利用pidtune函数求解:

s = tf('s');
P = 1/(s^2 + 10*s + 20);
opts = pidtuneOptions('CrossoverFrequency',32,'PhaseMargin',90);
[C, info] = pidtune(P, 'pid', opts)

求得:

或使用GUI(注意,目标参数为频域里的参数,因此Domain选择Frequency,调节变量为目标量)

pidtool(P,'pid')  //打开pidtool

调节好pidtool后可以从调节工具右下方读出满足条件的kp、ki、kd。显然,两种方法所得值相同。

下节:跟轨迹控制器

----------------------------------------------------------------------------------------------------------------------

欢迎关注、投稿知乎专栏:

用Matlab & Simulink学控制,系列文章是我的学习笔记。学习网站来自于:

Control Tutorials for Matlab & Simulink