亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

9V 镍氢电池智能充电器 V1:Arduino + MCP4725 DAC + LM317 恒流控制

设计初衷与定位

市面 9V 充电器多为“定压/定时”简易方案,极易过充损伤电池。本项目实现 **CC(恒流)→ -ΔV/dt 终止 → 微充 (C/40) → 定时切断** 完整充电曲线,硬件成本 < ¥100,固件开源,适合电池维护爱好者、DIY 仪器供电模块二次开发。**仅验证过 7 节串联 9V NiMH(170 mAh),其他规格需修改参数并自行验证。**

核心硬件架构

模块关键器件功能
主控Arduino UNOADC 采样、状态机、I²C 控制 DAC
DACMCP4725 (12-bit, I²C, 0~5V)输出控制电压,经运放放大驱动 LM317
运放LM358 (双路)增益 3.06×,将 0~5V → 0~15.3V
稳压/恒流LM317 (TO-220 + 散热片)可调稳压器,ADJ 引脚接运放输出,OUT 接电池+
采样电阻10 Ω / 1% / 1W串联电池回路,电压降 = 电流 × 10 Ω
电压分压5.1 kΩ / 20 kΩ (1%)电池电压 ÷5 送 ADC (A0),量程 0~16.2V
电流采样采样电阻两端 → A2直接读取压降,I = V / 10 Ω
隔离继电器5V 线圈,常开触点充电结束/异常物理断开电池
显示I²C LCD1602 (YwRobot, 0x27)实时显示电压、电流、时间、充入容量
供电17V/2A DC 适配器满足 LM317 压降 + 采样电阻压降 + 电池端电压

电路原理框图


17V DC ──┬──→ LM317 IN
         │
         ├──→ SparkFun 5V/3.3V 面包板电源 → MCP4725, LCD, Arduino
         │
         └──→ (备用)
LM317 OUT ── 10Ω (R_sense) ──┬── Relay NO ── Battery +
                              │
                         A2 (Arduino)  // 电流采样
                              │
                    5.1k / 20k 分压
                              │
                         A0 (Arduino)  // 电池电压采样
LM317 ADJ ← LM358 OUT (Gain 3.06) ← MCP4725 OUT (I²C)

充电算法状态机


enum State {
  INIT, NO_BATT, BATT_CONNECTED, BATT_LOW,
  CURRENT_RAMP_UP, CHARGING, CURRENT_RAMP_DOWN,
  TRICKLE, END_TRICKLE,
  FAULT_OVERCURRENT, FAULT_OVERVOLTAGE, FAULT_REGULATION, DONE
};

// 关键参数(charger.ino 宏定义区)
float TARGET_CURRENT_mA = 30;          // 恒流充电电流 (0.1C~1C)
float BATT_CAPACITY_mAh = 170;         // 标称容量
float MAX_TRICKLE_MIN   = 6;           // 最大微充分钟数
float TRICKLE_RATIO     = 40;          // 微充电流 = C/40

核心流程

  1. 上电自检:DAC 输出 0V,继电器断开,读取电池电压。< 7V 判定为过放拒充。
  2. 电流爬升:DAC 电压以 1 mV/步 (≈3 mV @LM317 ADJ) 递增,直到采样电流 ≥ 目标电流。
  3. 恒流充电:PID 思想微调 DAC 维持电流,每分钟记录电压均值,线性拟合斜率 dV/dt。**连续 5 分钟斜率 < 0 判定 -ΔV 峰值,终止快充。**
  4. 电流下坡 → 微充:电流降至 C/40 (4.25 mA),进入计时微充。
  5. 超时/异常保护:过压 (>15V)、过流 (>200mA)、调节失控 (|I_target - I_actual| > 5mA) 均立即断开继电器进故障态。

固件模块化文件结构

关键代码片段:dV/dt 终止判定


// 每秒采样一次电压存入 sec_log[60]
// 每分钟计算均值存入 min_log[5] (滑动窗口 5 分钟)
float best_linear_fit(float y[5]) {
  float sx=0, sy=0, sxx=0, sxy=0;
  for (int i=0;i<5;i++) { sx+=i; sy+=y[i]; sxx+=i*i; sxy+=i*y[i]; }
  float delta = 5*sxx - sx*sx;
  return (5*sxy - sx*sy) / delta;  // 返回斜率 V/min
}

// 在 CHARGING 状态中:
float slope = best_linear_fit(min_log);
if (slope < 0) { state = FULLY_CHARGED; }  // 检测到负斜率 → 峰值通过

实测数据与波形

安全警示(必读)

⚠ 高风险操作
1. 镍氢电池过充会析气增压、甚至爆炸起火,**全程不可离人**。
2. 17V 直流虽低压,但短路电流大,接线前必查万用表。
3. 碱性/锂电/铅酸**严禁**接入此充电器,化学体系不兼容。
4. 代码含已知 Bug(如 elapsedMillis 库依赖、字符串处理内存碎片),**仅供学习参考,量产需重写**。
5. 作者明确声明:“因设计或代码缺陷造成任何损害,概不负责。”

V2 规划功能


一句话总结:Arduino + MCP4725 + LM317 实现 9V NiMH 电池 CC/-ΔV/微充全流程智能充电,开源固件模块化清晰,是学习模拟充电控制、DAC 闭环调节、电池特性分析的极佳实战案例——但切记安全红线。

制造工艺

  1. 智能缺水报警器 – DIY植物土壤湿度监测装置
  2. 意大利语单词时钟:Arduino Nano + NeoPixel 144 灯珠 + LCD + RTC 打造
  3. 仅用 3 根模拟口驱动 4×3 矩阵键盘:电阻分压识别键值
  4. 基于Arduino MKR Fox 1200构建可靠Sigfox千瓦时电表
  5. 蓝牙温度监测仪:Arduino Nano + NTC 热敏电阻 + HC-06 无线传输
  6. 非接触手势门锁:APDS-9960 + Arduino 实现安全门禁
  7. Arduino Nano 多功能伴侣套件 —— 电阻/电容测量、二极管测试、RTC时钟一体化
  8. Arduino Micro/Leonardo USB MIDI 适配器套件 —— 完整元件清单与固件指南
  9. 为Arduino构建隔离模拟输入电路
  10. RGB 32 频段音频频谱可视化器:Arduino Nano 驱动 WS2812B 8×32 LED 矩阵
  11. 两个电阻自制 Arduino UNO 视频输出线(RCA/TVout)
  12. Arduino UNO 精准视觉反应时间测试仪