本篇文章主要介绍PID在生活中怎么体现,如何运用到项目中
一、什么是PID?
估计你搜出的答案是运用比例(proportional)、积分(integral)、微分(derivative)的算法来控制某个客观存在,使其从偏离标准或期望的状态,调整为接近稳定的、标准或期望的状态,然后告诉你PID控制的三个公式。
上述说法或许对于没有建立系统概念的同学来说理解起来比较困难,所以我们用另一种解释来让大家对PID有一个比较接近的理解。
举例:一般情况下,你从桌子上拿起一支笔,放到眼前,并花一定时间试图用手使这支笔静止在空中一个确定的位置不动。这个过程便完成了一次PID控制。
下面我们分段来解释这个过程
当笔在桌上的时候:笔处于它不该在的位置(偏离标准或期望的状态:无PID参与)
手拿到笔的瞬间:我们开始试图调整他的位置(开始进行PID调整:加入PID控制)
放到眼前:我们完成大部分的调整,进行小部分的调整
花一定时间:我们试图完成小部分的调整
笔静止在空中一个确定的位置不动:我们完成了全部调整(接近稳定的、标准或期望的状态)
由上述举例,我们可以发现PID其实离我们的生活并不远,甚至我们的大脑无时不刻的在使用这个算法。关于计算机如何实现PID算法,建议大家直接点击这个超链接,这位博主讲得很详细,我就不在赘述了。
需要注意的是:
1.积分计算时要处理好它与时间的关系
2.串级PID时,需要判断外环输出值是否能作为内环输入的标准值,不能盲目进行串级PID控制
3.项目开始时,优先确定被控对象的标准值和反馈值,建立等效结构图
4.项目开发中最好不要直接抄他人的kp,ki,kd数值,尽量估算之后进行仿真得出数值。
5.代码可以根据结构图进行优化,加入其他参数到算法中进行计算
二、基础PID算法总结
比例:proportional=现在的误差×kp(kp、ki、kd为估算后调试所得的值,即为一个常数不变)
积分:integral=现在的误差×ki+integral
(如果计算机算力为一秒可循环4×10^8次,那么频率f为4×10^8HZ,设完成某次PID控制循环次数为y,则所花时间为t=y/f,单位s。设a(n)为integral每次循环所得值构成的数列,则a(n+1)=a(n)+现在的误差×ki,n=y-1时即n=t×f-1时,a(n+1)为积分输出的最后值,因此积分输出值与误差和时间相关,且时间越长积分作用越强)
微分:derivative=(现在的误差-上次的误差)×kd =
(由于PID作用,现在误差的绝对值将逐渐小于上次误差的绝对值,因此微分输出值的绝对值会逐渐趋向与零,因此时间越长微分作用越弱)
运用和优化基础PID算法
由上述总结,我们会发现能优化的便是得出误差的代码,即误差判定的代码,或者扩展代码使得PID能够根据不同情况自己调整kp、ki、kd等参数,从生物的角度来说,或许可以算作进行“自适应”,以此来提高PID代码的反应速率和控制的稳定性。
三、实践运用PID算法
根据PID需要控制的参数可以判断需要几个PID控制,再通过各个PID反馈参数和输入参数之间联系来判断各个PID的连接状态(并联还是串联或者是单独系统),由此了解被控对象达到目的的动作过程,并画出结构图。结构图是实践的基础,必须符合逻辑和需求。在根据结构图开始编写代码,完成后检查代码和结构图是否一致。
有能力的情况最好先进行估算和仿真得出接近最佳值的kp、ki、kd的值,再进行代码烧录进行实体测试,调整kp、ki、kd到最佳值。至此PID控制设计和具体项目核心算法完成。