与大多数事物一样,电池容量的标示取决于相当多的规格[1]。想了解所购买产品的好坏,唯一的方法是亲自对其测试,以确定它是否能满足需求(图1)。本文介绍了一种小型专用电池分析仪设计,借此就可将我们对便携式电子设备中所用小型电池的“一厢情愿”从其“实际性能”中区分开来。
图1:电池有各种形状、大小、电压和容量。裸电芯具有电线、熟悉的可更换外形和完整的封装解决方案。了解所购买产品的唯一方法是亲自对其测试。
我一直有各种万用表、可编程电源和有源负载用于电源测试,再加上一些一次性代码,就可以拼凑出某种电池测试数据记录器。但我却从未重复使用过这些拼凑起来的装置,并且设置和拆除这些一次性系统需要花费大量时间,而且它们还会占用宝贵的实验室设备。无论如何都不理想。
最近我需要为我即将开始的一个新的便携式项目再次测试电池,所以我决定是时候重新利用一些无用元器件来制作一个专用的电池分析仪解决方案了,我将它称为“Battery Decimator 9000”,简称BD9000。
BD9000电路(图2)的核心是TI的INA250电流检测放大器[2]。这款精巧的IC集成了电流检测电阻器,从而可实现紧凑、精确的设计。
图2:电池分析仪的简化框图,其中显示了主要元器件。
INA250用于直接测量被测电池的充电或放电电流,并向电流阱和电流源电路提供有源闭环反馈。这是BD9000设计中唯一的有源反馈。其余操作则由32位PIC32MZ MCU进行控制[3]。实际上,我使用了Micro Electronica制造的小型(口香糖片大小)PCB上组装好了的PIC32MZ[4]。这些都是很好的、完整的解决方案,实际上比自己去收集MCU、振荡器和LED等成本更低。唯一的缺点是其不包含标准的PIC编程/调试头,但由于BD9000主板上进行了安装,我只是将它放在了布局上。
电流阱和电流源本身是用大功率MOSFET构建的。实际电流设定点由一对16位DAC控制,它们分别用来控制拉电流或灌电流。电流源本身与彼此及其输出继电器隔离。这可以防止将灌电流和拉电流同时打开所产生的某种灾难性的故障模式,并防止在将它们关闭时出现不期望的漏电流。
MOSFET安装在机架中的大型散热器上。机架中还有一个小风扇,可用于提供冷却气流。风扇由MCU控制,因此它只在需要时运行(图3)。
图3:BD9000的内部。PCB设计适合我所多余的机架。来自风扇(由MCU控制)的冷却气流被引导到安装了电流源MOSFET和电流阱MOSFET的散热器上(实际使用中风扇和散热器上还放了个护罩,用于使空气流过散热器)。
BD9000设计用于处理0至14V的电池电压和10mA至5A的电流,但不能对其同时进行处理。就我所使用的散热器和冷却装置而言,最大连续功耗约为25W。否则,即使在风扇运行时散热器温度也会过高,然后散热保护就会接管,关闭电流源以防止“冒烟”——没有人喜欢让仪器在实验室中化为乌有!
温度监控和保护由两个TMP36[5]温度传感器提供。一个直接安装到内部散热器上;另一个则引出到前面板,以便放置在被测电池上。然后,内部MCU会持续监控温度以在操作期间提供保护。
电压、电流和温度读数由24位ADC AD7789[6]提供。这个Δ-Σ ADC通过板载数字滤波提供同步50/60Hz抑制,这在这样的应用中是个优势,因为我不必在代码中编写任何滤波例程。
为了提供仪器操作的本地指示,我决定在项目中添加一个简单的Adafruit 2.2″ LCD显示器[7]。该显示器提供了一些关于BD9000状态、电压和电流读数的即时反馈(参见图4)。
图4:通常,在进行电池选择时,等待测试应用硬件制作完成会为时已晚,并且可能导致重新设计而付出高昂代价。BD9000甚至能让我们在设计目标硬件之前对电池进行测试。
与控制PC的通信,由常见的FTDI FT232R USB转串口桥接IC[8]提供。我在这个设计中使用了USB电缆组件,因为我的废料箱里有一些。该IC用于在PIC32MZ MCU和运行控制应用程序的PC之间提供USB转串行桥接链路。
该电路是使用Altium Designer[9]在4层PCB上设计的——继而适合我的废料箱机架——并由Sierra Circuits“No Touch, Quick Turn”工艺制造[10]。事实证明,这是一种非常经济高效的快速构建方式。像Altium这样的现代PCB工具的好处是原生的3D视图支持。这确实减少了PCB返工,因为可以在PCB制造之前发现潜在的间隙问题(图5)。
图5:Altium等现代PCB布局工具通过内置原生3D支持减少了PCB重新设计。这样就能够在制造PCB之前发现潜在的零件放置和间隙问题。
PCB回来后,就可以对元器件焊接,将机架前面板铣出,然后将所有东西都安装在机架中(图6)。
图6:附带的LCD显示屏用于显示仪器的状态,并提供对电池电压、电流和温度的持续监控。
BD9000是一种虚拟仪器,这意味着实际的仪器界面、控制和数据记录位于某处的PC上。BD9000充当半智能测量前端。
当今最常见的两种电池类型是锂离子(Li-ion)和镍氢(NiMH)。BD9000的固件中内置了关于如何处理这两种电池类型的智能算法。BD9000 32位MCU负责控制所有硬件,并包含了足够的“智能”以了解如何在不损坏任何东西或引起火灾的情况下对锂离子电池和镍氢电池进行充电和放电。
固件在大循环架构中作为状态机运行,负责读取ADC并执行所需的操作以监控被测电池的充电或放电状态。还可以使用完全自定义模式,PC可以完全控制BD9000硬件,因此可以使用任何电池类型。在这种情况下必须小心使用,因为BD9000不会主动控制电池充电和放电,它只会监控内部散热器和外部电池温度,以防止硬件崩溃。
固件是使用Microchip MPLAB-X IDE生态系统用C语言编写的[11]。
PC软件通过USB/串口桥接接口对BD9000中的各种参数进行编程。BD9000固件上运行了一个简单的终端命令解析器,用于接收来自PC的命令,并通过简单的英文可读命令将数据发送回PC。
然后软件负责设置BD9000参数,开始充电或放电,然后通过查询命令监控仪器的进度(图7)。
图7:由BD9000控制的典型的锂离子电池充电。充电以恒定电流开始,直到达到4.1V的电池电压,然后将充电切换到恒定电压,直到最终在1.7h左右终止。
PC还可以将数据记录在电子表格中供以后分析。PC软件可以用任何可以访问USB虚拟串口的语言编写。对于这个应用,我使用了Python 3[12]——因为它易于使用,并且具有出色的应用程序库——但可以使用任何语言。这就是制作这种虚拟仪器的力量,也即它能够在几乎任何PC硬件上运行并使用几乎任何编程语言进行虚拟控制和显示。
以下是可以使用任何PC控制、测量和记录的一些电池参数:
对于校准,我编写了一些Python例程,将拉电流和灌电流控制DAC设置为各种代码,然后使用基于GPIB的6位半数字万用表和精密校准的10A电流分流器测量实际电流。
结果用二次方程拟合,然后将其保存到BD9000的板载校准EEPROM。启动时,BD9000会读取这些校准常数,并在后续操作中使用它们来获取校准设置和读数。
在10mA至5A的范围内,总体校准精度优于0.5%。电压读数优于0.25%。
像这样自制一台仪器,不仅有助于实验室的日常工作,而且能够让人们通过经验进行实验和学习。我发现这些类型的项目在我的电子职业生涯中被证明是无价的,而且所学到的信息总是能在以后的“真实项目”中获得使用。
当我在惠普工作时,这类项目被称为“G-Job”(现在没人真正记得其原因),而且它们可以追溯到很久以前。也许最早的G-Job从业者之一是Art Fong,他喜欢购买多余的雷达设备并用它制作“有趣的东西”,这也就引发了非常早期的警用雷达设计[13]以及许多其他发明。
BD9000的完整原理图可在我的GitHub页面上找到[14]。
——Steve Hageman从大约五年级开始就被证实是“模拟狂”。他有幸设计了运算放大器、开关电源、吉赫兹采样示波器、锁相放大器、无线电接收器、50GHz射频电路和数字无线产品测试设备。Steve知道所有现代设计都不可能只用电阻、电容和电感来完成,因此他涉足了PC和嵌入式系统编程,以至于正好能够完成工作。
(原文刊登于EDN美国版,参考链接:A small, dedicated battery analyzer design,由Franklin Zhao编译。)
本文为《电子技术设计》2023年5月刊杂志文章,版权所有,禁止转载。免费杂志订阅申请点击这里。