SPINC - 大容量镍氢电池自动充电站

SPINC 是一个基于 RP2040开源的镍氢电池充电站,可以自动装填和弹出5号镍氢电池,使用时只需将电池放入设备顶部,不论极性如何。

SPINC - 大容量镍氢电池自动充电站封面
dianzi_01012026-02-27 15:09:25GPL 3.0
227
Star1

PCBA

设计文件

KiCad图标SPINC AA Charger.zip1.46MB

其他附件

EDA查看器

复制嵌入代码

详细介绍

项目概述

SPINC 是一款开源的镍氢电池充电站,能够自动加载和弹出 镍氢电池 电池。你只需将电池扔进设备顶部,无需考虑正负极性。内部机构会逐个拾取电池并进行顺序快充。设备内部可方便地存储多达 7 节充满电的电池,以便随时取用。此外,SPINC 还可以作为桌面时钟使用,在其高分辨率 LCD 屏幕上显示日期和时间。

主要特性

  • 快速充电: 以最高 1A 的电流为 5号 镍氢电池充电。

  • 自动加载与弹出: 自动完成电池的抓取与卸载。

  • 电子极性修正: 无论电池放入方向如何,电路都会自动调整极性。

  • 全面监测: 实时监测电压、温度和充电时间。

  • 显示屏: 240x400 像素单色 LCD。

  • 图形界面: 使用 LVGL 界面显示日期和时间。

  • 全 3D 打印: 结构紧凑且完全由 3D 打印部件组成。

并非所有的电池充电器都必须是那种得手动插拔每节电池、枯燥乏味的电源适配器。对我来说,做一个能自动推入电池、充电,还能充当充电电池小储物仓的小装置,是一个非常有趣的方案。虽然普通的四槽充电器可能速度更快、更经济,但 SPINC 提供了一种优雅的解决方案——你可以把它作为桌面摆件展示出来,而不是把它塞进抽屉里。

将自动加载机构整合进一个美观且可 3D 打印的外壳中是一个巨大的挑战;开发能够适应电池极性变化的电路也同样困难。

硬件设计

根据机械设计,已经知道PCB板的形状以及预留多少空间来容纳电子元件。这些电子元件必须满足多项功能:为电池充电、驱动显示屏以及与传感器、按钮和伺服电机交互。充电速度必须很快,因为设备一次只能为一块电池充电。而且由于电池直接插入设备顶部,它必须能够兼容任意极性。这对于充电器来说是一个相当不寻常的要求,因为充电器通常采用机械编码的端子,极性接反后根本无法工作。

我决定先从看似最棘手的部分入手——极性反转。

通常,改变直流电机等设备的极性会使用H桥电路。H桥由四个呈H形排列的开关组成,负载位于中间。根据哪些开关闭合,可以反转负载上的电压。你可以使用继电器作为开关,并用微控制器来控制它们。但由于电路板空间有限,这种方法并不实际。因此,我选择了H桥集成电路(DMHC3025LSD)。它实际上是为直流电机控制而设计的,但本质上只是两个p沟道MOSFET和两个n沟道MOSFET,封装在SO-8封装中。我将把充电电路的电压(而不是电机的供电电压)连接到H桥,并将电池作为负载(而不是电机)。但这里存在一个问题需要解决。在H桥的顶部,也就是控制电池正电源电压的位置,两个p沟道MOSFET的源极电压非常低,只有大约1V。当 MOSFET 的栅源电压 (VGS) 达到 -1V 到 -2V 之间的阈值时,MOSFET 就会导通。但是,如果栅极电压不能低于 0V,则 VGS 可能不足以使 MOSFET 完全导通。这会导致电阻和损耗增加,从而干扰充电。我的解决方案是用负电压驱动 p 沟道 MOSFET。如何获得负电压呢?我找到了 LM27761,它是一款微型开关电容式电压反相器,只需要极少的元件即可反转 3.3V 的电源电压。另一组 MOSFET 可以让微控制器控制 H 桥的栅极电压在 +3.3V 和 -3.3V 之间切换。

我先用 LT-Spice 测试了一下,结果看起来不错。最终的 PCB 板上,电压反转电路也完美运行。不过这可能仍然是一个过于复杂的解决方案,所以我很想知道还有哪些其他方法可以解决这个问题。

为了确定电池的插入方向,微控制器的ADC输入端会监测H桥中间的两个触点。一个简单的分压器会将电压升高,从而避免输入引脚因负电压而损坏。通过这种设置,微控制器首先检查电池的插入方向,然后配置H桥,使电池和充电电路以正确的方式连接。

接下来,我需要找到一个镍氢电池充电控制器。我曾短暂地考虑过自己制作,但这本身就是一个大工程。与锂离子电池只需恒定电流和电压即可充电不同,镍氢电池的充电实际上更加复杂。难点在于如何判断充电何时结束,因为镍氢电池的电压曲线并非线性。快速充电器通过检测充电过程结束时电池电压的轻微下降来判断充电是否完成。如果错过了这个时机,电池就会过充,甚至可能损坏。作为一项安全功能,大多数充电器还会监控温度和充电时间。另一种充电方式是涓流充电。镍氢电池允许一定的持续充电电流,在过充的情况下不会过热。但这需要充电数小时,对于顺序充电器来说并不理想。我首先考虑的是德州仪器 (TI) 的 BQ25172 集成充电器。理论上,它可以为 1-6 节电池充电,最大电流可达 800mA。问题在于它是一个线性充电器,很像线性稳压器,它会将 3.3V 的输入电压降低到电池电压,并将多余的电压转化为热量。而使用 2x2mm 大小的集成电路来实现这一点并不合适。因此,我决定使用 MAXIM DS2712,它是一款开关模式充电器。有一份很老的应用笔记(https://pdfserv.maximintegrated.com/en/an/AN3607.pdf详细介绍了如何使用该集成电路进行 USB 充电,这正是我需要的。在我的电路板上,DS2712 设置为以大约 1A 的电流进行快速充电。但是,可以通过改变分流电阻 (R34) 的值轻松降低电流。

虽然充电过程由 MAX2712 监控,但 PCB 板上的许多其他功能仍然需要微控制器。自从 RP2040 问世以来,我就一直想尝试使用它。可惜的是,低功耗设计并非它的强项,睡眠模式下的电流消耗约为 400uA。因此,我总是选择 ESP32。由于本项目不需要低功耗,也不需要无线功能,RP2040 终于可以胜任了。

其他电子元件无需过多解释。例如,夏普的像素内存显示屏就通过显示接口连接。该显示屏由 USB 端口直接供电,电压为 5V,并通过 SPI 接口控制。用于检测设备是否安装了电池的光学接近传感器通过 I2C 总线连接到 RP2040。与 ESP32 不同,树莓派微控制器集成了用于编程的 USB 外设,因此无需 USB 转串口桥接器。最终,所有元件都完美地安装在了形状奇特的 PCB 板上。

软件设计

DS2712负责镍氢电池的实际充电,而RP2040仍然需要一个简单的状态机来控制电池的切换。如果它检测到输入槽内有电池,它会将机械臂向上移动,然后再向下移动,尝试与电池接触。DS2712发出充电完成的信号或发出错误信号后,电池将被弹出到底部。

同时,显示屏上的时钟需要更新。和之前的智能遥控器项目一样,我决定使用 LVGL 作为用户界面。可惜的是,夏普显示屏的驱动程序并不容易找到,TFT_eSPI 库也不支持这款显示屏。我尝试自己编写驱动程序,但总是出现像素乱码。最终,我不得不使用 Adafruit 提供的夏普显示屏库,并结合 LVGL 来实现。刷新率虽然不高,但对于时钟来说也还可以接受。除了日期和时间,主屏幕还会显示按钮的提示信息(首次按下按钮时)。一个按钮用于强制弹出当前电池,另一个按钮用于打开菜单。由于 RP2040 无法连接 NTP 服务器,因此菜单主要用于设置日期和时间。由于没有触摸屏,整个菜单只能通过两个硬件按钮进行导航。我使用了 LVGL 中的 Gridnav 功能,它可以自动循环显示屏幕上的元素。这样,将来就可以轻松地在菜单中添加更多设置。

它最初只是个小小的副业项目,但后来却耗费了我不少时间。要把它变成一款商业产品,可能需要付出巨大的努力,甚至需要彻底重新设计。但并非所有东西都必须如此。我认为这是一个技术与产品设计巧妙结合的有趣案例。

License

开源协议:GPL-3.0 license

仓库主页:https://github.com/CoretechR/SPINC