mt_battery_100Percent_tracking_check(void)
{
if(bat_vol_is_full) //電池電壓滿
{
if(UI_SOC >= 100)
{
if(charging_is_full_reset_meter) //三者都滿才正常
{
return TURE;
}
else
{
return FALSE;
}
}
else
{
if(timer_counter >= 3) //30s更新時返回正常
{
timer_counter = 1;
UI_SOC++;
return TURE;
}
else
{
retrurn FALSE;
}
}
}
else //電池電壓不滿
{
if(UI_SOC >= 99)
{
UI_SOC = 99;
return FALSE;
}
}
}
返回TURE只有兩種情況
1、只有當電池電壓滿且UI_SOC滿且充電滿
2、電池電壓電壓滿時UI_SOC未滿且到達30秒更新時間
其餘都會返回FALSE
mt_battery_0Percent_tracking_check(void)
{
if(UI_SOC <= 0)
{
UI_SOC = 0;
}
else
{
UI_SOC--;
}
return TURE;
}
該函數永遠返回真
void mt_battery_nPercent_tracking_check()
{
if(BMT_status.nPrecent_UI_SOC_check_point == 0)
{
return FALSE;
}
if(bat_vol_nPercent <= 15% && UI_SOC >= 15%)
{
if(time_counter == 2)
{
UI_SOC--;
return TURE;
}
else
{
time_counter = 1;
return FALSE;
}
}
else if(bat_vol_nPercent >= 15% && UI_SOC == 15%)
{
return TURE;
}
else
{
return FALSE;
}
}
當電池電壓到達15%時候,若電量高於15%,則需要用電壓等且等20s電量更新返回TURE,若果時間沒到20s,則返回FALSE
當電量先到15%,電池電壓大於15%時候返回TURE
其餘情況返回FALSE
sync_UI_percent_to_real();
{
if(UI_SOC > SOC) //耗電比較嚴重,上層的顯示要底層
{
if(time_60s_ok) //防止跳躍過大
{
UI_SOC--;
}
}
else //充電
{
if(UI_SOC < SOC)
{
UI_SOC++;
}
else
{
UI_SOC = SOC;
}
}
}
該函數用於實現UI_SOC和SOC的同步
battery_update()
{
//電池數據BTM_status;
if(charger_exist)
{
if(battery_exist)
{
if(bat_vol < v_0percent_tracking)
{
status = mt_battery_0Percent_tracking_check();
}
else
{
status = mt_battery_100Percent_tracking_check();
}
}
else
{
UI_SOC = 0;
}
}
else
{
if(bat_vol < v_0percent_tracking)
{
status = mt_battery_0Percent_tracking_check();
}
else
{
status = mt_battery_nPercent_tracking_check();
}
}
if(status == TURE)
{
battery_meter_reset();
}
else
{
if(is_chargering || bat_full)
{
UI_SOC = 100;
}
else
{
sync_UI_percent_to_real();
}
}
}
1、可以看到整個電池數據更新的時候,必須先判斷charger是否存在,同時判斷電池是否存在,當充電器和電池同時存在時,若果電池電壓小於0check點的電壓時,做0check點的UI_SOC校準(UI_SOC--),否則,做100check點的校準(UI_SOC++)
2、當只有電池存在時候,若果電池電壓小於0check點的電壓時,做0check點的UI_SOC校準(UI_SOC--),否則做15%的check點的校準,具體來說,如果電池電壓先到15%且電量大於15%時候,20更新時間未到,則返回FALSE,20s時間到,返回當電量先到15%時候且電池電壓大於15%時候,返回TURE</span>
3、當check完成(0check/15%check/100check)後,根據返回的TURE和FALSE進入不同的處理,當返回FALSE且電池未充滿時候,同步更新底層SOC和上層顯示的UI_SOC