MTK:BMT充電模塊

BMT充電介紹

 

1.電池充電相關文件:bmt.c    chr_parameter.c

 

2.充電有三個過程:預充電、恆流充電、恆壓充電

1)        當Vbat<3.3V  屬於預充階段,在這個階段充電跟電池還有多少電壓沒有關係,即使電池電壓爲0V也應該可以衝進電(一般正規廠商電池內部有保護電路,當放電到兩點幾伏時已經截止,不能放出電了),只要電池本身沒問題!關鍵是確保BATDET腳是否處於低電平!手機充電是沒有任何反應的。

2)        當電池電壓低於3.3V時,PMIC(電源管理芯片)不能提供Vcore、Vdd等電壓,CPU處於關機狀態,這時CPU是不工作的!手機是沒有任何反應的,在這個模式只要BATDET腳通過下拉電阻置低,即可進行預充!

充電電流Ipre=10mV/Rsense  現在MTK平臺Rsense=0.33R, 可知Ipre=30mA

 

2).  當3.3V<bat<4.2V  PMIC的LDO開始輸出電壓,從而cpu開始工作,這是進入恆流充電階段充電電流Icc=160mV/Rsense ,現在MTK平臺Rsense=0.33R,可知Icc=480mA

   

3).  Vbat>4.2V 進入恆壓充電階段,這個階段電流逐漸變小,電壓維持不變!當電流減小到接近爲0時,CPU發出控制信號這時停止充電!

 

 

以下爲充電狀態圖:

 

                                         

 

   

3.當充電器插入時,亦即爲PMIC充電模塊提供了Vcharge電壓,只要把PMIC的BATDET腳接地即可啓動充電模塊,這時會產生一個充電中斷信號到CPU,通知CPU現在已經進入充電狀態。這時PMIC會產生一箇中斷給CPU,CPU開始啓動如下模塊:

 

一、ADC採樣,主要是採集Vchrg,Vbat及從MOSFET漏極輸出的電壓。

 

二、發消息給MMI層,讓它顯示充電狀態及一些採樣數據

 

三、檢測電池電壓有沒有超過保護電壓及電池連接是否連接正確,如果有問題即可通過CHRCTRL(GPI031)切斷充電電路!

 

四、平時顯示“充電器沒有連接”警告,是因爲PMIC的BATDET腳float(懸空),MOSFET沒有打開,從而沒有充電電流引起的

 

PMIC 會通過電池BAT ID腳來判斷要不要給電池充電,並不是用來區分是鋰電還是鎳氫電池!區別鋰電還是鎳氫電池是通過PMIC的BATUSE腳,低電平是選擇鋰電!我們目前使用的電池ID電阻是10k左右,只要電池三個腳都接到電池connector上,就可以通過電池ID電阻把BATDET腳接地,充電也就開始了(包括預充電)!插充電器後,只要把PMIC的BATDET腳接地,就可以保證有電流流入了,電池的電壓隻影響充電狀態(比如是預充還是恆流充電),如果電池電壓較低,只是預充的時間稍長一些,最多一兩個小時應該可以完成預充電,進入恆流充電狀態!

一般電池都有自保護,一塊合格的電池不應該會出現是0V的情況!

 

 

 

附:

1.當電池電壓過低時,即進入鎖定狀態,用萬用表測得電池兩端的電壓爲0V!手機在低電壓鎖定後不能充電跟手機的充電電路沒有關係!

2.電池保護IC主要有過沖保護、過放保護、大電流保護等功能。

3.鋰電池不能把電全部放完,必須加保護IC,如果電池電壓放電低於2V,就不能充進電了!

4.電池被鎖定後,需要激活電壓把電池喚醒。

5.電池在低壓時充不進去電,與電池廠家選用的保護IC有關!

 

 

在Chr_parmeter.c文件中有如下數據結構,其中定義了有關電池和充電部分的全部典型值。

bmt_customized_struct  bmt_custom_chr_def =

{

#ifndef  __CUST_NEW__

   31,/*GPIO_CHRCTRL*/

   14,/*GPIO_BATDET*/

   7,/*GPIO_VIBRATOR*/

#endif /*__CUST_NEW__*/

 

/*charing parameters*/

/*Check Phy parameters,Maybe changed*/

   1100000,/*Typical_LI_BATTYPE*/     鋰電池典型值(容量)

   1100000,/*Typical_NI_BATTYPE*/       鎳氫電池典型值(容量)

   1000000,/*ICHARGE_ON_HIGH*/        最大充電電流

   0,/*ICHARGE_ON_LOW*/                          最小充電電流

   1000000,/*ICHARGE_OFF_HIGH*/  //??50000   

   4050000,/*V_FAST2TOPOFF_THRES*/                   

   2500000,/*BATTMP_MINUS_40C*/                          

   1469409,/*BATTMP_0C*/                                        

   520042,/*BATTMP_45C*/                                       

   6000000,/*MAX_VBAT_LI*/                      

鋰電池最大VBAT值

   5500000,/*MAX_VBAT_NI*/

                                   鎳氫電池最大VBAT值

   3400000,/*V_PRE2FAST_THRES*/                          

   250000,/*I_TOPOFF2FAST_THRES*/  /*250ma,TOPOFF->FAST*/

                                   快速充電關閉電流

   120000,/*I_TOPOFF2FULL_THRES*/   /*120ma,TOPOFF->BATFULL*/

                                   正常充電關閉電流

   4110000,/*V_FULL2FAST_THRES*/  /*BATFULL->FAST*/

                                  

   414557,/*V_TEMP_FAST2FULL_THRES_NI*/ /*50oC,FAST->BATFULL*/

                                  

   4050000,/*V_FULL2FAST_THRES_NI*/

   600000,/*FAST_ICHARGE_HIGHLEVEL*/  /*600ma,for table search*/

                                                        快速充電最高限制電流

   400000,/*FAST_ICHARGE_LOWLEVEL*/   /*400ma,for table search*/

                                                        快速充電最低限制電流

   4050000,/*V_PROTECT_HIGH_LI*/

   3800000,/*V_PROTECT_LOW_LI*/

#if defined(__RGT_DRV_M100__) //M100 support Nokia charger

   7000000,                                      諾基亞充電器電壓 7v

#else

   6500000,/*VCHARGER_HIGH*/    普通充電器電壓爲6.5v

#endif

   0,/*VCHARGER_LOW*/

/*Time delay*/

/* PRE CHARGE ,search table*/

/*TON = 3s,TOFF=2s*/

   3,/*PRE_TON*/

   2,/*PRE_TOFF*/

 

/* FAST CHARGE ,search table*/

/*TON = 3s,TOFF=0s*/

   3,/*TOPOFF_TON*/

   0,/*TOPOFF_TOFF*/

 

   6,/*BATFULL_TON_LI*/   /*unit : second*/

   0,/*BATFULL_TOFF_LI*/

   1,/*BATFULL_TON_NI*/   /*unit : second*/

   9,/*BATFULL_TOFF_NI*/

   6,/*BATFULL_TOFF*/

   10,/*BATHOLD_OFF*/

 

   5,/*ADC_ISENSE_RESISTANCE_FACTOR*/         /*1/0.2*/

   24, /*bmt_measure_discard_time*/ /*24 ticks*/

   //ADC_CALIDATA adc_cali_param  

以下爲手機電壓檢測部分的ADC校準值

   {

      {

         5524,

         5524,

         5524,

         5524,

         5524,

         5524

      },

      {

         (23286),

         (23286),

         (23286),

         (23286),

           (23286),

         (23286)

      }

   },

  

   /*ratio = adc_volt_factor/100*/

   //const kal_uint16 adc_volt_factor[ADC_MAX_CHANNEL]

   {

       50,

       50,

       50,

      100,

       50,

      50

   },

      //const kal_uint8 TONOFFTABLE[6][2] =

   {

      {7,1},

      {8,1},

      {9,1},

      {7,1},/*talk */

      {8,1},/*talk */

      {9,1}/*talk */

   },

  

   //const kal_int32 CurrOffset[3] =      

   {

      100000, //100ma

      100000,

      100000

   },

   KAL_FALSE, /* enable checking temperature while charging */

#if defined(__MT6253_PLATFORM_SUPPORT__)

   KAL_TRUE /* enable checking charging voltage while charging */        

#else

   KAL_FALSE /* enable checking charging voltage while charging */       

#endif  

};

Pmic_custom.c文件中宏

       #define AC_CHR_CURRENT        CHR_CURRENT_650  

#define USB_CHR_CURRENT       CHR_CURRENT_450

分別是對交流充電器和USB充電時的電流限制分別爲650ma和450ma

Bmt_main.c是關於電池和充電器的驅動文件。

在文件Auxmain.c文件AUX_task_main函數中

       case MSG_ID_READ_ALL_ADC_CHANNEL_REQ:

            adc_measure_count=0;

            vbat_value = 0;

            aux_read_adc_channel(vbat_adc_logic_id);

            visense_value = 0;

            aux_read_adc_channel(visense_adc_logic_id);

            vcharger_value = 0;

            aux_read_adc_channel(vcharger_adc_logic_id);

            vbattemp_value = 0;

            aux_read_adc_channel(vbattemp_adc_logic_id);

            vaux_value = 0;

            aux_read_adc_channel(vaux_adc_logic_id);

            break;

部分是開機後進入工程模式下讀取電源相關ADC值部分代碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章