快捷搜索: 王者荣耀 脱发

PID算法讲解以及具体实现

PID算法讲解以及具体实现

1.算法讲解

首先贴出上课老师讲的pid照片

左上角就是我们的增量式pid公式,△u代表的是每一次计算出的pid增量,具体解释代码都有(不会有人这时候直接跑去看代码了吧? ) 整个pid算法最重要的地方,也是新手觉得最乱的地方(我也觉得好乱,推导出我也是新手嘻嘻 ),就是繁多的变量,根据老师的说法以及我对pid的理解,pid算法要实现,要定义11个变量(完全pid算法的情况下),也就是图中的说法了。那么在我的实际实现的代码中,有一些变量我是没有删掉的,留下来是因为后面需要改进的时候也许有用呢?(大概是因为我懒吧 )是因为留下便于更好的理解

回到正题,pid算法的公式就是这么推导而来的,别问我怎么推导的,你能现在推导出傅里叶公式,那我就给你推导一遍(呃呃呃呃呃),反正公式就是公式,记住理解即可~!公式中重要的变量就是e0、e1、e2,这三个变量就是为了每一次记录增量式的误差值之差(就是为了多记录几次然后减少误差的意思,类似求平均值减少误差你可以这么理解)图中的Kp,Ti,Td是三个我们需要调整的变量,不然怎么叫pid算法呢?

其中,Kp调整是整定比例部分。将比例系数Kp由小变大,观察系统响应的变化情况,直到得到反应快、超调小的响应曲线。如果系统没有静差或静差小到允许的范围内,那么只需要比例控制器即可满足要求。Ti是一个稳定剂的作用,能让曲线不抖动。Td是兴奋剂的作用,能让曲线更快的达到目标值。

那么调整pid的方法如下,其实这个东西更需要的是经验调整法(老师居然也是这么说的 ),我称它为灵魂调整或减寿调整法 理论调整:总结试凑法

  1. 比例系数有小到大,然后找出超调小的Kp
  2. 积分时间常数Ti由大变小,适当调整Kp
  3. 微分时间常数Td由小变大,适当调整Ti和Kp

2.代码部分

接下来是代码的地方,记得pid的输出或者计算一般放在中断或者对时间的阻滞作用小的地方,不然你的采样周期也许会因此受到影响 我这里的pid计算放在了中断中(老师教的)

3.protues仿真效果

仿真效果中,看的是紫色线,高点是3.5v,低点是1.5v,因此仿真正确

最后,代码中的1292、5615什么的就是一个A/D模块这种东西,没必要深究,就是为了给pid调参用的罢了

######下载线########

经验分享 程序员 微信小程序 职场和发展