PI_Controller.h 592 B

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