便携可编程口袋电源:Arduino 兼容、OLED 显示、电压电流功率三表合一
核心规格指标
| 参数 | 指标 | 备注 |
|---|---|---|
| 输出电压范围 | 2.0 V ~ 12.0 V | 分辨率 ~0.1 V (7-bit 数字电位器) |
| 最大输出电流 | 400 mA | 受限于 LM317 封装与散热 |
| 电压测量精度 | ±0.02 V | 内部 1.1V 基准 + 分压校准 |
| 电流测量精度 | ±1 mA | OP07 精密运放 2.5× 放大 1Ω 采样电阻 |
| 峰值效率 | 75% | XL6009 Boost + LM317 线性后级 |
| 电池 | 3.7V Li-Po,USB 充电 | 简易充电电路(非标准 CC/CV) |
| 尺寸 | 单开关面板盒 (86×86×40mm) | 极致便携 |
系统架构框图
[Li-Po 3.7V] → [XL6009 Boost → 15.6V] → [LM317 Adj. Regulator] → [输出端子]
↑ ↑
[7805 → 5V] [MCP4131 Digipot + LM358×2.5] → ADJ 引脚
↑
[Arduino Uno/328P] ← [OLED 128×64] ← [2× 按键 (INT0/INT1)]
↑
[ADC 多路复用] ← 分压网络采集:Vbat, Vboost, Vout, Iout, Vusb
↑
[锁存继电器] ← D4/D5 脉冲驱动 → 输出通断/过流保护
核心电路模块解析
1. 两级供电拓扑
- Boost 阶段:XL6009 将 3.7V 升至 15.6V,为 LM317 提供足够压降余量(Vin - Vout > 3V)
- 线性后级:LM317 输出电压 = Vadj + 1.25V,Vadj 由数字电位器+运放产生 0~12.5V
- 权衡:效率随输出电压降低而下降(低压大电流时 LM317 损耗大),但极大简化了电路复杂度
2. 数字可编程电压源
- MCP4131:7-bit (128 级) 10kΩ 数字电位器,伪 SPI 控制 (D6/D7/D8)
- 分压比固定,输出 0~5V → LM358 非反相放大 2.5× → 0~12.5V 控制电压
- 步进约 0.1V (5V/128 × 2.5),满足「步进可调」需求
3. 精密电流采样
- 负载回流经 1Ω 采样电阻 → 产生
V_sense = I_load × 1Ω(1mV/mA) - OP07 (超低失调 10μV) 配置 2.5× 非反相放大 → 2.5mV/mA
- Arduino
analogReference(INTERNAL)1.1V 基准,ADC 分辨率 ~1.07mV/LSB → 电流分辨率 ~0.43 mA/LSB - 量程 0-400mA 对应 0-1000mV,刚好在 1.1V ADC 满量程内
4. 多通道 ADC 采集
| 通道 | 信号 | 分压/调理 | 用途 |
|---|---|---|---|
| A0 | Vboost (15.6V) | 10:1 分压 | 监控升压异常 |
| A2 | Vbat (3.7V) | 2:1 分压 | 电量估算、低压保护 |
| A3 | Iout (OP07输出) | 直连 | 电流测量、过流保护 |
| A4 | Vusb (5V) | 2:1 分压 | 充电状态检测 |
| A5 | Vout (0-12V) | 10:1 分压 | 电压测量、闭环校准 |
5. 锁存继电器输出断路
- 双线圈磁保持继电器,脉冲触发、零功耗保持
- D4/D5 推挽驱动两线圈,分别控制通/断
- 过流/短路时固件自动发送断开脉冲,硬件级隔离保护
固件模块化设计(多标签页)
ADC.ino:calc_VI()20次平均采样、分压系数换算、滑动窗口滤波Digipot.ino:increment/decrement_digipot()软件 SPI 时序、边界保护Display_Fn.ino:U8glib 驱动 SSD1306,文本/图形混排、菜单系统框架Interrupt.ino:INT0/INT1 下降沿中断,按键消抖电容 + 软件去抖、标志位通信主循环Relay.ino:rc1/rc2_latch()10ms 脉冲驱动、状态记忆Timer.ino:Timer1 1秒溢出中断,系统运行时基、自动关屏、定时采样
用户交互流程 (v1.0.3 Beta)
- 上电初始化:自检、继电器断开、输出电压预设 5.00V、OLED 显示启动画面
- 主界面:大字显示 Vout/Iout/Pout、电池电量、运行时间、继电器状态图标
- 按键操作:
- 短按 KEY1 (INT0):电压 +0.1V → 继电器自动闭合(若断开)
- 短按 KEY2 (INT1):电压 -0.1V → 至 2.0V 下限停止
- 长按/组合键:进入菜单(v1.0.3 尚未完全实现)
- 保护动作:Iout > 420mA → 继电器断开、红色报警闪烁、需手动复位
已知局限与改进路线图
| 局限 | 根因 | 改进方向 |
|---|---|---|
| 最低电压 2.0V | LM317 最小压降 1.25V + Vadj 最小 0V | 增加同步整流 Buck 前级,或用 LT3080 (0V 输出) | 电压阶跃非连续 | 7-bit Digipot 仅 128 级 | 升级 MCP4131-12bit (4096级) 或 DAC (MCP4725) |
| 大电流地线电位抬升 | 采样电阻在负载回路 | 高边采样 (INA219/INA226) 消除地线偏移 |
| ADC 分辨率受限 | 1.1V 基准 + 10-bit | 外挂 ADS1115 (16-bit I2C) 或 MCU 内部 12-bit |
| 低压大电流效率极差 | 线性后级压降大 | 全拓扑 Buck-Boost (TPS63070) 或 SEPIC |
| Li-Po 充电非标准 | 仅 1N4007+5Ω 限流 | 集成 TP4056/TP5410 专用充电管理 IC |
进阶版本规划 (v2.0)
- 主控升级:STM32G0/G4 / ESP32-C3(更多 ADC、硬件 SPI、USB-C PD 控制)
- 拓扑重构:单电感 Buck-Boost 控制器 (LM5175) 实现 0.5V-20V/2A 全范围高效转换
- 高边电流检测:INA228 (16-bit, I2C, 兼容高边/低边)
- 图形化 UI:LVGL 驱动 1.3" 圆形 LCD,波形实时绘制、触控调节
- 智能功能:CC/CV 自动切换、电池容量学习、导出 CSV 日志、BLE/App 远程监控
- 机械集成:CNC 铝合金外壳、旋钮编码器、磁吸输出端子、背夹磁铁
项目总结
本项目展示了如何用 极简元件 (Arduino + Boost + 线性稳压 + 数字电位器 + 精密运放) 实现一台「可编程、可测量、可保护、可充电」的口袋实验室电源。尽管指标不及商用台式电源,但其 模块化硬件架构、分层固件设计、完整的信号链预算分析 具有极高教学价值,是电源电子、嵌入式仪器仪表开发的绝佳入门实战。所有原理图 (Circuits.io/Eagle)、PCB 源文件、固件多版本已开源,欢迎 Fork 迭代。
原作者提供了面包板实物图、模块化子板特写、最终组装成品图、手绘原理图、Circuits.io 在线仿真链接,完整固件 v1.0.1~1.0.3 可在项目页面下载。
制造工艺
- 用 Arduino UNO 和 OLED 显示屏制作经典 Pong 游戏:分步教程
- 智能存钱罐:Arduino Nano 控制硬币识别器实现余额显示
- Arduino 电源控制中心:N-FET/P-FET/继电器/RTC 多功能扩展板
- Arduino Due 驱动 3.2″ TFT 实现温度监测与实时时钟
- Arduino + HC-05 蓝牙控制 LED:MIT App Inventor 手机 App 开发全攻略
- Arduino 项目优化供电方案:从按键开关到电池监测与数据记录
- 基于 Arduino Mega 与 Nextion 显示屏的交互式气象站
- Arduino DIY 电压表:Nokia 5110 屏幕显示,手把手教学
- Arduino Mega 2560 综合实训平台 - 传感器/电机/显示/PCB 一体化开发板
- 使用 Nextion 显示屏构建 Fridgeye 应用:分步指南
- Arduino UNO + 以太网盾板实现低成本太阳辐射测量仪(热电堆原理)
- 突破极限:Arduino Nano驱动SSD1106 OLED实现30帧视频播放