怎样使用Arduino测量锂离子电池容量

电子说

1.2w人已加入

描述

步骤1:操作原理

Arduino

Arduino

Arduino

这整个步骤都是理论上的,因此,如果您只是想使其运行,请跳到电路上。

电池的容量通常为以毫安小时(mAh)给出。毫安是电流的单位,小时是时间的单位,当我们乘以它们时,我们会得到电荷。我* T = Q。实际上,电池的容量在Q中给出,它们具有的“可用电荷”量,或者实际上,电池在单个放电循环中可以通过自身的电子数量。

如果我们有一个恒定的电流,我们可以运行该电流直到电池电压低于最小电压,然后乘以电流乘以时间,这样就可以得到近似的容量(Q = I * T)。这是一种简单明了的技术,但它只能提供粗略值,但不能提供可靠准确的值。当我们意识到电流不太可能保持恒定,而是从高位开始,然后随着电池电压下降而急剧下降时,就会出现此问题。

这个难题的解决方案是使用微积分。如果我们对时间上的电流进行积分,则可以找到确切的容量(Q =∫I dt),因为如果绘制电流与时间的关系图,曲线下的面积将代表容量(毫安乘小时表示毫安小时)。问题是,我真的不想做“适当的”集成,所以我想走一条捷径。我使用了一个称为Riemann Sum的东西来进行集成的简单表示。

简而言之,我们可以查看一个图并将其分解成一堆细长矩形,计算每个矩形的面积(宽度乘以高度),然后将所有小区域加在一起。在容量方面,我们使用较短的时间间隔(矩形宽度),然后将每个乘以当前时间(矩形高度),以得出在该时间间隔内消耗的少量容量。我们可以总结所有小容量以找到大容量。

在黎曼和图中(所有垂直线),有时q有点大,有时它有点小。黎曼和的想法是,正误差抵消负误差,并且所有这些都被冲洗得非常接近。

该黎曼求和一直执行到电池电压低于阈值为止,然后停止,这是电池具有的所有可用电荷(不会耗尽电池,超过建议的安全限值)。

现在附带说明一下,如果我们对电池中包含的总能量感兴趣,则需要查看测试中消耗的电功率(这与消耗的电量不同) 。我们肯定可以使用相同的设备对此进行测量,方法是将电压乘以较小的q,然后将所得的较小的e(间隔能量消耗)与运行中的总E(总电池功率)相加。我决定不在此项目的代码中执行此操作,但是如果您感兴趣的话,实现起来并不困难。否则,您可以通过采用mAh额定值并将其乘以标称电池电压3.7来大致估算电池的能量。 (例如,如果我们有一个1000mAh的电池,将其乘以3.7v得到3700mWh)

步骤2:电池电阻

Arduino

Arduino

两个负载的主要原因是能够测量电池电阻。

假设电池是线性电压源,我需要测量的电池电阻是两个数据点:给定负载的电压和电流,然后是不同负载的电压和电流(或多或少电流)。然后我可以看一下电流如何随着电流的变化而变化,这两个变化的商给出了电阻。 (记住,一欧姆是每安培一伏)。

欧姆= -ΔV/ΔI

用于测量电池电阻的方法是收集在将单元置于四种可能状态中的随机负载状态之后(开/关关/开/关开)之后的许多数据点。

在收集了许多电压和电流数据点之后,该程序使用每个数据点相对于电压或电流都不匹配的其他每个数据点来计算并记录电阻。有点像数学上的握手问题。

基于我的简短测试,得出的电阻值在同一块电池中可能相差约10%。所以它不是很好,但它会给你一个粗略的想法。

第3步:电路

Arduino

Arduino

此步骤中的图片显示了如何组装单元测试器。本文讨论了电路设计中的理论。您可以在此页面的底部找到一个fritzing文件。

如果您以前阅读过此说明,则会回想起以前需要将arduino连接到计算机才能读取数据。从测试。这绝对不是理想的,所以当我重建该测试仪时,我添加了一个LCD并询问为什么我第一次没有这样做。您可以在ebay上购买16x2字符LCD,价格约为5美元,包含运费。

实际测试电路包含两个负载和两个mosfet开关,以便于测量电池电阻。如果你对单元电阻不感兴趣,你当然可以用一个mosfet和负载构建电路(代码不会介意)。

这个测试电路使用N沟道mosfet来切换当前。我发现大功率mosfet的最佳来源是计算机电源(不难发现:它们位于大散热器上)。在运行此测试之前,请阅读mosfet的数据表,并确保它们能够处理的最小电流约为1A,除非您使用较低的电流负载。另外,请确保“栅极-源极阈值电压”小于5v。这是mosfet打开所需的电压,我们只能使用arduino给它5v。最后,您可能需要将mosfets放在散热器上。

我们用于测量电流的方法是使用分流电阻器。我们测量电阻两侧的电压以计算电流。欧姆定律表示V = I * R或I = V/R(流经电阻的电流为电阻两端的电压差除以电阻值)。

并联电阻的值应为4左右的任意值。欧姆下降,但对于~1A负载,一个好的经验法则是分流电阻的额定功率应约为电流的四倍,或者最小的《4》电阻。这是为了保持电阻冷却。正如Domints在评论中指出的那样,如果电阻变得非常热,电阻值会改变,并且您的电容读数不再准确。

我在此电路中使用的负载是汽车刹车灯泡(我使用两根灯丝作为两个负载)。在它与分流电阻之间,在测试期间大约有一个放大器被拉动,这恰好适合我想做的事情。 Peukert效应讨论了不同电流负载对电池容量的影响。

请注意:连接A和B需要连接到模拟输入。如果将它们连接到数字引脚,则会通过arduino直接短路当前的锂离子电池。糟糕的时间。

可以在fritzing文件(fzz)中找到原理图和面包板布局。

步骤4:代码

Arduino

Arduino

在此处下载代码。

此项目中的代码会经历10种可能的状态,总是在状态0复位后开始,在其中测量电池电压,并且根据电压,程序进入三个可能的下一个状态之一。

状态1 在电压低于1v时发生,程序假定电池座为空。它提示输入新电池,然后重设。一旦电池电压超过1v,程序进入状态2.

状态2 当测试仪没有电池启动但现在安装了电池时发生。程序显示电池电压并提示复位。

状态3 当程序启动时,电池电压在1和最小电压之间开始测试,在其他情况下话说,一个弱小的细胞。显示电池电压以及电池电量不足的建议。

状态4 在程序开始且电池电压足够高以开始测试时发生。在此状态下,负载开启直到电压低于阈值以检查电阻。

状态5 是检查电阻的状态。测量电流和电压,然后在记录两个电压/电流值后关闭一个 负载,然后重新打开。电阻是根据不同负载电流的两个值计算的。

状态6 在状态5完成电阻检测后立即发生,并继续运行容量检查直到电池电压下降低于最小电池电压。

状态7 在容量检查完成且电池仍在原位时发生。它显示测试结果和测试时间。

状态8 是在测试运行后从测试仪中取出电池时发生的。容量和阻力仍会显示,但不会显示时间。

状态9 在插入新单元格时出现。容量仍会显示,直到重置。

那么,您应该如何编辑此代码以使其适用于您的特定电路?您需要更改的唯一内容是引脚编号和电阻值。它们具有以下常数:

#define SHUNTRES 0.62

#define VIN A1

#define SHUNT A0

#define GATE1 0

#define GATE2 1

有些人评论过的是一个不准确的参考电压。如果您的5v引脚测量4.6伏怎么办?还有一个常数要注意。用万用表测量5v参考引脚,然后将该值放在下面的常量中:

#define VOLTREF 4.6

如果您正在通电来自计算机USB端口的arduino,电压应该在5v(并且不需要检查它,除非你是可疑类型)。如果您在Arduino的电压调节器(桶形插头)中使用电源,您可能需要检查它,但它应该是一致的。如果您使用USB充电器为其供电,则应检查您将使用的每个不同电压,因为它们可能会有很大差异。

步骤5:分享您的结果!

所以,这个项目很好,但是,假设您只是想知道单元的容量而无需构建它。好了,我已经启动了一个电池列表,可以通过颜色和型号进行识别,您可以在这里查看。

如果你已经构建了一个容量表,并希望对此列表做出贡献,请给我发消息,我会将你添加为编辑。

第6步:把它放在一起并测量

Arduino

Arduino

Arduino

好的,所以一旦你建立了你的电路,把你的代码抛到了arduino上应该是好的!

在开始测试之前,电池应该充满电,这样你才能知道它们的全部容量。连接一个单元,并开始测试,按下你的arduino重置按钮,或重新启动arduino。

一旦测试完成,屏幕将显示“完成”以及时间,电池电阻和容量。

我为测试周期制作了电压与时间的关系图,它有一些非常有趣的功能。刚开始时电压急剧下降,但直到线性电压下降到3300 mV左右才趋于平稳。那时,它开始陡然下降。这表明为什么放电低于2.9v的锂离子电池真的不会给你带来更多的可用功率。电池开始变强,然后保持变强……然后就完成了。当然,您需要调整电压常数,并且需要确保不向模拟引脚馈送超过5v的电压,因为这是它可以读取的最大值。分压器是测量高压应用电压的一种可能方法(例如,12v铅酸电池)。到目前为止,我已观察到有关我的电池的一些信息:它们似乎大部分被制造成大约1000个电池。或2000毫安。我有一个高达3400 mAH,相当一点18650非常令人印象深刻。此外,大多数配备真正便宜的LED手电筒的电池往往具有可怕的容量。但这并不奇怪。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分