MT8735 andorid7.0 充电调试总结(1)——MTK电源管理(MT6318)

2019-07-14 00:56发布

充电整体框架图如下: 充电原理图:   1、  充电线路 1.1 充电线路   1.2 预充电路 1.3 OVP电路   1.4 6305OVP电路 2、  充电过程   2.1 充电流程 2.2 MT6318充电状态转换图     //下面是详细介绍 1、  充电线路  为了方便查看,将每一部分电路独立的画出来了 1.1 充电电路   说明:         1、左边的ADC3_VCHG通过R1、R2组成的分压电路检测充电电压。         2、VCHARGE的范围:4.2V          可以编程实现分压还是直接连接。BASEBAND根据这两个电压(ISNSE_OUT,VB_OUT)以及充电电阻就可以算出充电电流(两种连接方式不一样)。LAYOUT时要注意,这两根线最好走成粗细长度都相同,这样电压检测才准确,充电电流的检测才准确。      1.2 预充电路       说明:1、当电池电压VBAT<3.3V时,SEL1=L,SEL2=H,左边的MOS管导通,右边的MOS管关断。PMU采用Vcharge供电,实现预充显示。当VBAT>3.3V时,SEL1=H,SEL2=L,左边的MOS管关断,右边的MOS管导通。采用电池供电。要想有预充显示功能,还需SEL1_EN(H3)=H。        2、两个管子均是P-MOS管,作为开关用。所不同的是,左边的MOS管还带了一个肖特基二极管,以防止VBAT电流倒灌到VCHARGE。另外左边的MOS管不仅仅是作为开关用,还可以改变栅极电压来改变整个管子的压降,以控制输入到PMIC的电压在3.8V左右。当时,左边的MOS管导通,右边的MOS管关断。        3、SEL1,SEL2均是VCHARGE供电的。   1.3 过压保护及温度检测电路           说明:1、VCHARGE通过R1、R2分压以后连接到BAT_ON。当BAT_ON>2.5V时,电池没有连接,PMIC会立即停止充电。可以计算该处OVP电压为:V=(2.5+0.3)*42/18=6.5V       2、电池温度检测:AVDD通过R3和电池内部的10K温敏电阻分压。当电池温度变化时,温敏电阻的值会改变,从而上面的电压跟着改变,ADC2_TBAT检测该电压。       3、两个二极管的作用是隔离,否则,两边的检测会相互受到影响。       充电过程 kernel层充电相关函数介绍   alpskernel-3.10driverspowermediatek目录下: battery_common.c  -----------充电控制主线程 battery_meter.c    -----------SW FG算法 linear_charging.c   ----------PMIC充电控制 switch_charging.c   ---------SW charger充电控制 充电相关的需要客制化的代码路径 //ZCV曲线 alpskernel-3.10driversmiscmediatekmachmt6735aeon6735m_65u_s_l1power目录下cust_battery_meter_table.h 和 cust_battery_meter.h 这两个文件,根据电池厂家提供的ZCV参数更新这两个文件下对应4个温度下的参数即可{放电深度,电池电压};  {电池内阻,电池电压} ;同时还要更新NTC电阻曲线{温度,NTC电阻值}  //充电电流精度设置 alpskernel-3.10driversmiscmediatekmachmt6735aeon6735m_65u_s_l1powercust_battery_meter.h #define CUST_R_SENSE         56 -------从基带那边获取,影响充电电流的精度 //充电电池内部温度检测电阻设置   alpskernel-3.10driversmiscmediatekmachmt6735aeon6735m_65u_s_l1power cust_battery_meter_table.h #define BAT_NTC_10 1
#define BAT_NTC_47 0

#if (BAT_NTC_10 == 1)
#define RBAT_PULL_UP_R             16900
#define RBAT_PULL_DOWN_R    27000 
#endif


#if (BAT_NTC_47 == 1)
#define RBAT_PULL_UP_R             61900
#define RBAT_PULL_DOWN_R   100000
#endif
#define RBAT_PULL_UP_VOLT          1800       这里定义电池内部温度检测电阻,上拉电阻及电压,从基带那里获取这些信息。   //电池高低温停充/恢复充电 Kernel: alpskernel-3.10driversmiscmediatekmachmt6735aeon6735m_65u_s_l1power cust_charging.h Kernel: alpskernel-3.10driversmiscmediatekmachmt6735aeon6735m_65u_s_l1power cust_charging.h #define MAX_CHARGE_TEMPERATURE  50
#define MIN_CHARGE_TEMPERATURE  0
#define ERR_CHARGE_TEMPERATURE  0xFF //充电电流设置 Kernel: alpskernel-3.10driversmiscmediatekmachmt6735aeon6735m_65u_s_l1power cust_charging.h Lk:      alpsootableootloaderlk argetaeon6735m_65u_s_l1include arget cust_battery.h /* Charging Current Setting */
#define USB_CHARGER_CURRENT Cust_CC_450MA
#define AC_CHARGER_CURRENT Cust_CC_650MA   以上这些客制化的设置在7.0后,都集中到如下文件去设置 B:driverskernel-3.18archarm64ootdts eostra8735_tb_n_bat_setting.dtsi     2.1 基本流程      电池充电过程分三个阶段:预充电、恒流充电和恒压充电。   1.预充电:当Vbat<3.4V时即进入此阶段,此时PMIC不能提供Vcore、Vdd等电压,CPU处于关机状态。预充电流一般相对较小,理论上不要超过0.2C    2.恒流充电:当3.44.2V后进入此阶段,此时充电电流会越来越小,电压维持不变     2.2  MT6318充电状态转换图                                              注意以下几点: 1.       充电的条件: 电池连接OK(BAT_ON=0);充电器连接OK(CHR_DEC=1);充电电压不过高(OV=0) 2.       预充转换到CC的条件是VBAT>3.3V,而CC装换到预充的条件是 VBAT<3.0V,这个主要是为了防止当VBAT在3.3V附近时,在两个状态间不停切换。同样的道理,CC到CV的过程也是一样的。