这里展示如何设计一个简单的PID控制器。
传递函数如下:
s
y
s
=
1
(
s
+
1
)
3
sys=frac{1}{(s+1)^3}
sys=(s+1)31
首先,创建模型并选用PI控制器:
复制代码
1
2
3sys = zpk([],[-1 -1 -1],1); [C_pi,info] = pidtune(sys,'PI') % pidtune整定函数
生成结果如下:
(交叉频率约为0.52 rad/s,相位裕度为60)
检查受控系统的闭环阶跃响应:
复制代码
1
2
3T_pi = feedback(C_pi*sys, 1); step(T_pi)
为了缩短响应时间,可以设置比自动选择的结果更高的目标交叉频率,即0.52。将交叉频率增加到 1.0。
定义c_pi_fast:
复制代码
1
2[C_pi_fast,info] = pidtune(sys,'PI',1.0)
新控制器可实现更高的交叉频率,但代价是相位裕量减小。
将两个控制器的闭环阶跃响应进行比较。
复制代码
1
2
3
4
5T_pi_fast = feedback(C_pi_fast*sys,1); step(T_pi,T_pi_fast) axis([0 30 0 1.4]) legend('PI','PI,fast')
这种性能降低的结果是,PI控制器没有足够的自由度在1.0 rad/s的交叉频率下实现良好的相位裕量。添加微分操作可改善响应。
将 PIDF 控制器设计为目标交叉频率为 1.0 rad/s。
复制代码
1
2[C_pidf_fast,info] = pidtune(sys,'PIDF',1.0)
可以看出,在微分作用下, 算法的交叉频率和相位裕量都达到了较好值。
比较pi_fast 和 pidf_fast两个控制器的闭环阶跃响应:
复制代码
1
2
3
4
5
6T_pidf_fast = feedback(C_pidf_fast*sys,1); step(T_pi_fast, T_pidf_fast); axis([0 30 0 1.4]); legend('PI,fast','PIDF,fast');
可以将受控系统的输入(负载)抗扰度添加到快速 PI 和 PIDF 控制器再次进行比较:
复制代码
1
2
3
4
5
6S_pi_fast = feedback(sys,C_pi_fast); S_pidf_fast = feedback(sys,C_pidf_fast); step(S_pi_fast,S_pidf_fast); axis([0 50 0 0.4]); legend('PI,fast','PIDF,fast');
以上。
最后
以上就是微笑棒球最近收集整理的关于【Matlab】简单PID 控制器设计(控制系统工具箱)的全部内容,更多相关【Matlab】简单PID内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复