本帖最后由 卧听南窗雨 于 2013-11-3 22:08 编辑
void speed(void) //每50ms 调用一次 位置式PI { e=Speed_Target-Speed; // 求e(k) fP = e * Kp; fI = e * Ki; g_fSpeedControlIntegral += fI; //积分累加 SPWMnew = fP + g_fSpeedControlIntegral; //求出当前的控制量 }
void speed(void) //每50ms 调用一次 增量式PID { e=Speed_Target-Speed; // 求e(k) de=e-last_e; // 求e(k)-e(k-1) dde=de-last_de; // 求e(k)-2e(k-1)+e(k-2) last_e=e; // 把e(k)保存为e(k-1)供下次计算使用 last_de=de; // 把e(k)-e(k-1)保存为e(k-1)-e(k-2) dPWM=Kp*de+Ki*e+Kd*dde; // 根据公式求出PWM份数需要改变量 SPWMnew+=dPWM; // 由公式求出当前PWM份数并输出 }
红色字体部分显示两种算法都有积分累加项呀,只是在程序不同的部位累加的,但是最终的累加效果应该是一样吧。难道是我理解错了?求大神指导呀
|