百分比展示电池电量

百分比展示电池电量

锂电池用途越来越广,但是我们只能采集到的电压数据,如何转换为百分比的电量数据呢,本文提供了一个朴素算法。

平台

硬件: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. 电压到电量转换时加入低通滤波,排除一些干扰
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值