全桥LLC开关电源与单片机TMS320F28034的硬件原理图、开环仿真模型、控制源代码及主拓扑硬件计算
全桥LLC开关电源,单片机TMS320F28034 硬件原理图,开环仿真模型,控制源代码,主拓扑硬件计算
最近在折腾一款全桥LLC开关电源,主控用了TI的TMS320F28034。这玩意儿真是把DSP和MCU的优势结合得挺到位,特别是做数字电源控制时,12位ADC和PWM死区控制玩起来贼溜。今天就唠唠这个项目的核心实现,中间夹点代码和计算过程,给大伙儿避坑参考。
先看主拓扑硬件计算这块。LLC的谐振腔参数直接决定整机效率,我一般先用K因子法算个大概。假设输入电压380VDC,输出24V/20A,谐振频率定在100kHz左右。公式刚拍出来的时候同事都看懵了:
Lr = (V_in_max * T_res) / (4 * π * I_ripple)
Cr = 1 / ((2πf_res)^2 * Lr)
不过实操中发现还得留20%余量,毕竟元件公差和寄生参数要命。最终算出来的Lr=35uH,Cr=22nF时,实测波形终于能看到漂亮的ZVS了。用Mathcad验证时发现当负载降到30%以下,谐振腔电流开始出现断续,这时候就得靠控制策略来救场了。
硬件原理图里藏着几个魔鬼细节。MOSFET驱动电路用了UCC27324,注意这里有个反逻辑设计——DSP输出的PWM_AH直接怼到驱动芯片的使能端。有次烧管就是因为PCB布局时这两个信号走线平行了2cm,导致地弹把驱动信号带歪了。后来改成星型接地才解决,血泪教训啊!
上段关键的PWM初始化代码,重点在死区时间和相位设置:
void InitEPWM(void) {
EPwm1Regs.TBPRD = SYSTEM_FREQUENCY / 2; // 100kHz载波
EPwm1Regs.CMPA.half.CMPA = EPwm1Regs.TBPRD * 0.48; // 留2%死区余量
EPwm1Regs.DBCTL.bit.OUT_MODE = 0x3; // 双边沿延时
EPwm1Regs.DBFED = DEADTIME_COUNTS; // 上升沿延时120ns
EPwm1Regs.DBRED = DEADTIME_COUNTS; // 下降沿延时
EPwm1Regs.ETSEL.bit.SOCAEN = 1; // 启用ADC触发
}
这段配置实现了移相控制的关键时序,特别是双边沿延时要和MOSFET的Qg特性匹配。有回把DBRED设成0,结果下管直通瞬间炸出烟花,示波器抓到的电流尖峰高达50A,直接给电流互感器干怀孕了。
开环仿真用PLECS跑的时候发现个诡异现象——轻载时输出电压居然比计算值高15%。后来在模型里加了变压器寄生电容才复现问题,原来是容性阻抗导致的电压泵升。解决方法是在控制代码里加了动态死区补偿:
if (Vout > 26.0) {
DeadTime_Adjust(-5); // 缩短死区提升等效频率
} else if (Vout < 22.0) {
DeadTime_Adjust(+5); // 增大死区降低损耗
}
这种骚操作虽然不符合教科书理论,但实测能把电压波动控制在±3%以内。不过要注意补偿步长别超过50ns,否则容易引发次谐波振荡。
整机调试最刺激的是上电瞬间。第一次跑闭环时,DSP的CLA协处理器突然发疯,把PWM占空比锁死在98%。后来发现是ADC采样窗口和PWM更新点冲突了,改了下中断优先级才正常。现在这板子带载到15A时效率能到94.7%,谐振腔MOSFET的温升不到30℃,算是没白掉这撮头发。
下次准备玩点更野的——把LLC和PFC级联,用28034的CLB模块做硬件互锁保护。不过听说TI的C2000系列又要出新款,带SiC驱动的那种,钱包已经在瑟瑟发抖了…
全桥LLC这玩意儿搞电源的应该都熟,软开关特性是真香,但真动起手来又是另一回事了。最近在折腾用TI的TMS320F28034搞闭环控制,结果发现开环调试都够喝一壶的。今天就唠唠实际项目中遇到的坑,顺手贴点代码和计算过程。
先说硬件拓扑,全桥结构配LLC谐振腔算是经典组合了。原理图里那几个关键参数——励磁电感、谐振电容、变压器匝比,这几个值算不对直接原地爆炸。拿匝比计算举个栗子:
// 输入电压范围计算
#define Vin_min 320 // 直流母线最低电压
#define Vout 24 // 输出目标电压
#define Np_Ns (Vin_min/(2*Vout*0.9)) // 考虑效率留余量
这里的0.9是预估效率,实际调试发现这值还得根据死区时间微调。仿真模型用PSIM搭的时候,谐振腔参数得特别注意,不然波形看着像心电图似的。上张仿真截图,紫色是谐振电流,蓝色是输出电压,看到那个类正弦没?这就是LLC的特征波形。

DSP的PWM配置是关键活,28034的EPWM模块得配置成互补带死区模式。代码里这几个寄存器设置直接影响开关损耗:
EPwm1Regs.CMPA.half.CMPA = 150; // 占空比调节
EPwm1Regs.DBCTL.bit.OUT_MODE = 0x3; // 使能死区
EPwm1Regs.DBFED = 50; // 上升沿延时
EPwm1Regs.DBRED = 50; // 下降沿延时
死区时间算是个玄学参数,太小了直通炸管,太大了效率暴跌。实测发现100ns是个安全值,但具体还得看MOS管的开关速度。有个骚操作是在GPIO口挂个LED,用示波器抓PWM波形时顺带看灯亮没,比万用表直接多了。
开环控制代码里最要命的是频率扫描策略,上电时得从高往低扫才能避开容性区。这段扫频代码实测有效:
for(int freq=200000; freq>=100000; freq-=5000){
setPwmFrequency(freq);
DELAY_US(1000); // 每个频率点保持1ms
if(check_ovp()) break; // 过压保护检测
}
ADC采样这块有个坑,DSP的采样窗口必须避开PWM跳变沿。配置成EPWM触发采样,在计数器=0时启动转换,实测干扰最小:
AdcRegs.ADCSOC0CTL.bit.CHSEL = 1; // 通道1
AdcRegs.ADCSOC0CTL.bit.TRIGSEL = 0x5; // EPWM1触发
AdcRegs.ADCSOC0CTL.bit.ACQPS = 15; // 采样保持时间
最后说硬件计算,谐振腔参数公式看着简单:
Lr = (QRo)/(2πfr)
Cr = 1/((2πfr)^2Lr)
但实际要考虑分布电容和驱动回路电感。有个土办法——先用公式算个大概,上电后调频率找最大增益点,反推出实际谐振频率。之前算的Cr是22nF,实测发现18nF时效率最高,这就是寄生参数在作妖。
调试时备个热成像仪挺管用,哪颗MOS管先烫哪就有问题。曾经遇到上管温升比下管高20度,最后发现是吸收电容没焊牢。现在学乖了,板子上先点红胶再上螺丝,振动测试妥妥的。
全桥LLC开关电源,单片机TMS320F28034
硬件原理图,开环仿真模型,控制源代码,主拓扑硬件计算


DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)