PID算法离散化和增量式PID算法原理及Matlab实现

  • 引言
  • 1 准备工作
    • 1.1 位置式PID算法
    • 1.2 增量式PID算法
  • 2 Matlab仿真
    • 2.1 仿真效果(PID调参后)
    • 2.2 调参过程
    • 2.3 Simulink仿真部分
  • 3 结论
  • 相关阅读

引言

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

1 准备工作

在采样周期足够小时,可以作如下近似:
式中

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

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

1.1 位置式PID算法

由前面推倒很容易得到离散化后的表达式

由此式可以看出数字调节的输出u(k)跟过去的所有偏差信号有关,计算机需要对e(i)进行累加,运算量太大,一般不用,重点说明增量式PID算法。

1.2 增量式PID算法

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

2 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');

2.1 仿真效果(PID调参后)


2.2 调参过程

  • Step 1
    确定比例系数Kp

    确定比例系数Kp时,首先去掉PID的积分项和微分项,可以令Ti=0、Td=0,使之成为

    纯比例调节。输入设定为系统允许输出最大值的60%~70%,比例系数Kp由0开始逐渐增大,直至系统出现振荡;再反过来,从此时的比例系数Kp逐渐减小,直至系统振荡消失。记录此时的比例系数Kp,设定PID的比例系数Kp为当前值的60%~70%。

  • Step 2
    确定积分时间常数Ti

    比例系数Kp确定之后,设定一个较大的积分时间常数Ti,然后逐渐减小Ti,直至系统出现振荡,然后再反过来,逐渐增大Ti,直至系统振荡消失。记录此时的Ti,设定PID的积分时间常数Ti为当前值的150%~180%。

  • Step 3
    确定微分时间常数Td;
    微分时间常数Td一般不用设定,为0即可,此时PID调节转换为PI调节。如果需要设定,则与确定Kp的方法相同,取不振荡时其值的30%。

  • Step 4
    系统空载、带载联调;
    对PID参数进行微调,直到满足性能要求。

2.3 Simulink仿真部分

这里使用Simulink仿真也非常的方便,只需要设定好PID控制器的参数和传递函数即可

这里注意Filter coefficient这个参数起前向滤波作用,这里取得1

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

运行后双击示波器查看结果

3 结论

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

相关Matlab代码和Simulink仿真文件请关注公众号:迈微电子研发社(左侧或下方微信扫码即可)回复“PID算法”,获取免费下载链接

相关阅读

  1. 深入浅出PID控制算法(一)————连续控制系统的PID算法及MATLAB仿真 原文链接:https://blog.csdn.net/Charmve/article/details/104538102
  2. 深入浅出PID控制算法(三)————增量式与位置式PID算法的C语言实现与电机控制经验总结 原文链接:https://blog.csdn.net/Charmve/article/details/104536504
  3. 单片机应用系统课程设计——基于PID的直流电机调速控制系统 原文链接:https://blog.csdn.net/Charmve/article/details/103466831
  4. 2015 年全国电赛题——风力摆控制系统(B 题)原文链接:https://blog.csdn.net/Charmve/article/details/103922460

-END-

△微信扫一扫关注「迈微AI研习社」公众号

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

  1. 增量式pid调节方式有何优点_增量式PID的“假抗饱和”性

    众所周知,PID的一般结构如图所示: 它是一种线性控制器: 根据给定值 与实际输出值 构成控制方案: . 三个环节: 比例环节:成比例地反映控制系统的偏差信号 ,偏差一旦产生,控制器立即产生控制作用, ...

  2. 增量式pid调节方式有何优点_增量式pid和位置式pid相比各有什么优缺点

    展开全部 位置PID和增量PID之间的差异是不同的输出,是否存在积分部分以及是否具有记忆功62616964757a686964616fe78988e69d8331333433626562能. 1.输出 ...

  3. 基于自适应算法和增量式PID算法的模拟直升飞机控制系统

    基于自适应算法和增量式PID算法的模拟直升飞机控制系统 文章目录 基于自适应算法和增量式PID算法的模拟直升飞机控制系统 控制系统硬件 单片机系统 传感器系统介绍 直升机模拟系统介绍 系统模块介绍 A ...

  4. 入门智能车 | 带你认识PID闭环控制 - 增量式PID实现电机速度闭环

    带你认识PID闭环控制 - 增量式PID实现电机速度闭环 闭环控制是指控制论的一个基本概念.指作为被控的输出量以一定方式返回到作为控制的输入端,并对输入端施加控制影响的一种控制关系.带有反馈信息的系统 ...

  5. 位置式Pid和增量式Pid的定义及应用

    PID算法是一个典型的闭环控制系统.P.I.D,比例.积分.微分. 开环:输入量对输出量没有反馈作用: 闭环:输入量对输出量有反馈作用. 位置式Pid 位置式Pid就是位置闭环控制,位置闭环控制就是根 ...

  6. 增量式pid分析 及 参数整定

    /************************************************************************** 函数功能:增量PI控制器 1.入口参数:编码器测 ...

  7. 位置式 PID 控制算法和增量式 PID 控制算法

    数字 PID 控制算法通常分为位置式 PID 控制算法和增量式 PID 控制算法 一.位置式 PID 算法 : e(k): 用户设定的值(目标值) - 控制对象的当前的状态值 比例P : e(k)积分 ...

  8. C语言实现PID算法:位置式PID和增量式PID

    原创者微信公众号 PID算法可以说是在自动控制原理中比较经典的一套算法,在现实生活中应用的比较广泛. 大学参加过电子竞赛的朋友都应该玩过电机(或者说循迹小车),我们要控制电机按照设定的速度运转,PID ...

  9. 【转】增量式PID控制算法

    (转载 出处blog.ednchina.com/tengjingshu )blog.ednchina.com/tengjingshu/211739/message.aspx# 当执行机构需要的不是控制 ...

  10. 增量式PID控制算法及仿真

    当执行机构需要的是控制量的增量(例如驱动步进电机)时,应采用增量式PID控制.根据递推原理可得: 增量式PID控制算法: 根据增量式PID控制算法,设计了仿真程序,被控对象如下: PID控制参数:kp ...

最新文章

  1. NLP这两年:15个预训练模型对比分析与剖析
  2. Win10如何远程连接Windows Server 2008,以及提示“您的凭证不工作”问题解决
  3. python爬虫小说代码示例-Python从零开始写爬虫-4 解析HTML获取小说正文
  4. laravel debug,http模式,日志
  5. 【译】LXC and LXD: Explaining Linux Containers
  6. 为什么PCB板通常是绿色的?
  7. npm 安装 chromedriver 失败的解决办法
  8. Python 项目打包成可执行程序命令
  9. stringBuffer的使用及字符串比较的区别
  10. 微型计算机在工作过程中突然遇到电源中断,微型计算机在工作过程中突然遇到电源中断,则计算机 中的信息将全部丢失,再次接通电源后也不能恢复数据。...
  11. python怎么在运行中查看执行状态,Python程序运行时查看对象状态怎样设计才能实现...
  12. 用正则将html中的url提取,使用正则表达式从HTML中提取文本和链接
  13. 你了解你的征信吗?这六个问题必须知道!
  14. 同事用Excel花了半小时做甘特图,我用一工具只用10分钟
  15. APP消息推送(Push),竟然还有这么多你不知道的
  16. matlab 直流-直流变换器毕业论文,基于MATLAB直流-直流变换器的研究毕业论文.docx-资源下载在线文库www.lddoc.cn...
  17. 研究生初学机器学习的几点建议
  18. Room使用遇到的问题
  19. 数据分析5_美团外卖用户差评分析(附数据及Tableau文件)
  20. uni-app升级方案

热门文章

  1. 软件架构设计---软件架构文档化
  2. 数学建模冲刺篇(灵敏度分析)
  3. Excel常用函数——count
  4. 香农编码的gui编码_香农编码
  5. ug建模减速器_UG NX一级减速器整体建模
  6. 数据结构与算法分析(一)
  7. Ubuntu 18.04安装Eclipse教程
  8. ModifyStyle()的用法
  9. unityShader物体表面流光效果
  10. Android 如何修改factory mode下FM的默认测试频点及阀值