/********************************************************************************* * Embedded Studio 2007 * * File: ES_FOC.c * Desc: Field Oriented Control (FOC) functions * **********************************************************************************/ #ifndef __ES_FOC_H__ #define __ES_FOC_H__ /********************************************************************************* * Constant Definition **********************************************************************************/ // Normal Coeff #define FOC_C1 40.4208597 // FOC First order filter C1 coefficient #define FOC_C2 -37.8130623 // FOC First order filter C2 coefficient #define FOC_C3 0.9993336 // FOC First order filter C3 coefficient #define DEG2RAD 0.017453 // PI / 180 #define SQRT3 1.73205 // sqrt(3) = 1.73205 #define HALF_SQRT3 0.866025 // sqrt(3) / 2 = 0.866025 #define INV_SQRT3 0.57735 // 1/sqrt(3) = 0.57735 /********************************************************************************* * Data Type Definition **********************************************************************************/ typedef struct tFocThreePhaseCurrent { FLOAT32 Ia; FLOAT32 Ib; FLOAT32 Ic; } FocThreePhaseCurrent; typedef struct tFocTwoPhaseCurrent { FLOAT32 Isalpha; FLOAT32 Isbeta; } FocTwoPhaseCurrent; typedef struct tFocTwoPhaseVoltage { FLOAT32 Vsalpha; FLOAT32 Vsbeta; } FocTwoPhaseVoltage; typedef struct tFocDQCurrent { FLOAT32 Isd; FLOAT32 Isq; } FocDQCurrent; typedef struct tFocDQVoltage { FLOAT32 Vsd; FLOAT32 Vsq; } FocDQVoltage; typedef struct tFocDQNormVoltage { FLOAT32 Vsd; FLOAT32 Vsq; } FocDQNormVoltage; typedef struct tSineCosineData { FLOAT32 Sine; FLOAT32 Cosine; } SineCosineData; typedef enum tSvmSectorEnum { SECTOR0 = 0, /* SVM Sector 0 (All LO) */ SECTOR1, /* SVM Sector 1, 011-010 */ SECTOR2, /* SVM Sector 2, 101-001 */ SECTOR3, /* SVM Sector 3, 001-011 */ SECTOR4, /* SVM Sector 4, 110-100 */ SECTOR5, /* SVM Sector 5, 010-110 */ SECTOR6, /* SVM Sector 6, 100-101 */ SECTOR7 /* SVM Sector 7 (All HI) */ } SvmSectorEnum; typedef struct tInvClarkeData { INT32 Sector; FLOAT32 Va; FLOAT32 Vb; FLOAT32 Vc; } InvClarkeData; /********************************************************************************* * Function Prototypes **********************************************************************************/ bool FOC_Init(void); FocTwoPhaseCurrent FOC_ClarkeTransform(AdcCurrDataStruct currents); FocDQCurrent FOC_ParkTransform(FocTwoPhaseCurrent currents, float theta); FocTwoPhaseVoltage FOC_InvParkTransform(RdcDataStruct rdcData, FocDQVoltage dqVolts); InvClarkeData FOC_InvClarkeTransform(FocTwoPhaseVoltage twoPhVolts); #endif