如何测量电池电量?

如何测量电池的当前电量?

项目背景:

本人在做项目的时候需要对使用到的锂电池电量进行监控,出于时间考虑,这里我采用的思路是使用原装充电器对其进行充电,而不是自己研发充电器。

这里采用一个电量测量模块(例如库仑计)在外部对电池的电量进行监控,当电量低于预警值时,自动开始充电,而当电量高于预警值时,自动断电。这里的自动充电和断电是指打开和关闭充电器的动作。如下图所示:
在这里插入图片描述

项目方案

在确定了如何来实现电池的自动充电方案以后,这里还需要做的就是如何测量电池的电量,经过查阅资料发现,测量电池的当前剩余容量一般有两种方法:

1、通过测量电池的电压来估算当前电量
电池在放电过程中,其电压会随着电池电量的降低而逐渐降低,因此这里可以通过测量当前电池电压来估算电池的电量。在这里插入图片描述
根据上面的放电曲线可以看出,电池电压是随着电池电量的减少而逐渐降低的,但是这个关系并不是成比例的。也就是说电量减少50%时,电压并没有减半。因此要想根据电压来估算当前的电池电量,必须知道你所使用的电池的放电曲线。在有了放电曲线以后,可以提前将该曲线通过一个二维数组存储起来,当每次测得电池电压的时候,就可以对应着这个曲线去查表(查二维数组),然后便可以得到当前的电池电量情况。

即便如此,我们测得的电池电量还是和实际情况有较大的差异。因为在实际使用中,我们的电流大小一般是变化的,因此我们这里使用电压来估算电量,一定是在对电池电量不敏感的情况下方可使用,否则会产生较大的误差。

2、使用库仑计来测量电量
要想精确的得到电池当前还剩多少的电量,我们可以使用库仑计来测量。首先谈谈库仑计的工作原理:
举个例子:
当你在驾车时,如果想知道当前时速是多少,那么我们可以通过码表得知,如果想知道我们已经跑了多远了,那么可以通过里程表得知。那么里程表是如何得到我们所跑过的路有多长呢?有两种方式:一是直接通过编码器测量轮子所转过的圈数,然后乘以轮子的周长便可以知道我们实际的行驶里程。还有没有其他方式呢?当然有,我们知道,当车子匀速行驶的时候,里程=速度*时间,通过这个公式便可以通过当前的速度来得知我们的行驶里程。不过这里不是简单的速度乘以时间,而是对速度进行积分来得到里程。

那么对于库仑计也是类似的,我们可以通过测量一个采样电阻两端的电压,从而得到流经采样电阻的电流(这里的电流就类似于车子的当前时速),然后对电流做积分,就可以得到我们截止目前为止,所消耗的总的电荷量(也就是电量)。然后再通过剩余的电量除以额定容量,就可以得到当前电量的百分比,这种方式来测量电池的电量比较准确。

但是在使用的时候发现一个问题,使用库仑计来测量当前剩余电量时,是不能直接得到电池电量的!要使用库仑计来准确测量电池的电量,那么必须是在电池满电量时,库仑计就开始工作,然后随着电池的使用,库仑计一直在对流经的电流进行积分,从而得到当前已经消耗了多少电荷量。换句话说,库仑计测量的是电池电量的消耗量,是时间上累积的过程,而不是电池的剩余电量

那么就有人要问了,那我们生活中的电池充电(手机、电动车、充电宝之类的)是如何测量当前剩余电量的呢?首先这一类的应用和我的项目背景是有差异的,我的项目是利用现成的充电器来进行充电,而使用外部模块来测量电量,然后再外部通过控制开关的形式来开启和关断充电器的电源。而对于前面说的这些电池充电,其库仑计是和电池做成一体的,因此库仑计从始至终都是在工作的,其内部的数据也不会丢失,放电的时候,可以记录消耗了多少的电荷量,同样,在充电时,也可以记录增加了多少电荷量,如下面的原理图,左侧是充电过程,右侧是放电过程。而在我的项目中,充电过程是没有流经库仑计的(购买的锂电池充放电接口是分开的),因此也就不知道流进电池的电荷量有多少。因此这种情况下是不能使用库仑计来测量当前电量的!!!
在这里插入图片描述
本项目中有使用到库仑计,因此选择了一款测量范围高达60V的库仑计,由于该芯片的资料较少,因此这里将其datasheet翻译了过来,以供大家参考。

LTC2944库仑计芯片使用说明

说明:
本人在做项目时需要用到电池电量管理的功能,由于没有找到现成的电源管理模块,查找到ADI半导体公司的LTC2944库仑计芯片满足我的使用要求,但是网上资料甚少,只有说明书,因此这里将原英文数据手册翻译过来,以方便使用,这里将该说明书开源,以方便有需要的小伙伴。

下载链接:LTC库仑计芯片使用说明书

这里对该芯片的使用做以下几点说明:

1、该芯片可测量的最高电池电压为60V,通过IIC总线接口与主控板进行通信。

2、该芯片的使用相对来说较为方便,外围电路只需要一颗采样电阻,加几颗普通电阻和电容即可。

3、该芯片的使用主要是对于采样电阻和预分频系数进行选择,然后再通过IIC总线对其内部寄存器的数据进行读取即可。

4、由于我在前期对于库仑计中的 qLSB有些许疑问,因此在这里记录下来。

5、手册中的qLSB是指能够测量的最小单位的电荷量,也就是16位寄存器的最低位所表示的电荷量(即分辨率),因此通过qLSB可以知道,所能测得的最大电池容量为65535*qLSB。
这里注意一下,qLSB的值是通过采样电阻和预分频系数M计算出来的,即:
在这里插入图片描述
因此在实际项目中,不同的电池容量,不同的电流大小,所选取的采样电阻和预分频系数都是不一样的。

6、对于预分频系数的选择,可以直接使用说明书中的图表3进行选择,然后再反带回去计算采样电阻值。电阻值通过公式计算出来的是可选的最大值,准确来说是最佳值。因为电阻值越大,那么测量精度越高,但是有可能会使得16位寄存器溢出,如果电阻值太小,那么测量精度越低,可能会使得16位寄存器的利用率较低(即只使用了寄存器的低几位)。

7、源代码很简单,这里可以参考另外一篇博客:LTC2941库仑计的驱动
因为LTC2941库仑计和LTC2944的使用方法几乎是一致的,连寄存器的地址都一样,因此该博客是一个很好的参考,至于该博客汇总提到的IIC驱动有问题,可以自己借鉴正点原子的IIC驱动试验源代码进行修改。

若有不对的地方,欢迎大家指正交流。

### 实现电池电量检测 对于8086架构下的电池电量检测,主要涉及硬件接口设计和软件编程两方面。由于8086微处理器本身并不具备直接处理模拟信号的能力,因此需要借助外部ADC(模数转换器)来完成电压采样工作。 #### 硬件连接方案 为了实现电池电量监测,在硬件层面需构建如下结构: - **电源适配**:确保待测电池能够稳定接入系统,并通过分压电阻网络调整至适合ADC输入范围内的电压值[^2]。 - **ADC选型与配置**:选用具有高精度特性的独立式ADC芯片,如ADS7804等型号,该类器件可通过并行总线或SPI/IIC串行通信协议同8086相连。考虑到8086的数据/地址总线特性,建议优先考虑并口方式简化连线复杂度。 ```assembly MOV DX, 3FCH ; 假设此处为ADC数据寄存器基址 IN AL, DX ; 读取来自ADC的数值到AL寄存器中 ``` 上述汇编指令片段展示了从指定I/O端口中获取由ADC转化后的数字量表示形式的过程。 #### 软件算法逻辑 针对所采集得到的数据点,可运用特定公式将其映射成实际物理意义下的剩余容量百分比或其他直观表达单位。例如,当已知满电状态下对应的最大输出电压Umax及时刻t时对应的实时测量结果Ut,则两者间存在简单比例关系可用于粗略估计当前SOC(State Of Charge): \[ SOC(\%)=\frac{U_t}{U_{\text {max}}} \times 100 \% \] 更精确的方法则依赖于预先建立好的开路电压(OCV)-荷电状态(SOC)对照表来进行插值查找操作[^3]。 另外值得注意的是,除了基本的功能之外,还应当加入必要的异常情况判断机制以保障整个系统的可靠性运行;比如设置合理的上下限阈值触发报警提示或是自动切断负载等功能。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值