| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- #ifndef _FOC_CORE_H__
- #define _FOC_CORE_H__
- #include "math/fix_math.h"
- typedef struct {
- u8 n_poles;
- s16q5_t s_maxIdq;
- s16q5_t s_maxiDC;
- s16 s_maxRPM;
- s16q5_t s_iABC[3];
- s16 s_motRPM; //from hall or encoder
- s16q5_t s_motAngle; //from hall or encoder
- s16 s_targetRPM;
- s16q5_t s_targetIdq;
- s16q5_t s_targetVdq;
- u8 n_ctlMode;
- bool b_motEnable;
- s16q5_t s_manualAngle; //mainly used when calibrate hall
- }FOC_InP;
- typedef struct {
- u16 n_Duty[3];
- u8 n_Sector;
- u8 n_RunMode;
- u8 s_RealVdq;
- u8 s_RealIdq;
- }FOC_OutP;
- typedef struct {
- PI_Controller id_ctl;
- PI_Controller iq_ctl;
- PI_Controller spd_ctl;
- PI_Controller fw_crl;
- FOC_InP in;
- FOC_OutP out;
- }PMSM_FOC_Ctrl;
- void PMSM_FOC_CoreInit(void);
- void PMSM_FOC_Schedule(void);
- void PMSM_FOC_Start(u8 nCtrlMode);
- void PMSM_FOC_Stop(void);
- void PMSM_FOC_iBusLimit(s16q5_t ibusLimit);
- void PMSM_FOC_SpeedLimit(s32q4_t speedLimit);
- float PMSM_FOC_GetSpeedLimit(void);
- void PMSM_FOC_VbusVoltage(s16q5_t vbusVol);
- void PMSM_FOC_SetCtrlMode(uint8_T mode);
- void PMSM_FOC_SetOpenVdq(s16q5_t vd, s16q5_t vq);
- bool PMSM_FOC_EnableCruise(boolean_T enable);
- bool PMSM_FOC_Set_Speed(float rpm);
- bool PMSM_FOC_Set_Current(float current);
- bool PMSM_FOC_Set_CruiseSpeed(float rpm);
- void PMSM_FOC_HallCalibrate(boolean_T b_caliHall, s16q5_t open_vd);
- float PMSM_FOC_GetSpeed(void);
- void PMSM_FOC_SetErrCode(u8 code);
- u8 PMSM_FOC_GetErrCode(void);
- bool PMSM_FOC_Lock_Motor(bool lock);
- void PMSM_FOC_Brake(bool brake);
- float PMSM_FOC_Get_iDC(void);
- void PMSM_FOC_LockMotor(bool lock);
- void PMSM_FOC_SetSpdPid(float kp, float ki, float kb);
- void PMSM_FOC_SetIDPid(float kp, float ki, float kb);
- void PMSM_FOC_SetIQPid(float kp, float ki, float kb);
- void PMSM_FOC_SetTrqPid(float kp, float ki, float kb);
- void PMSM_FOC_SetFW_I(float ki, float kb);
- s16 PMSM_FOC_Add_Hall_Offset(s16 offset);
- void PMSM_FOC_Set_Angle(s16 angle);
- bool PMSM_FOC_Is_Start(void);
- void PMSM_FOC_Set_Vdq(s16 vd, s16 vq);
- #endif /* _FOC_CORE_H__ */
|