|
发表于 2010-1-11 13:32:54
|
显示全部楼层
感觉不对劲,大家看这:
Controller.error = Controller.input-Controller.feedback;
// calculate integral error
Controller.error_integ += Controller.error;
// clamp integral error (anti-windup)
//Controller.error_integ = MAX(Controller.error_integ, -Controller.windupMax);
//Controller.error_integ = MIN(Controller.error_integ, Controller.windupMax);
// calculate differential error
Controller.error_diff = Controller.error - Controller.error_last;
Controller.error_last = Controller.error;
// do PID
Controller.output = ((Controller.Kp*Controller.error)>>8)
+((Controller.Ki*Controller.error_integ)>>8)
+((Controller.Kd*Controller.error_diff)>>8);
印象中的PID公式:U = Kp*(e0-e1) + Ki*e0 + Kd*(e0-2*e1+e2) + Un-1 ; |
|