深入浅出PID控制算法(二)————PID算法离散化和增量式PID算法原理及Matlab实现

news/2024/11/25 7:31:31/

引言

上篇介绍了连续系统的PID算法,但是计算机控制是一种采样控制,他只能根据采样时刻的偏差来计算控制量,因此计算机控制系统中,必须对公式进行离散化,具体就是用求和代替积分,用向后差分来代替微分,使模拟PID离散化为数字形式的差分方程。

准备工作

在采样周期足够小时,可以作如下近似:
这里写图片描述
式中

  • T————为采样周期
  • k————为采样序号,k=0,1,2….

用这种近似方法,可以得到两种形式数字PID控制算法

位置式PID算法

由前面推倒很容易得到离散化后的表达式
这里写图片描述
由此式可以看出数字调节的输出u(k)跟过去的所有偏差信号有关,计算机需要对e(i)进行累加,运算量太大,一般不用,重点说明增量式PID算法。

增量式PID算法

由于增量式PID的算法不够方便,不仅对偏差进行累加,占用过多的存储单元,而且不方便写程序,所以需要进行一些改进,对位置式取增量,方法如下:
这里写图片描述

Matlab仿真

分析过程

1、对G(s)进行离散化即进行Z变换得到Z传递函数G(Z);
2、分子分母除以z的最高次数即除以z的最高次得到;
3、由z的位移定理Z[e(t-kt)]=z^k*E(z)逆变换得到差分方程;
4、PID编程实现
具体实现细节在代码注释中已经给出

    %设一被控对象G(s)=50/(0.125s^2+7s),  %用增量式PID控制算法编写仿真程序  %(输入分别为单位阶跃、正弦信号,采样时间为1ms,控制器输出限幅:[-3,3],  %  仿真曲线包括系统输出及误差曲线)。  ts=0.001;                 %采样时间  sys=tf(50,[0.125,7, 0]); %tf是传递函数  即被控对象函数G();  dsys=c2d(sys,ts,'z');    %把控制函数离散化取Z变换n阶定常离散系统差分方程%在零初始条件下取Z变换:%dsys即Y(z)/U(z)[num,den]=tfdata(dsys,'v');% 离散化后提取分子、分母    u_1=0.0;  u_2=0.0;  y_1=0.0;  y_2=0.0;  x=[0,0,0]';  error_1=0;  error_2=0;  %核心代码for k=1:1:1000  time(k)=k*ts;                        %采样次数  S=1;  if S==1                         %阶跃输入kp=6.5;ki=0.1;kd=1;             %初始化PID    rin(k)=1;                    %Step Signal   elseif S==2                     %正弦输入kp=10;ki=0.1;kd=15;             rin(k)=0.5*sin(2*pi*k*ts);    %Sine Signal     即实际输入      end du(k)=kp*x(1)+kd*x(2)+ki*x(3);      %PID Controller   控制系数    u(k)=u_1+du(k);                     %真正的PID输出应该为du+前一时刻的输出if u(k)>=3         u(k)=3;  end  if u(k)<=-3  u(k)=-3;  end  %Linear model 难点就是把传递函数转化为差分方程,以实现PID控制。 yout(k)=-den(2)*y_1-den(3)*y_2+num(2)*u_1+num(3)*u_2;          %实际输出 num为dsys分子多项式系数,den为dsys分母多项式系数,从n阶定常离散系统差分方程变化来的。error(k)=rin(k)-yout(k);                                       % 误差 输入-输出 u_2=u_1;                                                       %保存上上次输入   为下次计算  u_1=u(k);                                                      %保存上一次控制系数   为下次计算  y_2=y_1;                                                       %保存上上次次输出   为下次计算  y_1=yout(k);                                                   %保存上一次输出   为下次计算  x(1)=error(k)-error_1;                                         %KP的系数  x(2)=error(k)-2*error_1+error_2;                               %KD的系数  x(3)=error(k);                                                 %KI的系数error_2=error_1;                                                %上次的变上上次误差error_1=error(k);                                               %这次的变上次的误差end figure(1);  plot(time,rin,'b',time,yout,'r');                        %输入 和实际控制输出  xlabel('time(s)'),ylabel('rin,yout');   figure(2);  plot(time,error,'r')                                     %时间误差输出曲线  xlabel('time(s)');ylabel('error'); 

仿真效果(PID调参后)

这里写图片描述
这里写图片描述

调参过程

(1)
确定比例系数Kp
确定比例系数Kp时,首先去掉PID的积分项和微分项,可以令Ti=0、Td=0,使之成为
纯比例调节。输入设定为系统允许输出最大值的60%~70%,比例系数Kp由0开始逐渐增大,直至系统出现振荡;再反过来,从此时的比例系数Kp逐渐减小,直至系统振荡消失。记录此时的比例系数Kp,设定PID的比例系数Kp为当前值的60%~70%。
(2)
确定积分时间常数Ti
比例系数Kp确定之后,设定一个较大的积分时间常数Ti,然后逐渐减小Ti,直至系统出现振荡,然后再反过来,逐渐增大Ti,直至系统振荡消失。记录此时的Ti,设定PID的积分时间常数Ti为当前值的150%~180%。
(3)
确定微分时间常数Td
微分时间常数Td一般不用设定,为0即可,此时PID调节转换为PI调节。如果需要设定,则与确定Kp的方法相同,取不振荡时其值的30%。
(4)
系统空载、带载联调
对PID参数进行微调,直到满足性能要求。

Simulink仿真部分

这里使用Simulink仿真也非常的方便,只需要设定好PID控制器的参数和传递函数即可
这里写图片描述
这里注意Filter coefficient这个参数起前向滤波作用,这里取得1
这里写图片描述

微分环节的缺点,就是误差e变化微弱的时候,如果D过大会产生过大的修正量,导致震动不但不减小反而扩大。
滤波器的作用就是滤除高频修正,使D更好用,说白了是一个改进型

这里写图片描述

这里写图片描述

运行后双击示波器查看结果
这里写图片描述

这里写图片描述

结论

  (1)对于PID 参数采用 MATLAB 进行整定和仿真,使用起来不仅快捷、方便,而且更为直观,同时也避免了传统方法反复修改参数调试。
  (2)系统的响应速度会随Kp值的增大而加快,同时也有助于静差的减小,而Kp值过大则会使系统有较大超调,稳定性变坏;此外,系统的动作会因为过小的Kp值减慢。
  (3)超调的减小、振荡变小以及系统稳定性的增加都取决于积分时间Ti的增大,但是系统静差消除时间会因为Ti的增大而变长。
  (4)增大微分时间Td对于系统的稳定性、系统响应速度的加快以及系统超调量的减小都会有所帮助。但是如果Td过大,则会使得调节时间较长,超调量也会增大;如果Td过小,同样地也会发生以上状况。
  (5)总之PID 参数的整定必须考虑在不同时刻三个参数的作用以及彼此之间的作用关系。

相关Matlab代码和Simulink仿真文件已经上传,可自行下载https://download.csdn.net/download/kilotwo/10329949


http://www.ppmy.cn/news/443370.html

相关文章

基于人工智能算法的多元负荷预测

文章目录 课题描述ASU 综合能源系统的 多元负荷预测解决思路预告数据一览LSTMs 模型:模型比较:详细文档与提问本人专挑数据挖掘、机器学习和 NLP 类型的题目做,有兴趣也可以逛逛我的数据挖掘竞赛专栏。 如果本篇博文对您有所帮助,请不要吝啬您的点赞 😊 数据来源:http…

基于bp神经网络的pid算法,基于单神经元的pid控制

基于BP神经网络的PID控制器设计 参考一下刘金琨的《先进PID控制》这本书。 例子&#xff1a;被控对象yout(k)a(k)yout(k-1)/(1yout(k-1)^2)u(k_1)其中a&#xff08;k&#xff09;1.2(1-0.8e^(-0.1k))输入信号&#xff1a;rin&#xff08;k&#xff09;1.0和rin&#xff08;k&…

粒子群算法(PSO)优化的BP神经网络预测回归——附代码

目录 摘要&#xff1a; 1.BP模型神经网络模型 2.粒子群优化算法&#xff08;PSO&#xff09; 伪代码实现 3.粒子群算法结合BP神经网络&#xff08;PSO-BP&#xff09; 4.程序运行结果 5.本文Matlab代码 摘要&#xff1a; BP神经网络是一种常见的多层前馈神经网络&#…

SIM逻辑模型与APDU

SIM(Subscriber Identity Module)是一种移动运营商用于提供给用户验证身份、接入网络等服务的UICC卡。一张SIM卡里存储了很多移动网络接入相关的数据&#xff0c;比如ICCID&#xff08;UICC卡的ID&#xff09;,IMSI&#xff08;International Mobile Subscriber Identity),验证…

浅谈IC卡数据分析

文章目录 1.简单介绍2. IC卡详解3.M1卡详解4.常用读写设备介绍5.滚码技术1. 滚动码技术是如何出现的&#xff1f;2. 常见的滚动方式3. 滚动码的破解方法 4.操作步骤5.IC卡日期格式6.常见校验码7.楼层号表示 1.简单介绍 Mifare S50 简称M1&#xff0c;高频最常见的卡&#xff0c…

改进的PID算法

位置式PID算法 位置式 P I D PID PID算法是一种比较直观的的 P I D PID PID算法&#xff0c;如系统框图中所示&#xff0c; i n in in表示设定值&#xff0c; e r r o r error error表示差值&#xff0c; u u u表示控制器输出值&#xff0c; o u t out out表示被控量。算法表达…

糖尿病预测模型-Pima印第安人数据集-论文_企业科研

糖尿病概述 糖尿病有一型和二型&#xff0c;是由于胰腺分泌胰岛素紊乱或人体无法有效利用其产生的胰岛素而发生的一种慢性疾病&#xff0c;是&#xff12;&#xff11;世纪人类面临的健康问题之一&#xff0e;糖尿病伴有弥漫性并发症&#xff0c;其包括心血管病变、肾脏疾病、…

《面向基于人工智能的学习健康系统,使用心电图进行人群水平的死亡率预测》阅读笔记

目录 一、摘要 二、十个问题 Q1论文试图解决什么问题? Q2这是否是一个新的问题?