一、项目概述
这是开源仓库 vinthrewch/powercontrol,一套独立硬件级电源看门狗 + 继电器控制器,专为树莓派(Raspberry Pi)工业自动化场景设计,解决 Linux 系统死机、文件系统损坏后无法安全断电、电池耗尽损毁设备的痛点。

核心设计目标
将电源控制逻辑从树莓派主机剥离至独立 AVR 单片机硬件,实现:
系统卡死时自动断电重启(硬件看门狗)
安全上电 / 关机时序管理,避免存储介质损坏
断电、市电丢失、人工按键触发标准化电源流程
主机关机后硬件持续供电监控,保留唤醒能力
二、硬件板卡(hw/powercontrol_2.1)
硬件规格清单
主控:ATMEGA88PB AVR 单片机,内置 8MHz RC 振荡器
输入:12V 直流供电,自带片载 5V 稳压电路
功率开关:ULN2003A 驱动双线圈锁存继电器(脉冲驱动,无需持续通电)
交互组件:手动电源按键、红 / 绿状态 LED
通信接口:I2C 总线(带串联保护电阻),硬件地址
0x68关键特性:MCU 永久带电,下游树莓派断电后仍可监测唤醒信号
三、固件(code/powercontrol)
运行环境
AVR-GCC 编译,裸机 C 代码,无操作系统,单循环标志驱动架构,禁止在中断服务函数 (ISR) 执行耗时任务,保障时序稳定。
固件功能
锁存继电器控制(脉冲触发,不持续耗电)
I2C 主机指令交互,看门狗喂狗、开关继电器、LED 控制
市电检测(AC_OK 硬件输入)
低功耗休眠模式(闲置时降低功耗)
状态寄存器回读:看门狗计时、电源状态、超时计数
编译流程
bash
运行
cd code/powercontrol
make
make flash
编译参数、烧录器、熔丝配置全部在 Makefile 内定义,可按需适配不同硬件环境。
四、I2C 通信协议(核心交互接口)
基础参数
I2C 从机地址:
0x68通信模式:写指令控制继电器 / LED;读指令读取硬件状态寄存器
完整指令集
指令码 | 功能说明 |
|---|---|
0x00 | 看门狗喂狗(NOP,重置超时计时器) |
0x01 | 继电器断开(整机断电) |
0x02 | 继电器吸合(整机上电) |
0x03 | 红色 LED 关闭 |
0x04 | 红色 LED 点亮 |
0x05 | 绿色 LED 关闭 |
0x06 | 绿色 LED 点亮 |
0x10 | 设置看门狗超时阈值(单位 16ms) |
读写示例
发送控制指令:i2ctransfer -y 1 w@0x68 0x02(上电)
读取硬件状态:i2ctransfer -y 1 r@0x68 4, 返回 4 字节数据:status字节、市电状态、看门狗计时、超时总次数
五、设计约束(Non-Goals 明确不实现功能)
项目主动放弃以下功能,全部交由树莓派主机实现:
RTC 实时时钟、定时调度
网络通信
文件系统管理
软件层面电源控制
UPS 不间断电源逻辑
目的:简化硬件复杂度,让硬件仅承担底层物理电源安全,业务逻辑交给 Linux 主机。
六、适用场景与优势
典型场景
户外无人值守工控、远程灌溉设备、野外物联网节点、7×24 小时无人树莓派设备。
相比树莓派原生看门狗的优势
完全独立硬件:Linux 内核崩溃、SD 卡损坏、系统卡死时仍可执行断电重启
锁存继电器:断电后不维持线圈耗电,适合电池供电设备
永久带电 MCU:主机关机后仍能检测人工按键、市电恢复唤醒设备
标准化时序:市电丢失、软件卡死、人工操作三种场景统一电源恢复逻辑
I2C 标准化接口,上层程序可简单调用控制硬件电源
七、许可协议
固件 / 软件:MIT 开源许可证
PCB 硬件设计:CERN-OHL-P v2(宽松开源硬件协议,允许商用、修改、二次分发)
版权归属:2026 Vinnie Moscantello
