本發明涉及電池引數採集技術領域,尤其涉及一種電池電量採集方法。
背景技術:
目前,在使用電池的產品上,通常使用電量計來獲取電池電量的精確數值。而由於電量計的成本較高,還有一些低成本的產品上,還會通過採集電池的電壓來獲取電量的形式,比如,在使用鋰電池的嵌入式移動支付終端上,但是,這種方法,由於是利用經驗直接通過採集到的電壓估計電量,所以,採集到的電池電量的數值通常都不準確,從而影響產品的精確使用。
技術實現要素:
本發明的目的在於提供一種電池電量採集方法,從而解決現有技術中存在的前述問題。
為了實現上述目的,本發明採用的技術方案如下:
一種電池電量採集方法,包括如下步驟:
s1,判斷列印裝置是否正在列印,如果否,則定時採集電壓值,否則,結束;
s2,獲取當前採集電壓值,以及與當前採集電壓的採集時間最近的三個電壓值,在該四個電壓值中,獲取相鄰兩次電壓值的差值;
s3,將得到的所有差值按權重相加,得出校正值;
s4,判斷所述校正值是否大於零,如果是,則用所述當前採集電壓值減去所述校正值,得到當前電壓值;若所述校正值是負數,則用所述當前採集電壓值加上所述校正值的絕對值,得到當前電壓值;
s5,利用電池的充放電曲在線電壓和電量之間的關係,根據所述當前電壓值獲取電池電量。
優選地,s1之前,還包括步驟,檢測電池、外電的在位情況,如果電池在位,則執行s1,如果外電在位,則切斷外電後再執行s1。
優選地,所述檢測電池、外電的在位情況,按照如下方法進行實施:
當電池或外電在位時,電路上對應的io口為高電平,否則為低電平。
優選地,s1中,所述定時採集電壓值,具體為每5秒鐘採集一次電壓值。
優選地,s1中,所述電壓值通過cpu內部的模數轉換器進行採集。
優選地,s3中,所述權重按照如下原則進行設定:電壓採集的時間越接近當前時刻,對應設定越大的權重。
優選地,s5中,所述電池的充放電曲線為廠商提供的電池的充放電曲線,其中,所述充放電曲線中的放電電流與產品正常使用時的電流接近。
優選地,s5中,所述電池的充放電曲線通過如下方法獲取:測試同一型號的多個不同電池的充放電曲線,並取平均值。
本發明的有益效果是:本發明實施例提供的電池電量採集方法,通過限定在非列印時產生的大電流的情況下採集電壓值,並且對電池使用中,電壓的波動範圍進行了處理和限制,所以,得到的電壓值,消除了電流的影響,更加接近實際值,從而通過電壓獲取到的電量更加準確,實現了在無電量計的情況下,也能得到較準確的電池電量的目的。
附圖說明
圖1是本發明實施例提供的電池電量採集方法的流程示意圖。
具體實施方式
為了使本發明的目的、技術方案及優點更加清楚明白,以下結合附圖,對本發明進行進一步詳細說明。應當理解,此處所描述的具體實施方式僅僅用以解釋本發明,並不用於限定本發明。
如圖1所示,本發明實施例提供了一種電池電量採集方法,包括如下步驟:
s1,判斷列印裝置是否正在列印,如果否,則定時採集電壓值,否則,結束;
s2,獲取當前採集電壓值,以及與當前採集電壓的採集時間最近的三個電壓值,在該四個電壓值中,獲取相鄰兩次電壓值的差值;
s3,將得到的所有差值按權重相加,得出校正值;
s4,判斷所述校正值是否大於零,如果是,則用所述當前採集電壓值減去所述校正值,得到當前電壓值;若所述校正值是負數,則用所述當前採集電壓值加上所述校正值的絕對值,得到當前電壓值;
s5,利用電池的充放電曲在線電壓和電量之間的關係,根據所述當前電壓值獲取電池電量。
電池的電壓與電池的輸出電流有關,相同電量情況下,電池在大電流輸出時,電壓值比無電流輸出的情況下低。在移動支付終端列印憑票時,電池電流很大,採集到的電壓值比不列印時的電壓值低很多,使用該電壓值計算得到的電池電量就會有很大誤差,而由於移動支付終端列印憑票的時間一般都很短,所以在移動支付終端列印憑票的過程中,可以不進行電壓採集。因此,本實施例提供的方法中,首先要判斷列印裝置是否正在列印,如果是,則不採集電壓,避免得到的電量值誤差較大,當電流不會對電壓產生較大的影響時,才進行電壓的採集操作,以保證通過電壓得到的電池電量值是準確的。
移動支付終端在正常使用過程中,會產生一定的電流,而電流的存在,就會對電壓產生一定的影響,從而使得電量產生一定的誤差,本實施例中,為了避免該誤差的產生,或者說,為了盡量的減小誤差,使得得到的電量準確,對採集到的電壓進行了校正,使其波動範圍得到限定,具體方法為:
由於電壓的波動多數情況下持續時間極短,而正常情況下,每次採集到的電壓值差別不大,所以結合前三次採集到的電壓值,計算出相鄰兩次電壓值的差值,然後把這些差值按權重值相加,得出乙個校正值,若該校正值是正數,則用當前讀取到的電壓值減去該校正值;若該校正值是負數,則用當前讀取到的電壓值加上該校正值的絕對值,最終得到當前電壓值。例如,當前採集電壓值為v4,與當前採集電壓的採集時間最近的三個電壓值分別依次是v1,v2,v3,則在這四個電壓值中,相鄰兩次電壓值的差值分別是d1=v2-v1,d2=v3-v2,d3=v4-v3,對這些差值分別賦予權重,比如,d3的權重為1/2,d2的權重為1/4,d1的權重為1/8,再按照權重將這些差值相加得到校正值:dt=d3/2+d2/4+d1/8,若dt大於0,說明當前採集到的電壓值v4浮動偏高,所以需要用當前採集到的電壓值v4減去dt,得到當前電壓值,限制其偏高的浮動;反之,說明當前採集到的電壓值v4浮動偏低,則需要用當前採集到的電壓值v4加上dt的絕對值|dt|,得到當前電壓值,限制其偏低的浮動。採用上述方法來限制當前採集到的電壓的波動,使其接近實際值。
重複上述方法,就可以對每次採集到的當前電壓值進行校正。經過上述步驟,採集到當前電壓值,並對其波動範圍進行限制處理後,得到校正後的當前電壓值,由於電池電量與電壓之間存在如下的關係:電量越多,電壓越高,雖然兩者並不是線性關係,但是可以通過電池的充放電曲線,得出電池電量與電壓的關係,根據該關係,就可以通過電壓值得到電量值。
具體的,把採集到的電壓值存到乙個全域性變數中。並且根據電池的充放電曲線,把1%-100%電量對應的電壓值儲存到乙個陣列中。把當前電壓值與該陣列中的值比較,就可以獲得當前電池電量。
所以,採用本發明實施例提供的方法,通過限定在非列印時產生的大電流的情況下採集電壓值,並且對電池使用中,電壓的波動範圍進行了處理和限制,所以,得到的電壓值,消除了電流的影響,更加接近實際值,從而通過電壓獲取到的電量更加準確。
本發明實施例提供的電池電量採集方法,s1之前,還可以包括步驟,檢測電池、外電的在位情況,如果電池在位,則執行s1,如果外電在位,則切斷外電後再執行s1。
由於外接電源會使得讀取到的電壓值偏高,所以,本實施例中,在採集電池電壓之前,首先判斷外電是否在位,如果在位,則先切斷外電,保證只有電池在位時,才開始採集電壓值,從而保證得到的電壓值更加準確。
本實施例中,所述檢測電池、外電的在位情況,按照如下方法進行實施:電池或外電在位時,電路上對應的io口為高電平,否則為低電平。
上述方法中,通過檢測電路中電池、外電對應的io口的高低電平,來判斷電池是否在位。如果電池不在位則結束;否則檢測外電是否在位,如果外電在位,則cpu通過控制io口關閉充電晶元,即可關閉外電。
當接有外電時,由於外電的影響,採集到的電壓有浮高。浮高值與電池的電量有關,電量低時浮高值大,電量高時浮高值小。不同電池浮高值有些區別。所以在接有外電時採集的電壓,難以找到乙個補償值,來修正採集到的電壓。而切斷外電後,浮高值就不存在了,採集到的電壓值就會比較準確。
本實施例中,s1中,所述定時採集電壓值,具體為每5秒鐘採集一次電壓值。
由於為了排除外部電源對採集電池的電壓的影響,在採集電壓時會切斷外部電源,採集結束後再接通外部電源。所以不能頻繁採集電壓(也沒有必要頻繁採集電壓),以免影響充電時間。所以,本實施例中,每5秒鐘採集1次電壓。
本實施例中,s1中,所述電壓值通過cpu內部的模數轉換器進行採集。
模數轉換器有10位精度,能夠滿足需求,從而簡化硬體電路的設計。
本實施例中,s3中,所述權重按照如下原則進行設定:電壓採集的時間越接近當前時刻,對應設定越大的權重。
由於與當前時刻越接近的電壓值對於當前採集電壓值範圍波動的限制越有效,所以設定的權重越大,具體權重值可以根據經驗進行設定。
每次均通過採集前n次電壓值得出當前採集電壓的補償值,可以使得當前採集電壓的波動減小,防止因電流變化或其他因素影響而出現電壓忽高或忽低的現象。
本實施例中,s5中,所述電池的充放電曲線為廠商提供的電池的充放電曲線,其中,所述充放電曲線中的放電電流與產品正常使用時的電流接近。
上述方法中,充放電曲線中的放電電流與產品正常使用時的電流接近,可以保證較小誤差。
本實施例中,s5中,所述電池的充放電曲線通過如下方法獲取:測試同一型號的多個不同電池的充放電曲線,並取平均值。
同一型號的不同電池的充放電曲線會有細小的差別,本實施例中,通過測試同一型號的多個不同電池的充放電曲線,然後取多個曲線的平均值得到的充放電曲線,就可以為該型號的電池共同使用。
通過採用本發明公開的上述技術方案,得到了如下有益的效果:本發明實施例提供的電池電量採集方法,通過限定在非列印時產生的大電流的情況下採集電壓值,並且對電池使用中,電壓的波動範圍進行了處理和限制,所以,得到的電壓值,消除了電流的影響,更加接近實際值,從而通過電壓獲取到的電量更加準確,實現了在無電量計的情況下,也能得到較準確的電池電量的目的。
以上所述僅是本發明的優選實施方式,應當指出,對於本技術領域的普通技術人員來說,在不脫離本發明原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也應視本發明的保護範圍。
ADC 採集電池電量
微控制器內部的多路adc採集之間可能會相互影響,使用的時候需要參考datasheet,在nuc100中,adc7 比較與adc6同時使用時,adc6的取樣就會出問題,採集的電量值一直保持不變。其次,adc採集電路的設計也要注意,電阻 電阻引數的選取要配合微控制器內部的adc結構。通常情況,ad採集到...
c Windows CE讀取電池電量
c windows ce讀取電池電量的實現是如何的呢?讓我們來看看 dllimport coredll.dll publicstaticexternuint getsystempowerstatu 2 refsystem power status ex2 psystempowerstatu 2,in...
iOS開發獲取電池電量
方法一 通過蘋果官方文件裡面uidevice public api來獲取,如下 uidevice currentdevice batterymonitoringenabled yes nsnotificationcenter defaultcenter addobserverforname uide...