一开始见到PID计算公式时总会问“为什么是这样子的一道公式”,为了理解那几道公式,当时将其未简化前的公式活生生地算了一遍,现在想来,这样的演算过程固然有助于理解,但假如一开始就带着对疑问的答案已有一定抽象了解后再进行演算则会理解的更快!

首先推荐白志刚的《由入门到精通—吃透PID 2.0版》看完一、二章之后,建议你先通过实践练习然后再去看书里接下来的其他章节,这样你对这本书的掌握会更加高效。

PID就是对输入偏差进行比例积分微分运算,然后将运算的叠加结果去控制执行机构。实践练习中,如何把这一原理转化为程序?为什么是用那几个error进行计算?

以下是我摘录的一段PID程序,我曾用其对智能车的速度进行闭环控制:

P:Proportional  比例

I:Integrating 积分

D:Differentiation 微分

Pwm_value:输出Pwm暂空比的值

Current_error:当前偏差 

last_error:上次偏差   

prev_error:上上次偏差

增量式PID计算公式: 

P=Kp*(current_error﹣last_error);

D=Kd*(current_error﹣2*last_error﹢prev_error);

I=Ki*current_error;

PID_add=Pwm_value+P﹢I﹢D;

一、为什么是PID_add=Pwm_value+(P﹢I﹢D)而不是PID_add=P+I+D?

如上图,有一个人前往目的地A,他用眼睛视觉传感器目测到距离目的地还有100m,即当前与目的地的偏差为100,他向双脚输出Δ=100J的能量,跑呀跑,10s之后,他又目测了一次,此时距离为40m,即current_error=40,他与10s前的偏差last_error=10对比,即current_error - last_error=-60,这是个负数,他意识到自己已经比较接近目的地,可以不用跑那么快,于是输出Δ=100+(-60)=40J的能量,40J的能量他刚好以4m/s的速度跑呀跑,10s之后,他发现已经到达目的点,此时current_error=0,大脑经过思考得出current_error—last_error=0 - 40=-40,两脚获得的能量Δ=40+(-40)=0,即他已经达到目的地,无需再跑。在刚才的叙述中,可知增量式P+I+D输出的是一个增量,将该增量与调节量相加后所得到值才是最终输出量,其反应的是之前的输出量是在当前的状态中是该增加还是该减少

二、纯比例控制P=Kp*(current_error﹣last_error),怎样理解﹙current_error﹣last_error ﹚?

PID中纯比例控制就是把被控制量的偏差乘以一个系数作为调节器的输出,在增量式PID中,反映在程序上的,我们被控制量就是error,而实际上,例如在速度控制中error=目标速度﹣当前速度,所以明确目的:我们通过控制error趋近于0,最终使得当前速度趋近于目标速度

如上图,函数经过时间Δt,由y1变化为y2时,问y增长的比例为多少?很显然:K=﹙y2-y1﹚/Δt;

以速度控制为例,若y为error,如上图,在时间t1到t2的过程中,我们可以得到输出控制量error变化的趋势为(current_error - last_error)/Δt。得到偏差的变化趋势后,乘以Kp使输出量与error相对变化。这个道理犹如模拟电子电路中,声音信号经过功放管放大输出的信号与输入信号相对应的线性变化

三、引进微分控制?

然而,通常情况下,我们的被控制量并非纯比例式地变化,如下图:

比例表示变化趋势,微分则表示变化趋势的变化率,映射到一个图像曲线中即为导数的变化!上图中若求曲线中x2至x1某点的斜率,当Δt足够小时,则可近似为(y2 - y1)/Δt ,可知x3到x1导数的变化为﹛(y3 - y2) -(y2 - y1)﹜/Δt =(y3 - 2*y2﹢y1)/Δt 。将不同时间的y1、y2、y3映射为prev_error、last_error、current_error;则error变化趋势的变化为﹛(current_error - last_error) - (last_error - prev_error)﹜/Δt=﹛﹙current_error - 2*last_error﹢prev_error﹚﹜/Δt,可得微分D=Kd*(current_error﹣2*last_error﹢prev_error)。在系统中加入微分反映系统偏差信号的变化率,能预知偏差变化的趋势,具有超前控制作用,提前处理偏差

四、引进积分控制?

积分控制可以消除偏差,体现在公式中较容易理解,当前的偏差差经过系数Ki的放大后映射为输出控制量,即I=Ki*current_error。P只要前后偏差之差为0,即current_error - last_current=0,则不进行调节,D只要前后偏差变化率为0,即(current_error﹣2*last_error﹢prev_error)=0,则不进行调节。而对于积分只要偏差存在,调节就始终进行,因此积分可以消除误差度,但在在某些情况下,一定范围内的误差是允许的,而如果此时积分调节始终存在,可能会导致系统稳定性下降,如上图,此时可通过弱化积分系数Ki使系统稳定。

原创不易,

如果我的文字对你有所启发或帮助,

还请“点赞、收藏、转发”三连!

增量式PID公式的4点疑问和理解相关推荐

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

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

  2. 零基础制作平衡小车【连载】8---位置式PID和增量式PID

    上一节说的PID公式属于位置式PID,位置式PID控制的输出与整个过去的状态有关,用到了误差的累加值,而增量式PID的输出只与当前拍和前两拍的误差有关.就温控系统来说,位置式PID输出的结果就是PWM ...

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

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

  4. 位置式PID与增量式PID的介绍和代码实现

    PID分为位置式PID与增量式PID. 一.位置式PID 1.表达式为: 2.缺点: 1).由于全量输出,所以每次输出均与过去状态有关,计算时要对ek进行累加,工作量大: 2).因为计算机输出的uk对 ...

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

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

  6. 位置式PID与增量式PID区别浅析

    1PID控制算法 什么是PID PID 控制器以各种形式使用超过了 1 世纪,广泛应用在机械设备.气动设备 和电子设备.在工业应用中PID及其衍生算法是应用最广泛的算法之一,是当之无愧的万能算法 PI ...

  7. 增量式速度pid调节策略_增量式PID是什么?不知道你就落伍了

    目录 1 什么是增量式PID? 2 举个例子 2.1 位置式PID 2.2 增量式PID 3 伪算法 4 C语言实现 5 总结 在之前一篇博客中( 简易PID算法的快速扫盲 )简单介绍了PID算法的基 ...

  8. 位置式PID与增量式PID区别浅析(百度百科增量式PID讲解思路概念更明确清晰)

    位置式PID与增量式PID区别浅析 Z小旋 2019-04-26 08:55:12  59882  收藏 713 分类专栏: NXP智能车学习 文章标签: 位置式PID PID 增量式PID 版权 1 ...

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

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

  10. 学习笔记—增量式PID详细实现(C语言)

    增量式PID指数字控制器的输出只是控制量的增量∆uk.当执行机构需要的控制量是增量,而不是位置量的绝对数值时,可以使用增量式PID控制算法进行控制. 1.公式推导: 增量式PID控制算法可以通过位置式 ...

最新文章

  1. Invocation of destroy method 'close' failed on bean with name 'sqlSession'
  2. sqlserver的事务回滚和设置事务保存点操作
  3. MCS-51系列特殊功能寄存器(摘抄)
  4. 【图论】简单 概念 及 公式 入门 ( 完全图 | 二部图 | 连通图 | 欧拉回路 | 哈密顿圈 | 平面图 | 欧拉定理 )
  5. 【教女朋友学网络系列4】之今天教她一些简单的交换机实验
  6. Tcpdump(linux)下载、安装、使用说明
  7. “美登杯”上海市高校大学生程序设计 C. 小花梨判连通 (并查集+map)
  8. 面向对象 抽象(abstract)
  9. React Ant Design UI 图片上传组件 代码片段
  10. go php 框架,go框架 - Go语言中文网 - Golang中文社区
  11. 如何学习计算机组成原理
  12. 国产CAD_谁说国产系统没有CAD软件可以用?
  13. 大数据人工智能技术全攻略(一)
  14. KafkaConsumer实现精确的latest(结尾)开始消费
  15. matlab如何绘制语谱图,语谱图matlab
  16. 在Ubuntu 安装 NTL 库
  17. 【Educational Codeforces Round 61 (Rated for Div. 2)】A.B.C.D.E.F.G
  18. java的发展(8-17新特性整理)
  19. “2019年新出的境外云闪付是什么?
  20. 开启微信公众号定位服务器,微信公众号的定位是怎样的?

热门文章

  1. h5可以获取本机手机号码么_h5页面模板免费制作丨动态h5页面模板挑选
  2. xampp套件使用php,php集成套件服务器xampp安装使用教程(适合第一次玩PHP的新手),xampp安装使用...
  3. 医院设备管理系统方案/案列/软件/APP/小程序/网站
  4. Android抓包思想总结
  5. Matlab数理统计工具箱
  6. GD32F103VET6替代STM32F103VET6遇到的问题
  7. 微信小程序上传图片到云储存中
  8. 3dmax局部渲染变黑原因及解决方法
  9. 远程线程注入技术 屏蔽ctrl+alt+del
  10. Matlab fftshift 详解