adc.h 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. /************************************************************************
  2. Project: Welling Motor Control Paltform
  3. Filename: adc.h
  4. Partner Filename: adc.c
  5. Description: The header file of adc.c
  6. Complier: IAR Embedded Workbench for ARM 7.80, IAR Systems.
  7. CPU TYPE : GD32F3x0
  8. *************************************************************************
  9. Copyright (c) 2018 Welling Motor Technology(Shanghai) Co. Ltd.
  10. All rights reserved.
  11. *************************************************************************
  12. *************************************************************************
  13. Revising History (ECL of this file):
  14. ************************************************************************/
  15. /************************************************************************
  16. Beginning of File, do not put anything above here except notes
  17. Compiler Directives:
  18. *************************************************************************/
  19. #ifndef ADCDRV_H
  20. #define ADCDRV_H
  21. /************************************************************************
  22. Compiler Directives
  23. *************************************************************************/
  24. #ifdef _ADCDRV_C_
  25. #define _ADCDRV_EXT
  26. #else
  27. #define _ADCDRV_EXT extern
  28. #endif
  29. /************************************************************************
  30. Definitions & Macros (#define ...)
  31. *************************************************************************/
  32. #define SR_CURRENT_MAX_BAND -147 // 0.01A
  33. #define SR_CURRENT_MIN_BAND -4000 // 0.01A
  34. /************************************************************************
  35. TypeDefs & Structure defines (N/A)
  36. *************************************************************************/
  37. typedef struct
  38. {
  39. SWORD swIaPu; // Q14, Phase A current value
  40. SWORD swIbPu; // Q14, Phase B current value
  41. SWORD swIcPu; // Q14, Phase C current value
  42. SLONG slSampIaPu; // Q14, Phase A current sampling value
  43. SLONG slSampIbPu; // Q14, Phase B current sampling value
  44. SLONG slSampIcPu; // Q14, Phase C current sampling value
  45. UWORD uwIaAbsPu; // Q14, Phase A current absolute value
  46. UWORD uwIbAbsPu; // Q14, Phase B current absolute value
  47. UWORD uwIcAbsPu; // Q14, Phase C current absolute value
  48. UWORD uwIpeakPu; // Q14, Max value of phase current
  49. UWORD uwIaAvgPu; // Ia register value
  50. UWORD uwIbAvgPu; // Ib register value
  51. UWORD uwIcAvgPu; // Ic register value
  52. UWORD uwIaReg; // Ia register value
  53. UWORD uwIbReg; // Ib register value
  54. UWORD uwIcReg; // Ic register value
  55. UWORD uwFirstCurREG;
  56. UWORD uwSecondCurREG;
  57. UWORD uwADCSector;
  58. ULONG ulUaRegSum; // Ua register sum value when calibrate
  59. ULONG ulUbRegSum; // Ub register sum value when calibrate
  60. ULONG ulUcRegSum; // Uc register sum value when calibrate
  61. ULONG ulIdcRegSum; // Idc register sum value when calibrate
  62. ULONG ulIaRegSum; // Ia register value
  63. ULONG ulIbRegSum; // Ib register value
  64. ULONG ulIcRegSum; // Ic register value
  65. UWORD uwADCCalibCt; // Current calib count
  66. BOOL blADCCalibFlg; // ADC calib flag
  67. } ADC_DOWN_OUT;
  68. typedef struct
  69. {
  70. UWORD uwVdcPu; // Q14, Vdc
  71. UWORD uwVdcLpfPu; // Q14, Vdc after LPF
  72. UWORD uwU6VPu; // Q14, 12V power
  73. UWORD uwU5VPu; // Q14, 5V power
  74. UWORD uwU12VPu; // Q14, 5V power
  75. UWORD uwTrottlePu; // Q14, 5V power
  76. UWORD PCBTempR; // Not Pu 0.1kOhm
  77. UWORD MotorTempR; // Not Pu 0.1kOhm
  78. SWORD PCBTemp; // Not Pu, centigrade
  79. SWORD MotorTemp; // Not Pu, centigrade
  80. SWORD MosfestTempEst; // Not Pu, centigrade
  81. SWORD swCalibIaPu;
  82. SWORD swCalibIbPu;
  83. SWORD swCalibIcPu;
  84. UWORD uwVdcReg; // Vdc register value
  85. UWORD uwU6VReg; // 12 V register value
  86. UWORD uwU5VReg; // 5 V register value
  87. UWORD uwU12VReg; // Q14, 5V power
  88. UWORD uwThrottleReg; // Q14, 5V power
  89. UWORD PCBTempReg;
  90. UWORD MotorTempReg;
  91. UWORD TorqTempReg;
  92. UWORD uwADCCalibCt; // Current calib count
  93. BOOL blADCCalibFlg; // ADC calib flag
  94. SWORD swIPMTempCe; // PCB Temp to trig alam
  95. } ADC_UP_OUT;
  96. typedef struct
  97. {
  98. UWORD uwVdcReg2Pu; // Q24, Coefficient of Vdc register value to pu value
  99. UWORD uwCurReg2Pu; // Q24, Coefficient of current register value to pu value
  100. UWORD uwCurIdcReg2Pu; // Q24, Coefficient of Idc current register value to pu value
  101. UWORD uwUabcReg2Pu; // Q24, Coefficient of Ua,Ub,Uc register value to pu value
  102. UWORD uwU6VReg2Pu; // Q24, Coefficient of Ua,Ub,Uc register value to pu value
  103. UWORD uwU5VReg2Pu; // Q24, Coefficient of Ua,Ub,Uc register value to pu value
  104. UWORD uwU12VReg2Pu; // Q24, Coefficient of Ua,Ub,Uc register value to pu value
  105. UWORD uwCalibcoef; // Q10, Coefficient of k = single resistance/Rdson
  106. UWORD uwCalibcoefMax;
  107. UWORD uwCalibcoefMin;
  108. UWORD uwIaOffset; // Ia offset value
  109. UWORD uwIbOffset; // Ib offset value
  110. UWORD uwIcOffset; // Ib offset value
  111. UWORD uwUaOffset; // Ua offset value
  112. UWORD uwUbOffset; // Ub offset value
  113. UWORD uwUcOffset; // Ub offset value
  114. UWORD uwIdcOffset; // Idc offset value
  115. UWORD uwIdcAveOffset; // Idc offset value
  116. SWORD swPCBTempKcof;
  117. SWORD swMotorTempKcof;
  118. UWORD uwCalibCoefK;
  119. } ADC_COF;
  120. /************************************************************************
  121. Constant Table
  122. *************************************************************************/
  123. /************************************************************************
  124. Exported Variables:
  125. *************************************************************************/
  126. #ifdef _ADCDRV_C_
  127. _ADCDRV_EXT ADC_COF adc_stCof;
  128. _ADCDRV_EXT ADC_UP_OUT adc_stUpOut;
  129. _ADCDRV_EXT ADC_DOWN_OUT adc_stDownOut;
  130. _ADCDRV_EXT UWORD Start_Calc = 0;
  131. _ADCDRV_EXT UWORD RdsonGainCnt = 0;
  132. _ADCDRV_EXT UWORD RdsonGainCnt2 = 0;
  133. _ADCDRV_EXT UWORD adc_RdsonADCGainMax;
  134. _ADCDRV_EXT UWORD adc_RdsonADCGainMin;
  135. _ADCDRV_EXT UWORD adc_RdsonADCGainSum2;
  136. _ADCDRV_EXT UWORD adc_RdsonADCGainRecord[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  137. _ADCDRV_EXT UWORD adc_RdsonADCGainSum = 0;
  138. _ADCDRV_EXT UWORD adc_uwADDMAPhase1;
  139. _ADCDRV_EXT UWORD adc_uwADDMAPhase2;
  140. _ADCDRV_EXT UWORD adc_uwRdsonUReg;
  141. _ADCDRV_EXT UWORD adc_uwRdsonVReg;
  142. _ADCDRV_EXT UWORD adc_uwRdsonWReg;
  143. #else
  144. _ADCDRV_EXT ADC_COF adc_stCof;
  145. _ADCDRV_EXT ADC_UP_OUT adc_stUpOut;
  146. _ADCDRV_EXT ADC_DOWN_OUT adc_stDownOut;
  147. _ADCDRV_EXT UWORD Start_Calc;
  148. _ADCDRV_EXT UWORD RdsonGainCnt;
  149. _ADCDRV_EXT UWORD RdsonGainCnt2;
  150. _ADCDRV_EXT UWORD adc_RdsonADCGainMax;
  151. _ADCDRV_EXT UWORD adc_RdsonADCGainMin;
  152. _ADCDRV_EXT UWORD adc_RdsonADCGainSum2;
  153. _ADCDRV_EXT UWORD adc_RdsonADCGainRecord[10];
  154. _ADCDRV_EXT UWORD adc_RdsonADCGainSum;
  155. _ADCDRV_EXT UWORD adc_uwADDMAPhase1;
  156. _ADCDRV_EXT UWORD adc_uwADDMAPhase2;
  157. _ADCDRV_EXT UWORD adc_uwRdsonUReg;
  158. _ADCDRV_EXT UWORD adc_uwRdsonVReg;
  159. _ADCDRV_EXT UWORD adc_uwRdsonWReg;
  160. #endif
  161. /************************************************************************
  162. RAM ALLOCATION:
  163. *************************************************************************/
  164. /************************************************************************
  165. Exported Function Call Prototypes (N/A)
  166. *************************************************************************/
  167. #ifdef _ADCDRV_C_
  168. _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
  169. _ADCDRV_EXT void adc_voSampleUp(ADC_COF *cof, ADC_UP_OUT *out);
  170. _ADCDRV_EXT void adc_voSampleDown(ADC_COF *cof, ADC_DOWN_OUT *out);
  171. _ADCDRV_EXT void adc_voSampleCoef(ADC_COF *cof);
  172. _ADCDRV_EXT void adc_voSampleInit(void);
  173. _ADCDRV_EXT void adc_voSRCalibration(ADC_COF *cof, ADC_UP_OUT *up_out, ADC_DOWN_OUT *down_out);
  174. #else
  175. _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
  176. _ADCDRV_EXT void adc_voSampleUp(ADC_COF *cof, ADC_UP_OUT *out);
  177. _ADCDRV_EXT void adc_voSampleDown(ADC_COF *cof, ADC_DOWN_OUT *out);
  178. _ADCDRV_EXT void adc_voSampleCoef(ADC_COF *cof);
  179. _ADCDRV_EXT void adc_voSampleInit(void);
  180. _ADCDRV_EXT void adc_voSRCalibration(ADC_COF *cof, ADC_UP_OUT *up_out, ADC_DOWN_OUT *down_out);
  181. #endif
  182. /************************************************************************
  183. Flag Define (N/A)
  184. *************************************************************************/
  185. /***********************************************************************/
  186. #endif
  187. /************************************************************************
  188. Copyright (c) 2018 Welling Motor Technology(Shanghai) Co. Ltd.
  189. All rights reserved.
  190. *************************************************************************
  191. End of this File (EOF):
  192. !!!!!!Do not put anything after this part!!!!!!!!!!!
  193. *************************************************************************/