基于 STM32 的数字控制实现双向 DC-DC 电源

双向 DC-DC 电源(Bidirectional DC-DC Converter)是一种能够在两个直流电压等级之间进行能量双向流动的电力电子变换装置。它集升压(Boost)和降压(Buck)功能于一体,广泛应用于新能源储能系统、电动汽车、电池化成设备以及 UPS 系统中。


一、 核心工作原理与分类

双向 DC-DC 的核心思想是:同一电路既能实现 Buck(高压向低压供电),又能实现 Boost(低压向高压回馈能量)

根据输入输出之间是否有电气隔离,主要分为两大类:

1. 非隔离型双向 DC-DC
  • 特点:结构简单、成本低、效率高,但输入与输出共地,没有电气隔离。
  • 最常见拓扑双向同步 Buck-Boost 变换器
    • 降压模式 (Buck):高压侧开关管进行 PWM 斩波,低压侧开关管常通(或同步整流),能量从高压流向低压。
    • 升压模式 (Boost):低压侧开关管进行 PWM 斩波,高压侧开关管常通(或同步整流),能量从低压流向高压。
2. 隔离型双向 DC-DC
  • 特点:安全性高,可以实现电压匹配和电气隔离,但结构复杂,成本较高。
  • 最常见拓扑双有源桥 (Dual Active Bridge, DAB)
    • 由全桥逆变、高频变压器、全桥整流以及串联谐振电感组成。
    • 通过控制两侧全桥的移相角,可以精确地控制功率的大小和方向。

二、 主流拓扑详解

1. 双向同步 Buck-Boost(12V/24V 与 48V 系统互转)

这种拓扑相当于把两个同步整流 Buck 电路背靠背连在一起,共用一个电感。

  • 正向(Buck) :开关管 Q1Q_1Q1 工作,Q2Q_2Q2 关断(体二极管续流或同步整流)。
  • 反向(Boost) :开关管 Q2Q_2Q2 工作,Q1Q_1Q1 关断。
  • 应用:汽车 48V 轻混系统(48V 锂电与 12V 铅酸互充)、电池备份系统。
2. 双有源桥 DAB(高压动力电池与低压辅助电源)

DAB 是目前中大功率隔离型双向电源的绝对主力。

  • 工作原理 :通过高频变压器传递能量。调节初级侧和次级侧 H 桥输出方波的相位差 (δ\deltaδ),即可控制能量的流向和大小。相位差为正,能量正向传输;为负,则反向传输。
  • 优势:软开关技术(ZVS 零电压开通),开关损耗极低,适合高频化(100kHz - 500kHz),功率密度极高。
  • 应用:电动汽车车载充电机(OBC)、直流微电网、固态变压器。

三、 核心控制

双向电源的难点不在于硬件拓扑,而在于如何平滑、稳定地在双模式间切换

  1. 电压电流双闭环控制

    • 外环(电压环):维持一侧母线的电压稳定(例如保持低压侧 12V 母线恒定)。
    • 内环(电流环):快速跟踪电流指令,限制电感电流,实现恒流充电或放电。
    • 模式切换:当外环输出的电流参考值为正时,系统工作在 Boost 模式;为负时,工作在 Buck 模式。通过模拟电路或数字算法可以无缝切换。
  2. 移相控制 (Phase-Shift Control)

    • 主要用于 DAB 拓扑。通过调节单移相 (SPS)、扩展移相 (EPS) 或双移相 (DPS) 来控制传输功率。
    • 目标是在全负载范围内实现所有开关管的 ZVS(零电压软开关),最大限度提升效率。

四、 基于 STM32 的数字控制实现

现代双向 DC-DC 几乎全部采用 数字控制(DSP 或 MCU) ,因为模拟控制难以实现复杂的保护逻辑和灵活的模式切换。结合你之前对 STM32 和电机控制的兴趣,使用 STM32G4 系列 (内置高精度定时器 HRTIM 和运放比较器)或 STM32F3/H7 系列 是绝佳选择。

1. 硬件架构设计
  • 主控:STM32G474 (推荐,自带 HRTIM 完美支持多相移相控制)。
  • 功率器件:低压侧用低导通电阻的 MOSFET(如 40V/60V NexFET),高压侧可用 100V/150V MOSFET 或 SiC MOSFET(碳化硅,适合高频)。
  • 驱动电路:隔离驱动(如 TI 的 UCC21520 光耦隔离驱)或非隔离半桥驱动(如 IR2184)。
  • 电流/电压采样:使用 shunt 电阻 + 差分放大电路,信号送入 STM32 的内部运放(OPAMP)或高速 ADC。
2. 核心软件逻辑 (STM32 固件)
c 复制代码
// 伪代码:双向 Buck-Boost 数字控制主循环
void main() {
    HAL_Init();
    SystemClock_Config();
    MX_ADC1_Init();       // 初始化 ADC 采样电压电流
    MX_HRTIM1_Init();     // 初始化高精度定时器产生 PWM
    MX_COMP_Init();       // 初始化比较器用于硬件过流保护
    
    // 启用 ADC 注入组中断(用于峰值电流模式控制)
    HAL_ADCEx_InjectedStart_IT(&hadc1); 
    
    while (1) {
        // 1. 读取传感器数据 (通过 DMA 或中断)
        float v_high = Read_High_Voltage();
        float v_low = Read_Low_Voltage();
        float i_indutor = Read_Inductor_Current();
        
        // 2. 模式判定与状态机
        // 例:高压母线电压掉电 -> 切换到 Buck 模式,由低压电池给高压端供电
        if (v_high < V_HIGH_MIN_THRESHOLD) {
            power_mode = BUCK_MODE;
        } 
        // 例:高压母线电压正常且有富余 -> 切换到 Boost 模式,给低压电池充电
        else if (v_high > V_HIGH_MAX_THRESHOLD && v_low < V_LOW_FULL) {
            power_mode = BOOST_MODE;
        }
        
        // 3. 双闭环 PID 计算
        float voltage_error = target_voltage - v_low;
        float current_ref = PI_Voltage_Loop(voltage_error);
        
        float current_error = current_ref - i_indutor;
        float pwm_duty = PI_Current_Loop(current_error);
        
        // 4. 更新 PWM 占空比 (根据模式选择控制 Q1 或 Q2)
        if (power_mode == BUCK_MODE) {
            HRTIM_SlaveSetCompare(BUCK_TIMER, BUCK_CHANNEL, pwm_duty);
        } else {
            HRTIM_SlaveSetCompare(BOOST_TIMER, BOOST_CHANNEL, pwm_duty);
        }
        
        HAL_Delay(1); // 控制环路频率 1kHz - 10kHz
    }
}

// ADC 中断回调:实现峰值电流模式控制或快速保护
void HAL_ADCEx_InjectedConvCpltCallback(ADC_HandleTypeDef *hadc) {
    float current = HAL_ADC_GetValue(hadc);
    if (current > OVER_CURRENT_LIMIT) {
        // 硬件级别的快速关断 PWM
        HRTIM_WaveformOutputStop(&hhrtim1, HRTIM_OUT_MASK_ALL); 
    }
}

参考代码 双向DCDC电源 www.youwenfan.com/contentcsu/70211.html

五、 总结与选型建议

  • 小功率、低成本、非隔离需求 (如 12V/24V 系统):首选 同步 Buck-Boost,控制简单,用普通的 STM32F103 + 半桥驱动即可搞定。
  • 大功率、高安全、需隔离需求 (如光伏、储能、电动汽车):必选 双有源桥 (DAB),配合 STM32G4 的 HRTIM(高精度定时器)来实现多通道移相 PWM 控制。
相关推荐
12.=0.2 小时前
【stm32_9】RTOS的概念、种类对比,FressRTOS的概述、FressRTOS的源码结构、FressRTOS的源码移植
stm32·单片机·嵌入式硬件
Yeats_Liao2 小时前
智能感知低功耗设计:MCU上的AI异常检测与能效优化
人工智能·单片机·物联网·neo4j
Y多了个想法2 小时前
RK3576 android14 I2C总线,硬件I2C 与 GPIO模拟I2C 比对
经验分享·嵌入式硬件·i2c·rk·rk3576
blevoice2 小时前
JL杰理AC696N开发板上调试蓝牙音质优化:开启AAC高清音频支持
单片机·ffmpeg·音视频·aac·ac6966b蓝牙音响方案·杰理智能音箱开发·杰理ac6965e蓝牙音频开发
小+不通文墨3 小时前
树莓派4b-wiringpi库的安装和使用
驱动开发·经验分享·笔记·嵌入式硬件·学习
小麦嵌入式3 小时前
FPGA入门(三):3-8 译码器 仿真波形解读
stm32·单片机·嵌入式硬件·mcu·fpga开发·硬件工程
Elihuss4 小时前
关于RK3506 的MCU软复位后跑不起问题
linux·单片机·嵌入式硬件
fengfuyao9854 小时前
GRBL 1.1 移植到 STM32 (HAL库)
stm32·单片机·嵌入式硬件
biyezuopinvip4 小时前
基于STC89C51单片机的多波形信号发生器设计与Proteus仿真
单片机·proteus·课程设计·proteus仿真·基于stc89c51单片机的·多波形·信号发生器设计