测量锂离子电池电压(因此剩余容量)

电器工程 Arduino 电池 电池充电 分压器 锂离子
2022-01-18 05:28:07

我正在使用什么:我在 3.3V 下运行我自制的 Arduino 板(从某种意义上说,我使用 Arduino 引导加载程序和代码编辑器),并由锂离子电池供电,该电池由相应的 Microchip 进行 USB 充电充电器IC。

我想要实现的目标:我想每分钟左右测量一次电池容量。我有一个液晶显示器,所以我的想法是整体设置让我知道电池在给定时刻的工作情况。电池的数据表有电压与放电水平的曲线,因此通过测量电池的电压,我可以估计剩余容量(非常粗略但对我来说足够了!)。

我做了什么:

  • (编辑:根据@stevenvh 和@Jonny 的建议更新了电阻值并添加了 P-MOSFET 开关)。

  • 我从电池 V_plus 连接了一个分压器,较大的“部分”连接到 Arduino/Atmega 芯片上的模拟读取引脚(即 ADC)。

  • 分压器为 33 KOhm 至 10 KOhm,因此允许从我的 3.3V 电平微控制器测量高达 4.1 伏的锂离子电池。

  • 此外,使用连接到 n 沟道 MOSFET 的 I/O 引脚之一,我可以仅在需要测量时切换通过分压器的电流。

  • 这是一个粗略的示意图(根据@stevenvh 和@Nick 的建议第二次更新):

在此处输入图像描述

我的问题:

  • 我目前的设置如何?

  • 我唯一的限制是:(1)我想根据电压读数粗略测量电池容量,如上所述。(2) 我想防止分压器干扰我的充电 IC 对电池存在的读取(在我的原始设置中,即使没有电池,分压器有时也会导致 IC 误读存在)。

3个回答

在此处输入图像描述

这似乎与尼克的示意图非常相似,他发布时可能正忙着绘制它:-)。

首先为什么你不能在高端使用 N-FET:它需要一个比源极高几伏的栅极电压,而 4.2 V 就是你所拥有的,没有更高的电压,这样就行不通了。

我有一个更高的上拉值,尽管 100 kΩ 的值也可以。测量时,10 kΩ 将导致不必要的 400 µA 额外电流。不是世界末日,但在这两种情况下都是 1 个电阻,所以为什么不使用更高的值。

对于 MOSFET,由于要求不那么严格,因此有多种零件可供选择;您可以考虑便宜的,例如,用于 P 通道的Si2303和用于 N 通道的BSS138 。

@英加。这更像是一个评论而不是一个答案。但是我想发布一张图片,所以我将其发布为答案。

您的微控制器 (uC) 由 +3.3V 供电。建议的 P-MOSFET 的漏极可高达 +4.1V。正如目前绘制的那样,+3.3V 逻辑信号将无法完全关闭 P-MOSFET。下图中的 Q6 形成一个开漏输出,可耐受 +4.1V。

C14 降低了您的 A/D 将看到的阻抗。

在此处输入图像描述

[...] 电池电压(因此剩余容量)

您可能会发现检测电池电压并不是检测剩余电量的准确方法。在便携式设备(手机、笔记本电脑)中,电池容量是通过测量进出电池的电流来估算的。有几十个专门的电池电量计 IC(例如bq27200)可以帮助完成这项任务。

为什么不在低端使用单个 N 沟道 MOSFET,在高端使用两个电阻分压器?
[来自下面的评论]

当电池电压 (V bat ) 大于微控制器的电源电压 (V cc ) 时,低端开关会出现问题。当低端开关关闭时,分压器的接地端悬空,分压器不再分压,完整的电池电压出现在微控制器的 ADC 引脚上。这会损坏 uC。它还将创建一个泄漏路径,电池将通过该路径放电。当 V bat > V cc
时,需要一个高边开关

1 我将简称为 V cc,但此讨论也适用于 V dd、 AV cc、 AV dd如果有疑问,当然可以在数据表中查找。

Ad.A:我认为使用简单的分压器来检测电池电压就足够公平了。虽然,你应该仔细选择阻力。根据ATmega328 数据表,ADC 输入的内部阻抗为 100kΩ 。请参见“图 23-8. 模拟输入电路”。如果您的分压器具有与 ADC 输入相当的阻抗,则 ADC 输入电路的行为基本上就像分压器中的另一个节点。它可能会给您 ADC 读数的偏移量。

在电源轨上使用高达 10kΩ 的分压器将足够低,可以忽略 ADC 输入阻抗,同时仅消耗 410µA。如果这对您的应用来说太大了,您当然可以选择更大的电阻,但请记住 ADC 在那里并且连接到 Vcc/2。