motor.c 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. #include "foc/motor/motor.h"
  2. #include "foc/motor/current.h"
  3. #include "foc/core/foc_core.h"
  4. #include "math/fast_math.h"
  5. #include "bsp/delay.h"
  6. #include "bsp/bsp.h"
  7. #include "bsp/adc.h"
  8. #include "bsp/pwm.h"
  9. static bool _motor_started = false;
  10. bool mc_start(u8 mode) {
  11. if (_motor_started) {
  12. return true;
  13. }
  14. if (mode > TRQ_MODE) {
  15. PMSM_FOC_SetErrCode(FOC_Param_Err);
  16. return false;
  17. }
  18. if (mc_get_speed() > 10) {
  19. PMSM_FOC_SetErrCode(FOC_NowAllowed_With_Speed);
  20. return false;
  21. }
  22. if (!mc_throttle_released()) {
  23. PMSM_FOC_SetErrCode(FOC_Throttle_Err);
  24. return false;
  25. }
  26. pwm_turn_on_low_side();
  27. task_udelay(500);
  28. phase_current_calibrate();
  29. PMSM_FOC_Start(mode);
  30. pwm_start();
  31. adc_start_convert();
  32. _motor_started = true;
  33. return true;
  34. }
  35. bool mc_stop(void) {
  36. if (!_motor_started) {
  37. return true;
  38. }
  39. if (mc_get_speed() > 10) {
  40. PMSM_FOC_SetErrCode(FOC_NowAllowed_With_Speed);
  41. return false;
  42. }
  43. if (!mc_throttle_released()) {
  44. PMSM_FOC_SetErrCode(FOC_Throttle_Err);
  45. return false;
  46. }
  47. adc_stop_convert();
  48. pwm_stop();
  49. PMSM_FOC_Stop();
  50. _motor_started = false;
  51. return true;
  52. }
  53. bool mc_target_speed(s16 rpm) {
  54. return PMSM_FOC_Set_Speed(rpm, 1000);
  55. }
  56. bool mc_cruise_speed(s16 rpm) {
  57. return PMSM_FOC_Set_CruiseSpeed(rpm);
  58. }
  59. bool mc_enable_cruise(boolean_T enable) {
  60. return PMSM_FOC_EnableCruise(enable);
  61. }
  62. s16 mc_get_speed(void) {
  63. return PMSM_FOC_GetSpeed();
  64. }
  65. bool mc_throttle_released(void) {
  66. return true;
  67. }