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值部分代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值