MTK平台充电模块梳理

一、原理图

智能手机充电模块硬件原理图主要可以分为三个部分:电池连接器、充电IC以及电源管理芯片PMIC部分等。

这里写图片描述

BAT_ID:不同电芯的电池区分管脚,一般就是外接的电阻不同,通过该管脚来区分加载不同的电池profile。
BAT_ON:电池是否在位检测管脚,也是电池NTC管脚。
CS_P:Fuel Gauge电流检测的正极管脚,10毫欧电阻的一端。
CS_N: Fuel Gauge电流检测的负极管脚,10毫欧电阻的另一端。

这里写图片描述

VBUS:充电器输入端正极。
BATSNS:充电电流检测电阻的正极管脚
ISENSE: 充电电流检测电阻的负极管脚
以上两个管脚接到PMIC对应的管脚上进行电压测量。
SDA1:与主处理器通信的IIC接口数据管脚。
SCL1:与主处理器通信的IIC接口时钟管脚。
EINT_CHG:充电使能控制管脚。

这里写图片描述

VCDT:充电器电压VBUS检测管脚,上拉电阻330k,下拉电阻39k。

二、软件架构

这里写图片描述

这里写图片描述

这里写图片描述

三、电池参数

通过对应的ADC获取电池电压、充电器电压、电池温度以及充电电流等参数信息。
这里写图片描述

  1. 电池电压
    即管脚BATSNS上的电压值
signed int battery_meter_get_battery_voltage(kal_bool update)
- ret = battery_meter_ctrl(BATTERY_METER_CMD_GET_ADC_V_BAT_SENSE, &val);

这里写图片描述

2.电池温度
即管脚BAT_ON上的对应的温度值。
这里写图片描述

signed int battery_meter_get_battery_temperature(void)
 force_get_tbat
     battery_meter_ctrl(BATTERY_METER_CMD_GET_ADC_V_BAT_TEMP, &bat_temperature_volt);//读取ADC电压值
     bat_temperature_val = BattVoltToTemp(bat_temperature_volt);//根据电压值换算成温度值

如下为不同温度下对应的NTC阻值表:
这里写图片描述

3.充电器电压
即管脚VCDT上的对应的电压值分压换算后的VBUS电压。MTK的ADC量程为2.8V,充电器电压一般为5V左右,不能直接接ADC,所以采用分压电路量取分得的电压,算出充电器电压。
这里写图片描述
R_CHARGER_1,R_CHARGER_2为对应的原理图上的分压电阻值。

4.充电电流
充电电流 = 电流检测电阻两端的电压/电流检测电阻的电阻,通常电流检测电阻的阻值为56毫欧或者68毫欧,电流检测电阻两端的电压即为BATSNS和ISNSE上的电压差。

signed int battery_meter_get_charging_current(void)
这里写图片描述
这里写图片描述
5. 电量百分比
MTK平台电量计基本原理就是开路电压+库仑计积分法的方式来计算最终的电量百分比。
这里写图片描述

四、 充电流程

  1. 充电基本流程
    这里写图片描述

几个充电阶段:涓流充电、预充电、恒流充电和恒压充电阶段。
涓流充电一般由硬件控制,软件无法干预,充电电流一般30~100mA左右,此时电池电压一般是小于2.1v或者2.2v左右。
预充电:当电池电压大于2.1V小于3.0v(软件可设置)时进入预充电阶段,此时充电电流软件可以控制,一般200mA~500mA之间,预充电在lk阶段完成。
恒流充电:当电池电压大于3.0v(该门限软件可以控制)时可以进入恒流充电阶段,此时充电电流可以由标配的充电器的规格来具体确定,一般1000Ma~2000mA不等。
恒压充电阶段:当电池电压接近电池慢电电压(4.35v或者4.4v)时进入恒压充电阶段,在该阶段电池电压基本恒定在满电电压,充电电流逐步下降,直至充电电流达到充电截止电流,充电完成。

2.状态机

这里写图片描述

五、 代码分析

代码分析参见如下地址
https://blog.csdn.net/yuewen2008/article/details/78291491

猜你喜欢

转载自blog.csdn.net/yuewen2008/article/details/80899568