/************************************************************************ Project: Welling Motor Control Paltform Filename: adc.h Partner Filename: adc.c Description: The header file of adc.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 ADCDRV_H #define ADCDRV_H #ifdef __cplusplus extern "C" { #endif // __cplusplus /************************************************************************ Compiler Directives *************************************************************************/ #ifdef _ADCDRV_C_ #define _ADCDRV_EXT #else #define _ADCDRV_EXT extern #endif /************************************************************************ Definitions & Macros (#define ...) *************************************************************************/ #define SR_CURRENT_MAX_BAND -147 // 0.01A #define SR_CURRENT_MIN_BAND -4000 // 0.01A /************************************************************************ TypeDefs & Structure defines (N/A) *************************************************************************/ typedef struct { SWORD swIaPu; // Q14, Phase A current value SWORD swIbPu; // Q14, Phase B current value SWORD swIcPu; // Q14, Phase C current value SLONG slSampIaPu; // Q14, Phase A current sampling value SLONG slSampIbPu; // Q14, Phase B current sampling value SLONG slSampIcPu; // Q14, Phase C current sampling value UWORD uwIaAbsPu; // Q14, Phase A current absolute value UWORD uwIbAbsPu; // Q14, Phase B current absolute value UWORD uwIcAbsPu; // Q14, Phase C current absolute value UWORD uwIpeakPu; // Q14, Max value of phase current UWORD ulISamplePeakPu; UWORD uwIaAvgPu; // Ia register value UWORD uwIbAvgPu; // Ib register value UWORD uwIcAvgPu; // Ic register value UWORD uwIaReg; // Ia register value UWORD uwIbReg; // Ib register value UWORD uwIcReg; // Ic register value UWORD uwFirstCurREG; UWORD uwSecondCurREG; UWORD uwADCSector; ULONG ulUaRegSum; // Ua register sum value when calibrate ULONG ulUbRegSum; // Ub register sum value when calibrate ULONG ulUcRegSum; // Uc register sum value when calibrate ULONG ulIdcRegSum; // Idc register sum value when calibrate ULONG ulIaRegSum; // Ia register value ULONG ulIbRegSum; // Ib register value ULONG ulIcRegSum; // Ic register value UWORD uwADCCalibCt; // Current calib count BOOL blADCCalibFlg; // ADC calib flag } ADC_DOWN_OUT; typedef struct { UWORD uwVdcPu; // Q14, Vdc UWORD uwVdcLpfPu; // Q14, Vdc after LPF UWORD uwRU6VPu; // Q14, rear light 12V power UWORD uwU5VPu; // Q14, bikespeed sensor 5V power UWORD uwU12VPu; // Q14, display 12V power UWORD uwTrottlePu; // Q14, throttle UWORD PCBTempR; // Not Pu 0.1kOhm UWORD MotorTempR; // Not Pu 0.1kOhm SWORD PCBTemp; // Not Pu, centigrade UWORD uwFU6VPu; // Q14, rear light 12V power SWORD MotorTemp; // Not Pu, centigrade SWORD MosfestTempEst; // Not Pu, centigrade SWORD swCalibIaPu; SWORD swCalibIbPu; SWORD swCalibIcPu; UWORD uwVdcReg; // Vdc register value UWORD uwRU6VReg; // 12 V register value UWORD uwU5VReg; // 5 V register value UWORD uwU12VReg; // Q14, 5V power UWORD uwThrottleReg; // Q14, 5V power UWORD PCBTempReg; UWORD uwFU6VReg; UWORD uwADCCalibCt; // Current calib count BOOL blADCCalibFlg; // ADC calib flag SWORD swIPMTempCe; // PCB Temp to trig alam } ADC_UP_OUT; typedef struct { UWORD uwVdcReg2Pu; // Q24, Coefficient of Vdc register value to pu value UWORD uwCurReg2Pu; // Q24, Coefficient of current register value to pu value UWORD uwCurIdcReg2Pu; // Q24, Coefficient of Idc current register value to pu value UWORD uwUabcReg2Pu; // Q24, Coefficient of Ua,Ub,Uc register value to pu value UWORD uwU6VReg2Pu; // Q24, Coefficient of Ua,Ub,Uc register value to pu value UWORD uwU5VReg2Pu; // Q24, Coefficient of Ua,Ub,Uc register value to pu value UWORD uwU12VReg2Pu; // Q24, Coefficient of Ua,Ub,Uc register value to pu value UWORD uwCalibcoef; // Q10, Coefficient of k = single resistance/Rdson UWORD uwCalibcoefMax; UWORD uwCalibcoefMin; UWORD uwIaOffset; // Ia offset value UWORD uwIbOffset; // Ib offset value UWORD uwIcOffset; // Ib offset value UWORD uwUaOffset; // Ua offset value UWORD uwUbOffset; // Ub offset value UWORD uwUcOffset; // Ub offset value UWORD uwIdcOffset; // Idc offset value UWORD uwIdcAveOffset; // Idc offset value SWORD swPCBTempKcof; SWORD swMotorTempKcof; UWORD uwCalibCoefK; BOOL blCalibCalFlag; } ADC_COF; /************************************************************************ Constant Table *************************************************************************/ /************************************************************************ Exported Variables: *************************************************************************/ #ifdef _ADCDRV_C_ _ADCDRV_EXT ADC_COF adc_stCof; _ADCDRV_EXT ADC_UP_OUT adc_stUpOut; _ADCDRV_EXT ADC_DOWN_OUT adc_stDownOut; _ADCDRV_EXT UWORD Start_Calc = 0; _ADCDRV_EXT UWORD RdsonGainCnt = 0; _ADCDRV_EXT UWORD RdsonGainCnt2 = 0; _ADCDRV_EXT UWORD adc_RdsonADCGainMax; _ADCDRV_EXT UWORD adc_RdsonADCGainMin; _ADCDRV_EXT UWORD adc_RdsonADCGainSum2; _ADCDRV_EXT UWORD adc_RdsonADCGainRecord[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; _ADCDRV_EXT UWORD adc_RdsonADCGainSum = 0; #else _ADCDRV_EXT ADC_COF adc_stCof; _ADCDRV_EXT ADC_UP_OUT adc_stUpOut; _ADCDRV_EXT ADC_DOWN_OUT adc_stDownOut; _ADCDRV_EXT UWORD Start_Calc; _ADCDRV_EXT UWORD RdsonGainCnt; _ADCDRV_EXT UWORD RdsonGainCnt2; _ADCDRV_EXT UWORD adc_RdsonADCGainMax; _ADCDRV_EXT UWORD adc_RdsonADCGainMin; _ADCDRV_EXT UWORD adc_RdsonADCGainSum2; _ADCDRV_EXT UWORD adc_RdsonADCGainRecord[10]; _ADCDRV_EXT UWORD adc_RdsonADCGainSum; #endif /************************************************************************ RAM ALLOCATION: *************************************************************************/ /************************************************************************ Exported Function Call Prototypes (N/A) *************************************************************************/ #ifdef _ADCDRV_C_ _ADCDRV_EXT void adc_voCalibration(ADC_COF *cof, ADC_DOWN_OUT *out1, ADC_UP_OUT *out2); // Phase A and B current zero point, other A/D sample value _ADCDRV_EXT void adc_voSampleUp(const ADC_COF *cof, ADC_UP_OUT *out); _ADCDRV_EXT void adc_voSampleDown(const ADC_COF *cof, ADC_DOWN_OUT *out); _ADCDRV_EXT void adc_voSampleCoef(ADC_COF *cof); _ADCDRV_EXT void adc_voSampleInit(void); _ADCDRV_EXT void adc_voSRCalibration(ADC_COF *cof, const ADC_UP_OUT *up_out, ADC_DOWN_OUT *down_out); #else _ADCDRV_EXT void adc_voCalibration(ADC_COF *cof, ADC_DOWN_OUT *out1, ADC_UP_OUT *out2); // Phase A and B current zero point, other A/D sample value _ADCDRV_EXT void adc_voSampleUp(const ADC_COF *cof, ADC_UP_OUT *out); _ADCDRV_EXT void adc_voSampleDown(const ADC_COF *cof, ADC_DOWN_OUT *out); _ADCDRV_EXT void adc_voSampleCoef(ADC_COF *cof); _ADCDRV_EXT void adc_voSampleInit(void); _ADCDRV_EXT void adc_voSRCalibration(ADC_COF *cof, const ADC_UP_OUT *up_out, ADC_DOWN_OUT *down_out); #endif /************************************************************************ Flag Define (N/A) *************************************************************************/ #ifdef __cplusplus } #endif // __cplusplus /***********************************************************************/ #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!!!!!!!!!!! *************************************************************************/