当前位置: 首页 > article >正文

MATLAB 控制系统设计与仿真 - 24

PID 控制器分析- 控制器的形式

连续控制器的结构:

G(s)=K_p+\frac{K_i}{s}+\frac{K_ds}{T_fs+1}

T_f为滤波时间常数,这类PID控制器在MATLAB系统控制工具箱称为并联PID控制器,可由MATLAB提供的pid函数直接输入,格式为:

G_c(s)=pid(K_p,K_i,K_d,Tf);

其他类型的控制器也可以由该函数直接输入,例如令K_i=0,我们可以得到PD控制器

例-1

MATLAB程序

clear all;clc;
num=6;
den=[1 5];
sys=tf(num,den);
step(sys);
hold on;
Gc=pid(50,200,200,20);
sys_cl=feedback(Gc*sys,1);
step(sys_cl);
legend('开环阶跃响应','闭环阶跃响应')

程序运行结果:

标准PID控制器

标准PID控制器的形式为:

G_c(s)=k_p\left \{ 1+\frac{1}{T_1s}+\frac{T_ds}{1+\frac{T_d}{N}s}\right \}

在一般实际中,N通常取10就可以取得很好的逼近微分效果。该控制器可由MATLAB函数

G_c=pidstd(K_p,T_i,T_d,N)直接输入

离散PID控制器

离散PID控制器的格式为:

u_k=K_pe_k+K_iT\sum_{m=0}^{k}e_m+\frac{K_d}{T}(e_k-e_{k-1})

对其进行z变换,可知离散PID控制器可以写成:

G_c(z)=K_p+\frac{K_iTz}{z-1}+\frac{T_d(z-1)}{Tz}

********************对于积分环节的z变换,做一下补充*************************************************

假设 y(k)=K_iT\sum_{m=0}^{k}e_m

y(k+1)=K_iT\sum_{m=0}^{k+1}e_m

y(k+1)=K_iT\sum_{m=0}^{k}e_m+K_iTe(k+1)

y(k+1)=y(k)+K_iTe(k+1)

对上式做Z变换:

Y(z)=\frac{K_iTz}{z-1}e(z)

********************************************************************************************************

对于离散系统的PID控制器,我们也可以通过pid和pidstd函数输入,但是我们要加上采样时间T。其调用格式为:

G_c(z)=pidstd(K_p,K_i,K_d,N,T)

例-2

MATLAB程序如下:

clear all;clc;
Gc=pidstd(10,20,30,10,0.001);
Gc

程序运行结果如下:

Gc =
 
             1       Ts                 1       
  Kp * (1 + ---- * ------ + Td * ---------------)
             Ti      z-1         (Td/N)+Ts/(z-1)

  with Kp = 10, Ti = 20, Td = 30, N = 10, Ts = 0.001
 
Sample time: 0.001 seconds
Discrete-time PIDF controller in standard form

最后,欢迎大家有问题给我留言。

另外欢迎小伙伴们点赞转发加关注

谢大家!!


http://www.kler.cn/a/582507.html

相关文章:

  • KVM制作Ubuntu 22.04.5系统qcow2类型镜像
  • 下一代AIGC一站式商业解决方案Chat Nio
  • 【反无人机目标检测】DRBD-YOLOv8
  • react实现一个列表的拖拽排序(react实现拖拽)
  • 简单易懂Modbus Tcp和Rtu的异同点
  • 神经网络完成训练的详细过程
  • AI日报 - 2025年3月13日
  • 蓝桥真题讲解
  • Android 列表页面终极封装:SmartRefreshLayout + BRVAH 实现下拉刷新和加载更多
  • 无广告记账助手:个人小企业财务管理
  • 02.Kubernetes 集群部署
  • UE5.4分层渲染设置
  • 神经网络机器学习中说的过拟合是什么意思
  • Spring Boot + InfluxDB 实现高效数据存储与查询
  • 【实战-解决方案】Webpack 打包后很多js方法报错:not defined
  • 关于MCP SSE 服务器的工作原理
  • Kotlin D3
  • Vite项目中vite.config.js中为什么只能使用process.env,无法使用import.meta.env?
  • 使用expect工具实现远程批量修改服务器密码
  • Mac 如何在idea集成SVN