最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

MTK充电流程

IT圈 admin 22浏览 0评论

2024年4月11日发(作者:严含文)

BAT_thread()

battery kernel thread

for 10s check and

charger in/out event

整个充电时间大于或等于24小时

(1)gSyncPercentage是一个同步

bat_volt_check_point和BMT_的全局变量

恒压充电时间大于等于3小时

Mt6573_battery_update()

BAT_BatteryFullAction()

BMT__vol >= 4.11V &&

提示充满

在恒压充电阶段,充电的电流小于或

等于120mA,且持续1分钟

G_bat_full_user_view == 1

充电界面显示电量值

bat_volt_check_point=99

bat_volt_check_point >= 100

bat_volt_check_point ==

BMT_

gSyncPercentage=0

bat_data->BAT_CAPACITY =

bat_volt_check_point

Mt6573_fgadc_probe()

fgauge_initialization()

Calculate battery

capacity by VBAT

Type为0表示初始化,

构建曲线

通过ADC读出电池的

电压值Vadc

fgauge_read_capacity(0)

fgauge_read_voltage()

读取充电时电池的

温度temp

当充电时电池的温度小于-10度或大于50度,直接按-10度

和50度来处理

Rbat为电池充放电时电池的内阻

OCV为电池的空载电压值

RH为上曲线的Rbat值

RL为下曲线的Rbat值

VH为上曲线的OCV值

VL为下曲线的OCV值

Temp为当前的电池温度

tempH为当前的电池温度的上温度值

tempH为当前的电池温度的下温度值

计算曲线的公式采用线性插入法如下:

Rbat=RL+(temp-tempL)*(RH-RL)/(tempH-tempL)

OCV=VL+(temp-tempL)*(VH-VL)/(tempH-tempL)

fgauge_read_temperature()

根读电池的电压和

温度来计算电池电

量的百分比

fgauge_get_dod0()

获取r_profile_temperature[]

数组的首地址

fgauge_get_profile_r_table(TEMPE

RATURE_T)

构建当前温度[Rbat,OCV]曲线并

保存在

r_profile_temperature[]数组

获取

battery_profile_temperature[

]数组的首地址

构建当前温度[DOD,OCV]曲线并

保存在

battery_profile_temperature[

]数组中

通过传入的Vadc算出VC值并得到

OCV

当前温度的[DOD,OCV]曲线即为

Battery_profile_temperature[]

DOD=DODl+(Vh-OCV)*(DODh-DODl)/(Vh-Vl)

其中Vh和Vl为当前温度的[DOD,OCV]曲线中比OCV大和小

的值

DODh和DODl为当前温度的[DOD,OCV]曲线中Vh和Vl对应

的DOD值

Fgauge_construct_r_table_profile

()

OCV=VL+(temp-tempL)*(VH-VL)/(tempH-tempL)

将当前温度的上温度曲线中的DOD直接赋值给当前温度的DOD

DOD=DODH

fgauge_get_profile(TEMPERATURE_T

)

Fgauge_construct_battery_profile

()

在当前温度[Rbat,OCV]曲线即r_profile_temperature[]中找

到Vadc的插入点,用下面的公式算出Rbat

Rbat=Rl+(Vh-Vadc)*(Rh-Rl)/(Vh-Vl)

其中Vh和Vl为当前温度的[Rbat,OCV]曲线中比Vadc大和小的值

Rh和Rl为当前温度的[Rbat,OCV]曲线中Vh和Vl对应的R值

Vc=Ifg*(Rbat+Rfg)/1000

其中Vc为补偿电压

Rfg为电池负极上20mOhm的电阻

Ifg为流过Rfg上的电流值

Vc= (Vc +(10/2)) / 10

充电时补偿电压为负值,不充电时为正值

if (gFG_Is_Charging == KAL_TRUE)

Vc= Vc-(Vc*2);

=Vadc+Vc

gFG_DOD0 = 100 -gFG_capacity

voltage = voltage +

fgauge_compensate_battery_voltag

e_recursion(voltage,5);

在当前温度的[DOD,OCV]曲线中找到

OCV的插入点,然后利用公式算出当

前OCV所应的DOD,即得到当前电压对

应的电量显示百分比

得到最终显示电量的百分比

FGADC kernel thread for 1s

check gas gauge status

FGADC_thread_kthread()

Fgauge_read_current()

Fgauge_read_voltage()

gFG_voltage = gFG_voltage +

fgauge_compensate_battery_voltag

e_recursion(gFG_voltage,1)

读出当前电池的库

仑计的值,单位mAh

gFG_columb =

fgauge_read_columb()

30秒执行一次

Fgauge_Normal_Mode_Work()

通过当前电池的OCV的值计算

出电池电量值DOD,方法与FG

DRV初始化一样

fgauge_read_capacity_by_v()

通过库仑计计算

电池的容量

fgauge_read_capacity(1)

fgauge_update_dod()

读取当前温度,并计算出当前温度对

应电池的容量Qmax

FG_dod_1 = gFG_DOD0 -(((

(gFG_columb*1000*adjust_coulomb_counter)

/100 )/gFG_BATT_CAPACITY)+5)/10;

读取当前温度,并计算出当前温度对

应电池的容量C_0mA和400mA放电时对

应的电池容量C_400mA

dvalue_new = (100-dvalue) -( (

(C_0mA-C_400mA) * (dvalue) ) /

C_400mA )

gFG_DOD0表示开机时初始化电池电量百分比

When charger plug in/out, need update DOD0

gFG_columb表示当前充电时流入电池或放电时流出电池的库仑

计的值,单位mAh,充电时为正值,放电时为负值

CAR_TUNE_VALUE 用于修正统计电流的误差,当前值是94

gFG_BATT_CAPACITY表示当前温度下电池的最大容量,单位mAh

FG_dod_1 是DOD0+(-CAR)/Cmax

dvalue的值就是FG_dod_1

dvalue_new就是最终的电量百分比DOD

2024年4月11日发(作者:严含文)

BAT_thread()

battery kernel thread

for 10s check and

charger in/out event

整个充电时间大于或等于24小时

(1)gSyncPercentage是一个同步

bat_volt_check_point和BMT_的全局变量

恒压充电时间大于等于3小时

Mt6573_battery_update()

BAT_BatteryFullAction()

BMT__vol >= 4.11V &&

提示充满

在恒压充电阶段,充电的电流小于或

等于120mA,且持续1分钟

G_bat_full_user_view == 1

充电界面显示电量值

bat_volt_check_point=99

bat_volt_check_point >= 100

bat_volt_check_point ==

BMT_

gSyncPercentage=0

bat_data->BAT_CAPACITY =

bat_volt_check_point

Mt6573_fgadc_probe()

fgauge_initialization()

Calculate battery

capacity by VBAT

Type为0表示初始化,

构建曲线

通过ADC读出电池的

电压值Vadc

fgauge_read_capacity(0)

fgauge_read_voltage()

读取充电时电池的

温度temp

当充电时电池的温度小于-10度或大于50度,直接按-10度

和50度来处理

Rbat为电池充放电时电池的内阻

OCV为电池的空载电压值

RH为上曲线的Rbat值

RL为下曲线的Rbat值

VH为上曲线的OCV值

VL为下曲线的OCV值

Temp为当前的电池温度

tempH为当前的电池温度的上温度值

tempH为当前的电池温度的下温度值

计算曲线的公式采用线性插入法如下:

Rbat=RL+(temp-tempL)*(RH-RL)/(tempH-tempL)

OCV=VL+(temp-tempL)*(VH-VL)/(tempH-tempL)

fgauge_read_temperature()

根读电池的电压和

温度来计算电池电

量的百分比

fgauge_get_dod0()

获取r_profile_temperature[]

数组的首地址

fgauge_get_profile_r_table(TEMPE

RATURE_T)

构建当前温度[Rbat,OCV]曲线并

保存在

r_profile_temperature[]数组

获取

battery_profile_temperature[

]数组的首地址

构建当前温度[DOD,OCV]曲线并

保存在

battery_profile_temperature[

]数组中

通过传入的Vadc算出VC值并得到

OCV

当前温度的[DOD,OCV]曲线即为

Battery_profile_temperature[]

DOD=DODl+(Vh-OCV)*(DODh-DODl)/(Vh-Vl)

其中Vh和Vl为当前温度的[DOD,OCV]曲线中比OCV大和小

的值

DODh和DODl为当前温度的[DOD,OCV]曲线中Vh和Vl对应

的DOD值

Fgauge_construct_r_table_profile

()

OCV=VL+(temp-tempL)*(VH-VL)/(tempH-tempL)

将当前温度的上温度曲线中的DOD直接赋值给当前温度的DOD

DOD=DODH

fgauge_get_profile(TEMPERATURE_T

)

Fgauge_construct_battery_profile

()

在当前温度[Rbat,OCV]曲线即r_profile_temperature[]中找

到Vadc的插入点,用下面的公式算出Rbat

Rbat=Rl+(Vh-Vadc)*(Rh-Rl)/(Vh-Vl)

其中Vh和Vl为当前温度的[Rbat,OCV]曲线中比Vadc大和小的值

Rh和Rl为当前温度的[Rbat,OCV]曲线中Vh和Vl对应的R值

Vc=Ifg*(Rbat+Rfg)/1000

其中Vc为补偿电压

Rfg为电池负极上20mOhm的电阻

Ifg为流过Rfg上的电流值

Vc= (Vc +(10/2)) / 10

充电时补偿电压为负值,不充电时为正值

if (gFG_Is_Charging == KAL_TRUE)

Vc= Vc-(Vc*2);

=Vadc+Vc

gFG_DOD0 = 100 -gFG_capacity

voltage = voltage +

fgauge_compensate_battery_voltag

e_recursion(voltage,5);

在当前温度的[DOD,OCV]曲线中找到

OCV的插入点,然后利用公式算出当

前OCV所应的DOD,即得到当前电压对

应的电量显示百分比

得到最终显示电量的百分比

FGADC kernel thread for 1s

check gas gauge status

FGADC_thread_kthread()

Fgauge_read_current()

Fgauge_read_voltage()

gFG_voltage = gFG_voltage +

fgauge_compensate_battery_voltag

e_recursion(gFG_voltage,1)

读出当前电池的库

仑计的值,单位mAh

gFG_columb =

fgauge_read_columb()

30秒执行一次

Fgauge_Normal_Mode_Work()

通过当前电池的OCV的值计算

出电池电量值DOD,方法与FG

DRV初始化一样

fgauge_read_capacity_by_v()

通过库仑计计算

电池的容量

fgauge_read_capacity(1)

fgauge_update_dod()

读取当前温度,并计算出当前温度对

应电池的容量Qmax

FG_dod_1 = gFG_DOD0 -(((

(gFG_columb*1000*adjust_coulomb_counter)

/100 )/gFG_BATT_CAPACITY)+5)/10;

读取当前温度,并计算出当前温度对

应电池的容量C_0mA和400mA放电时对

应的电池容量C_400mA

dvalue_new = (100-dvalue) -( (

(C_0mA-C_400mA) * (dvalue) ) /

C_400mA )

gFG_DOD0表示开机时初始化电池电量百分比

When charger plug in/out, need update DOD0

gFG_columb表示当前充电时流入电池或放电时流出电池的库仑

计的值,单位mAh,充电时为正值,放电时为负值

CAR_TUNE_VALUE 用于修正统计电流的误差,当前值是94

gFG_BATT_CAPACITY表示当前温度下电池的最大容量,单位mAh

FG_dod_1 是DOD0+(-CAR)/Cmax

dvalue的值就是FG_dod_1

dvalue_new就是最终的电量百分比DOD

发布评论

评论列表 (0)

  1. 暂无评论