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

充电整体框架图如下:

充电原理图:

 

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<VCHARGE<9V。AC口最大可承受15V,USB口最大可承受9V

       3、VCHARGE通过P-MOS管,Shottkey二极管,充电电阻连接到VBAT,组成充电回路,6318通过控制G极电压,从而控制Vgs,达到控制充电电流的目的,二极管是为防止电流倒灌。下面是MOS管的转移特性图。下图应该有些错误,其实Vgs、Id都是负值。可以看到,当Vgs越负时,漏极电流越大。

      4、ISENSE、VBAT连接到充电电阻两端,在IC内部,这两路按以下连接。

        

         可以编程实现分压还是直接连接。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层充电相关函数介绍

 

alps\kernel-3.10\drivers\power\mediatek目录下:

battery_common.c  -----------充电控制主线程

battery_meter.c    -----------SW FG算法

linear_charging.c   ----------PMIC充电控制

switch_charging.c   ---------SW charger充电控制

充电相关的需要客制化的代码路径

//ZCV曲线

alps\kernel-3.10\drivers\misc\mediatek\mach\mt6735\aeon6735m_65u_s_l1\power目录下cust_battery_meter_table.h 和 cust_battery_meter.h 这两个文件,根据电池厂家提供的ZCV参数更新这两个文件下对应4个温度下的参数即可{放电深度,电池电压};  {电池内阻,电池电压} ;同时还要更新NTC电阻曲线{温度,NTC电阻值} 

//充电电流精度设置

alps\kernel-3.10\drivers\misc\mediatek\mach\mt6735\aeon6735m_65u_s_l1\power\cust_battery_meter.h

#define CUST_R_SENSE         56 -------从基带那边获取,影响充电电流的精度

//充电电池内部温度检测电阻设置

 

alps\kernel-3.10\drivers\misc\mediatek\mach\mt6735\aeon6735m_65u_s_l1\power\ 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: \alps\kernel-3.10\drivers\misc\mediatek\mach\mt6735\aeon6735m_65u_s_l1\power\ cust_charging.h

Kernel: \alps\kernel-3.10\drivers\misc\mediatek\mach\mt6735\aeon6735m_65u_s_l1\power\ cust_charging.h

#define MAX_CHARGE_TEMPERATURE  50
#define MIN_CHARGE_TEMPERATURE  0
#define ERR_CHARGE_TEMPERATURE  0xFF

//充电电流设置

Kernel: \alps\kernel-3.10\drivers\misc\mediatek\mach\mt6735\aeon6735m_65u_s_l1\power\ cust_charging.h

Lk:      \alps\bootable\bootloader\lk\target\aeon6735m_65u_s_l1\include\target\ cust_battery.h

/* Charging Current Setting */
#define USB_CHARGER_CURRENT Cust_CC_450MA
#define AC_CHARGER_CURRENT Cust_CC_650MA

 

以上这些客制化的设置在7.0后,都集中到如下文件去设置

B:\drivers\kernel-3.18\arch\arm64\boot\dts\neostra8735_tb_n_bat_setting.dtsi

 

 

2.1 基本流程

 

   电池充电过程分三个阶段:预充电、恒流充电和恒压充电。

  1.预充电:当Vbat<3.4V时即进入此阶段,此时PMIC不能提供Vcore、Vdd等电压,CPU处于关机状态。预充电流一般相对较小,理论上不要超过0.2C

   2.恒流充电:当3.4<Vbat<4.2V时进入此阶段,此时PMIC的LDO开始输出电压,CPU开始工作。

   3.恒压充电:当Vbat>4.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的过程也是一样的。

 

 

 

 

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页