文章目录
-
- 每日一句正能量
- 摘要
- 一、引言:为什么电源时序至关重要
- 二、多路电源上电时序设计
-
- [2.1 上电时序的基本原则](#2.1 上电时序的基本原则)
- [2.2 时序控制的技术实现](#2.2 时序控制的技术实现)
-
- [2.2.1 RC延迟电路(简单方案)](#2.2.1 RC延迟电路(简单方案))
- [2.2.2 电源监控芯片时序控制](#2.2.2 电源监控芯片时序控制)
- [2.2.3 PMIC集成方案](#2.2.3 PMIC集成方案)
- 三、电源监控与阈值配置
-
- [3.1 监控参数设计](#3.1 监控参数设计)
- [3.2 STM32内部电源监控](#3.2 STM32内部电源监控)
- [3.3 外部监控芯片应用](#3.3 外部监控芯片应用)
- 四、复位电路设计
-
- [4.1 复位时序分析](#4.1 复位时序分析)
- [4.2 复位电路实现](#4.2 复位电路实现)
-
- [4.2.1 RC复位电路(基础方案)](#4.2.1 RC复位电路(基础方案))
- [4.2.2 专用复位芯片(推荐方案)](#4.2.2 专用复位芯片(推荐方案))
- 五、看门狗设计与喂狗策略
-
- [5.1 看门狗分类与选型](#5.1 看门狗分类与选型)
- [5.2 多级看门狗架构](#5.2 多级看门狗架构)
- [5.3 STM32看门狗配置](#5.3 STM32看门狗配置)
- [5.4 多任务喂狗策略](#5.4 多任务喂狗策略)
- [5.5 看门狗避坑指南](#5.5 看门狗避坑指南)
- 六、掉电保护与故障处理
-
- [6.1 掉电时序设计](#6.1 掉电时序设计)
- [6.2 故障记录与诊断](#6.2 故障记录与诊断)
- [七、PMIC集成方案 vs 分立方案](#七、PMIC集成方案 vs 分立方案)
- 八、实战调试与测试
-
- [8.1 上电时序测试](#8.1 上电时序测试)
- [8.2 监控阈值验证](#8.2 监控阈值验证)
- [8.3 看门狗测试](#8.3 看门狗测试)
- 九、总结与展望

每日一句正能量
那些看似慢的时光,恰恰是在为未来的快积蓄力量
慢不是停滞,是扎根、试错、积累认知。没有那些"慢"的沉淀,未来的"快"会是脆弱的、不可持续的。慢,是为快准备的唯一方式。
摘要
摘要: 在复杂嵌入式系统中,多路电源的时序控制、监控与复位机制是保障系统可靠启动和稳定运行的核心基础。本文深入剖析电源上电/掉电时序的设计原理,系统讲解电源监控芯片的选型与阈值配置,详细阐述硬件看门狗与软件看门狗的协同工作机制,并结合STM32与TI PMIC的实战案例,提供完整的电路设计、驱动代码与调试方案,助力开发者构建高可靠性的电源管理系统。
一、引言:为什么电源时序至关重要
现代嵌入式系统通常需要多路电源轨供电:3.3V核心电压、1.8V IO电压、1.2V CPU核心电压、0.9V DDR内存电压、5V模拟电压等。这些电源轨之间存在严格的时序依赖关系------上电顺序错误可能导致闩锁效应(Latch-up)、总线冲突、数据损坏甚至芯片永久损坏。
在实际项目中,我曾遇到以下典型问题:
- 案例1:某FPGA项目中,1.8V IO电源先于3.3V核心电源上电,导致FPGA配置引脚处于不确定状态,上电后配置失败率约5%
- 案例2:某工业控制器中,未设计电源监控电路,电网波动导致电压跌落时系统进入不可预期的状态,偶发性死机
- 案例3:某IoT设备中,看门狗配置不当,在OTA升级过程中触发复位,导致固件变砖
这些问题共同指向一个核心需求:系统化的电源时序控制、监控与保护机制。
二、多路电源上电时序设计
2.1 上电时序的基本原则
电源上电时序设计需遵循以下核心原则:
- 核心先于外围:CPU/DSP核心电压先于IO电压上电,确保内部逻辑先于外部接口就绪
- 数字先于模拟:数字电路电源先于模拟电路,避免数字噪声干扰模拟精度
- 源端先于负载:电源芯片先于被供电芯片使能,防止反向电流
- 复位最后释放:所有电源稳定后,再释放复位信号,确保系统从确定状态启动

上图展示了一个典型的5路电源上电时序。核心电源(3.3V)最先上电,随后依次是IO电源(1.8V)、CPU电源(1.2V)、DDR电源(0.9V)和模拟电源(5.0V),每路间隔10ms。所有电源稳定后(约55ms),复位信号释放,系统开始启动。
2.2 时序控制的技术实现
2.2.1 RC延迟电路(简单方案)
对于2-3路电源的简单系统,可以使用RC延迟电路实现基本时序控制:
VIN ──┬──[R1]──┬── EN1 (第一路电源使能)
│ │
│ [C1]── GND
│
├──[R2]──┬── EN2 (第二路电源使能,延迟上电)
│ │
│ [C2]── GND
│
└──[R3]──┬── EN3 (第三路电源使能,进一步延迟)
│
[C3]── GND
延迟时间计算公式: T d e l a y = 0.69 × R × C T_{delay} = 0.69 \times R \times C Tdelay=0.69×R×C
缺点:精度低(受电容容差、温度影响),无法灵活调整,无监控功能。
2.2.2 电源监控芯片时序控制
使用专用监控芯片(如MAX16067、ADM1066)可以实现精确的时序控制:

MAX16067典型应用:
c
/* MAX16067 I2C配置:4路电源时序控制 */
#define MAX16067_ADDR 0x58
/* 配置时序延迟 */
void max16067_config_sequence(void) {
/* 设置各路电源的使能延迟 */
/* SEQ1: 3.3V核心电源,立即使能 */
max16067_write_reg(0x00, 0x00); // SEQ1 delay = 0ms
/* SEQ2: 1.8V IO电源,延迟10ms */
max16067_write_reg(0x01, 0x0A); // SEQ2 delay = 10ms
/* SEQ3: 1.2V CPU电源,延迟20ms */
max16067_write_reg(0x02, 0x14); // SEQ3 delay = 20ms
/* SEQ4: 0.9V DDR电源,延迟30ms */
max16067_write_reg(0x03, 0x1E); // SEQ4 delay = 30ms
/* 使能时序控制器 */
max16067_write_reg(0x10, 0x0F); // 使能SEQ1-SEQ4
}
2.2.3 PMIC集成方案
对于复杂系统,TI TPS65219、LP8733等PMIC芯片集成了多路DC-DC、LDO、监控和时序控制功能:
c
/* TPS65219 PMIC配置 */
#define TPS65219_ADDR 0x24
/* 配置上电时序 */
void tps65219_config_power_sequence(void) {
/* 配置BUCK1 (3.3V): 立即启动 */
tps65219_write_reg(0x02, 0x01); // BUCK1_EN = 1, delay = 0
/* 配置BUCK2 (1.8V): 延迟5ms */
tps65219_write_reg(0x03, 0x15); // BUCK2_EN = 1, delay = 5ms
/* 配置BUCK3 (1.2V): 延迟10ms */
tps65219_write_reg(0x04, 0x2A); // BUCK3_EN = 1, delay = 10ms
/* 配置LDO1 (0.9V): 延迟15ms */
tps65219_write_reg(0x05, 0x3F); // LDO1_EN = 1, delay = 15ms
/* 配置LDO2 (5.0V): 延迟20ms */
tps65219_write_reg(0x06, 0x54); // LDO2_EN = 1, delay = 20ms
/* 配置复位延迟:所有电源稳定后50ms释放 */
tps65219_write_reg(0x07, 0x32); // RESET delay = 50ms
}
三、电源监控与阈值配置
3.1 监控参数设计
电源监控需要配置以下关键参数:

欠压锁定(UVLO)阈值:
- 典型设置:标称电压的90%
- 例如3.3V系统,UVLO = 2.97V(约3.0V)
- 迟滞电压:200mV,防止在阈值附近抖动
过压保护(OVP)阈值:
- 典型设置:标称电压的110%
- 例如3.3V系统,OVP = 3.63V(约3.6V)
- 响应时间:< 10μs
监控精度要求:
| 电源轨 | 标称电压 | UVLO阈值 | OVP阈值 | 监控精度 |
|---|---|---|---|---|
| 3.3V | 3.30V | 2.97V | 3.63V | ±1.5% |
| 1.8V | 1.80V | 1.62V | 1.98V | ±2.0% |
| 1.2V | 1.20V | 1.08V | 1.32V | ±2.5% |
| 0.9V | 0.90V | 0.81V | 0.99V | ±3.0% |
3.2 STM32内部电源监控
STM32系列MCU内置了PVD(Programmable Voltage Detector)和BOR(Brown-out Reset)功能:
c
/* STM32 PVD配置 */
void stm32_pvd_config(void) {
/* 使能PWR时钟 */
__HAL_RCC_PWR_CLK_ENABLE();
/* 配置PVD阈值:2.9V (Level 5) */
HAL_PWR_ConfigPVD(PWR_PVDLEVEL_5);
/* 使能PVD中断 */
HAL_PWR_EnablePVD();
/* 配置PVD中断优先级 */
HAL_NVIC_SetPriority(PVD_IRQn, 2, 0);
HAL_NVIC_EnableIRQ(PVD_IRQn);
}
/* PVD中断处理:电压跌落预警 */
void PVD_IRQHandler(void) {
HAL_PWR_PVD_IRQHandler();
}
void HAL_PWR_PVDCallback(void) {
/* 电压低于阈值,执行紧急保存 */
system_emergency_save();
/* 关闭非关键外设 */
peripheral_shutdown();
/* 进入安全模式 */
system_enter_safe_mode();
}
3.3 外部监控芯片应用
对于需要监控多路电源的系统,推荐使用专用监控芯片:
c
/* TPS3700双通道监控芯片配置 */
/* 通道1:监控3.3V,欠压阈值2.9V */
/* 通道2:监控1.8V,欠压阈值1.6V */
#define TPS3700_VITP_3V3 2.9f /* 3.3V欠压阈值 */
#define TPS3700_VITP_1V8 1.6f /* 1.8V欠压阈值 */
/* 计算分压电阻 */
/* TPS3700内部参考电压 = 400mV */
/* R1 = R2 × (Vmon/Vref - 1) */
/* 3.3V监控分压 */
/* R1 = 10kΩ, R2 = 1.54kΩ */
/* Vmon = 400mV × (1 + 10k/1.54k) = 2.99V ≈ 3.0V */
/* 1.8V监控分压 */
/* R1 = 10kΩ, R2 = 2.94kΩ */
/* Vmon = 400mV × (1 + 10k/2.94k) = 1.76V ≈ 1.8V */
/* 读取监控状态 */
uint8_t tps3700_read_status(void) {
/* OUT1: 3.3V监控状态 */
/* OUT2: 1.8V监控状态 */
uint8_t status = HAL_GPIO_ReadPin(TPS3700_OUT1_GPIO_Port, TPS3700_OUT1_Pin);
status |= (HAL_GPIO_ReadPin(TPS3700_OUT2_GPIO_Port, TPS3700_OUT2_Pin) << 1);
return status;
}
四、复位电路设计
4.1 复位时序分析
复位电路的核心功能是确保系统在电源稳定后才释放复位信号,并在电源异常时及时复位系统。

上电复位时序要点:
- 复位延迟:电源稳定后,保持复位至少100-200ms,确保芯片内部电路完全初始化
- 阈值选择:复位释放阈值应高于芯片最低工作电压,通常选择VCC的90%
- 迟滞设计:防止电源噪声导致的复位抖动
4.2 复位电路实现
4.2.1 RC复位电路(基础方案)
c
/* RC复位电路参数计算 */
/* 复位脉冲宽度: T = R × C × ln(VCC/(VCC-Vth)) */
/* 假设 VCC=3.3V, Vth=1.5V, 要求 T=200ms */
/* T = R × C × ln(3.3/1.8) ≈ R × C × 0.6 */
/* 取 C=10μF, 则 R = 0.2/(10μ×0.6) ≈ 33kΩ */
/* 缺点:复位宽度受电源爬升速度影响,精度低 */
4.2.2 专用复位芯片(推荐方案)
c
/* MAX809/MAX810复位芯片 */
/* 特点:精确复位阈值、固定复位脉宽、低功耗 */
/* MAX809选型 */
/* MAX809TEUR: 阈值3.08V, 复位脉宽240ms */
/* MAX809SEUR: 阈值2.93V, 复位脉宽240ms */
/* MAX809REUR: 阈值2.63V, 复位脉宽240ms */
/* 手动复位功能 */
void system_manual_reset(void) {
/* 拉低MR引脚 */
HAL_GPIO_WritePin(MR_GPIO_Port, MR_Pin, GPIO_PIN_RESET);
HAL_Delay(10); /* 保持10ms */
HAL_GPIO_WritePin(MR_GPIO_Port, MR_Pin, GPIO_PIN_SET);
}
/* 复位源检测 */
uint8_t system_get_reset_source(void) {
uint32_t reset_flags = RCC->CSR;
if (reset_flags & RCC_CSR_PORRSTF) {
return RESET_SOURCE_POWER_ON; /* 上电复位 */
}
if (reset_flags & RCC_CSR_PINRSTF) {
return RESET_SOURCE_EXTERNAL; /* 外部复位 */
}
if (reset_flags & RCC_CSR_IWDGRSTF) {
return RESET_SOURCE_IWDG; /* 独立看门狗复位 */
}
if (reset_flags & RCC_CSR_WWDGRSTF) {
return RESET_SOURCE_WWDG; /* 窗口看门狗复位 */
}
if (reset_flags & RCC_CSR_SFTRSTF) {
return RESET_SOURCE_SOFTWARE; /* 软件复位 */
}
return RESET_SOURCE_UNKNOWN;
}
五、看门狗设计与喂狗策略
5.1 看门狗分类与选型
看门狗(Watchdog)是系统的"最后一道防线",用于检测和恢复程序跑飞、死循环等软件故障。
硬件看门狗 vs 软件看门狗:
| 特性 | 硬件看门狗 | 软件看门狗 |
|---|---|---|
| 时钟源 | 独立RC振荡器 | 系统时钟 |
| 可靠性 | 高(不受系统故障影响) | 低(系统死机时失效) |
| 灵活性 | 低(固定超时时间) | 高(可编程配置) |
| 功耗 | 低(μA级) | 中(mA级) |
| 成本 | 需外接芯片 | 免费(使用MCU定时器) |
| 典型芯片 | MAX6369、CAT706、STWD100 | STM32 IWDG/WWDG |
5.2 多级看门狗架构
对于高可靠性系统,推荐采用多级看门狗架构:

架构设计要点:
- 硬件看门狗(最外层):超时时间1-2秒,系统级保护
- 软件看门狗(中间层):超时时间200-500ms,任务级保护
- 任务心跳(最内层):超时时间50-100ms,功能级保护
5.3 STM32看门狗配置
c
/* 独立看门狗(IWDG)配置 */
void iwdg_init(void) {
/* IWDG时钟源:LSI = 32kHz */
/* 预分频:64分频 → 计数器时钟 = 500Hz */
/* 重装载值:500 → 超时时间 = 1秒 */
IWDG->KR = 0x5555; /* 使能寄存器访问 */
IWDG->PR = 0x04; /* 预分频:64 */
IWDG->RLR = 500; /* 重装载值:500 */
IWDG->KR = 0xAAAA; /* 重装载计数器 */
IWDG->KR = 0xCCCC; /* 使能看门狗 */
}
/* 喂狗 */
void iwdg_feed(void) {
IWDG->KR = 0xAAAA; /* 重装载计数器 */
}
/* 窗口看门狗(WWDG)配置 */
void wwdg_init(void) {
/* WWDG时钟源:PCLK1/4096 */
/* 假设PCLK1=36MHz,分频后时钟 ≈ 8.8kHz */
/* 窗口值:0x7F(上限),下限定值:0x50 */
/* 超时时间:约50ms */
WWDG->CFR = WWDG_CFR_EWI | WWDG_CFR_WDGTB0 | 0x7F; /* 使能提前唤醒中断 */
WWDG->CR = WWDG_CR_WDGA | 0x7F; /* 使能看门狗,初始值0x7F */
}
/* WWDG喂狗(必须在窗口内) */
void wwdg_feed(void) {
/* 当前计数器值必须在0x50-0x7F之间 */
if ((WWDG->CR & WWDG_CR_T) > 0x50) {
WWDG->CR = 0x7F; /* 重装载 */
}
}
5.4 多任务喂狗策略
在RTOS环境下,需要实现任务级看门狗监控:
c
/* 任务心跳结构 */
typedef struct {
uint32_t last_feed_time;
uint32_t timeout_ms;
uint8_t is_alive;
} task_heartbeat_t;
task_heartbeat_t task_heartbeats[TASK_COUNT] = {
{0, 100, 0}, /* 通信任务:100ms */
{0, 150, 0}, /* 传感器任务:150ms */
{0, 80, 0}, /* 控制任务:80ms */
{0, 200, 0}, /* 存储任务:200ms */
{0, 300, 0}, /* 显示任务:300ms */
{0, 500, 0}, /* 日志任务:500ms */
};
/* 任务喂狗函数 */
void task_feed_watchdog(uint8_t task_id) {
if (task_id < TASK_COUNT) {
task_heartbeats[task_id].last_feed_time = HAL_GetTick();
task_heartbeats[task_id].is_alive = 1;
}
}
/* 看门狗仲裁器(在定时器中断中调用) */
void watchdog_arbitrator(void) {
uint32_t current_time = HAL_GetTick();
uint8_t all_alive = 1;
for (int i = 0; i < TASK_COUNT; i++) {
if ((current_time - task_heartbeats[i].last_feed_time) > task_heartbeats[i].timeout_ms) {
task_heartbeats[i].is_alive = 0;
all_alive = 0;
/* 记录故障任务 */
system_log_error(\"Task %d watchdog timeout\", i);
}
}
if (all_alive) {
/* 所有任务正常,喂硬件看门狗 */
iwdg_feed();
} else {
/* 有任务异常,不喂狗,等待硬件看门狗复位 */
/* 或执行软件复位 */
NVIC_SystemReset();
}
}
5.5 看门狗避坑指南
常见陷阱与解决方案:
| 陷阱 | 现象 | 解决方案 |
|---|---|---|
| 中断中喂狗 | 主程序死循环但中断正常,看门狗不触发 | 只在主循环中喂狗 |
| 初始化期间未使能 | 启动阶段跑飞无法检测 | 上电立即使能硬件看门狗 |
| 喂狗周期过长 | 系统卡顿无法及时发现 | 喂狗周期 < 超时时间的50% |
| 单点喂狗 | 部分任务死循环无法检测 | 多任务独立喂狗 |
| OTA升级期间复位 | 升级过程超时导致变砖 | 升级前禁用或延长超时 |
| 低功耗模式冲突 | 休眠时看门狗溢出 | 使用STOP模式兼容的看门狗 |
六、掉电保护与故障处理
6.1 掉电时序设计
掉电时序与上电时序相反,但需要额外的保护措施:

掉电保护设计要点:
- 提前检测:主电源掉电后,通过大容量储能电容(如1000μF)提供5-10ms的检测窗口
- 提前复位:在电源电压跌落到临界值前触发复位,防止芯片在低压下异常工作
- 数据保存:在储能电容供电期间,将关键数据写入EEPROM或Flash
- 有序关闭:CPU电源最先关闭,IO电源后关闭,避免总线冲突
c
/* 掉电检测与紧急处理 */
void power_loss_handler(void) {
/* 检测主电源(通过ADC或比较器) */
if (HAL_ADC_GetValue(&hadc1) < POWER_LOSS_THRESHOLD) {
/* 立即禁止所有中断 */
__disable_irq();
/* 保存关键数据到Flash */
flash_write_critical_data();
/* 关闭非关键外设 */
peripheral_emergency_shutdown();
/* 设置掉电标志 */
system_set_power_loss_flag();
/* 等待复位或进入低功耗模式 */
while(1) {
/* 空循环,等待电源完全消失或复位 */
}
}
}
6.2 故障记录与诊断
c
/* 故障记录结构 */
typedef struct {
uint32_t timestamp;
uint8_t reset_source;
uint8_t failed_power_rail;
uint16_t voltage_readings[8];
uint8_t task_status;
uint32_t error_code;
} fault_record_t;
/* 保存故障记录 */
void system_save_fault_record(void) {
fault_record_t record;
record.timestamp = HAL_GetTick();
record.reset_source = system_get_reset_source();
record.failed_power_rail = max16067_read_fault_status();
/* 读取各路电源电压 */
for (int i = 0; i < 8; i++) {
record.voltage_readings[i] = adc_read_power_rail(i);
}
/* 保存到Flash保留区 */
flash_write_fault_record(&record);
}
/* 启动时读取故障记录 */
void system_read_fault_record(void) {
fault_record_t record;
flash_read_fault_record(&record);
if (record.reset_source != RESET_SOURCE_POWER_ON) {
/* 非上电复位,说明发生过故障 */
printf(\"System reset detected!\\n\");
printf(\" Source: %d\\n\", record.reset_source);
printf(\" Failed rail: %d\\n\", record.failed_power_rail);
printf(\" Timestamp: %lu\\n\", record.timestamp);
/* 清除故障记录 */
flash_clear_fault_record();
}
}
七、PMIC集成方案 vs 分立方案

选型决策流程:
- 电源轨数量:≤3路可考虑分立方案,>3路推荐PMIC
- 时序复杂度:简单时序用RC/监控芯片,复杂时序用PMIC
- 空间约束:空间紧张选PMIC,空间充裕可选分立
- 成本敏感度:大批量生产PMIC成本优势明显
- 功能安全需求:汽车/工业应用选功能安全PMIC(如TPS65381A-Q1,支持ASIL-D)
八、实战调试与测试
8.1 上电时序测试
使用示波器测量各路电源的上升沿和时序间隔:
c
/* 时序测试GPIO标记 */
void power_sequence_test(void) {
/* 在各路电源使能时翻转GPIO */
HAL_GPIO_WritePin(TEST_GPIO_Port, TEST_PIN_3V3, GPIO_PIN_SET); // 3.3V使能
HAL_Delay(1);
HAL_GPIO_WritePin(TEST_GPIO_Port, TEST_PIN_1V8, GPIO_PIN_SET); // 1.8V使能
HAL_Delay(1);
HAL_GPIO_WritePin(TEST_GPIO_Port, TEST_PIN_1V2, GPIO_PIN_SET); // 1.2V使能
/* ... */
}
8.2 监控阈值验证
c
/* 电源监控测试 */
void power_monitor_test(void) {
/* 逐步降低某路电源电压,验证UVLO触发点 */
for (float v = 3.3; v > 2.0; v -= 0.05) {
dac_set_voltage(TEST_RAIL, v);
HAL_Delay(10);
uint8_t status = max16067_read_status();
if (status & (1 << TEST_RAIL)) {
printf(\"UVLO triggered at %.2fV\\n\", v);
break;
}
}
}
8.3 看门狗测试
c
/* 看门狗功能测试 */
void watchdog_test(void) {
/* 测试1:正常喂狗 */
printf(\"Test 1: Normal feed...\\n\");
for (int i = 0; i < 10; i++) {
iwdg_feed();
HAL_Delay(500); /* 正常间隔 */
}
printf(\"Test 1: PASSED\\n\");
/* 测试2:停止喂狗,验证复位 */
printf(\"Test 2: Stop feeding...\\n\");
/* 不喂狗,等待复位 */
while(1); /* 应该触发看门狗复位 */
}
九、总结与展望
本文系统阐述了嵌入式系统中电源时序控制、监控与复位保护的核心技术:
- 上电时序:遵循"核心先于外围、数字先于模拟"原则,使用RC延迟、监控芯片或PMIC实现精确控制
- 电源监控:配置合理的UVLO/OVP阈值,采用迟滞设计防止抖动,结合内部PVD和外部监控芯片实现全方位保护
- 复位电路:使用专用复位芯片确保可靠的复位时序,支持手动复位和复位源检测
- 看门狗设计:采用多级看门狗架构,实现任务级监控,避免常见陷阱
- 掉电保护:提前检测、数据保存、有序关闭,确保系统安全掉电
未来发展趋势:
- 数字电源管理:通过PMBus/I2C实现全数字化的电源监控与配置
- AI辅助故障预测:基于电源纹波、温度趋势预测故障
- 功能安全集成:PMIC集成ASIL-D功能安全特性,满足汽车/工业标准
转载自:https://blog.csdn.net/u014727709/article/details/162559764
欢迎 👍点赞✍评论⭐收藏,欢迎指正