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