找回密码
 注册
关于网站域名变更的通知
查看: 677|回复: 1
打印 上一主题 下一主题

 关于充电器电气规格的差异

[复制链接]
  • TA的每日心情
    开心
    2019-11-19 15:19
  • 签到天数: 1 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2019-6-28 07:00 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

    您需要 登录 才可以下载或查看,没有帐号?注册

    x

    关于充电器电气规格的差异

    1)充电流程介绍:当充电器插入时,亦即为PMIC充电模块提供了Vcharge电压,这时会产生一个充电中断信号到CPU,通知CPU现在已经进入充电状态。CPU开始启动如下模块:
    1,ADC采样,主要是采集Vchrg,Vbat及从MOSFET漏极输出的电压,可以算出充电电压和充电电流;
    2,发消息给MMI层,让它显示充电状态及一些采样数据;
    3,检测电池电压有没有超过保护电压及电池连接是否连接正确,如果有问题即可通过CHRCTRL切断充电电路;
    4,平时显示“充电器没有连接”警告,是因为PMIC的BATDET脚和MOSFET没有打开,从而没有充电电流引起的。
    2)充电状态转换介绍:电池的电压只影响充电状态(比如是预充还是恒流充电),如果电池电压较低,只是预充的时间稍长一些,最多一两个小时应该可以完成充电!一般电池都有自保护,不会把电放到0V的!我做过试验把电池放到2.5V时,在往下放电已经很难了,负载刚接上时还是可以有电流放出,但很快就停止放电了!所以如果电池是一块合格的电池不应该会出现是0V的情况!
            充电分三个过程:预充电、恒流充电、恒压充电0 n  O$ Y8 I. F8 }5 S# h2 c
    1,当Vbat<3.3V  属于预充阶段,处于预充电状态时,以150mA 电流涓流充电。PMIC不能提供Vcore、Vdd等电压,CPU处于关机状态,这时CPU是不工作的!
    2,当3.3V<bat<4.2V  PMIC的LDO开始输出电压,从而cpu开始工作,这是进入恒流充电阶段,以大概600mA 电流快速充电。
    3,Vbat>4.2V 进入恒压充电阶段,这个阶段电流逐渐变小,电压维持不变!当电流减小到接近为0时,CPU发出控制信号这时停止充电!
             以状态机的方框图说明如下:
                                             
    3)一个普通的充电器电路如下:
                            
    一个普通的USB充电图:
                                          
    如上,VBUS是USB供电;VCDT是通过分压电阻测试充电电压的测试点;CHR_LDO跟VDRV共同完成开关切换功能,实现对电池的开关充电(充9S停1S);IBENBE跟BATSNS完成端电压除以RSENSE测得充电电流;BAT_ON提供电池电压测试。
    4)LED与充电状态的配合实例:
          开机后,插入USB充电时显示橙色灯,拔掉USB不充电时灭灯,充满电后显示绿灯。充电时,系统在一个线程里面循环检测电量,当电量满置绿灯。需要注意的是,显示绿灯后,就禁止充电了以防止过充。所以在电量变满后,就应该SetCharger(off),但此时有个矛盾:充电开橙色灯的操作在SetCharger(on)中,灭灯的操作在SetCharger(off)中,这样会造成一个BUG:一旦电量满后,关闭充电功能时也会灭灯,这样就搞的橙色灯闪了下就灭了,显然这不是我要的效果。
          我要的效果是变绿后,除非我拔掉USB线,才会灭灯。所以需要在电满时加标志A,在SetCharger(off)中加判断语句A,跳过灭灯的处理而仅仅关掉充电,同时打开另一个标志B。同时在USB插拔的操作中处理B,表示当灯变绿时,优先处理B,在B后面添加灭灯语句,仅仅处理这一块就可以了。
    5)关于标准USB充电器和非标准USB充电器,是跟USB的插座构造有关的。
                                     
    6)关于手机充电器的分类
           通常情况下,程序中一般有四种充电器设定,分别是:USB HOST,CHARGING HOST,STANDARD CHARGER,NON-STANDARD CHARGER。
    如上:USB HOST,CHARGING HOST的差别在于左图,两者用的都是PC的USB口,其中USB HOST居多。STANDARD CHARGER,NON-STANDARD CHARGER差别在于
    前者的DP跟DM有短接,后者没有。所以通过对DP/DM的判断,就可以分辨出充电器类别。
    7)关于充电器电气规格的差异
            最近碰到一个奇怪的现象。新款手机用5V1A的充电器可以充,用5V500MA的充电器是充不进去电,用PC的USB却是一直可以充。经过打印充电信息的trace发现,是由充电电流的差异引起。AP程序中对充电器的电压下限是4.4V,如果判断充电器电压小于这个值,则AP会自己关掉充电模块。那为什么1A的充电器可以而500MA的充电器不行呢?可以假设前者的内阻比后者的内阻小,那么暂不管真实的充电电流是多少,前者自身分配的压降肯定小于后者自身分配的压降,所以后者最终的充电器供给电压会更低。
            以程序中默认的800MA充电时,5V500MA的充电器会被拉低至3.8V,所以AP会认为充电器不正常就关掉自身的充电模块。但是如果是5V1A时,由于充电器内阻较小,就算供电端被拉低也不会低于4.4V,所以它仍然是可以工作的(测得实际充电电流640MA)。
           想让手机兼容500MA的充电器,此时需要做个处理:在判断充电器电压小于4.4V时不返回错误,同时将充电电流设定成400MA(对于同一个充电器,充电电流越小,充电器自身压降更小,供给更大),让它仍然可以充电只不过充的会慢点。此时的程序段如下:
    A,设置一个电流改变标志,默认为FALSE。
    static BOOL  CurrentChangeFlag = FALSE;                  
    B,在设置电流的地方判断该标志,注意:该电流设定是过个时间间隔就循环执行。
    if(CurrentChangeFlag == TRUE)
      o  @; J2 a! K3 J" h6 ~        g_temp_CC_value = Cust_CC_400MA;                              //如果改变,就以400MA充电
    7 Q. t" g: A" p! y& o4 jelse
    9 P8 U! D" g8 k& N        g_temp_CC_value = AC_CHARGER_CURRENT;             //如果不改变,就以默认电流800MA充电0 s" p  A. b& ^# W
    C,循环检测充电器电压,并改变电流的程序段:
    if (BMT_status.charger_vol <= V_CHARGER_MIN )              //充电器电压小于4.4V
    3 a# @. O* {0 l4 |, u5 R, ~2 z; R {
    7 d( x+ N: X& g$ ]1 Q1 p  P, L3 Z          printf("[BATTERY]Charger under voltage!! CurrentChangeFlag=%d\r\n",CurrentChangeFlag);         
    * x4 t8 L- D7 L( u2 U& K          if(CurrentChangeFlag == TRUE)
    3 T( i+ i0 _. K) ], ]( A! N8 J1 V          {. t4 ~( j4 e7 `! t2 ]. i) v/ C: {
                      CurrentChangeFlag = FALSE;: l* |$ s  C; w! {- f5 Y
                      leds_battery_no_charging(); //zhangcheng5 s. F0 i" X6 S
                      BMT_status.bat_charging_state = CHR_ERROR;
    : z8 A, l( a2 U                  return PMU_STATUS_FAIL;  
    / ]# n% a; a7 X# R5 @- u          }1 c) g; [+ j1 X* x# [3 T8 ~
              CurrentChangeFlag = TRUE;  ( W+ u4 Z2 P, `& J: g# w: ^2 i
    }
    以上的逻辑是:当第一次检测电流时,充电器默认以800MA充电,此时充电器被拉低。之后进入该条件,接着执行CurrentChangeFlag = TRUE。在上述B中完成设定电流为400MA,如果设定完之后充电器正常的话,就不会再进入这个判断了,充电器持续充电;如果设定400MA之后还是会进入该判断,说明充电器不合格,此时要关掉充电功能,所以执行返回电失败的那段。注意:如果此时客户不管充电电压正确与否,仍然要求继续充电,只需要将if(CurrentChangeFlag == TRUE) 程序段屏蔽掉就行。
    8)电池功能测试中的一些技巧
            A, 对于数字电源用数字电源模拟电池,通过其电流值可以知道手机的工作状态,比如电流值为正就是手机耗电的多少;插入外部充电器之后,如果电流值为负,则是手机正在充电。另一方面,对于用数字电源模拟充电器的,通过其电流值就可以知道供给外部的充电电流是多少,如果读数很小说明没有充电。
            B,对于电池的温控脚,一般是要接的。如果需要外接温控脚,记住一定要跟电源公地。单独的一个温控脚是不会起作用的。
            C,电池的快速放电。很多时候我们需要测试电池低电压时的状况,得到电池低电压是比较缓慢的一个过程。有个好方法就是利用数字电源,电压设置成3V,电流设置成800MA,然后把电源跟电池连接,即可实现电池的快速放电。
            D,电池的充电。当我们在没有手机的情况下要对一块电池进行充电,可以用数字电源完成这个功能。设置电源是4.2V,电流要限流在800MA以内,接上对应的电极就可以了,不需要接温控脚。需要注意的是:一开始的充电电流会很大(提示LIMITED),如果不限流会更大,这样会影响电池寿命及安全性。随着电池电压慢慢增高,电流会慢慢变小,直到充满时的0ma左右。最后OFF掉电源,发现电压显示跟电压源之前设定的一样,说明已经充满。
    9)关机充电时低电压警告的状态图
                                             
    关于电池低电压状况的一个说明:很多时候手机因为低电压关机后,只要没有取出电池,手机仍然在消耗电池的电量,这个很容易理解就像接了个未耗电的电阻。这会造成一个现象,电池电量会持续降低,所以再充电时需要冲入一段时间,才会进入正常的充电提示和LED报警提示,之前是不会有任何动作的。
    10)full charging的LOGO显示差别
             手机在使用中会碰到这种情况:手机充电画面是动态的进度条,然后到充满一直显示满进度条,结论就是对于满电画面始终可以用同一幅图片;如果动态进度条的满电显示是带闪电标识,真正充满的满电是不带闪电标识,那么在根据电量进行show图片显示时,是要区分100%电量是从累加得到的还是真正的电量充满?所以,下面的程序段完成该功能。
    static unsigned int crap = 0;         //一个区别标志
    if(capacity == 0)                              //5个图片,分四个档:100/4=25
    & I6 {4 O# ?) J* T  m- P! C& Q      show_logo(1);
    * @2 E. S- p! q; u3 r, Q8 y, a8 Z else if(capacity == 25)" w) J5 g/ E  A8 C
          show_logo(2);5 q+ k4 }; X6 s( f" E3 ]% v
    else if(capacity == 50)& l8 P' e) c; O0 H
          show_logo(3);
    7 A, [' i: ^# i& k9 c7 j else if(capacity == 75)
    3 F0 y# g9 v/ Q9 z) ~ {
    ) H" ^: q# D4 T( M7 q9 X5 w       show_logo(4);                         //如果是累加得到100,必然经过该步,置标志/ }$ }4 n% X5 V! X4 X& O
           crap = 1;' {9 d( `, `# E
    }
      G  N2 Q: H5 \- Q6 ^; Z+ p else if(capacity == 100). L  G# T/ \2 a$ g/ c) ^
    {
    ; N9 \1 z5 i4 i# {) `! z$ _        if(crap == 0)                            //如果是真正的满电,直接显示不带闪电标识的满进度条画面
    / V8 W* H5 v7 w$ W        {
    : _. i& j. j; J6 w! G; G/ X9 d, w                show_logo(8);% }2 ~+ f) `: {9 v# s) k
            }
    ( J. _4 S& @; J4 q, ?2 E* O        else if(crap == 1)             //如果是累加得到的,显示带闪电表示的满进度条画面
    2 M8 f; [2 @7 _        {
    1 L/ z7 H+ ]. c' T                show_logo(5);' `4 L$ ~  [9 |$ E' l3 ^1 k  j
                    crap = 0;                    //清标志$ x+ a+ A# Q+ R2 w7 s! S  ]- ^
            }- `7 p2 |0 E8 W  q9 ~; k; U' r7 _: F
    }7 B6 h0 B8 M/ E  h; j, D
    mt65xx_disp_update();        //刷屏
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-7-23 03:29 , Processed in 0.125000 second(s), 27 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表