1. 程式人生 > >MT8735 andorid7.0 充電除錯總結(1)——MTK電源管理(MT6318)

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的過程也是一樣的。