foc_core.h 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #ifndef _FOC_CORE_H__
  2. #define _FOC_CORE_H__
  3. #include "math/fix_math.h"
  4. typedef struct {
  5. u8 n_poles;
  6. s16q5_t s_maxIdq;
  7. s16q5_t s_maxiDC;
  8. s16 s_maxRPM;
  9. s16q5_t s_iABC[3];
  10. s16 s_motRPM; //from hall or encoder
  11. s16q5_t s_motAngle; //from hall or encoder
  12. s16 s_targetRPM;
  13. s16q5_t s_targetIdq;
  14. s16q5_t s_targetVdq;
  15. u8 n_ctlMode;
  16. bool b_motEnable;
  17. s16q5_t s_manualAngle; //mainly used when calibrate hall
  18. }FOC_InP;
  19. typedef struct {
  20. u16 n_Duty[3];
  21. u8 n_Sector;
  22. u8 n_RunMode;
  23. u8 s_RealVdq;
  24. u8 s_RealIdq;
  25. }FOC_OutP;
  26. typedef struct {
  27. PI_Controller id_ctl;
  28. PI_Controller iq_ctl;
  29. PI_Controller spd_ctl;
  30. PI_Controller fw_crl;
  31. FOC_InP in;
  32. FOC_OutP out;
  33. }PMSM_FOC_Ctrl;
  34. void PMSM_FOC_CoreInit(void);
  35. void PMSM_FOC_Schedule(void);
  36. void PMSM_FOC_Start(u8 nCtrlMode);
  37. void PMSM_FOC_Stop(void);
  38. void PMSM_FOC_iBusLimit(s16q5_t ibusLimit);
  39. void PMSM_FOC_SpeedLimit(s32q4_t speedLimit);
  40. float PMSM_FOC_GetSpeedLimit(void);
  41. void PMSM_FOC_VbusVoltage(s16q5_t vbusVol);
  42. void PMSM_FOC_SetCtrlMode(uint8_T mode);
  43. void PMSM_FOC_SetOpenVdq(s16q5_t vd, s16q5_t vq);
  44. bool PMSM_FOC_EnableCruise(boolean_T enable);
  45. bool PMSM_FOC_Set_Speed(float rpm);
  46. bool PMSM_FOC_Set_Current(float current);
  47. bool PMSM_FOC_Set_CruiseSpeed(float rpm);
  48. void PMSM_FOC_HallCalibrate(boolean_T b_caliHall, s16q5_t open_vd);
  49. float PMSM_FOC_GetSpeed(void);
  50. void PMSM_FOC_SetErrCode(u8 code);
  51. u8 PMSM_FOC_GetErrCode(void);
  52. bool PMSM_FOC_Lock_Motor(bool lock);
  53. void PMSM_FOC_Brake(bool brake);
  54. float PMSM_FOC_Get_iDC(void);
  55. void PMSM_FOC_LockMotor(bool lock);
  56. void PMSM_FOC_SetSpdPid(float kp, float ki, float kb);
  57. void PMSM_FOC_SetIDPid(float kp, float ki, float kb);
  58. void PMSM_FOC_SetIQPid(float kp, float ki, float kb);
  59. void PMSM_FOC_SetTrqPid(float kp, float ki, float kb);
  60. void PMSM_FOC_SetFW_I(float ki, float kb);
  61. s16 PMSM_FOC_Add_Hall_Offset(s16 offset);
  62. void PMSM_FOC_Set_Angle(s16 angle);
  63. bool PMSM_FOC_Is_Start(void);
  64. void PMSM_FOC_Set_Vdq(s16 vd, s16 vq);
  65. #endif /* _FOC_CORE_H__ */