EPT GPIO初始化文件 @bsp_gpio_ept_config.c
1 知识点总结
1.1 Official 参考充电电路
Figure 1-1 参考电路
VCHG:USB正极
VCDT:VCHG Charger Detect充电电压检测脚
ISENSE:充电电流检测电阻的正极
BATSNS:充电电流检测电阻的负极
BAT:电池正极引脚
BAT_ON:电池NTC (热敏电阻) 引脚
RECHARGING_VOLTAGE: 回充电压
1.2 5V充电器电压设置
@ cust_charging.h
#define V_CHARGER_MAX 6500 // 6.5 V 充电器的电压最大值
#define V_CHARGER_MIN 4400 // 4.4 充电器的电压最小值
#define V_CHARGER_ENABLE 0 //1:ON , 0:OFF //充电电压保护使能
1.3 配置电池温度检测相关参数
@ cust_battery_temperature_table.h
1.3.1 热敏电阻
目前热敏电阻有两种规格:10K和47K;由电池工程师提供参数。
#define BAT_NTC_10 1
#define BAT_NTC_47 0
1.3.2 在配置热敏电阻参数的同时,也要根据原理图,配置温度检测上拉电阻以及参考电压
#define RBAT_PULL_UP_R 16000 // Unit: Ohm,对应原理图中的R311
#define RBAT_PULL_UP_VOLT 2800 // Unit: micro voltage,对应原理图中的VBATREF
BattVoltToTemp函数就是任何将ADC读出的电压值转换为温度值,该函数其实就是做了两个运算,运算的原理如下图所示。
Figure 1-2 MTK平台NTC温度值计算
1.4 配置充电电流
@ cust_charging.h
1.5 配置电流检测电阻
@ cust_battery_meter.h or @ cust_charging.h
#define CUST_R_SENSE 56 // Unit: micro Ohm, 56 mOhm
该电阻的两端是BATSNS & ISENSE。
Figure 1-3 充电电流检测电阻
1.6 Dead Battery Voltage
@ cust_charging.h
#define V_0PERCENT_TRACKING 3410 /* 3410mV */
1.7 各温度下最大放电容量,内阻-电压表,放电深度-电压表
电池充放电参数由电池工程师向电池厂家索取。目前MTK支持-10°、0°、25°、50°。
1.7.1 各温度下最大放电容量 (Unit: mA)
@ cust_battery_meter.h
Q表示各温度下最大的放电容量
#define Q_MAX_POS_50 1750 //Cmax, 50°最大放电容量1750 mA
#define Q_MAX_POS_25 1763 // 25°
#define Q_MAX_POS_0 1756 // 0°
#define Q_MAX_NEG_10 1726 // -10°
High Voltage:
#define Q_MAX_POS_50_H_CURRENT 1737 //Cmax_400mA, 50°最大放电容量1337 mA
#define Q_MAX_POS_25_H_CURRENT 1717 // 25°
#define Q_MAX_POS_0_H_CURRENT 1214 // 0°
#define Q_MAX_NEG_10_H_CURRENT 966 // -10°
1.7.2 各温度下的内阻-电压表和放电深度-电压表
@ cust_battery_meter_table.h
Figure 1-4 ZCV curve measured SOP
Figure 1-5 Battery Voltage Measure
CAR:库仑计
Cmax/Qmax:电池容量
DOD:Depth of Discharging,放电深度百分比;每次开机后初始的DOD,通过OCV方式算出来或者使用RTC保存的值
mAh:放电容量
OCV:Open Circuit Voltage,开路电压
R (battery):电池内阻,(V2-V1)/400mA
SOP:Standard Operation Procedure
VC (=VBAT):Voltage of Closed Circuit,闭路电压,Charge ADC采样的到电压就是闭路电压
ZCV:Zero Current Voltage,零电流-电压,一般指ZCV的2个表格(开路电压-放电深度百分比,开路电压-电池内阻)
在ZCV曲线里面,还有一栏是电池内阻R (battery),在cust_battery_meter_table.h里面就是r_profile_tX[51],那这个有什么用呢?
公式:oam_v_ocv_1 (OCV) = vol_bat (VC) + 补偿电压(IR)。
在手机端读取的电池电压是vol_bat (VC),实际电池电压是oam_v_ocv_1 (OCV),两者之间由于电池特性或者充电线会有一些差异,这时候就会需要一个补偿电压来让手机端显示百分比更准确,这就是R (battery) 的作用。
Figure 1-6 MTK OCV和SOC计算原理
线性插值方法具体原理如下图。
Figure 1-7 Linear Interpolation Method
从电池供应商表格中提取 R-OCV 对应温度的r_profile_tX[51]数组
从电池供应商表格中提取DOD-OCV到对应温度的battery_profile_tX[51]数组中
注意数组的元素个数都要一致。
系统开机后,会利用预先测得的分布在-10、0、25、50摄氏度下的 ZCV 表,结合真实温度,动态重构一张当前温度下的ZCV 表格,重写TEMPERATURE对应预留的空ZCV数组battery_profile_temperature[51]
假如产品的电压范围设置在4.2V - 3.4V,并且该电压范围对应的容量大小是2000mA,则每个百分点就是20mA。
1.8 充电算法
@ cust_battery_meter.h
考虑接触点电阻,电池接触点处一般会有20~40 mOhm的电阻,这个阻值在大电流 (1.5-2A) 充电的时候,会对充电算法有一定的影响。所以在调试的时候要考虑这个电阻的存在,尤其是大电流充电的时候。在函数mtk_imp_tracking中计算开路电压 (OCV)的时候,可以通过宏定义FG_METER_RESISTANCE的调整去补充这个接触点电阻。
2 Documents
《Battery_Charging_Introduction_for_Customer_V1.0.pdf》
《Battery_Customer Document_MT65xx.pdf》
《Fuel_Gauge_introduce.pdf》
《Fuel_Gauge_Application_Notes_V1.0.pdf》
《Fuel_Gauge_Battery_ZCV_Table_Test_SOP_V1.0_20120716.pdf》
3 DOD-OCV的百分数excel计算法
3.1 excel
1) 点击B1 然后在上面的编辑栏输入 (A1/100)
2) 右键“设置单元格格式(F)...”
3) 剩下的其他单元格只要把鼠标拖到B1的右下角有个 +号此时点击鼠标左键下拉就行了
4) 折线图的生成
从excel选中2列数据,点击“插入”->“插入折线图”,excel会生成直观折线图。
3.2 word
4 Abbreviations
GM 3.0:MTK Gauge Master