foc_observer.h 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. #ifndef _FOC_OBSERVER_H__
  2. #define _FOC_OBSERVER_H__
  3. #include "os/os_types.h"
  4. /*
  5. 处理编码器和角度观测器的电角度融合,主要是判断编码器是否异常,切换到角度观测器
  6. */
  7. typedef struct {
  8. float enc_angle;
  9. float enc_speed;
  10. float enc_est_angle; //通过encoder速度,估计当前角度
  11. float sensorless_angle;
  12. float sensorless_speed;
  13. float sensorless_est_angle; //通过smo速度,估计当前角度
  14. bool is_sensorless_enable;
  15. bool is_sensorless_running;
  16. bool is_sensorless_stable;
  17. int sensorless_stable_cnt;
  18. int sensorless_unstable_cnt;
  19. float real_est_diff;
  20. float real_est_ration;
  21. u16 enc_err_cnt; //融合系数
  22. bool b_force_sensorless;
  23. }foc_observer_t;
  24. void foc_observer_init(void);
  25. float foc_observer_update(float uAlp, float uBeta, float iAlp, float iBeta);
  26. bool foc_observer_diagnostic(float enc_angle, float enc_vel);
  27. float foc_observer_speed(void);
  28. bool foc_observer_is_encoder(void);
  29. void foc_observer_use_sensorless(bool use_smo);
  30. void foc_observer_enable_sensorless(bool enable);
  31. float foc_observer_sensorless_angle(void);
  32. float foc_observer_sensorless_speed(void);
  33. float foc_observer_sensorless_working_speed(void);
  34. u16 foc_observer_enc_errcount(void);
  35. float foc_observer_sensorless_diff(void);
  36. float foc_observer_sensorless_ration(void);
  37. bool foc_observer_sensorless_stable(void);
  38. bool foc_observer_is_force_sensorless(void);
  39. #endif /*_FOC_OBSERVER_H__*/