Android MTK 放电曲线以及库轮值矫正
提示: 文章内容包括放电曲线和库轮值矫正两部分
文章目录
- Android MTK 放电曲线以及库轮值矫正
- 前言
- 一、放电曲线
- 1 、要放电曲线
- 2、提取数据
- 二、库轮值矫正
- 1、原理
- 2、硬件要求
- 3、测试修改方法
- 4、验证
- 三、小结
前言
随着智能机的发展,库伦累计法已经成为电量计算的主流。放电曲线和库轮值矫正是智能机的电源部分驱动调整的重要工作。
调整放点曲线牵涉到的细节还是很多的,设置后还要耐心得反复验证耗费时间又长,多弄几次下来真的是多么痛的领悟。
提示:以下是本篇文章正文内容,可供参考
一、放电曲线
系统获取电压值容量比值来获取首次的电量值百分比,放电曲线是主要的参考。
1 、要放电曲线
1、电池供应商提供,50度、25度、10度、0度、-10度放电曲线(ZCV);
2、放电电流和平时使用平均电流接近;
3、至少要有容量变化(从0到最大值)、电流变化(固定)、电压变化(从大到小)、以及内阻变化。四项;
4、精确度精确到小数点后一位。
2、提取数据
1、从电池曲线EXCEL表中提取修改提取我们的数据,填写到代码中,熟练的可能需要收悉EXCEL的一些函数方法,例:IF(MOD(G2,61)=0,H2,“0”),抽取部分行的内容。注意乘以10,取消容量和电压值的小数点。
2、使用电压、容量以及内阻的100组值添加到代码中。注意的是代码中的空格。
3、修改文件路径为:
…\kernel-4.9\arch\arm64\boot\dts\mediatek\bat_setting\mtxxxx_battery_table_ext.dtsi
二、库轮值矫正
1、原理
软件库伦积分法- Voltage Mode– 即由电池压差推出电流作累加
优点:可以修正D0引入的误差
缺点:需要一定时间才能修正D0误差, 且推出的I没有HW
2、硬件要求
1、必需有电池温度检测功能电路;
2、必需使用10mohm (即0.01欧)电流检测电阻。
3、测试修改方法
第一步: 先将#define CAR_TUNE_VALUE 改为100, 然后build 一版测试的软件, 再接着进
行后续步骤。(此步骤必须进行,否则后面的修正值就不正确)
第二步:在VBAT正极 与System GND之间给3.8V的电压,给手机供电开机用。也就是说开机的电流不要经过检测0.01欧电阻。
----注意:给Rfg 加电流的通道,请不要在Rfg两端焊线,加热焊线会影响Rfg电阻,可以直接连接到任意系统地(如:屏蔽盖或测试点上)
第三步:测试用的1A电流加载在电池地(电池连接器的负极)和系统地(System GND)之间。 可以测试链路上在串个电流表,或者直接读取测试精度在1mA内的电源上的电流,注意极性会影响电流的正负值。建议使用程控电源电压设置3.8V,限制输出电流为1000mA。测试前可以先关闭输出。
第四步:按power key 让手机开机,进入操作界面之后,选择拨号界面,输入工程模式密码*#*#3646633#*#* 进入工程模式菜单。然后选择Power->Charge Battery ,读取第五行, FG_Battery_CurrentConsumption的电流值Ifg,没有打开电流应该为0mA。打开1A电流后等待。两次变化以上。
第五步:然后使用1000mA除以Ifg ,修正CAR_TUNE_VALUE=1000/Ifg。例如: Ifg=1064mA,那就
填写为 94 ,对小数的第三位进行四舍五入操作。(该修正值大于或小于100 都是合理的)。
第五步:修改参数值:
文件路径:…\kernel-4.9\arch\arm64\boot\dts\mediatek\bat_setting\mtxxxx_battery_prop_ext.dtsi
下面直接给代码上中文注释
bat_gm30: battery{
compatible = "mediatek,bat_gm30";
/* Charging termination current.*/
DIFFERENCE_FULLOCV_ITH = <(200)>;//充满截止电流阈值
/* If ui_soc shows 1% more than X minites, system will shutdown.*/
SHUTDOWN_1_TIME = <(30)>;//0%电量关机等待时间
/* The ui_soc will keep 100% until SOC drop X percents after unplugged.*/
KEEP_100_PERCENT = <(1)>;//充电器才出后下降多少降低百分比
R_FG_VALUE = <(10)>; /* R_sense resistance.*/
/* Configures whether using embedded battery or not.*/
EMBEDDED_SEL = <(1)>;//配置是否使用嵌入式电池
PMIC_SHUTDOWN_CURRENT = <(20)>; /* System shutdown current.*///系统关机电流
FG_METER_RESISTANCE = <(75)>; /* The resistance of PCB*///PCB电路电阻补偿50=0.1mΩ
/* Tune value for current measurement.*/
CAR_TUNE_VALUE = <(95)>;//1050mA//电流测量校正值
PMIC_MIN_VOL = <(33500)>;//系统最小电压值
/* vboot voltage for gauge 0%.*/
POWERON_SYSTEM_IBOOT = <(500)>;// vboot 启动电压。
/* power on system iboot*/
SHUTDOWN_GAUGE0_VOLTAGE = <(34000)>;//系统关机电压
/* shutdown gauge 0% voltage*/
TEMPERATURE_T0 = <(50)>; /* Battery temperature T0*///50度对应T0
TEMPERATURE_T1 = <(25)>; /* Battery temperature T1*///25度对应T1
TEMPERATURE_T2 = <(10)>; /* Battery temperature T2*///10度对应T2
TEMPERATURE_T3 = <(0)>; /* Battery temperature T3*///0度对应T3
TEMPERATURE_T4 = <(-10)>; /* Battery temperature T4*///-10度对应T4
g_FG_PSEUDO100_T0 = <(100)>; /* Pseudo 100% percentage at T0.*///T0伪百分比
g_FG_PSEUDO100_T1 = <(100)>; /* Pseudo 100% percentage at T1.*///T1伪百分比
g_FG_PSEUDO100_T2 = <(100)>; /* Pseudo 100% percentage at T2.*///T2伪百分比
g_FG_PSEUDO100_T3 = <(100)>; /* Pseudo 100% percentage at T3.*///T3伪百分比
g_FG_PSEUDO100_T4 = <(100)>; /* Pseudo 100% percentage at T4.*///T4伪百分比
/* System shut down voltage.*/
Q_MAX_SYS_VOLTAGE_BAT0 = <(3350)>;//系统关机电压
/* System shut down voltage.*/
Q_MAX_SYS_VOLTAGE_BAT1 = <(3350)>;//系统关机电压
/* System shut down voltage.*/
Q_MAX_SYS_VOLTAGE_BAT2 = <(3350)>;//系统关机电压
/* System shut down voltage.*/
Q_MAX_SYS_VOLTAGE_BAT3 = <(3350)>;//系统关机电压
#include "mt6765_battery_table_ext.dtsi"
};
4、验证
重新编译后重新测试,看误差是否在3%以内。特别注意检查快要到0%和100%时候的电压是否理理论值比较贴近。
三、小结
充放电曲线的首要因数是电压和容量的曲线表,系统检测不同的温度来选择曲线。而库轮值可以通过电流来修正放电曲线带来的差异。