百分比展示電池電量

百分比展示電池電量

鋰電池用途越來越廣,但是我們只能採集到的電壓數據,如何轉換爲百分比的電量數據呢,本文提供了一個樸素算法。

平臺

硬件:Jetson-nano
軟件:Ubuntu18.04
傳感器:基於電阻分壓原理的電壓傳感器, 產品鏈接 (https://detail.tmall.com/item.htm?id=520840133787)[https://detail.tmall.com/item.htm?id=520840133787]

採樣
  1. 只運行系統,每隔十秒採集一次電壓,假設此過程爲均勻放電
  2. 從充滿電開始運行,到電量過低停機,電壓採樣區間爲 [8.5, 12.5]
  3. 由於 9.5-8.5 此區間只相隔 10 分鐘,因此選擇 9.6V 爲 1% 電量
百分比模型
  1. 總放電時間約爲 10 個小時
  2. 設定第 1 小時開始時的電壓(12.5V)對應 100% 電量
  3. 設定第 10 小時結尾的電壓(9.6V)對應 1% 的電量
  4. 第 5 小時結尾的電壓爲 50% 電量
  5. 以此類推,以放電時間的進度,作爲電量的百分比,以此對應採樣的電壓值
  6. 電壓取值精度爲小數點後 1 位,一共 30 個不同的採樣值,可以統計出不同採樣值對應的採樣時間
  7. 本文選取了最大的採樣時間(也就是第一次出現的採樣時間)作爲該電壓值對應的電池電量百分比
模擬
  1. 使用 Matlab 查看電壓與放電進度的關係
close all;clear;clc
% 載入數據
x = load('data/battery.txt');
x = x(1:3850)';
% 建立比例關係
y = [1:-1/3850:1/3850];
% 統計
data = [10 * (x - 9.5); y]';
data_sum = zeros(30, 1);
data_count = zeros(30, 1);
data_min = zeros(30, 1);
for i = 1:size(x,2)
    idx = round(data(i,1));
    data_sum(idx) = data_sum(idx) + data(i,2);
    data_max(idx) = max([data_min(idx) data(i,2)])
    data_count(idx) = data_count(idx) + 1;
end
data_avg = data_sum ./ data_count;
% 按平均值計算
pct = round(100*data_avg)
% 按最大值計算 
pct_max = round(100*data_max)
% 擬合效果
figure(1)
plot(x, y)
figure(2)
m = [9.6:0.1:12.5];
plot(m, pct_max)
  1. 採樣圖在這裏插入圖片描述

  2. 選取最大值後的映射圖
    在這裏插入圖片描述

  3. 計算結果

[9.6-10.5]:  1,  1,  2,  4,  8,  11, 16, 19,  27,  34, 
[10.6-11.5]: 45, 52, 55, 58, 62, 64, 68, 71,  76,  78, 
[11.6-12.5]: 81, 84, 87, 92, 93, 98, 99, 100, 100, 100
  1. 電壓到電量轉換
# 電池電壓對應的電量百分比,對應: 9.6V-12.5V
battery_pct = (1, 1, 2, 4, 8, 11, 16, 19, 27, 34, 45, 52, 55, 58, 62, 64, 68, 71,
               76, 78, 81, 84, 87, 92, 93, 98, 99, 100, 100, 100)
last_bat = 125
while alive:
    # 電壓轉換爲百分比
    bat = round(get_battery())
    if bat == 0:
        continue
    if bat < 96:
        bat = 96
    elif bat > 125:
        bat = 125
    if last_bat + 5> bat > last_bat:
        bat = last_bat
    else:
        last_bat = bat
    pct = battery_pct[bat - 96]
    batstr = '%d%%' % pct
    time.sleep(10)
後續優化方案
  1. 提高採樣精度和採樣頻率,可以使電量顯示更準確更流暢
  2. 統計時排除異常值
  3. 電壓到電量轉換時加入低通濾波,排除一些干擾
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章