PI_Controller.h 688 B

12345678910111213141516171819202122232425262728
  1. #ifndef _PI_Contrller_H__
  2. #define _PI_Contrller_H__
  3. #include "math/fix_math.h"
  4. #include "bsp/bsp.h"
  5. typedef struct {
  6. s16q5_t kp;
  7. s16q5_t ki;
  8. s16q5_t max;
  9. s16q5_t min;
  10. s16q5_t Ui;
  11. s16q14_t DT;
  12. }PI_Controller;
  13. static __INLINE void PI_Controller_Reset(PI_Controller *pi, s16q5_t init) {
  14. pi->Ui = init;
  15. }
  16. static __INLINE s16q5_t PI_Controller_run(PI_Controller *pi, s16q5_t err) {
  17. s16q5_t kp_err = S16_mul(err,pi->kp, 5);
  18. s16q5_t ki_err = S16_mul(err,pi->ki, 5);
  19. s16q5_t integral = S16_mul(ki_err, pi->DT, 14);
  20. pi->Ui = MATH_sat(pi->Ui + integral, pi->min, pi->max);
  21. s32q14_t out = pi->Ui + kp_err;
  22. return MATH_sat(out, pi->min, pi->max);
  23. }
  24. #endif /*_PI_Contrller_H__*/