remain_distance.c 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542
  1. /**
  2. ******************************************************************************
  3. * @file remain_distance.c
  4. * @author Damon
  5. * @version V1.5
  6. * @date 20190105
  7. * @brief 电池剩余续航里程统计
  8. ******************************************************************************
  9. * @attention
  10. *本功能模块输出计算结果为,剩余续航里程RemainDis.remainDistance
  11. *
  12. ******************************************************************************
  13. */
  14. #include "remain_distance.h"
  15. #include "battery_info.h"
  16. #include "eeprom_24c02.h"
  17. #include "math_tools.h"
  18. /*电流积分,最小值,单位mA*/
  19. #define CURRENT_MIN 130
  20. /*电流积分周期*/
  21. #define Q_ADD_TIME_MS 5
  22. extern const MC_AvgPower_Struct_t MC_AvgPower_Default;
  23. //续航计算相关参数
  24. Remain_Dis_t RemainDis = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFFFF, 0, 0, FALSE, 0};
  25. //电池电量计算相关参数
  26. Battery_Info_t Battery_Info = {0, 0, 0, 0, 0, FALSE, 0, 0, 0};
  27. /******************************************************************************
  28. * @Function: void RD_getQRemainRecord( void )
  29. * @Discrible: 读取电池剩余电量
  30. * @Param:
  31. * @Return:
  32. * @Others: 此函数在系统上电时调用一次,读取电池剩余电量
  33. 已添加到RD_RemainDis_init(void),无需单独调用
  34. ******************************************************************************
  35. * @Recode date version author modify
  36. * ------------------------------------------------------------------
  37. * 20190815 V1.3 Damon modify
  38. *
  39. *******************************************************************************/
  40. static void RD_getQRemainRecord(uint16_t Volgate)
  41. {
  42. uint16_t BusVoltage;
  43. uint16_t i;
  44. uint16_t num,batteryTotalQ,batteryRemainQ;
  45. //获取母线初始电压
  46. BusVoltage = Volgate;
  47. //查表读取电池电量
  48. num = sizeof(battery_VoltageQuantity) / 4;
  49. batteryTotalQ = battery_VoltageQuantity[num-1][1];
  50. batteryRemainQ = batteryTotalQ;
  51. for(i=0; i<num; i++)
  52. {
  53. if(battery_VoltageQuantity[i][0] <= BusVoltage)
  54. {
  55. batteryRemainQ = batteryTotalQ - battery_VoltageQuantity[i][1] ; //A*s
  56. Battery_Info.Q_remain_record = batteryRemainQ * 10 / 36; //mAh
  57. break;
  58. }
  59. else//电池电压低于最小值
  60. {
  61. batteryRemainQ = 0;
  62. }
  63. }
  64. MC_RunInfo.SOC = batteryRemainQ * 100 / batteryTotalQ;
  65. Battery_Info.Q_remain_real = Battery_Info.Q_remain_record;
  66. }
  67. /******************************************************************************
  68. * @Function: void RD_RemainDis_init(void)
  69. * @Discrible: 模块功能初始化
  70. * @Param: uwWheelLength:轮胎周长,BusVoltage:母线电压
  71. * @Return:
  72. * @Others: 此函数在进入主循环前调用,调用后,标志位置位,开启模块的统计功能
  73. ******************************************************************************
  74. * @Recode date version author modify
  75. * ------------------------------------------------------------------
  76. * 20181221 V1.2 Damon modify
  77. *
  78. *******************************************************************************/
  79. void RD_RemainDis_Init(uint16_t uwWheelLength, TrueOrFalse_Flag_Struct_t BMS_COM_OK, uint16_t BusVoltage, uint8_t DesignVol, uint16_t BMS_RC)
  80. {
  81. Battery_Info.Q_discharged = 0;
  82. Battery_Info.Q_remain_real = 0;
  83. Battery_Info.Q_remain_record = BATTERY_TATAL_Q_MAH;
  84. Battery_Info.Q_remain_real_last = 0;
  85. if(BMS_COM_OK == TRUE) //电池通讯正常时,直接获取电池容量
  86. {
  87. Battery_Info.Q_remain_real = BMS_RC;
  88. }
  89. else //电池不含通讯时,根据母线电压估算剩余容量
  90. {
  91. // RD_getQRemainRecord(BusVoltage * 36 / DesignVol); //放电曲线是按照36V,针对48V或24V做等效转换
  92. }
  93. RemainDis.start = 0;
  94. RemainDis.I_motor = 0;
  95. RemainDis.acc_period = Q_ADD_TIME_MS;
  96. RemainDis.Q_add = 0;
  97. RemainDis.wheelLength = uwWheelLength;
  98. RemainDis.wheel_Count = 0;
  99. RemainDis.Power_per_km = 0;
  100. RemainDis.Power_per_km_average = 0;
  101. RemainDis.remainDistance = 0xFFFF;//码表显示---km
  102. RemainDis.flag_saveInfo = 0;
  103. RemainDis.flag_helpModeChange = 0;
  104. RemainDis.IsBMS_ComOK_Flag = FALSE;
  105. RemainDis.BMS_Com_DelayTimeCnt = HAL_GetTick();
  106. }
  107. /******************************************************************************
  108. * @Function: void RD_CalculateRemainDis(void)
  109. * @Discrible: 计算电池剩余续航里程
  110. * @Param:
  111. * @Return:
  112. * @Others: 计算平均功耗(中间变量),和剩余续航里程
  113. ******************************************************************************
  114. * @Recode date version author modify
  115. * ------------------------------------------------------------------
  116. * 20181210 V1.4 Damon modify
  117. *
  118. *******************************************************************************/
  119. void RD_CalculateRemainDis(uint32_t WheelTurnCnt, uint16_t RemainCap, uint8_t SOC, uint16_t BusCurrent)
  120. {
  121. /*以下宏定义会影响平均功耗计算结果的变化快慢
  122. WHEEL_COUNT_REFRESH_VALUE 电量统计周期,每10圈统计一次电量
  123. Q_FIFO_LENGTH 动态平均功耗,取平均值的长度。Power_per_km(10圈x25=250圈,即动态功耗是车轮骑行250圈的平均值)
  124. P_FIFO_LENGTH 对Power_per_km求平均值的长度,Power_per_km_average(250圈x10=-2500圈)
  125. 修改宏定义的大小,可以改变Power_per_km_average的更新快慢,最终影响剩余续航里程的更新快慢。
  126. */
  127. /*车轮圈数,最小的电量统计周期*/
  128. #define WHEEL_COUNT_REFRESH_VALUE 10
  129. /*动态平均功耗,缓存长度*/
  130. #define Q_FIFO_LENGTH 25 //25 250圈 约500m
  131. /*平均功耗,缓存长度*/
  132. #define P_FIFO_LENGTH 30 //约15KM
  133. static uint16_t Q_FIFO[Q_FIFO_LENGTH]={0};
  134. static uint16_t Q_Index=0;
  135. static uint32_t Q_sum=0;
  136. static uint8_t Q_fifo_full_falg=0;
  137. static int16_t Q_add_tmp=0;
  138. static int32_t PowerPerKmFltSum=0;
  139. uint8_t i;
  140. int32_t ptmp;
  141. static uint32_t RunTimeCnt = 0;
  142. static uint32_t WheelTurnCntOld = 0;
  143. if((HAL_GetTick() - RunTimeCnt) < Q_ADD_TIME_MS)//计算周期为Q_ADD_TIME_MS
  144. {
  145. return;
  146. }
  147. RunTimeCnt = HAL_GetTick();
  148. //更新母线电流值
  149. RemainDis.I_motor = BusCurrent;
  150. //更新计算周期内轮子圈数
  151. RemainDis.wheel_Count = WheelTurnCnt - WheelTurnCntOld;
  152. /*开始计算*/
  153. if(RemainDis.start == 1)
  154. {
  155. /*电池通讯中断超时2s判断*/
  156. if((HAL_GetTick() - RemainDis.BMS_Com_DelayTimeCnt) > 2000)
  157. {
  158. RemainDis.BMS_Com_DelayTimeCnt = HAL_GetTick();
  159. RemainDis.IsBMS_ComOK_Flag = FALSE;
  160. }
  161. else
  162. {
  163. //更新电池剩余容量
  164. Battery_Info.Q_remain_real = RemainCap;
  165. }
  166. /*助力档位切换后*/
  167. if( RemainDis.flag_helpModeChange == 1 )
  168. {
  169. RemainDis.flag_helpModeChange = 0;
  170. /*清空一级缓冲区数据*/
  171. for(i=0;i<Q_FIFO_LENGTH;i++)
  172. {
  173. Q_FIFO[i] = 0;
  174. }
  175. Q_Index = 0;
  176. Q_sum = 0;
  177. Q_fifo_full_falg=0;
  178. if(RemainDis.Power_per_km_average != 0)
  179. {
  180. /*赋值求平均值的总和*/
  181. PowerPerKmFltSum = RemainDis.Power_per_km_average << 8;
  182. }
  183. }
  184. /*轮圈数大于设定值,计算一次*/
  185. if( RemainDis.wheel_Count >= WHEEL_COUNT_REFRESH_VALUE)
  186. {
  187. WheelTurnCntOld = WheelTurnCnt;
  188. /*消耗电量信息来自电池*/
  189. if(RemainDis.IsBMS_ComOK_Flag == TRUE )
  190. {
  191. //更新电池剩余容量
  192. Battery_Info.Q_remain_real = RemainCap;
  193. //更新电池剩余电量
  194. Battery_Info.SOC = SOC;
  195. if(Battery_Info.Q_remain_real_last != 0)
  196. {
  197. Q_add_tmp = (int16_t)(Battery_Info.Q_remain_real_last - Battery_Info.Q_remain_real);
  198. /*充电状态,或由母线电流切换到电量信息计算时,此值会出现负数*/
  199. Q_add_tmp = (Q_add_tmp > 0) ? Q_add_tmp : 0;
  200. Q_add_tmp = (Q_add_tmp < 30) ? Q_add_tmp : 30;
  201. /*判断电池是否满充*/
  202. if( ( Q_add_tmp == 0 ) && ( Battery_Info.SOC == 100 ) )
  203. {
  204. /*当电池满充时,发出的电量信息会是标称值,
  205. 在Battery.SOC==100时不会随电量消耗尔减小*/
  206. /*置标志位,不计算更新*/
  207. }
  208. else
  209. {
  210. /*将一定轮圈数消耗的电量,写入FIFO,FIFO中的数据滑动求平均值*/
  211. Q_sum -= Q_FIFO[Q_Index];
  212. Q_sum += Q_add_tmp;
  213. Q_FIFO[Q_Index++] = Q_add_tmp;
  214. if(Q_Index>=Q_FIFO_LENGTH)
  215. {
  216. Q_Index = 0;
  217. Q_fifo_full_falg = 1;
  218. /*250圈,动态功耗刷新一次,置一次eeprom保存标志*/
  219. RemainDis.flag_saveInfo = 1;
  220. }
  221. /*
  222. wheelCount x WHEEL_LENGTH(cm)
  223. ------------------------------- (km) wheelCount=(Q_FIFO_LENGTH * WHEEL_COUNT_REFRESH_VALUE)
  224. 1000 x 100
  225. Q_sum(mA*h) x 1000 x 100
  226. ------------------------------- (mA*h/km)
  227. wheelCount x WHEEL_LENGTH
  228. */
  229. if( Q_sum > 0 )
  230. {
  231. /*缓存满后,求平均值*/
  232. if(Q_fifo_full_falg==1)
  233. {
  234. RemainDis.Power_per_km = (Q_sum * 1000 * 100 ) / ( Q_FIFO_LENGTH * WHEEL_COUNT_REFRESH_VALUE * RemainDis.wheelLength );
  235. }
  236. else
  237. {
  238. /*缓存数据未满,以当前有效数据个数求平均值*/
  239. RemainDis.Power_per_km = (Q_sum * 1000 * 100 ) / ( Q_Index * WHEEL_COUNT_REFRESH_VALUE * RemainDis.wheelLength );
  240. }
  241. }
  242. else
  243. {
  244. RemainDis.Power_per_km = 0;
  245. }
  246. /*电量缓存Q_FIFO计满一次,滑动滤波求平均值*/
  247. if(Q_Index==0)
  248. {
  249. ptmp = RemainDis.Power_per_km;
  250. PowerPerKmFltSum += ((ptmp << 8) - PowerPerKmFltSum) / P_FIFO_LENGTH;
  251. RemainDis.Power_per_km_average = (uint16_t)(PowerPerKmFltSum >> 8);
  252. }
  253. /*计算剩余续航里程*/
  254. if(RemainDis.Power_per_km_average > 0)
  255. {
  256. RemainDis.remainDistance = Battery_Info.Q_remain_real / RemainDis.Power_per_km_result;//单位km
  257. }
  258. else
  259. {
  260. RemainDis.remainDistance = 0xFFFF;//码表显示---km
  261. }
  262. }
  263. }
  264. }
  265. /*电量信息来自电池的计算,需要用到此数据*/
  266. Battery_Info.Q_remain_real_last = Battery_Info.Q_remain_real;
  267. }
  268. }
  269. }
  270. /******************************************************************************
  271. * @Function: void RD_saveAndUpdateInfo(uint8_t uwHelpMode)
  272. * @Discrible: 保存功耗数据到EEPROM
  273. * @Param:
  274. * @Return:
  275. * @Others: 每一公里,保存一次数据到eeprom;助力档位切换时,刷新计算的功耗数据。此函数在主循环中调用
  276. ******************************************************************************
  277. * @Recode date version author modify
  278. * ------------------------------------------------------------------
  279. * 20190105 V1.4 Damon modify
  280. *
  281. *******************************************************************************/
  282. void RD_SaveAndUpdateInfo(MC_GearSt_Struct_t GearSt, MC_AssistRunMode_Struct_t MC_AssistRunMode)
  283. {
  284. static MC_GearSt_Struct_t MC_GearSt_Old = MC_GearSt_OFF;
  285. static MC_AssistRunMode_Struct_t MC_AssistRunMode_Old = MC_AssistRunMode_INVALID;
  286. static uint16_t usPowerPerKmAverageLast =0;
  287. static uint16_t powerDefaultCurrentMode=0;
  288. int16_t sPercent;
  289. int32_t ltmp;
  290. if( ( (GearSt & 0x0F) != 0 ) && ( MC_AssistRunMode != MC_AssistRunMode_INVALID ))
  291. {
  292. RemainDis.start = 1;
  293. /*保存当前助力档位的数据到eeprom*/
  294. if( RemainDis.flag_saveInfo == 1 )
  295. {
  296. RemainDis.flag_saveInfo = 0;
  297. /*平均功耗值有更新时,执行保存数据相关操作*/
  298. if( RemainDis.Power_per_km_average != usPowerPerKmAverageLast )
  299. {
  300. if(RemainDis.Power_per_km_average != 0)
  301. {
  302. /*计算平均功耗,增减量的百分比,放大100倍*/
  303. ltmp = (int32_t)(RemainDis.Power_per_km_average - powerDefaultCurrentMode) * 100;
  304. sPercent = ltmp / powerDefaultCurrentMode;
  305. /*各档位关联*/
  306. /*不低于默认值30%*/
  307. if( (sPercent >= -30)&&(sPercent <= 455) )
  308. {
  309. /*更新平均功耗*/
  310. RemainDis.Power_per_km_result = powerDefaultCurrentMode * ( 100 + sPercent ) / 100;
  311. /*计算各档位增减后的值*/
  312. ltmp = MC_AvgPower_Default.GearSt_ECO;
  313. MC_AvgPower.GearSt_ECO = ltmp * ( 100 + sPercent ) / 100;
  314. ltmp = MC_AvgPower_Default.GearSt_NORM;
  315. MC_AvgPower.GearSt_NORM = ltmp * ( 100 + sPercent ) / 100;
  316. ltmp = MC_AvgPower_Default.GearSt_SPORT;
  317. MC_AvgPower.GearSt_SPORT = ltmp * ( 100 + sPercent ) / 100;
  318. ltmp = MC_AvgPower_Default.GearSt_TURBO;
  319. MC_AvgPower.GearSt_TURBO = ltmp * ( 100 + sPercent ) / 100;
  320. ltmp = MC_AvgPower_Default.GearSt_SMART;
  321. MC_AvgPower.GearSt_SMART = ltmp * ( 100 + sPercent ) / 100;
  322. /*保存所有档位的更新数据*/
  323. SaveParamToEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_AVG_POWER, sizeof(MC_AvgPower_Struct_t), (uint8_t*)&MC_AvgPower.GearSt_ECO);
  324. }
  325. }
  326. /*备份平均功耗值*/
  327. usPowerPerKmAverageLast = RemainDis.Power_per_km_average;
  328. }
  329. }
  330. /*助力档位切换后,根据当前档位更新功耗数据*/
  331. if((GearSt != MC_GearSt_Old) || (MC_AssistRunMode != MC_AssistRunMode_Old))
  332. {
  333. switch(GearSt)
  334. {
  335. case MC_GearSt_Torque_ECO:
  336. RemainDis.Power_per_km_average = MC_AvgPower.GearSt_ECO;
  337. powerDefaultCurrentMode = MC_AvgPower_Default.GearSt_ECO;
  338. break;
  339. case MC_GearSt_Torque_NORM:
  340. RemainDis.Power_per_km_average = MC_AvgPower.GearSt_NORM;
  341. powerDefaultCurrentMode = MC_AvgPower_Default.GearSt_NORM;
  342. break;
  343. case MC_GearSt_Torque_SPORT:
  344. RemainDis.Power_per_km_average = MC_AvgPower.GearSt_SPORT;
  345. powerDefaultCurrentMode = MC_AvgPower_Default.GearSt_SPORT;
  346. break;
  347. case MC_GearSt_Torque_TURBO:
  348. RemainDis.Power_per_km_average = MC_AvgPower.GearSt_TURBO;
  349. powerDefaultCurrentMode = MC_AvgPower_Default.GearSt_TURBO;
  350. break;
  351. case MC_GearSt_SMART:
  352. RemainDis.Power_per_km_average = MC_AvgPower.GearSt_SMART;
  353. powerDefaultCurrentMode = MC_AvgPower_Default.GearSt_SMART;
  354. break;
  355. default:
  356. RemainDis.Power_per_km_average = 0;
  357. powerDefaultCurrentMode = 0;
  358. break;
  359. }
  360. /*备份平均功耗值*/
  361. usPowerPerKmAverageLast = RemainDis.Power_per_km_average;
  362. RemainDis.Power_per_km_result = RemainDis.Power_per_km_average;
  363. /*计算剩余续航里程*/
  364. if(RemainDis.Power_per_km_average > 0)
  365. {
  366. RemainDis.remainDistance = Battery_Info.Q_remain_real / RemainDis.Power_per_km_result;//单位km
  367. }
  368. else
  369. {
  370. RemainDis.remainDistance = 0xFFFF;//码表界面显示:---km
  371. }
  372. /*置标志位,在后续计算中,刷新相关数据*/
  373. RemainDis.flag_helpModeChange = 1;
  374. }
  375. }
  376. else
  377. {
  378. RemainDis.start = 0;
  379. RemainDis.Power_per_km_average = 0;
  380. RemainDis.Power_per_km_result = 0;
  381. RemainDis.remainDistance = 0xFFFF;//码表界面显示:---km
  382. }
  383. /*备份助力档位*/
  384. MC_GearSt_Old = GearSt;
  385. MC_AssistRunMode_Old = MC_AssistRunMode;
  386. }
  387. /*
  388. 根据电池电压计算剩余电量,运行周期200ms
  389. */
  390. uint8_t Battery_SocCal(Battery_Info_t* p_Battery_Info, uint8_t SOC_Old, uint8_t Vol_Design)
  391. {
  392. static uint16_t TimeDelayCnt = 0;
  393. static uint8_t Result = 0, Result_Pre=0;
  394. static TrueOrFalse_Flag_Struct_t InitFlag = FALSE;
  395. uint16_t i;
  396. uint16_t TableNum;
  397. uint32_t batteryTotalQ, batteryRemainQ;
  398. static uint8_t u8LoopCnt = 0;
  399. static uint16_t u16MaxVoltage = 0;
  400. static uint32_t u32VolSum = 0;
  401. static TrueOrFalse_Flag_Struct_t FlagFristCal = TRUE;
  402. TableNum = sizeof(battery_VoltageQuantity) / 4;
  403. batteryTotalQ = battery_VoltageQuantity[TableNum - 1][1];
  404. batteryRemainQ = batteryTotalQ;
  405. if(InitFlag == FALSE) //初始化动态显示百分比
  406. {
  407. if(HAL_GetTick() < 2500)
  408. return 0;
  409. else
  410. {
  411. TimeDelayCnt++;
  412. u32VolSum += p_Battery_Info->u16CurVoltage;
  413. if(TimeDelayCnt <= 1) return 25;
  414. else if(TimeDelayCnt <= 3) return 50;
  415. else if(TimeDelayCnt <= 5) return 75;
  416. else if(TimeDelayCnt <= 7) return 100;
  417. else
  418. {
  419. InitFlag = TRUE;
  420. u16MaxVoltage = (Vol_Design == 24) ? (uint16_t)(u32VolSum >> 3) * 10 / 7
  421. : ((Vol_Design == 48) ? (uint16_t)(u32VolSum >> 3) * 10 / 13
  422. : (uint16_t)(u32VolSum >> 3));
  423. //查表计算SOC
  424. for(i=0; i<TableNum; i++)
  425. {
  426. if(battery_VoltageQuantity[i][0] <= u16MaxVoltage)
  427. {
  428. batteryRemainQ = batteryTotalQ - battery_VoltageQuantity[i][1]; //A*s
  429. break;
  430. }
  431. else//电池电压低于最小值
  432. {
  433. batteryRemainQ = 0;
  434. }
  435. }
  436. return batteryRemainQ * 100 / batteryTotalQ;
  437. }
  438. }
  439. }
  440. else //初始化后根据电压平均值计算百分比
  441. {
  442. Result_Pre = SOC_Old;
  443. Result = Result_Pre;
  444. if(p_Battery_Info->BFlagCalSoc == TRUE)
  445. {
  446. //后面取12个值的最大值
  447. p_Battery_Info->u16BusAverageVol[u8LoopCnt++] = (uint16_t)(p_Battery_Info->u32TotalBusVoltage / 15000);
  448. if(u8LoopCnt >= 12)
  449. {
  450. u16MaxVoltage = (Vol_Design == 24) ? GetMaxData(p_Battery_Info->u16BusAverageVol, 12) * 10 / 7
  451. : ((Vol_Design == 48) ? GetMaxData(p_Battery_Info->u16BusAverageVol, 12) * 10 / 13
  452. : GetMaxData(p_Battery_Info->u16BusAverageVol, 12));
  453. u8LoopCnt = 0;
  454. }
  455. //查表计算SOC
  456. for(i=0; i<TableNum; i++)
  457. {
  458. if(battery_VoltageQuantity[i][0] <= u16MaxVoltage)
  459. {
  460. batteryRemainQ = batteryTotalQ - battery_VoltageQuantity[i][1]; //A*s
  461. break;
  462. }
  463. else//电池电压低于最小值
  464. {
  465. batteryRemainQ = 0;
  466. }
  467. }
  468. Result = batteryRemainQ * 100 / batteryTotalQ;
  469. //电量上升时,突变较小,取上次计算值
  470. if(Result > Result_Pre)
  471. {
  472. if((Result < (Result_Pre + 30)) && (Result < 90))
  473. {
  474. Result = Result_Pre;
  475. }
  476. }
  477. p_Battery_Info->u32TotalBusVoltage = 0;
  478. p_Battery_Info->BFlagCalSoc = FALSE;
  479. }
  480. return Result;
  481. }
  482. }