PID算法原理 一图看懂PID的三个参数

PID算法原理 一图看懂PID的三个参数

LZ以前有个小小的理想,就是让手边的MCU自己“思考”起来,写出真正带算法的程序。前段时间做一个比赛项目的过程中,对经典、实用的PID算法有了一点点自己的理解,就写了这些,与大家分享因为LZ想尽办法,试着用最易于理解的语言说清楚原理,不做太多的理论分析。(LZ文学功底不行),所以下面的内容会有不严谨的地方,或者有解释错误的地方。大神们发现了,一定要帮我补充,或者给予批评~~~谢谢你们好啦,正文开始 啥是PID? PID可以吃吗?PID,就是“比例(proportional)、积分(integral)、微分(derivative)”,是一种很常见的控制算法。算法是不可以吃的。到LZ发帖的这一天,PID已经有105年的历史了它并不是什么很神圣的东西,大家一定都见过PID的实际应用——比如四轴飞行器,再比如平衡小车......还有汽车的定速巡航、3D打印机上的温度控制器....再比如动物园里的海狮,将一根杆子直立着顶在头上(OOPS,这个也算..)就是类似于这种:需要将某一个物理量“保持稳定”的场合(比如维持平衡,稳定温度、转速等),PID都会派上大用场。 那么问题来了: 比如,我想控制一个“热得快”,让一锅水的温度保持在50℃ 这么简单的任务,为啥要用到微积分的理论呢你一定在想: 这不是so easy嘛~ 小于50度就让它加热,大于50度就断电,不就行了?几行代码用Arduino分分钟写出来没错~在要求不高的情况下,确实可以这么干~ But! 如果LZ换一种说法,你就知道问题出在哪里了:如果我的控制对象是一辆汽车呢? 要是希望汽车的车速保持在50km/h不动,你还敢这样干么设想一下,假如汽车的定速巡航电脑在某一时间测到车速是45km/h。它立刻命令发动机:加速!结果,发动机那边突然来了个100%全油门,嗡的一下,汽车急加速到了60km/h。这时电脑又发出命令:刹车!结果,吱...............哇............(乘客吐)所以,在大多数场合中,用“开关量”来控制一个物理量,就显得比较简单粗暴了。有时候,是无法保持稳定的。因为单片机、传感器不是无限快的,采集、控制需要时间。而且,控制对象具有惯性。比如你将一个加热器拔掉,它的“余热”(即热惯性)可能还会使水温继续升高一小会。 这时,就需要一种『算法』:

相关推荐