adc.c 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559
  1. /************************************************************************
  2. Project: Welling Motor Control Paltform
  3. Filename: adc.c
  4. Partner Filename: adc.h
  5. Description: Get the adc conversion results
  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_C_
  20. #define _ADCDRV_C_
  21. #endif
  22. /************************************************************************
  23. Included File:
  24. *************************************************************************/
  25. #include "syspar.h"
  26. #include "user.h"
  27. #include "can.h"
  28. #include "Temp.h"
  29. /************************************************************************
  30. Constant Table:
  31. *************************************************************************/
  32. /************************************************************************
  33. Exported Functions:
  34. *************************************************************************/
  35. /***************************************************************
  36. Function: adc_voCalibration;
  37. Description: Get phase A and B current zero point, other A/D sample value
  38. Call by: main() before InitADC;
  39. Input Variables: N/A
  40. Output/Return Variables: ADCTESTOUT
  41. Subroutine Call: N/A
  42. Reference: N/A
  43. ****************************************************************/
  44. void adc_voCalibration(ADC_COF *cof, ADC_DOWN_OUT *out1, ADC_UP_OUT *out2)
  45. {
  46. if (out1->blADCCalibFlg == FALSE || out2->blADCCalibFlg == FALSE)
  47. {
  48. if (!hw_blChrgOvrFlg)
  49. {
  50. hw_voCharge();
  51. }
  52. else
  53. {
  54. if(cp_stFlg.CurrentSampleModelSelect == SINGLERESISITANCE)
  55. {
  56. if (out1->uwADCCalibCt < (1 << ADC_CALIB_INDEX))
  57. {
  58. out1->ulIdcRegSum += adc_uwADDMAPhase1 + adc_uwADDMAPhase2;
  59. out1->uwADCCalibCt++;
  60. }
  61. else if (out2->uwADCCalibCt < (1 << ADC_CALIB_INDEX))
  62. {
  63. out2->uwADCCalibCt++;
  64. }
  65. else
  66. {
  67. hw_voPWMInit();
  68. cof->uwIdcOffset = out1->ulIdcRegSum >> (ADC_CALIB_INDEX + 1);
  69. out1->ulIdcRegSum = 0;
  70. out1->uwADCCalibCt = 0;
  71. out1->blADCCalibFlg = TRUE;
  72. out2->uwADCCalibCt = 0;
  73. out2->blADCCalibFlg = TRUE;
  74. }
  75. }
  76. else if(cp_stFlg.CurrentSampleModelSelect == RDSON)
  77. {
  78. if (out1->uwADCCalibCt < (1 << ADC_CALIB_INDEX))
  79. {
  80. out1->ulIaRegSum += adc_uwRdsonUReg;
  81. out1->ulIbRegSum += adc_uwRdsonVReg;
  82. out1->ulIcRegSum += adc_uwRdsonWReg;
  83. out1->uwADCCalibCt++;
  84. }
  85. else
  86. {
  87. hw_voPWMInit();
  88. cof->uwIaOffset = out1->ulIaRegSum >> (ADC_CALIB_INDEX);
  89. cof->uwIbOffset = out1->ulIbRegSum >> (ADC_CALIB_INDEX);
  90. cof->uwIcOffset = out1->ulIcRegSum >> (ADC_CALIB_INDEX);
  91. out1->ulIaRegSum = 0;
  92. out1->ulIbRegSum = 0;
  93. out1->ulIcRegSum = 0;
  94. out1->uwADCCalibCt = 0;
  95. out1->blADCCalibFlg = TRUE;
  96. out2->uwADCCalibCt = 0;
  97. out2->blADCCalibFlg = TRUE;
  98. }
  99. }
  100. else if(cp_stFlg.CurrentSampleModelSelect == COMBINATION)
  101. {
  102. // pwm_stGenOut.uwRDSONTrig = 108;
  103. pwm_stGenOut.uwRDSONTrig = 129;
  104. pwm_stGenOut.uwSigRTrig = HW_HHHPWM_PERIOD;
  105. pwm_stGenOut.blSampleCalibFlag = TRUE;
  106. if (out1->uwADCCalibCt < (1 << ADC_CALIB_INDEX))
  107. {
  108. out1->ulIdcRegSum += adc_uwADDMAPhase1;
  109. out1->ulIaRegSum += adc_uwRdsonUReg;
  110. out1->ulIbRegSum += adc_uwRdsonVReg;
  111. out1->ulIcRegSum += adc_uwRdsonWReg;
  112. out1->uwADCCalibCt++;
  113. }
  114. else
  115. {
  116. hw_voPWMInit(); // mos up charge and adc calib over; pwm off
  117. cof->uwIaOffset = out1->ulIaRegSum >> (ADC_CALIB_INDEX);
  118. cof->uwIbOffset = out1->ulIbRegSum >> (ADC_CALIB_INDEX);
  119. cof->uwIcOffset = out1->ulIcRegSum >> (ADC_CALIB_INDEX);
  120. out1->ulIaRegSum = 0;
  121. out1->ulIbRegSum = 0;
  122. out1->ulIcRegSum = 0;
  123. pwm_stGenOut.blSampleCalibFlag = FALSE;
  124. cof->uwIdcOffset = out1->ulIdcRegSum >> (ADC_CALIB_INDEX);
  125. out1->ulIdcRegSum = 0;
  126. out1->uwADCCalibCt = 0;
  127. out1->blADCCalibFlg = TRUE;
  128. out2->uwADCCalibCt = 0;
  129. out2->blADCCalibFlg = TRUE;
  130. }
  131. }
  132. else
  133. {}
  134. }
  135. }
  136. }
  137. /***************************************************************
  138. Function: adc_voSample;
  139. Description: Get three-phase current value after zero point and gain process
  140. Call by: functions in TBC;
  141. Input Variables: ADCIABFIXCOF
  142. Output/Return Variables: ADCTESTOUT
  143. Subroutine Call:
  144. Reference: N/A
  145. ****************************************************************/
  146. void adc_voSampleDown(ADC_COF *cof, ADC_DOWN_OUT *out)
  147. {
  148. UWORD uwIpeakPu;
  149. if(cp_stFlg.CurrentSampleModelSelect == SINGLERESISITANCE)
  150. {
  151. SWORD tmp_swIphase1, tmp_swIphase2, tmp_swIphase3;
  152. /* Register value */
  153. out->uwFirstCurREG = adc_uwADDMAPhase1; // Q12
  154. out->uwSecondCurREG = adc_uwADDMAPhase2; // Q12
  155. tmp_swIphase1 = (SWORD)out->uwFirstCurREG - cof->uwIdcOffset;
  156. tmp_swIphase1 = ((SLONG)tmp_swIphase1 * cof->uwCurIdcReg2Pu) >> 10; // Q14=Q24-Q10
  157. tmp_swIphase2 = (SWORD)cof->uwIdcOffset - out->uwSecondCurREG;
  158. tmp_swIphase2 = ((SLONG)tmp_swIphase2 * cof->uwCurIdcReg2Pu) >> 10; // Q14=Q24-Q10
  159. tmp_swIphase3 = (SWORD)out->uwSecondCurREG - out->uwFirstCurREG;
  160. tmp_swIphase3 = ((SLONG)tmp_swIphase3 * cof->uwCurIdcReg2Pu) >> 10; // Q14=Q24-Q10
  161. out->uwADCSector = pwm_stGenOut.uwNewSectorNum;
  162. switch (pwm_stGenOut.uwNewSectorNum)
  163. {
  164. case 1:
  165. out->swIbPu = tmp_swIphase1; // v
  166. out->swIcPu = tmp_swIphase2; //-w
  167. out->swIaPu = tmp_swIphase3; // u
  168. break;
  169. case 2:
  170. out->swIaPu = tmp_swIphase1; // u
  171. out->swIbPu = tmp_swIphase2; //-v
  172. out->swIcPu = tmp_swIphase3;
  173. break;
  174. case 3:
  175. out->swIaPu = tmp_swIphase1; // u
  176. out->swIcPu = tmp_swIphase2; //-w
  177. out->swIbPu = tmp_swIphase3;
  178. break;
  179. case 4:
  180. out->swIcPu = tmp_swIphase1; // w
  181. out->swIaPu = tmp_swIphase2; //-u
  182. out->swIbPu = tmp_swIphase3;
  183. break;
  184. case 5:
  185. out->swIbPu = tmp_swIphase1; // v
  186. out->swIaPu = tmp_swIphase2; //-u
  187. out->swIcPu = tmp_swIphase3;
  188. break;
  189. case 6:
  190. out->swIcPu = tmp_swIphase1; // w
  191. out->swIbPu = tmp_swIphase2; //-v
  192. out->swIaPu = tmp_swIphase3;
  193. break;
  194. default:
  195. out->swIaPu = 0;
  196. out->swIbPu = 0;
  197. out->swIcPu = 0;
  198. break;
  199. }
  200. }
  201. else if(cp_stFlg.CurrentSampleModelSelect == RDSON)
  202. {
  203. SWORD tmp_swIphase1, tmp_swIphase2, tmp_swIphase3;
  204. out->uwIaReg = adc_uwRdsonUReg;
  205. out->uwIbReg = adc_uwRdsonVReg;
  206. out->uwIcReg = adc_uwRdsonWReg;
  207. tmp_swIphase1 = -(((SWORD)out->uwIaReg - cof->uwIaOffset) * cof->uwCurReg2Pu >> 10); // Q14=Q24-Q10
  208. tmp_swIphase2 = -(((SWORD)out->uwIbReg - cof->uwIbOffset) * cof->uwCurReg2Pu >> 10); // Q14=Q24-Q10
  209. tmp_swIphase3 = -(((SWORD)out->uwIcReg - cof->uwIcOffset) * cof->uwCurReg2Pu >> 10); // Q14=Q24-Q10
  210. switch (pwm_stGenOut.uwSampleArea)
  211. {
  212. case IgnoreNone:
  213. out->swIaPu = tmp_swIphase1;
  214. out->swIbPu = tmp_swIphase2;
  215. out->swIcPu = tmp_swIphase3;
  216. break;
  217. case IgnoreA:
  218. out->swIaPu = -tmp_swIphase2 - tmp_swIphase3;
  219. out->swIbPu = tmp_swIphase2;
  220. out->swIcPu = tmp_swIphase3;
  221. break;
  222. case IgnoreB:
  223. out->swIaPu = tmp_swIphase1;
  224. out->swIbPu = -tmp_swIphase1 - tmp_swIphase3;
  225. out->swIcPu = tmp_swIphase3;
  226. break;
  227. case IgnoreC:
  228. out->swIaPu = tmp_swIphase1;
  229. out->swIbPu = tmp_swIphase2;
  230. out->swIcPu = tmp_swIphase3;
  231. break;
  232. case IgnoreAB:
  233. out->swIaPu = -tmp_swIphase3 >> 1;
  234. out->swIbPu = -tmp_swIphase3 >> 1;
  235. out->swIcPu = tmp_swIphase3;
  236. break;
  237. case IgnoreBC:
  238. out->swIaPu = tmp_swIphase1;
  239. out->swIbPu = -tmp_swIphase1 >> 1;
  240. out->swIcPu = -tmp_swIphase1 >> 1;
  241. break;
  242. case IgnoreAC:
  243. out->swIaPu = -tmp_swIphase2 >> 1;
  244. out->swIbPu = tmp_swIphase2;
  245. out->swIcPu = -tmp_swIphase2 >> 1;
  246. break;
  247. default:
  248. break;
  249. }
  250. }
  251. else if(cp_stFlg.CurrentSampleModelSelect == COMBINATION)
  252. {
  253. out->uwIaReg = adc_uwRdsonUReg;
  254. out->uwIbReg = adc_uwRdsonVReg;
  255. out->uwIcReg = adc_uwRdsonWReg;
  256. out->slSampIaPu = -((SLONG)((SLONG)out->uwIaReg - (SLONG)cof->uwIaOffset) * cof->uwCurReg2Pu >> 10); // Q14=Q24-Q10
  257. out->slSampIbPu = -((SLONG)((SLONG)out->uwIbReg - (SLONG)cof->uwIbOffset) * cof->uwCurReg2Pu >> 10); // Q14=Q24-Q10
  258. out->slSampIcPu = -out->slSampIaPu - out->slSampIbPu; //-((SLONG)((SLONG)out->uwIcReg - (SLONG)cof->uwIcOffset) * cof->uwCurReg2Pu >> 10); // Q14=Q24-Q10
  259. // cof->uwCalibcoef = 1500;
  260. out->swIaPu = ((SLONG)out->slSampIaPu * cof->uwCalibcoef) >> 10;
  261. out->swIbPu = ((SLONG)out->slSampIbPu * cof->uwCalibcoef) >> 10;
  262. out->swIcPu = ((SLONG)out->slSampIcPu * cof->uwCalibcoef) >> 10;
  263. }
  264. else
  265. {}
  266. /* Current absolute value & max value */
  267. if ((out->swIaPu) >= 0)
  268. {
  269. out->uwIaAbsPu = (UWORD)out->swIaPu;
  270. }
  271. else
  272. {
  273. out->uwIaAbsPu = (UWORD)(-(out->swIaPu));
  274. }
  275. if ((out->swIbPu) >= 0)
  276. {
  277. out->uwIbAbsPu = (UWORD)out->swIbPu;
  278. }
  279. else
  280. {
  281. out->uwIbAbsPu = (UWORD)(-(out->swIbPu));
  282. }
  283. if ((out->swIcPu) >= 0)
  284. {
  285. out->uwIcAbsPu = (UWORD)out->swIcPu;
  286. }
  287. else
  288. {
  289. out->uwIcAbsPu = (UWORD)(-(out->swIcPu));
  290. }
  291. uwIpeakPu = out->uwIaAbsPu > out->uwIbAbsPu ? out->uwIaAbsPu : out->uwIbAbsPu;
  292. uwIpeakPu = out->uwIcAbsPu > uwIpeakPu ? out->uwIcAbsPu : uwIpeakPu;
  293. out->uwIpeakPu = uwIpeakPu;
  294. }
  295. void adc_voSampleUp(ADC_COF *cof, ADC_UP_OUT *out)
  296. {
  297. /* Register value */
  298. out->uwVdcReg = hw_uwADC0[0];
  299. out->uwU6VReg = hw_uwADC0[1];
  300. out->uwU5VReg = hw_uwADC0[2];
  301. out->PCBTempReg = hw_uwADC0[3];
  302. out->TorqTempReg = hw_uwADC0[4];
  303. out->uwU12VReg = hw_uwADC0[5];
  304. out->uwThrottleReg = hw_uwADC0[6];
  305. out->uwVdcPu = (SLONG)out->uwVdcReg * cof->uwVdcReg2Pu >> 10; // Q14=Q24-Q10
  306. /* Vdc LPF */
  307. out->uwVdcLpfPu = ((out->uwVdcPu - out->uwVdcLpfPu) >> 1) + out->uwVdcLpfPu;
  308. out->uwU6VPu = (SLONG)out->uwU6VReg * cof->uwU6VReg2Pu >> 10; // Q14=Q24-Q10;
  309. out->uwU5VPu = (SLONG)out->uwU5VReg * cof->uwU5VReg2Pu >> 10; // Q14=Q24-Q10;
  310. out->uwU12VPu = (SLONG)out->uwU12VReg * cof->uwU12VReg2Pu >> 10; // Q14=Q24-Q10;
  311. out->MotorTempR = out->MotorTempReg * cof->swMotorTempKcof >> 10; // Q14=Q24-Q10;
  312. ////////////////// Single Resitance Current Sample//////////////////////////////////////////////////////
  313. if (pwm_stGenOut.blSampleCalibFlag == TRUE)
  314. {
  315. switch (pwm_stGenOut.uwSingelRSampleArea)
  316. {
  317. case 0:
  318. out->swCalibIaPu = 0;
  319. out->swCalibIbPu = 0;
  320. out->swCalibIcPu = 0;
  321. break;
  322. case SampleA:
  323. out->swCalibIaPu = -((SLONG)((SWORD)adc_uwADDMAPhase1 - cof->uwIdcOffset) * cof->uwCurIdcReg2Pu) >> 10; // Q14=Q24-Q10
  324. break;
  325. case SampleB:
  326. out->swCalibIbPu = -((SLONG)((SWORD)adc_uwADDMAPhase1 - cof->uwIdcOffset) * cof->uwCurIdcReg2Pu) >> 10; // Q14=Q24-Q10
  327. break;
  328. case SampleC:
  329. out->swCalibIcPu = -((SLONG)((SWORD)adc_uwADDMAPhase1 - cof->uwIdcOffset) * cof->uwCurIdcReg2Pu) >> 10; // Q14=Q24-Q10
  330. break;
  331. default:
  332. break;
  333. }
  334. }
  335. ////////////////// PCB TEMP//////////////////////////////////////////////////////
  336. out->PCBTempR = (ULONG)4096 * PCB_TEMP_SAMPLER / out->PCBTempReg - PCB_TEMP_SAMPLER; // Q14=Q24-Q10;
  337. PcbTempCal(out->PCBTempR);
  338. out->PCBTemp = tmp_PcbTemp;
  339. }
  340. SWORD swSingleReg,GainTemp2;
  341. SLONG slRdsonReg;
  342. LPF_OUT adc_pvt_stRdsonCoefLpf;
  343. UWORD uwCalGainflg;
  344. ULONG GainTemp1;
  345. void adc_voSRCalibration(ADC_COF *cof, ADC_UP_OUT *up_out, ADC_DOWN_OUT *down_out)
  346. {
  347. if (pwm_stGenOut.blSampleCalibFlag == TRUE)
  348. {
  349. switch (pwm_stGenOut.uwSingelRSampleArea)
  350. {
  351. case 0:
  352. break;
  353. case SampleA:
  354. if(swSingleReg > up_out->swCalibIaPu)
  355. {
  356. swSingleReg = up_out->swCalibIaPu;
  357. }
  358. if(slRdsonReg > down_out->slSampIaPu)
  359. {
  360. slRdsonReg = down_out->slSampIaPu;
  361. }
  362. break;
  363. case SampleB:
  364. if(swSingleReg > up_out->swCalibIbPu)
  365. {
  366. swSingleReg = up_out->swCalibIbPu;
  367. }
  368. if(slRdsonReg > down_out->slSampIbPu)
  369. {
  370. slRdsonReg = down_out->slSampIbPu;
  371. }
  372. break;
  373. case SampleC:
  374. if(swSingleReg > up_out->swCalibIcPu)
  375. {
  376. swSingleReg = up_out->swCalibIcPu;
  377. }
  378. if(slRdsonReg > down_out->slSampIcPu)
  379. {
  380. slRdsonReg = down_out->slSampIcPu;
  381. }
  382. break;
  383. default:
  384. break;
  385. }
  386. uwCalGainflg = 1;
  387. }
  388. else
  389. {
  390. if(scm_uwSpdFbkLpfAbsPu <= 2500)
  391. {
  392. GainTemp1 = 1300;
  393. }
  394. else
  395. {
  396. if(uwCalGainflg ==1)
  397. {
  398. GainTemp1 = (SLONG)((SLONG)swSingleReg << 10) / (SLONG)slRdsonReg;
  399. if(GainTemp1 > cof->uwCalibcoefMax)
  400. {
  401. GainTemp1 = cof->uwCalibcoefMax;
  402. }
  403. else if(GainTemp1 < cof->uwCalibcoefMin)
  404. {
  405. GainTemp1 = cof->uwCalibcoefMin;
  406. }
  407. else
  408. {
  409. }
  410. uwCalGainflg = 0;
  411. }
  412. else
  413. {
  414. swSingleReg = 0;
  415. slRdsonReg = 0;
  416. }
  417. }
  418. mth_voLPFilter(GainTemp1, &adc_pvt_stRdsonCoefLpf);
  419. cof->uwCalibcoef = adc_pvt_stRdsonCoefLpf.slY.sw.hi;
  420. }
  421. ////////////////////////////////////////////////////////////////////////////////////
  422. }
  423. /***************************************************************
  424. Function: adc_voSampleCoef;
  425. Description: Get other A/D sample value
  426. Call by: functions in Mainloop;
  427. Input Variables: ADCIABFIXCOF
  428. Output/Return Variables: ADCTESTOUT
  429. Subroutine Call:
  430. Reference: N/A
  431. ****************************************************************/
  432. void adc_voSampleCoef(ADC_COF *cof)
  433. {
  434. cof->uwCurReg2Pu = ((UQWORD)ADC_IPHASE_CUR_MAX_AP << 24) / (1 << (ADC_RESOLUTION_BIT - 1)) / IBASE; // Q24
  435. cof->uwCurIdcReg2Pu = ((UQWORD)ADC_IDC_CUR_MAX_AP << 24) / (1 << (ADC_RESOLUTION_BIT)) / IBASE; // Q24
  436. cof->uwVdcReg2Pu = ((UQWORD)ADC_VDC_MAX_VT << 24) / (1 << ADC_RESOLUTION_BIT) / VBASE; // Q24
  437. cof->uwUabcReg2Pu = ((UQWORD)ADC_UABC_MAX_VT << 24) / (1 << (ADC_RESOLUTION_BIT)) / VBASE; // Q24
  438. cof->uwU6VReg2Pu = ((UQWORD)ADC_LIGHT_MAX_VT << 24) / (1 << (ADC_RESOLUTION_BIT)) / VBASE; // Q24;
  439. cof->uwU5VReg2Pu = ((UQWORD)ADC_SPDSENSOR_MAX_VT << 24) / (1 << (ADC_RESOLUTION_BIT)) / VBASE; // Q24;
  440. cof->uwU12VReg2Pu = ((UQWORD)ADC_DISPLAY_MAX_VT << 24) / (1 << (ADC_RESOLUTION_BIT)) / VBASE; // Q24;
  441. cof->uwCalibcoef = 1024;
  442. cof->uwCalibcoefMax = 2048;
  443. cof->uwCalibcoefMin = 200;
  444. cof->uwCalibCoefK = 160; // q10
  445. mth_voLPFilterCoef(1000000 / 30, FTBC_HZ, &adc_pvt_stRdsonCoefLpf.uwKx); //100Hz
  446. }
  447. /***************************************************************
  448. Function: adc_voSampleInit;
  449. Description: ADC sample initialization
  450. Call by: mn_voSoftwareInit;
  451. Input Variables: N/A
  452. Output/Return Variables: N/A
  453. Subroutine Call:
  454. Reference: N/A
  455. ****************************************************************/
  456. void adc_voSampleInit(void)
  457. {
  458. adc_stDownOut.swIaPu = 0;
  459. adc_stDownOut.swIbPu = 0;
  460. adc_stDownOut.swIcPu = 0;
  461. adc_stDownOut.uwIaAbsPu = 0;
  462. adc_stDownOut.uwIbAbsPu = 0;
  463. adc_stDownOut.uwIcAbsPu = 0;
  464. adc_stDownOut.uwIpeakPu = 0;
  465. adc_stDownOut.uwIaReg = 0;
  466. adc_stDownOut.uwIbReg = 0;
  467. adc_stDownOut.uwIcReg = 0;
  468. adc_stDownOut.uwFirstCurREG = 0;
  469. adc_stDownOut.uwSecondCurREG = 0;
  470. adc_stDownOut.uwADCSector = 0;
  471. adc_stDownOut.uwIaAvgPu = 0;
  472. adc_stDownOut.uwIbAvgPu = 0;
  473. adc_stDownOut.uwIcAvgPu = 0;
  474. adc_stUpOut.uwVdcPu = 0;
  475. adc_stUpOut.uwVdcLpfPu = 0;
  476. adc_stUpOut.uwU6VPu = 0;
  477. adc_stUpOut.uwU5VPu = 0;
  478. adc_stUpOut.uwU12VPu = 0;
  479. adc_stUpOut.uwTrottlePu = 0;
  480. adc_stUpOut.PCBTemp = 0;
  481. adc_stUpOut.MotorTemp = 0;
  482. adc_stUpOut.uwVdcReg = 0;
  483. adc_stUpOut.uwU6VReg = 0;
  484. adc_stUpOut.uwU5VReg = 0;
  485. adc_stUpOut.uwU12VReg = 0;
  486. adc_stUpOut.uwThrottleReg = 0;
  487. adc_stUpOut.PCBTempReg = 0;
  488. adc_stUpOut.MotorTempReg = 0;
  489. adc_stUpOut.swCalibIaPu = 0;
  490. adc_stUpOut.swCalibIbPu = 0;
  491. adc_stUpOut.swCalibIcPu = 0;
  492. adc_stDownOut.ulUaRegSum = 0;
  493. adc_stDownOut.ulUbRegSum = 0;
  494. adc_stDownOut.ulUcRegSum = 0;
  495. adc_stDownOut.ulIdcRegSum = 0;
  496. adc_stDownOut.ulIaRegSum = 0;
  497. adc_stDownOut.ulIbRegSum = 0;
  498. adc_stDownOut.ulIcRegSum = 0;
  499. adc_stDownOut.uwADCCalibCt = 0;
  500. adc_stDownOut.blADCCalibFlg = FALSE;
  501. adc_stUpOut.uwADCCalibCt = 0;
  502. adc_stUpOut.blADCCalibFlg = FALSE;
  503. adc_stUpOut.swIPMTempCe = 0;
  504. }
  505. /*************************************************************************
  506. Local Functions (N/A)
  507. *************************************************************************/
  508. /************************************************************************
  509. Copyright (c) 2018 Welling Motor Technology(Shanghai) Co. Ltd.
  510. All rights reserved.
  511. *************************************************************************/
  512. #ifdef _ADCDRV_C_
  513. #undef _ADCDRV_C_
  514. #endif
  515. /*************************************************************************
  516. End of this File (EOF)!
  517. Do not put anything after this part!
  518. *************************************************************************/