前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Matlab】简单PID 控制器设计(控制系统工具箱)

【Matlab】简单PID 控制器设计(控制系统工具箱)

作者头像
DevFrank
发布2024-07-24 14:50:17
390
发布2024-07-24 14:50:17
举报
文章被收录于专栏:C++开发学习交流

这里展示如何设计一个简单的PID控制器。

传递函数如下:

sys=\frac{1}{(s+1)^3}

首先,创建模型并选用PI控制器:

代码语言:javascript
复制
sys = zpk([],[-1 -1 -1],1); 
[C_pi,info] = pidtune(sys,'PI')	% pidtune整定函数

生成结果如下: (交叉频率约为0.52 rad/s,相位裕度为60)

在这里插入图片描述
在这里插入图片描述

检查受控系统的闭环阶跃响应:

代码语言:javascript
复制
T_pi = feedback(C_pi*sys, 1);
step(T_pi)
在这里插入图片描述
在这里插入图片描述

为了缩短响应时间,可以设置比自动选择的结果更高的目标交叉频率,即0.52。将交叉频率增加到 1.0。

定义c_pi_fast:

代码语言:javascript
复制
[C_pi_fast,info] = pidtune(sys,'PI',1.0)
在这里插入图片描述
在这里插入图片描述

新控制器可实现更高的交叉频率,但代价是相位裕量减小。

将两个控制器的闭环阶跃响应进行比较。

代码语言:javascript
复制
T_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。

代码语言:javascript
复制
[C_pidf_fast,info] = pidtune(sys,'PIDF',1.0)
在这里插入图片描述
在这里插入图片描述

可以看出,在微分作用下, 算法的交叉频率和相位裕量都达到了较好值。

比较pi_fast 和 pidf_fast两个控制器的闭环阶跃响应:

代码语言:javascript
复制
T_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 控制器再次进行比较:

代码语言:javascript
复制
S_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');
在这里插入图片描述
在这里插入图片描述

以上。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-07-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档