PI_Controller.c 621 B

1234567891011121314151617181920212223242526272829
  1. #include "pi_controller.h"
  2. float pi_control(PI_ctrl_t *pi, float error){
  3. float output = 0.0f;
  4. /* »ý·Ö¿¹±¥ºÍ */
  5. if (pi->output > pi->max_output) {
  6. if (error < 0) {
  7. pi->i_errors += error;
  8. }
  9. }else if (pi->output < pi->min_output) {
  10. if (error > 0) {
  11. pi->i_errors += error;
  12. }
  13. }else {
  14. pi->i_errors += error;
  15. }
  16. output = pi->output = pi->Kp_gain * error + pi->Ki_gain * pi->i_errors;
  17. if (output > pi->max_output) {
  18. output = pi->max_output;
  19. }else if (output < pi->min_output) {
  20. output = pi->min_output;
  21. }
  22. return output;
  23. }
  24. void pi_clear(PI_ctrl_t *pi) {
  25. pi->i_errors = 0.0f;
  26. pi->output = 0.0f;
  27. }