本文记录一套从 12V 离网太阳能系统出发的 DIY 项目:使用 ESP32 统一承担电池电压监测逆变器控制网页管理历史数据通知OTA 和 WS2812 时钟灯板管理。针对灯板偶发花屏且重新绘制无效切断 DC-DC 降压模块输入后又能恢复的问题,增加了 MOSFET 电子开关,让 ESP32 只断开灯板专用降压模块的电源,不必重启整个控制器。

当前光伏组件为双面60 片半片单晶 550W 板,Vmp = 35.5V,Voc = 41.85V,实测空载约 41V。当前系统按 12V 电池使用,后续考虑升级到 24V。升级前需要重新检查电压传感器MPPT逆变器DC-DC 和电子开关的额定值。

 


一系统目标与整体结构

这套系统不是单独的太阳能充电器,而是把太阳能发电电池储能逆变器智能控制网页监控和 DIY 时钟整合到一起。早期项目使用 ESP8266,后续控制器统一改为 ESP32原有的电压保护继电器手动控制低压锁定通知历史曲线和 OTA 逻辑继续保留。

系统按功能分为三条主要支路:

  1. 逆变器支路:电池通过保险与合适线缆供给逆变器ESP32 通过继电器或逆变器 Remote/Enable 控制端控制启停。
  2. ESP32 控制支路:使用独立 DC-DC 稳压电源给 ESP32传感器和控制模块供电。灯板恢复时,这一路不能断电。
  3. 时钟灯板支路:电池经 MOSFET 电子开关给灯板专用 DC-DC 降压模块供电,输出稳定 5V 后驱动 WS2812 灯板。ESP32 可以独立切断这一路电源,再恢复输出。

核心原则是:共用同一组电池,不等于所有设备必须串在同一条供电线路上。 应在电池或合适的配电点分支,每一支路按电流配置保险与线径逆变器的大电流不能经过 ESP32 细线传感器小板或灯板回路线。

二双面 550W 光伏组件的实际参数

目前使用的太阳能板为:

  • 类型:双面单晶硅组件,60 片半片电池片结构。
  • 标称最大功率:550W。
  • 最大功率点电压:Vmp = 35.5V。
  • 开路电压:Voc = 41.85V。
  • 实测空载电压:约 41V。

1. VmpVoc 和空载电压分别是什么?

  • Vmp(最大功率点电压):组件在相应测试条件下输出最大功率时的工作电压,本组件标称约 35.5V。
  • Voc(开路电压):组件没有接负载时测得的电压,本组件标称 41.85V。
  • 实测空载约 41V:与标称 Voc 接近是合理的实际值会随着光照强弱组件温度和测量条件变化。空载测得 41V,不代表组件接入 MPPT 后仍然保持 41V,也不代表当前发电功率就是 550W。

按标称功率与 Vmp 粗略估算最大功率点电流:

 

$$
I_{mp} \approx \frac{550W}{35.5V} \approx 15.5A
$$
 

这个数值是由功率和电压计算的估算值,不能代替铭牌上的 Isc(短路电流)。选择 MPPT线缆和光伏侧保护器件时,应查看完整铭牌参数,尤其是 VocIsc 和温度系数。

2. 双面组件不代表任何时候都能额外增加固定比例的功率

双面组件的背面也能吸收光线,但实际增益取决于背面照度安装高度地面颜色与反射率组件倾角周围遮挡和散热等因素。组件的 550W 铭牌功率通常是在指定标准测试条件下标定的,不能把双面增益直接当作必然恒定的额外输出。

3. MPPT 的 PV 输入电压要留出低温余量

组件 Voc = 41.85V 是标准条件下的铭牌数据。低温时,光伏组件开路电压通常会上升,所以不能只看到“空载约 41V”,就选择最大输入电压刚好等于 42V 的 MPPT。应根据组件 Voc 温度系数当地最低环境温度及串并联方式计算最不利条件下的 Voc,并留出额定余量。

单块组件接入 MPPT 时,还要确认控制器在对应电池系统电压下的启动条件最大 PV 输入电压最大 PV 电流最大充电电流与可承载功率。“80A MPPT”通常指电池侧最大充电电流等级,不代表 PV 输入电压电流可以不受限制。

4. 550W 组件对应的充电电流如何估算?

仅为理解数量级,可以用组件功率除以电池充电电压估算理想上限:

电池系统 假设充电电压 550W 理想电流估算
12V 磷酸铁锂 约 14.2V 约 38.7A
24V 磷酸铁锂 约 28.4V 约 19.4A

实际电流会因为转换损耗光照组件温度双面照度电池状态及 MPPT 限流而变化。电池BMS线缆和 MPPT 必须共同满足实际充电电流要求。

三核心组件与系统匹配

组件 当前/规划规格 选型重点
太阳能板 双面60 片半片单晶550WVmp 35.5V,Voc 41.85V 核对完整铭牌Isc温度系数低温 Voc 和安装条件
电池 当前 12V 磷酸铁锂,约 150Ah后续考虑 24V 核对 BMS 最大充放电电流及厂家给出的充电/放电电压范围
MPPT 当前使用锂电模式的控制器,原项目为 80A 级 核对 PV 最高电压PV 电流充电电流和电池系统电压支持范围
逆变器 当前 12V 纯正弦波逆变器,约 1000W 等级 12V/24V 输入必须匹配检查持续功率浪涌风扇散热和低压保护
ESP32 ESP32 / ESP32-C3 独立供电,负责网页传感器继电器和灯板电源恢复
电池电压监测 当前 12V 可用 INA219未来 24V 需更换量程更高的传感方案 INA219 总线电压范围最高 26V,24V 磷酸铁锂满充电压可能超过其量程
灯板 DC-DC 电池电压降到 5V 选足够的输入范围持续电流和散热能力观察高温与输出波动
高侧 MOSFET 电子开关 当前模块标注输入 5~36V,控制端 3~12V 当前 12V 使用用于 24V 前核对充电上限和瞬态余量不能用于 48V 电池
继电器/接触器 按逆变器的控制接口或电源电流选择 小继电器只适合控制端直接切大电流 DC 主回路必须使用相应额定值的器件

12V 电池带 1000W 逆变器时,电池侧电流可能接近或超过 90A(取决于电池电压和逆变效率),启动浪涌还会更高。升级 24V 后,类似功率下的电池电流大致减半,但所有器件仍需按实际浪涌电缆长度与额定条件设计。

四ESP32 与 INA219 电压监测

使用 INA219 的目的是稳定读取电池总线电压,并不意味着要把逆变器的大电流导入 INA219 的小型采样电阻。

1. 当前 12V 系统的测量方式

如果当前 INA219 模块只是用于测量电池电压,可以使用它的总线电压读数:

  • INA219 VCC 接 ESP32 支持的 3.3V 电源。
  • INA219 GND 接 ESP32 GND,并与被测电池负极建立共同参考。
  • SDASCL 接 ESP32 固件中配置的 I²C 引脚。
  • 被测电池正极作为电压采样点,按模块电路使用 VIN+ / VIN- 端子。若沿用原项目将 VIN+ 和 VIN- 短接仅读取总线电压的做法,必须确保该小板的线路和接法符合此用途。
  • 电池与逆变器之间的主电缆不经过 INA219 模块。

这种用法不测电流,因此电流/功率读数不能用于判断实际负载电流。模块上的小采样电阻也不能承载逆变器主电流。

ESP32 应由独立 DC-DC 稳压电源供电,不要误把电池正极直接接到 GPIO,也不要把传感器输入节点当作 ESP32 的电源输入。具体开发板的 5V/VIN/3V3 接法请按板卡规格核对。

2. 未来 24V 电池不能直接沿用 INA219

INA219 的总线电压规格最高为 26V。常见 24V 磷酸铁锂电池组若为 8 串,充电上限可达到约 29.2V,这会超过 INA219 的测量范围。升级时必须改用合适的高量程传感器,例如 TI INA228(总线电压测量最高 85V) 或者INA 226(便宜,最高36v),或使用经过计算保护与校准的分压测量方案。替换传感器时,固件中的 I²C 驱动量程转换系数和阈值也应一起更改。

INA219 官方参数:Texas Instruments INA219。

五继电器控制逆变器:保留原有保护逻辑

继电器部分保留原项目的思路,可参考已有教程:

ESP8266 驱动 JD1914 继电器控制逆变器教程

早期教程使用 ESP8266,升级 ESP32 后仍可保留“GPIO 输出控制信号—驱动级—继电器—逆变器控制端”的原理,但需要根据当前 ESP32 开发板和固件重新核对 GPIO电平触发方式和上电默认状态。

1. 控制端与大电流主回路必须区分

  • 如果逆变器有 RemoteEnable 或低电流启停接口,继电器通常只需要切换该控制信号,具体按逆变器手册接线。
  • 如果要直接切断逆变器电池主电源,必须使用具有足够直流电压持续电流和浪涌额定值的 DC 接触器/继电器,以及合适的线缆和保险丝。
  • ESP32 GPIO 不能直接驱动大电流线圈。应使用合适的继电器驱动板晶体管/ MOSFET 驱动或隔离模块,并处理线圈的反向感应电压。
  • 不同继电器模块可能是低电平触发或高电平触发。固件的 setRelay(true) 与实物逻辑必须一致,复位期间也要避免 GPIO 悬空造成意外动作。

2. 原有电压保护逻辑继续保留

系统的继电器控制逻辑包括:

  1. 高压恢复:电压回升至设定的恢复阈值后,允许重新开启继电器。
  2. 电压警告:电压达到中间警告阈值且符合趋势条件时发出提醒如果电压正在上升,可以避免一部分误报。
  3. 低压自动关闭:电压低于设定下限时,关闭逆变器控制继电器,避免电池继续深度放电。
  4. 低压锁定:触发低压保护后进入例如 1 小时的锁定期,避免电压在阈值附近反复开关。
  5. 迟滞机制:恢复值与关断值保留间隔,减少负载变化带来的频繁切换。
  6. 通知冷却:电压告警和低压关断通知设置冷却时间,避免反复发送。
  7. 手动控制:网页提供开关按钮。手动操作能否覆盖低压锁定应明确规定,并在网页反馈当前状态。
  8. 设置保存:将电压阈值等设置持久化存储,重启后读取上次配置。

这些阈值应根据电池厂家参数负载压降和现场记录设置不能把某套 12V 阈值直接套到 24V 电池上。

六WS2812 32×8 时钟灯板

灯板为 32×8 矩阵,共 256 个 WS2812 像素,由 ESP32 输出 DIN 数据。时钟绘制代码使用 Adafruit_NeoMatrixAdafruit_GFX 和 Adafruit_NeoPixel 等库。

主要显示功能

  • 仅显示时间:支持 HH:MM:SS 或 HH:MM。
  • 仅显示日期。
  • 日期与时间组合显示。
  • 时间与日期自动交替。
  • 显示设备运行时长。
  • 多种主题:流光彩虹红橙渐变粉青配色分区色彩和独立数字颜色。
  • 自定义纯色。
  • 手动亮度和自动亮度。
  • 夜间时间段自动调暗。
  • 冒号常亮或闪烁。
  • 底部电池电量像素条(电压曲线估算,仅供参考)。

长距离 DIN 数据线的处理

ESP32 到 DIN 的线长约 3~4 米时,数据传输的抗干扰余量会变小。建议:

  • GPIO 数据先经过 74AHCT125 等合适的 3.3V→5V 电平转换器。
  • 在靠近灯板 DIN 的位置串联 330Ω 或 470Ω 电阻。
  • 数据线与地线尽量成对布置或绞合,并远离逆变器交流输出线和大电流线。
  • ESP32 与灯板需要共同参考地,但灯板的大电流回流不能经过 ESP32 开发板的地线。
  • 灯板的 5V/GND 入口并联 1000μF16V 电解电容和 104(0.1μF)陶瓷电容,注意电解电容正负极。

Adafruit 的 NeoPixel 接线建议也提到,在供电入口增加 500~1000μF 电容,并在首颗像素的数据输入端串联 300~500Ω 电阻使用 3.3V 控制器驱动 5V 像素时,建议采用合适的逻辑电平转换。参考:Adafruit NeoPixel Best Practices。

七MOSFET 电子开关:定时切断灯板降压电源

1. 为什么要增加硬断电恢复?

之前遇到的问题是:时钟运行一段时间后,WS2812 灯板可能出现满屏花屏,清屏重新绘制甚至 ESP32 软件重启都无法恢复但对灯板的 DC-DC 降压模块输入断电重新上电后,显示又能恢复。

这说明“重新发送一帧数据”与“让灯板及其供电真正掉电重启”不是同一件事。故障可能与降压模块状态供电波动像素芯片状态或长数据线干扰有关。仅凭这一现象不能断言具体根因,但可以先把已经验证有效的恢复动作做成硬件控制。

2. 电源支路接法

当前使用的电子开关模块标注输入 5~36V控制端 3~12V。按模块丝印和使用说明接线:

  • IN+:接电池正极,前面串联合适保险丝。
  • IN-:接电池负极。
  • OUT+:接灯板 DC-DC 降压模块 VIN+。
  • OUT-:接灯板 DC-DC 降压模块 VIN-。
  • 控制端 +:接 ESP32 的开关控制 GPIO(当前固件使用 GPIO1)。
  • 控制端 -:接 ESP32 GND,前提是模块要求控制端与 ESP32 共地。

该模块应只控制灯板 DC-DC 降压模块,不要把 ESP32 本身或逆变器控制继电器的电源也接到被切断的输出端。ESP32 必须保持供电,才能在断电等待结束后重新接通 MOSFET 并继续控制。

接线前必须确认模块切断的是需要的电源端。 有些外观相似的电子开关实际切断负极。如果 IN- 与 OUT- 直接相通只在负极侧开关,而系统的公共地或 DIN 线路又形成旁路,关断时可能无法真正切断降压模块。应查看模块说明书,并在不接电源时用万用表初步检查端子关系无法确认时,不要带电试接。

模块控制端标注 3~12V,不代表随便接到任何 ESP32 GPIO 都一定可靠。当前接法应核实模块在 3.3V 控制下能可靠通断,并确认控制逻辑是高电平开启还是低电平开启。控制端不可以直接接 12V24V 电池正极。

3. 网页设置的自动恢复策略

在 /clock 页面设置灯板 DC-DC 电源恢复:

参数 建议初始值 说明
基础恢复周期 10 分钟 经过现场测试后可调为 30~60 分钟,以减少不必要的掉电
每次断电时间 2 秒 让降压模块和灯板真正停止供电后再重新上电
高压加速阈值 当前 12V 系统可从现场观察值开始,例如 13.0V 只有实测发现此电压区间故障率明显变高时,才启用高压加速
周期缩短倍数 例如 3 倍 高于阈值时,恢复周期约为基础周期的三分之一
最短周期 例如 1 分钟 防止参数设置导致过于频繁断电
自动恢复关闭 周期设为 0 暂停自动硬断电,仍可手动测试

举例:基础周期为 10 分钟,缩短倍数为 3 时,高压区间的恢复周期约为 3.3 分钟如果基础周期改为 30 分钟,则高压区间约为 10 分钟。实际固件应将缩短后的周期限制在最短周期之上。

高压加速是根据现场观察制定的维护策略,不代表已经证明 13V 本身就是花屏原因。请一并记录发生故障时的电池电压DC-DC 温度灯板入口 5V 和负载情况。

升级到 24V 时,13V 不再适合作为高压阈值。 24V 系统必须依据新的电池电压范围和实际记录重新设置阈值,否则会一直误判为高压而频繁断电。

4. 当前模块的电压范围与未来 24V

目前模块标注输入 5~36V。当前 12V 系统通常在范围内24V 磷酸铁锂电池满充电压可能约为 29.2V,数值上低于 36V,但仍需确认模块真实规格瞬态余量和接线条件。该模块不能用于未来 48V 电池系统,因为 48V 磷酸铁锂电池的充电电压可能达到约 58.4V,超过它的标注输入上限。

如果将来进一步升级到 48V,应选用额定电压和瞬态余量足够的高侧电子开关,并按降压模块输入电流选择持续电流与浪涌能力。不能只把现有模块换接到更高电压电池上。

八网页功能与软件结构

1. 主页:电池与逆变器控制

  • 实时电池电压与警告颜色提示。
  • 继电器状态展示和手动开关。
  • 高压恢复电压警告低压关断阈值设置。
  • 低压锁定状态和倒计时。
  • 24 小时历史电压曲线。
  • 网络 IP芯片信息可用内存存储空间等设备信息。
  • OTA 固件更新。
  • mDNS 局域网访问。
  • NTP 时间校准。
  • 可选邮件或 IFTTT Webhook 通知。

2. /clock:时钟与灯板电源恢复控制

  • 显示模式主题颜色亮度夜间调光等设置。
  • 秒数与冒号样式设置。
  • 电池电量像素条。
  • 灯板 DC-DC 定时断电恢复周期。
  • 每次断电时长。
  • 高压加速阈值和周期缩短倍数。
  • 手动执行一次断电并恢复。

设置写入 ESP32 的非易失存储,重启后重新读取。设备成功校时后可以在断网期间继续依靠系统计时运行但若完全断电且没有 RTC 备用电源,冷启动离线时无法凭空知道准确的现实时间。

3. 历史曲线不应拖住实体时钟

原工程中,网页加载历史曲线时会读取大量数据如果主循环在同步文件操作和 HTTP 响应中花费太久,其他刷新任务就可能被延迟。优化方向是顺序读取历史数据一次性或分块返回 JSON异步加载 ECharts,并将灯板刷新与慢速网页请求尽可能隔离。

ESP32-C3 是单核芯片,FreeRTOS 任务拆分可以改善调度,但不会变成真正的双核并行。程序仍要尽量避免长时间同步网络操作阻塞式邮件发送和大量重复文件定位。

九12V 升级到 24V 前要重新检查什么

如果后期使用两块 12V 电池串联成 24V,必须确认电池厂家和 BMS 允许串联,且电池在型号容量状态和使用情况上匹配。串联后电压相加,Ah 容量不相加。

升级清单:

  1. 电池和 BMS:确认 24V 系统的充电上限放电截止值最大电流及 BMS 配置。
  2. MPPT:确认支持 24V 电池,PV 输入电压能覆盖低温时的组件 Voc,充电电流与功率匹配。
  3. 逆变器:必须使用明确支持 24V 输入的型号,12V 逆变器不能接到 24V 电池。
  4. INA219:因 26V 量程限制,不可直接监测可能达到约 29.2V 的 24V 磷酸铁锂电池改用高量程测量方案。
  5. DC-DC:ESP32 支路和灯板支路都要选输入范围包含电池满充电压的模块灯板支路的输出仍需稳定在 5V。
  6. MOSFET 电子开关:确认最大输入电压瞬态耐压连续电流启动浪涌和 3.3V 控制兼容性。
  7. 逆变器控制继电器:检查线圈电压控制逻辑和触点额定值不要用小继电器直接切换超出其额定值的大电流 DC。
  8. 固件阈值:重新设置高压恢复警告低压关断和灯板高压加速阈值不能沿用 12V 参数。
  9. 线缆和保险:根据最大持续电流启动浪涌长度和压降重新核算,所有电池正极分支都应设置合适保险。

十调试经验与常见问题

1. 550W 光伏板空载只有约 41V,是否异常?

不一定。铭牌 Voc 为 41.85V,空载实测约 41V 接近铭牌值。测量时的辐照温度接触和仪表都会影响结果。要判断组件是否能达到额定功率,应在合适光照与负载下检查 MPPT 工作电压电流和功率,而不是只靠空载电压。

2. 为什么 XL4015 发热后灯板更容易花屏?

持续发热可能表明负载散热或输入条件不适合该模块,但不能仅凭发热就断定根因。既然曾经观察到换用 LM2596S 后故障间隔延长,建议比较两个模块在同一负载下的输入电压5V 输出温升和实际电流必要时使用输出电流余量和散热更充分的 DC-DC 模块。

3. 为什么软件重启和清屏无效,断开降压模块又能恢复?

清屏只发送新数据ESP32 软件重启也不一定会让独立供电的 WS2812 像素芯片掉电。切断专用 DC-DC 的输入则能让整个下游电源重新启动,因此更接近实际观察到有效的恢复动作。定时硬断电可以降低故障影响,但不能代替数据线和电源质量排查。

4. 灯板自动断电时,会不会影响逆变器?

正确布线时不会。MOSFET 电子开关只串在灯板专用 DC-DC 的输入电源上,ESP32 控制支路与逆变器支路保持供电。切断时灯板会短暂熄灭,ESP32 不重启,继电器状态也不应因这项操作被改变。

5. 24V 系统能不能继续用现在的开关模块?

当前模块标注输入 5~36V,理论范围覆盖很多 24V 电池的工作电压,但必须核对充电上限和瞬态耐压。若模块真实额定值散热或输入瞬态余量不够,就应换规格更高的模块。它不适合 48V 电池。

6. 太阳能与市电切换怎么做?

如果要保护台式机和服务器,不应仅依赖普通继电器的快速动作或随意并联电源。优先考虑合格的 UPS具备旁路功能的逆变器或有额定值与机械/电气互锁的转换设备。不得把市电与逆变器交流输出直接并联。市电切换涉及触电短路与火灾风险,必须按当地电气规范施工。

十一后续扩展:市电与太阳能切换

当前主线是离网太阳能供电逆变器控制与灯板可靠性。后续若希望市电与太阳能之间自动切换,建议单独设计,并优先使用合格 UPS 或有明确认证和额定值的双电源转换设备。

普通机械继电器可能产生切换间隙固态继电器并不自动等同于不间断电源,常见小功率 AC SSR 也不能直接承担大功率逆变器输出。两个交流电源之间必须有可靠互锁和合规的切换方案,避免相互反送电。单独添加低压超级电容也不能直接保证电脑的 220V 输入不中断。

扩展:使用 INA226 替代 INA219,适配 24V 太阳能储能系统

原来的电压监测方案采用 INA219。随着后期计划将太阳能储能系统从 12V 升级到 24V,原来的 INA219 在测量量程方面逐渐接近限制,因此可以考虑改用 INA226。

INA226 同样通过 I²C 与 ESP32 通信,可以测量总线电压分流电压,并在正确配置后计算电流和功率。本文目前主要使用其总线电压监测功能,保留 ESP32 原有的继电器控制低压保护网页监控历史曲线及通知逻辑。

1. INA219 与 INA226 有什么区别?

对比项目 INA219 INA226
总线电压测量范围 0~26V 0~36V
通信接口 I²C I²C
工作供电范围 3.0~5.5V 2.7~5.5V
电压测量分辨率 4mV/LSB(总线电压寄存器) 1.25mV/LSB(总线电压寄存器)
电流测量 支持 支持
功率计算 支持 支持
ESP32 接线 SDASCLVCCGND SDASCLVCCGND
软件驱动 INA219 对应驱动 INA226 对应驱动

以上量程和分辨率以芯片数据手册为准,具体模块还要考虑外围电路和实际测量条件。

参考: TI INA219 官方资料TI INA226 官方数据手册。

对于目前的 12V 磷酸铁锂系统,INA219 已经能够满足常规的电池电压监测需求。改用 INA226 的主要考虑是未来升级到 24V 电池后拥有更大的测量范围,而不是因为 INA219 完全不能用于当前系统。

2. INA226 与 ESP32-C3 的连接

本项目继续使用 ESP32-C3 Mini,I²C 引脚保持不变:

INA226 模块 ESP32-C3 作用
VCC / VS 3.3V 为传感器供电
GND GND 公共参考地
SDA GPIO4 I²C 数据线
SCL GPIO5 I²C 时钟线
A0A1(如果有) 按模块说明连接 设置 I²C 地址
ALERT(如果有) 可选 GPIO 用于硬件告警,当前程序未使用时可以不接

INA219 和 INA226 的 I²C 信号线接法基本一致,因此更换传感器时,GPIO4GPIO5 通常不需要改变。不过,两个模块的排针顺序螺丝端子及板载上拉电阻可能不同,必须按实际模块上的丝印接线,不能只根据外观或引脚位置判断。

建议 INA226 模块使用 3.3V 供电,并确认 SDASCL 的上拉电压也是 3.3V,避免将 5V 逻辑电平直接送入 ESP32-C3。

3. 只测量电池电压时如何接线?

INA266:VBUS 和IN+短接,电源+连接IN+, INA219 IN- 和IN+短接,电源+连接IN+

本项目的当前目标是监测电池电压,并不要求 INA226 测量流过逆变器的几十安培电流。与让大电流流经小型传感模块相比,使用独立的电压采样节点更适合这一需求。

INA226 芯片与 INA219 有一个需要特别注意的区别:INA226 使用独立的 VBUS 测量引脚检测总线电压,而 IN+IN− 用于检测采样电阻两端的差分电压。不同 INA226 成品模块可能将 VBUS 与板上的某个输入节点连接起来,因此接线必须结合具体模块电路判断。

对于已经在本项目中验证可正常读取电压的模块,可以沿用对应的测量节点连接方式。

这里需要区分两种使用方式:

  • 仅测量电压: 如果已经确认模块的 VBUS 测量节点与上述正极节点相连,可以让 VIN+VIN− 处于同一电位。此时分流电压接近零,不再测量负载电流。
  • 测量电压和电流: 不要短接 VIN+VIN−。必须让待测负载电流按照模块规定的方向经过采样电阻,并正确配置 INA226 的测量模式校准寄存器和电流换算参数。

不能把 VIN+VIN− 短接的接法无条件应用于所有 INA226 模块。若模块的 VBUS 没有连接到正确的电压节点,芯片即使能够正常通过 I²C 通信,也可能读不到真实的电池电压。

4. INA226 的软件配置需要与 INA219 区分

替换硬件后,不能只更换引脚名称,继续使用原来的 INA219 驱动。

本项目采用直接读写 INA226 寄存器的方式,不必依赖 INA219 的第三方库。初始化时需要确认 I²C 地址芯片 ID配置寄存器以及总线电压寄存器均能正常工作。

之前调试时曾遇到网页显示的电压固定不变的问题,最终发现是配置寄存器的测量模式没有与程序注释一致。INA226 配置寄存器的最低三位用于选择测量模式:

MODE 位 测量模式
101 连续测量分流电压
110 连续测量总线电压
111 连续测量分流电压与总线电压

当前只监测电池电压时,应选择连续总线电压测量模式。项目中使用的配置值为 0x4526,其中最低三位为 110。如果改为同时监测电流和电压,需要重新评估配置与校准设置,不能简单沿用纯电压模式。

INA226 总线电压寄存器的每个最低有效位对应 1.25mV,因此电压换算公式为:

$$
V_{\text{bus}}=\text{BusVoltageRegister}\times 0.00125
$$

例如,原始寄存器读数为 10400,则换算结果为:

$$
10400\times0.00125=13.00\text{V}
$$

若网页显示的电压与万用表存在明显偏差,应该优先检查测量节点寄存器模式和原始读数,而不是直接在程序里减去一个固定偏差值。

5. 升级到 24V 电池时有哪些注意事项?

INA219 的总线电压范围最高为 26V,而常见 24V 磷酸铁锂电池组采用 8 串电芯,充电电压可能达到约 29.2V。因此,INA219 不适合直接覆盖这一完整电压范围。

INA226 的总线电压测量范围为 0~36V,可以覆盖常见 24V 磷酸铁锂电池的正常工作和充电电压,但仍必须考虑线路瞬态与模块实际额定值,不能把 36V 当成可以长期顶格运行的目标。

还需要注意,本项目使用的双面 60 片半片单晶 550W 太阳能板,参数为 Vmp 35.5VVoc 41.85V,空载实测约 41V。INA226 不能直接连接这块太阳能板的开路电压端,因为其 41.85V 已经超过 36V 的总线电压测量范围。 若需监测太阳能板电压,应选用量程足够的传感器,或设计具有合适耐压比例和保护措施的测量电路。

如果后期继续升级到 48V 磷酸铁锂电池组,16 串电芯的充电电压可能达到 58.4V,INA226 同样不适合直接测量。届时应换用总线电压量程更高的监测芯片,例如 INA228,并重新核对模块外围电路输入保护和测量精度。

参考: TI INA228 官方资料。

6. 与 ESP32 智能继电器系统的配合

更换 INA226 后,原有的 ESP32 智能控制功能可以继续保留,只需要统一传感器读取接口和测量变量:

  • 周期采集电池电压,提供实时网页显示。
  • 使用高压恢复警告和低压关闭阈值,执行原有继电器保护逻辑。
  • 记录历史电压,供网页曲线查看。
  • 在电压持续下降并达到相应条件时,通过邮件或通知 API 发送提醒。
  • 将设置保存到非易失存储,避免断电或重启后参数丢失。
  • 保留 /clock 时钟页面WS2812 显示和 MOSFET 电子开关定时硬断电恢复功能。

 

十二总结

这个项目从太阳能发电与 12V 电池储能出发,逐步整合 ESP32INA219 电压监测逆变器继电器网页管理历史曲线通知OTA 和 WS2812 时钟灯板。

其中几个值得保留的实践结论:

  • 光伏板实际规格应以铭牌为准:本组件为双面 60 片半片单晶 550W,Vmp 35.5VVoc 41.85V,空载约 41V。
  • INA219 适合当前 12V 系统电压监测升级 24V 前应替换超出 26V 测量量程限制的传感方案。
  • 逆变器控制端继电器与灯板 DC-DC 输入的 MOSFET 开关是两个独立功能,不能混用。
  • 灯板长期花屏时,既要排查 5V 模块的温升输出和布线,也可通过独立电子开关定时断电恢复这不会重启 ESP32 或主动改变逆变器继电器。
  • 高压缩短恢复周期是减少故障影响的经验措施,阈值必须按当前电池系统和故障记录设置升级 24V 后重新标定。
  • 所有高电流连接电池保险直流开关PV 输入电压和电池充电参数都必须按器件额定值验证,不能因网页显示正常就忽略硬件安全。

这套方案保留了原有电压保护和继电器控制思路,并补上灯板专用电源的硬断电恢复。后续升级 24V 时,只需按清单重新核对传感器量程MPPT逆变器DC-DC 和 MOSFET 模块,就能在不混淆各支路功能的前提下继续扩展。


参考资料