/************************************************************************ Project: Welling Motor Control Paltform Filename: obs.h Partner Filename: obs.c Description: The header file of obs.c Complier: IAR Embedded Workbench for ARM 7.80, IAR Systems. CPU TYPE : GD32F3x0 ************************************************************************* Copyright (c) 2018 Welling Motor Technology(Shanghai) Co. Ltd. All rights reserved. ************************************************************************* ************************************************************************* Revising History (ECL of this file): ************************************************************************/ /************************************************************************ Beginning of File, do not put anything above here except notes Compiler Directives: *************************************************************************/ #ifndef OBSERVER_H #define OBSERVER_H #include "typedefine.h" #include "crdnt.h" #include "mathtool.h" /************************************************************************ Compiler Directives (N/A) *************************************************************************/ #ifdef _OBSERVER_C_ #define _OBSERVER_EXT #else #define _OBSERVER_EXT extern #endif /************************************************************************ Definitions & Macros *************************************************************************/ #define OBS_COF_DEFAULT \ { \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ } // Default value of OBS_COF #define OBS_OUT_DEFAULT \ { \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ } // Default value of OBS_OUT #define OBS_FLUXPI_COF_DEFAULT \ { \ 0, 0 \ } // Default value of OBS_FLUXPI_COF #define OBS_FLUXPI_OUT_DEFAULT \ { \ 0, 0, 0 \ } // Default value of OBS_FLUXPI_OUT #define V_BASE 480 // 0.1V 100mv #define I_BASE 6000 // 0.01A #define F_BASE 700 // Hz /************************************************************************ Typedefs & Structure Defines *************************************************************************/ typedef struct { UWORD uwFreqTbcHz; // Real Value, Unit:Hz, Current loop control cycle UWORD uwRsOm; // Real Value, unit: 0.01Ohm, Phase resistance UWORD uwLdHm; // Real Value, unit: 0.01mH, D axis inductance UWORD uwLqHm; // Real Value, unit: 0.01mH, Q axis inductance UWORD uwFluxWb; // Real Value, unit: 0.01mWb, Flux linkage UWORD uwFluxDampingRatio; // Q12, Flux PI regulator damping ratio UWORD uwFluxCrossFreqHz; // Q8, Flux PI regulator cross frequency UWORD uwSpdPllMcoef; // Q0, PLL damping factor UWORD uwSpdPllWvcHz; // Q10, PLL bandwidth } OBSERVER_COF_IN; typedef struct { UWORD uwIbAp; // Real Value, Unit:0.01A frequency base UWORD uwVbVt; // Real Value, Unit:0.1V frequency base UWORD uwFbHz; // Real Value, Unit:Hz frequency base UWORD uwRbOm; // Real Value, unit: 0.01Ohm, Resistance base UWORD uwLbHm; // Real Value, unit: 0.01mH, Inductance base UWORD uwFluxbWb; // Real Value, unit: 0.01mWb, Flux linkage base UWORD uwRsPu; // Q15, Phase resistance UWORD uwLdPu; // Q10, D axis inductance UWORD uwLqPu; // Q10, Q axis inductance UWORD uwFluxPPu; // Q12, Flux linkage UWORD uwCurTsPu; // Q15, Current loop control cycle UWORD uwCurTs; // Q10, TBC time UWORD uwSpdPllKpPu; // Q14, PLL Kp UWORD uwSpdPllKiPu; // Q14, PLL Kit UWORD uwFluxKpPu; // Q18, Flux PI regulator Kp UWORD uwFluxKitPu; // Q28, Flux PI regulator Kit } OBSERVER_COF; typedef struct { SWORD swUalpha; // Q14, Stationary alpha-axis stator voltage SWORD swUbeta; // Q14, Stationary beta-axis stator voltage SWORD swIalpha; // Q14, Stationary alpha-axis stator current SWORD swIbeta; // Q14, Stationary beta-axis stator current UWORD uwVdc; // Q14, unit:Pu, DC bus voltage } OBSERVER_IN; typedef struct { SLONG slFluxAlphaPu; // Q27, Output stationary alfa-axis stator flux SWORD swFluxAlphaPu; // Q10, Output stationary alfa-axis stator flux SLONG slFluxBetaPu; // Q27, Output stationary beta-axis stator flux SWORD swFluxBetaPu; // Q10, Output stationary beta-axis stator flux SLONG slElecThetaPu; // Q29, Output motor electrical position UWORD uwElecThetaPu; // Q15, Output motor electrical position SLONG slElecFreqPu; // Q29, Output electrical speed reference SWORD swElecFreqPu; // Q15, Output motor electrical speed reference SWORD swActiveFluxPu; // Q10, Output active flux } OBSERVER_OUT; typedef struct { SWORD swRefPu; // Q10, Flux PI regulator I reference SWORD swFdbPu; // Q10, Flux PI regulator I feedback SWORD swUmaxPu; // Q14, Flux PI regulator voltage output maximum limit SWORD swUminPu; // Q14, Flux PI regulator voltage output minimum limit } OBSERVER_FLUXPI_IN; typedef struct { UWORD uwFluxKpPu; // Q18, Flux PI regulator Kp UWORD uwFluxKitPu; // Q28, Flux PI regulator Kit } OBSERVER_FLUXPI_COF; typedef struct { SWORD swURefPu; // Q14, Flux PI regulator output voltage SLONG slURefPu; // Q28, Flux PI regulator output voltage SWORD swErrZ1Pu; // Q10, Flux PI regulator error recorder } OBSERVER_FLUXPI_OUT; /************************************************************************ Constant Table *************************************************************************/ /************************************************************************ Exported Variables *************************************************************************/ #ifdef _OBSERVER_C_ _OBSERVER_EXT OBSERVER_IN observer_stObsCalcIn; _OBSERVER_EXT OBSERVER_COF_IN observer_stObsCoefIn; _OBSERVER_EXT OBSERVER_COF observer_stObsCoefPu = OBS_COF_DEFAULT; _OBSERVER_EXT OBSERVER_OUT observer_stObsOutPu; _OBSERVER_EXT OBSERVER_FLUXPI_OUT observer_stFluxAlphaPIOut = OBS_FLUXPI_OUT_DEFAULT; _OBSERVER_EXT OBSERVER_FLUXPI_OUT observer_stFluxBetaPIOut = OBS_FLUXPI_OUT_DEFAULT; _OBSERVER_EXT OBSERVER_FLUXPI_COF observer_stFluxAlphaPICoef = OBS_FLUXPI_COF_DEFAULT; _OBSERVER_EXT OBSERVER_FLUXPI_COF observer_stFluxBetaPICoef = OBS_FLUXPI_COF_DEFAULT; _OBSERVER_EXT CRD_PARK_OUT observer_stFluxParkPu = OBS_FLUXPI_COF_DEFAULT; _OBSERVER_EXT CRD_IPARK_OUT observer_stFluxIParkPu = OBS_FLUXPI_COF_DEFAULT; _OBSERVER_EXT CRD_PARK_IN observer_stParkInPu; _OBSERVER_EXT CRD_IPARK_IN observer_stIParkInPu; _OBSERVER_EXT OBSERVER_FLUXPI_IN observer_stFluxAlphaPIIn; _OBSERVER_EXT OBSERVER_FLUXPI_IN observer_stFluxBetaPIIn; #else _OBSERVER_EXT OBSERVER_IN observer_stObsCalcIn; _OBSERVER_EXT OBSERVER_COF_IN observer_stObsCoefIn; _OBSERVER_EXT OBSERVER_COF observer_stObsCoefPu; _OBSERVER_EXT OBSERVER_OUT observer_stObsOutPu; _OBSERVER_EXT OBSERVER_FLUXPI_OUT observer_stFluxAlphaPIOut; _OBSERVER_EXT OBSERVER_FLUXPI_OUT observer_stFluxBetaPIOut; _OBSERVER_EXT OBSERVER_FLUXPI_COF observer_stFluxAlphaPICoef; _OBSERVER_EXT OBSERVER_FLUXPI_COF observer_stFluxBetaPICoef; _OBSERVER_EXT CRD_PARK_OUT observer_stFluxParkPu; _OBSERVER_EXT CRD_IPARK_OUT observer_stFluxIParkPu; _OBSERVER_EXT CRD_PARK_IN observer_stParkInPu; _OBSERVER_EXT CRD_IPARK_IN observer_stIParkInPu; _OBSERVER_EXT OBSERVER_FLUXPI_IN observer_stFluxAlphaPIIn; _OBSERVER_EXT OBSERVER_FLUXPI_IN observer_stFluxBetaPIIn; #endif /************************************************************************ RAM ALLOCATION (N/A) *************************************************************************/ /************************************************************************ Exported Function Call Prototypes *************************************************************************/ #ifdef _OBSERVER_C_ _OBSERVER_EXT void observer_voObsInit(void); _OBSERVER_EXT void observer_voObsCoef(OBSERVER_COF_IN *in, OBSERVER_COF *out); _OBSERVER_EXT void observer_voFluxPI(OBSERVER_FLUXPI_IN *in, OBSERVER_FLUXPI_COF *coef, OBSERVER_FLUXPI_OUT *out); _OBSERVER_EXT void observer_voObsCalc(OBSERVER_IN *IN, OBSERVER_COF *COF, OBSERVER_OUT *OUT); #else _OBSERVER_EXT void observer_voObsInit(void); _OBSERVER_EXT void observer_voObsCoef(OBSERVER_COF_IN *in, OBSERVER_COF *out); _OBSERVER_EXT void observer_voObsCalc(OBSERVER_IN *IN, OBSERVER_COF *COF, OBSERVER_OUT *OUT); #endif /************************************************************************ Flag Define (N/A) *************************************************************************/ /***********************************************************************/ #endif /************************************************************************ Copyright (c) 2018 Welling Motor Technology(Shanghai) Co. Ltd. All rights reserved. ************************************************************************* End of this File (EOF)! Do not put anything after this part! *************************************************************************/