小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

手機充電原理分析及問題總結(jié)

 寫意人生 2016-02-24

(1)充電流程介紹:當充電器插入時,亦即為PMIC充電模塊提供了Vcharge電壓,這時會產(chǎn)生一個充電中斷信號到CPU,通知CPU現(xiàn)在已經(jīng)進入充電狀態(tài)。CPU開始啟動如下模塊:

1,ADC采樣,主要是采集Vchrg,Vbat及從MOSFET漏極輸出的電壓,可以算出充電電壓和充電電流;

2,發(fā)消息給MMI層,讓它顯示充電狀態(tài)及一些采樣數(shù)據(jù);

3,檢測電池電壓有沒有超過保護電壓及電池連接是否連接正確,如果有問題即可通過CHRCTRL切斷充電電路;

4,平時顯示“充電器沒有連接”警告,是因為PMIC的BATDET腳和MOSFET沒有打開,從而沒有充電電流引起的。

(2)充電狀態(tài)轉(zhuǎn)換介紹:電池的電壓只影響充電狀態(tài)(比如是預充還是恒流充電),如果電池電壓較低,只是預充的時間稍長一些,最多一兩個小時應該可以完成充電!一般電池都有自保護,不會把電放到0V的!我做過試驗把電池放到2.5V時,在往下放電已經(jīng)很難了,負載剛接上時還是可以有電流放出,但很快就停止放電了!所以如果電池是一塊合格的電池不應該會出現(xiàn)是0V的情況!

        充電分三個過程:預充電、恒流充電、恒壓充電
1,當Vbat<3.3V  屬于預充階段,處于預充電狀態(tài)時,以150mA 電流涓流充電。PMIC不能提供Vcore、Vdd等電壓,CPU處于關機狀態(tài),這時CPU是不工作的!

2,當3.3V<bat<4.2V  PMIC的LDO開始輸出電壓,從而cpu開始工作,這是進入恒流充電階段,以大概600mA 電流快速充電。

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

         以狀態(tài)機的方框圖說明如下:

                                        

(3)一個普通的充電器電路如下:

                        

一個普通的USB充電圖:

                                     

如上,VBUS是USB供電;VCDT是通過分壓電阻測試充電電壓的測試點;CHR_LDO跟VDRV共同完成開關切換功能,實現(xiàn)對電池的開關充電(充9S停1S);IBENBE跟BATSNS完成端電壓除以RSENSE測得充電電流;BAT_ON提供電池電壓測試。

(4)LED與充電狀態(tài)的配合實例:

      開機后,插入USB充電時顯示橙色燈,拔掉USB不充電時滅燈,充滿電后顯示綠燈。充電時,系統(tǒng)在一個線程里面循環(huán)檢測電量,當電量滿置綠燈。需要注意的是,顯示綠燈后,就禁止充電了以防止過充。所以在電量變滿后,就應該SetCharger(off),但此時有個矛盾:充電開橙色燈的操作在SetCharger(on)中,滅燈的操作在SetCharger(off)中,這樣會造成一個BUG:一旦電量滿后,關閉充電功能時也會滅燈,這樣就搞的橙色燈閃了下就滅了,顯然這不是我要的效果。

      我要的效果是變綠后,除非我拔掉USB線,才會滅燈。所以需要在電滿時加標志A,在SetCharger(off)中加判斷語句A,跳過滅燈的處理而僅僅關掉充電,同時打開另一個標志B。同時在USB插拔的操作中處理B,表示當燈變綠時,優(yōu)先處理B,在B后面添加滅燈語句,僅僅處理這一塊就可以了。

(5)關于標準USB充電器和非標準USB充電器,是跟USB的插座構(gòu)造有關的。

                                

(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)關于充電器電氣規(guī)格的差異

        最近碰到一個奇怪的現(xiàn)象。新款手機用5V1A的充電器可以充,用5V500MA的充電器是充不進去電,用PC的USB卻是一直可以充。經(jīng)過打印充電信息的trace發(fā)現(xiàn),是由充電電流的差異引起。AP程序中對充電器的電壓下限是4.4V,如果判斷充電器電壓小于這個值,則AP會自己關掉充電模塊。那為什么1A的充電器可以而500MA的充電器不行呢?可以假設前者的內(nèi)阻比后者的內(nèi)阻小,那么暫不管真實的充電電流是多少,前者自身分配的壓降肯定小于后者自身分配的壓降,所以后者最終的充電器供給電壓會更低。

        以程序中默認的800MA充電時,5V500MA的充電器會被拉低至3.8V,所以AP會認為充電器不正常就關掉自身的充電模塊。但是如果是5V1A時,由于充電器內(nèi)阻較小,就算供電端被拉低也不會低于4.4V,所以它仍然是可以工作的(測得實際充電電流640MA)。

       想讓手機兼容500MA的充電器,此時需要做個處理:在判斷充電器電壓小于4.4V時不返回錯誤,同時將充電電流設定成400MA(對于同一個充電器,充電電流越小,充電器自身壓降更小,供給更大),讓它仍然可以充電只不過充的會慢點。此時的程序段如下:

A,設置一個電流改變標志,默認為FALSE。

static BOOL  CurrentChangeFlag = FALSE;                   

B,在設置電流的地方判斷該標志,注意:該電流設定是過個時間間隔就循環(huán)執(zhí)行。

if(CurrentChangeFlag == TRUE)
        g_temp_CC_value = Cust_CC_400MA;                              //如果改變,就以400MA充電
else
        g_temp_CC_value = AC_CHARGER_CURRENT;             //如果不改變,就以默認電流800MA充電
C,循環(huán)檢測充電器電壓,并改變電流的程序段:

if (BMT_status.charger_vol <= V_CHARGER_MIN )              //充電器電壓小于4.4V
 {
          printf("[BATTERY]Charger under voltage!! CurrentChangeFlag=%d\r\n",CurrentChangeFlag);         
          if(CurrentChangeFlag == TRUE) 
          {
                  CurrentChangeFlag = FALSE;
                  leds_battery_no_charging(); //zhangcheng
                  BMT_status.bat_charging_state = CHR_ERROR;
                  return PMU_STATUS_FAIL; 
          }
          CurrentChangeFlag = TRUE;  
}

以上的邏輯是:當?shù)谝淮螜z測電流時,充電器默認以800MA充電,此時充電器被拉低。之后進入該條件,接著執(zhí)行CurrentChangeFlag = TRUE。在上述B中完成設定電流為400MA,如果設定完之后充電器正常的話,就不會再進入這個判斷了,充電器持續(xù)充電;如果設定400MA之后還是會進入該判斷,說明充電器不合格,此時要關掉充電功能,所以執(zhí)行返回電失敗的那段。注意:如果此時客戶不管充電電壓正確與否,仍然要求繼續(xù)充電,只需要將if(CurrentChangeFlag == TRUE) 程序段屏蔽掉就行。

(8)電池功能測試中的一些技巧

        A, 對于數(shù)字電源用數(shù)字電源模擬電池,通過其電流值可以知道手機的工作狀態(tài),比如電流值為正就是手機耗電的多少;插入外部充電器之后,如果電流值為負,則是手機正在充電。另一方面,對于用數(shù)字電源模擬充電器的,通過其電流值就可以知道供給外部的充電電流是多少,如果讀數(shù)很小說明沒有充電。

        B,對于電池的溫控腳,一般是要接的。如果需要外接溫控腳,記住一定要跟電源公地。單獨的一個溫控腳是不會起作用的。

        C,電池的快速放電。很多時候我們需要測試電池低電壓時的狀況,得到電池低電壓是比較緩慢的一個過程。有個好方法就是利用數(shù)字電源,電壓設置成3V,電流設置成800MA,然后把電源跟電池連接,即可實現(xiàn)電池的快速放電。

        D,電池的充電。當我們在沒有手機的情況下要對一塊電池進行充電,可以用數(shù)字電源完成這個功能。設置電源是4.2V,電流要限流在800MA以內(nèi),接上對應的電極就可以了,不需要接溫控腳。需要注意的是:一開始的充電電流會很大(提示LIMITED),如果不限流會更大,這樣會影響電池壽命及安全性。隨著電池電壓慢慢增高,電流會慢慢變小,直到充滿時的0ma左右。最后OFF掉電源,發(fā)現(xiàn)電壓顯示跟電壓源之前設定的一樣,說明已經(jīng)充滿。

(9)關機充電時低電壓警告的狀態(tài)圖

                                        

關于電池低電壓狀況的一個說明:很多時候手機因為低電壓關機后,只要沒有取出電池,手機仍然在消耗電池的電量,這個很容易理解就像接了個未耗電的電阻。這會造成一個現(xiàn)象,電池電量會持續(xù)降低,所以再充電時需要沖入一段時間,才會進入正常的充電提示和LED報警提示,之前是不會有任何動作的。

(10)full charging的LOGO顯示差別

         手機在使用中會碰到這種情況:手機充電畫面是動態(tài)的進度條,然后到充滿一直顯示滿進度條,結(jié)論就是對于滿電畫面始終可以用同一幅圖片;如果動態(tài)進度條的滿電顯示是帶閃電標識,真正充滿的滿電是不帶閃電標識,那么在根據(jù)電量進行show圖片顯示時,是要區(qū)分100%電量是從累加得到的還是真正的電量充滿?所以,下面的程序段完成該功能。

static unsigned int crap = 0;         //一個區(qū)別標志

 if(capacity == 0)                              //5個圖片,分四個檔:100/4=25
      show_logo(1);
 else if(capacity == 25)
      show_logo(2);
 else if(capacity == 50)
      show_logo(3);
 else if(capacity == 75)
 { 
       show_logo(4);                         //如果是累加得到100,必然經(jīng)過該步,置標志
       crap = 1;
 } 
 else if(capacity == 100)
 {
        if(crap == 0)                            //如果是真正的滿電,直接顯示不帶閃電標識的滿進度條畫面
        {
                show_logo(8);
        }
        else if(crap == 1)             //如果是累加得到的,顯示帶閃電表示的滿進度條畫面
        { 
                show_logo(5);
                crap = 0;                    //清標志
        }
 }
 mt65xx_disp_update();        //刷屏

轉(zhuǎn)自:http://blog.csdn.net/zhandoushi1982/article/details/5804951

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多