adrc.h 1001 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  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 ts;
  11. //线性状态误差反馈控制器
  12. float wcv;
  13. float out_min;
  14. float out_max;
  15. float out;
  16. }ladrc_t;
  17. void ladrc_init(ladrc_t *adrc, float ts, float wo, float wc, float b0);
  18. float ladrc_run(ladrc_t *adrc, float in, float feedback);
  19. void ladrc_reset(ladrc_t* adrc, float feedback, float out_init);
  20. void ladrc_copy(ladrc_t *dst, ladrc_t *src);
  21. static void __INLINE ladrc_set_range(ladrc_t *adrc, float min, float max) {
  22. adrc->out_min = min;
  23. adrc->out_max = max;
  24. }
  25. static void __INLINE ladrc_change_b0(ladrc_t *adrc, float b0) {
  26. adrc->b0 = b0;
  27. }
  28. static void __INLINE ladrc_change_K(ladrc_t *adrc, float k) {
  29. adrc->wcv = k;
  30. }
  31. static void ladrc_change_params(ladrc_t* adrc, float wo, float wc, float b0) {
  32. adrc->b0 = b0;
  33. adrc->wcv = wc;
  34. adrc->p1 = 2 * wo;
  35. adrc->p2 = wo * wo;
  36. }
  37. #endif /* _ADRC_H__ */