双有源桥DCDC变换器 控制方式变占空比移相控制 单pwmSPS控制可改双PWM控制双有源桥DCDC变换器的控制魔改从单PWM到双PWM的骚操作双有源桥DCDC变换器 控制方式变占空比移相控制 单pwmSPS控制可改双PWM控制双有源桥DABDCDC变换器是搞新能源、电动汽车充电的老熟人核心优势是功率双向流动和高效率。但想让这玩意儿跑得稳控制方式才是灵魂。今天聊聊两种控制思路——变占空比移相控制和单PWMSPS控制顺带解剖如何从单PWM升级到双PWM的骚操作。单PWMSPS省事但不够浪传统单移相控制SPS简单粗暴两个H桥之间固定占空比50%靠调节移相角φ控制功率传输。代码层面生成两路互补PWM信号加相位差就行比如用STM32的定时器// 初始化PWM通道以HAL库为例 TIM_OC_InitTypeDef sConfigOC; sConfigOC.OCMode TIM_OCMODE_PWM1; sConfigOC.Pulse 50; // 占空比50% HAL_TIM_PWM_ConfigChannel(htim1, sConfigOC, TIM_CHANNEL_1); HAL_TIM_PWM_ConfigChannel(htim1, sConfigOC, TIM_CHANNEL_2); // 设置移相角φ比如φ30度 uint16_t phase_shift (htim1.Init.Period * 30) / 360; __HAL_TIM_SET_COMPARE(htim1, TIM_CHANNEL_2, phase_shift);这种控制虽然代码简单但问题也很明显功率传输范围受限轻载时效率血崩软开关条件苛刻。变占空比移相让DAB学会踩油门变占空比移相控制Variable Duty Cycle Phase Shift直接对占空比D下手相当于同时拧油门D和方向盘φ。比如在Simulink里可以这样调参% 主控制循环 function [D, phi] control_logic(Vin, Vout, Iout) % 根据电压差和电流动态调整占空比和移相角 if abs(Vin - Vout) 10 D 0.6; % 拉高占空比 phi 0.3 * pi; else D 0.5; phi 0.2 * pi; end end这种策略能扩展软开关范围降低开关损耗。但代码实现时要注意占空比和移相角的耦合关系否则容易振荡。硬件上需要更灵活的PWM发生器比如FPGA或者用MCU的高级定时器模式。双PWM控制左右互搏之术单PWM只能调一边H桥的占空比而双PWM控制直接让两侧H桥的占空比D1和D2独立可调。自由度翻倍但代码复杂度也起飞。举个双PWM的伪代码逻辑def generate_dual_pwm(D1, D2, phi): # 生成两路PWM分别设置占空比和相位差 pwm1 PWM(period1000, duty_cycleint(D1*1000)) pwm2 PWM(period1000, duty_cycleint(D2*1000)) pwm2.phase_shift phi # 移相角 return pwm1, pwm2 # 动态调整示例根据负载变化调整D1/D2 if load_current 10: D1, D2 0.7, 0.6 # 非对称占空比 else: D1 D2 0.5 # 回退对称模式双PWM的骚在于功率传输曲线的非线性优化。比如在宽电压范围场景下通过不对称占空比可以降低电流应力但需要解决两路PWM的同步问题比如用硬件死区控制。改代码实战从单PWM切到双PWM假设原来用单PWMSPS想改成双PWM硬件上需要确认PWM发生器是否支持多通道独立配置比如STM32的互补通道不够用就得换芯片。代码层面主要改动点PWM初始化使能两路独立PWM取消互补绑定占空比独立写入分别设置D1和D2的寄存器移相逻辑重构从固定50%占空比改为动态计算比如原单PWM代码// 原单PWM代码固定占空比50% TIM1-CCR1 500; // 50% duty TIM1-CCR2 500 phase_shift;改成双PWM后// 双PWM版本动态设置D1和D2 TIM1-CCR1 calculate_D1(voltage_error); TIM1-CCR3 calculate_D2(current_feedback); // 使用新的通道 TIM1-CCR2 calculate_phase_shift(D1, D2); // 移相角与占空比解耦总结单PWMSPS适合对成本敏感的场景而双PWM则是性能党的选择。改代码时重点解决占空比解耦和时序同步问题硬件资源够的话直接上双PWM能让DAB在宽范围工况下更“抗造”。最后提醒一句——调参时别忘了带示波器眼见为实