网上有很多关于这两种控制算法的实现,但是大多基于c语言,而且用的是c语言中的结构体,看起来比较繁琐。所以我利用c++面向对象的结构以及STL中vector容器来编写两种算法,看起来简洁多了。在编写的过程中,更深刻理解了如何在实际工程中运用PID控制算法。
话不多说,先上代码GitHub - JackJu-HIT/PID: 关于两种PID算法(位置型和增量式)的c++工程实现。
关于两种算法的原理,我直接粘贴我们老师上课的课件图片了,自己打字太费劲!
上述就是位置型pid算法,核心就是u(t)=kperror(t)+ki(sum(error))+kd(error(t)-error(t-1)),积分离散化就是求和,微分求和就是查分,这么理解就可以,如果你要是想理解比例、微分、积分环节对系统会产生什么影响啊,上升时间、超调量、稳定裕度等指标,建议你最好从连续系统理解,类似时域分析法、频域分析法、根轨迹之类的,具体参见自动控制原理即可。
同样增量型的pid算法,就是从位置型推出来的,你把u(k)-u(k-1)化简一下就能得到下图那个