<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          關(guān) 閉

          新聞中心

          EEPW首頁 > 工控自動化 > 設(shè)計應(yīng)用 > 一種準確測量便攜式設(shè)備電池剩余電量的方法

          一種準確測量便攜式設(shè)備電池剩余電量的方法

          作者: 時間:2010-06-23 來源:網(wǎng)絡(luò) 收藏

          一、前言

          使用便攜式電子產(chǎn)品,希望能夠隨時知道的所剩電量,所能持續(xù)的工作時間,并且據(jù)此調(diào)節(jié)相關(guān)應(yīng)用,這無疑將是一個非常方便的事情,尤其適合使用智能手機的商務(wù)人士。電量檢測技術(shù)在筆記本電腦中已經(jīng)屢見不鮮,多數(shù)筆記本電腦都有電源管理的選項,提供不同的電源工作模式以及報警功能。但是在更加小型化的便攜產(chǎn)品市場,這一技術(shù)卻還不多見。

          便攜式產(chǎn)品提供的功能越來越紛繁,用戶日益需要準確地監(jiān)測電池電量,以便靈活管理可用電源,明確顯示剩余工作時間,盡可能延長系統(tǒng)運行的時間。現(xiàn)在大多數(shù)手機采用的電量方法還比較簡單,缺乏精確度。目前主流的檢測方法是簡單電池電壓,估算相對應(yīng)的電池剩余電量??傠娏砍?或5,也就是通常能在手機屏幕上看見的4格或者5格的電量Bar,所以每格的精確度即是25%或者20%,這樣的精度顯然無法滿足高精度要求的應(yīng)用。

          這種電壓估測電量的方法通常如下:一塊電池在放電的時候,電池的電壓會隨著電池電量的流失逐漸地下降。這樣就可以得到一個比較簡單而有效的對應(yīng)關(guān)系,就是電壓對應(yīng)容量。通過電池正常使用(比如100mA放電)的放電曲線,對時間進行4等分,以充電限制電壓為4.2V的鋰電池為例,可以列出這樣一個對應(yīng)關(guān)系,4.20V—100%,3.85V—75%,3.75V—50%,3.60V—25%,3.40V—5%(因為手機不可能完全用光電池的電量,一般低于3.40V 時就可能自動關(guān)機了)。很顯然,這種精度最高只有25%。另外,電池電壓會隨著RFPA的功率發(fā)射發(fā)生突變,通常會變小0.2V-0.3V。如果一味的使用電壓模擬電量方法,就會誤差更大。為了解決電池電壓突然變小的問題,當(dāng)前工程師們的普遍方法是利用軟件算法進行均值濾波,對一段時間內(nèi)的電池電壓進行均值化,如果該時間段的平均電池電壓確實下降了,則預(yù)估電量確實變少了,否則即認為電量并未變化。

          電池電壓模擬剩余電量的方法確實存在著缺陷,而通過庫侖計實時監(jiān)測電池消耗電量而計算剩余電量的方法則非常準確。Fairchild的是這種應(yīng)用的典型器件。它是一顆電流檢測傳感器,專門用于檢測便攜式設(shè)備電池的充電/耗電電流,能將通過精密檢測電阻的電流信號轉(zhuǎn)換為ADC可以檢測到的電壓信號,從而計算一段時間內(nèi)消耗的真實電量。

          二、硬件電路的典型設(shè)計

          為了滿足高精度的電池電量監(jiān)測需求,外加合適的應(yīng)用電路并加上特定的軟件控制算法,就能夠很好的達到要求。如圖1是的典型應(yīng)用框圖。外圍只需要兩個電阻Rsense、Rout即構(gòu)成高精度的放大電路。如圖2是內(nèi)部結(jié)構(gòu)原理示意圖,所以存在Vsense = I_load * Rsense, Vout = 0.01 * Vsense * Rout,由此兩關(guān)系式可以等到I_load=100*Vout/(Rout*Rsense),所以只要用ADC監(jiān)測Vout上的電壓,再除以已知的電阻值Rout和Rsense,就可以得到準確的負載消耗電流,而電流對時間進行積分,MCCC_formula01,即可以達到所消耗的電量準確值。用總電量減去準確的電量消耗值,即可得到準確的剩余電量。充電電路,則同理。

          MCCC01

          圖1 FAN4010的應(yīng)用框圖

          MCCC02

          圖2 FAN4010的內(nèi)部結(jié)構(gòu)原理示意圖

          FAN4010的典型應(yīng)用圖以及Rsense、Rout的選值要求如下。其中圖3為電池的充電電路,圖4為電池的放電電路。

          MCCC03

          圖3 充電部分的參考原理圖

          MCCC04

          圖4 放電部分的參考原理圖

          Rsense(R_sense1/R_sense2)

          這兩個電阻串聯(lián)在充電和放電的路徑上。因此,我們需要一個低阻值的電流采樣電阻。矛盾的是,如果Rsense太低,精度都將丟失。若Rsense選擇的過大,則此電阻上的壓降和功耗都很大。因此,Rsense的選擇應(yīng)該是理想的高精確度和所能允許電壓損失的綜合平衡。雖然FAN4010在Vsense值較低時采樣電阻上的功耗最小,但是一個更大的Rsense值能提供更多的準確性。然而較大的Rsense會產(chǎn)生一個比較大的電壓降,減少了可提供給負載的有效電壓,這在低電壓尤其電池供電的應(yīng)用中會很有麻煩。正因為如此,設(shè)計中要很好地了解預(yù)期的最大允許負載電流和負載供電電壓。為了獲得最大化的精度,建議Rsense的選擇應(yīng)符合以下條件:10mVVsense200mV。

          Rout(R_out1/R_out2)

          接到GND上的Rout這個電阻,是用來產(chǎn)生一個可供ADC檢測到的電壓信號。它的選擇主要取決于兩個參數(shù):I_out(即I_load*Rsense/100)以及ADC的電壓采樣范圍。最大的I_load產(chǎn)生的最大Vout不能超過ADC的最大采樣電壓。為了保證精度最大化,同時又希望最大的Vout能盡量接近ADC的最大采樣量程。

          另外,為了保證FAN4010的最大線性化,Rout的選擇應(yīng)滿足關(guān)系式:MCCC_formula02
          其中Vin為輸入電壓,Iout_fs的值則是表1中的對應(yīng)值,在不同的最大Vsense時,其值不一樣。例如,若最大的Vsense為500mV時,則Iout_fs=5mA。

          Table.1 Iout_FS的選值表
          MCCC_table01

          Layout設(shè)計圖例如圖5,走線的基本原則是:FAN4010盡量靠近充電/放電路徑。

          MCCC05圖5 layout實例

          三、典型的軟件設(shè)計

          電量計算的算法如圖6,相關(guān)說明如下:

          假設(shè)前提:現(xiàn)有兩塊電池,A (總?cè)萘?000mAh左右,不確定),B(總?cè)萘?500mAh左右,不確定),此2電池均可能使用在手機P上。

          插入電池(開機)→→是否電池校準(默認否)→→否→→調(diào)用電池容量曲線a(默認)(若使用電池B,則修改為使用電池容量曲線b)→→通過電池端電池Vcc以及監(jiān)測耗電量聯(lián)合評估剩余電量百分比。
          →→是→→若要校準,請保證該電池已經(jīng)充滿電→→選擇校準曲線,a 還是 b? →→記錄最高端電池Vcc-h,默認此時電池電量百分比100%→→按每一可計算時間段,分別監(jiān)測耗電量 MCCC_formula03,以及電池端電壓→→一直使用到電池沒電,自動關(guān)機,記錄此狀態(tài)電壓Vcc-l以及默認此時電池百分比0%,計算總的電量損耗Q,此Q即為以后容量曲線的total Q。

          MCCC06圖6 軟件流程圖



          關(guān)鍵詞: 測量 FAN4010 電池

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();