foc_observer.c 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #include "bsp/bsp.h"
  2. #include "foc/core/foc_observer.h"
  3. #include "foc/core/smo_observer.h"
  4. #include "foc/motor/motor.h"
  5. static foc_observer_t foc_obser;
  6. void foc_observer_init(void) {
  7. foc_obser.smo_enabled = false;
  8. foc_obser.smo_used = false;
  9. #ifdef CONFIG_SMO_OBSERVER
  10. smo_observer_init(CONFIG_SMO_PLL_BANDWITH, CONFIG_SMO_LFP_WC, CONFIG_SMO_GAIN_K, CONFIG_SMO_SIGMOID_MAX);
  11. foc_obser.smo_enabled = true;
  12. #endif
  13. }
  14. float foc_observer_update(float uAlp, float uBeta, float iAlp, float iBeta){
  15. if (foc_obser.smo_enabled) {
  16. foc_obser.smo_angle = smo_observer_update(uAlp, uBeta, iAlp, iBeta);
  17. foc_obser.smo_speed = smo_observer_est_rpm();
  18. }
  19. foc_obser.enc_angle = motor_encoder_get_angle();
  20. foc_obser.enc_speed = motor_encoder_get_speed();
  21. if (foc_obser.smo_used) {
  22. return foc_obser.smo_angle;
  23. }
  24. return foc_obser.enc_angle;
  25. }
  26. float foc_observer_speed(void) {
  27. if (foc_obser.smo_used) {
  28. return foc_obser.smo_speed;
  29. }
  30. return foc_obser.enc_speed;
  31. }
  32. bool foc_observer_is_encoder(void) {
  33. return !foc_obser.smo_used;
  34. }
  35. void foc_observer_use_smo(bool use_smo) {
  36. if (foc_obser.smo_enabled) {
  37. foc_obser.smo_used = use_smo;
  38. }else {
  39. foc_obser.smo_used = false;
  40. }
  41. }
  42. void foc_observer_enable_smo(bool enable) {
  43. foc_obser.smo_enabled = enable;
  44. }
  45. float foc_observer_smo_angle(void) {
  46. return foc_obser.smo_angle;
  47. }
  48. float foc_observer_smo_speed(void) {
  49. return foc_obser.smo_speed;
  50. }