最近看到了Brett Beauregard发表的有关PID的系列文章,感觉对于理解PID算法很有帮助,于是将系列文章翻译过来!在自我提高的过程中,也希望对同道中人有所帮助。作者Brett Beauregard的原文网址:http://brettbeauregard.com/blog/2011/04/improving-the-beginner%E2%80%99s-pid-sample-time/
1、问题
初学者的PID设计为不规则地调用。这导致2个问题:
- 你没有从PID中获得一致的行为,因为有时候它被频繁调用,有时侯却很少使用。
- 你需要做额外的数学计算—微分和积分,因为它们都依赖于时间的变化。
2、解决方案
为了确保定期调用PID。我决定采用这样的方法,就是指定每个周期调用计算函数。根据预先确定的采样时间,PID决定是否应立即计算或返回。
一旦我们知道PID以恒定间隔进行评估,也可以简化微分和积分计算。来点鼓励!
3、代码
1 /*working variables*/ 2 unsigned long lastTime; 3 double Input,Output,Setpoint; 4 double errSum,lastErr;