adrc.h 702 B

12345678910111213141516171819202122232425262728293031
  1. #ifndef _ADRC_H__
  2. #define _ADRC_H__
  3. #include "math/fast_math.h"
  4. #include "bsp/bsp_driver.h"
  5. typedef struct {
  6. //扩张状态观测器
  7. float b0;
  8. float z1,z2;
  9. float p1,p2;
  10. float last_z1, last_z2;
  11. float ts;
  12. //线性状态误差反馈控制器
  13. float wcv;
  14. float out_min;
  15. float out_max;
  16. float out;
  17. }ladrc_t;
  18. void ladrc_init(ladrc_t *adrc, float ts, float wo, float wc, float b0);
  19. float ladrc_run(ladrc_t *adrc, float in, float feedback);
  20. void ladrc_reset(ladrc_t* adrc, float feedback, float out_init);
  21. void ladrc_copy(ladrc_t *dst, ladrc_t *src);
  22. static void __INLINE ladrc_set_range(ladrc_t *adrc, float min, float max) {
  23. adrc->out_min = min;
  24. adrc->out_max = max;
  25. }
  26. #endif /* _ADRC_H__ */