最近在搞永磁同步电机驱动项目,发现背靠背变流器结构是真香。特别是用三电平拓扑玩SVPWM,既能提升电能质量又能降低谐波。今天就跟大伙唠唠这个组合拳怎么打
背靠背变流器,驱动永磁同步电机,三电平,SVPWM调制算法
先说说背靠背变流器的门道。这货前后两级变流器背对背连着,前级当整流器后级当逆变器,中间直流母线电容负责能量缓冲。咱们用三电平NPC(中性点钳位)结构,比传统两电平方案谐波能降一半,特别适合高压大功率场合。

上点干货,三电平PWM生成的关键在于中点电位平衡。用Arduino代码举个栗子:
void balanceMidpoint() {
float v_mid = (v_cap1 + v_cap2) / 2;
if(v_mid > REF_VOLTAGE + DEADBAND) {
adjustPwmDuty('lower', 0.02); // 微调占空比
}
else if(v_mid < REF_VOLTAGE - DEADBAND) {
adjustPwmDuty('upper', 0.015);
}
}
这段代码实时监测中点电压,通过动态调整上下管导通时间来维持平衡。注意那个0.02的调节步长,调太大容易振荡,太小响应慢,得根据实际电容参数反复试。
重点来了——SVPWM的实现。三电平的空间矢量图比两电平复杂得多,足足有27个基本矢量。不过实际用的时候可以简化为6个大扇区。用STM32的定时器捕获比较单元实现的话,关键在扇区判断:
uint8_t detectSector(float alpha, float beta) {
float angle = atan2(beta, alpha) * 180 / PI;
angle = angle < 0 ? angle + 360 : angle;
return (uint8_t)(angle / 60);
}
这个算法把α-β坐标系下的电压矢量转换成角度,再按60度划分扇区。注意atan2函数返回的是弧度值,得转成角度再处理。实际应用中最好查表法优化运算速度。

永磁同步电机控制这边,别忘了前馈补偿。电机参数辨识不准会导致电流环波动,咱们在电流环输出叠加个反电势补偿项:
def feedforward_compensation(w_e, Ld, Lq, psi_f):
vd_ff = -w_e * Lq * iq_ref
vq_ff = w_e * (Ld * id_ref + psi_f)
return vd_ff, vq_ff
这个前馈模型用到了电机转速we和d/q轴电感。注意psif是永磁体磁链,不同温度下会漂移,有条件的话搞个在线参数辨识会更稳。
调试时遇到过坑:三电平变流器在低调制比时容易出脉冲丢失。后来发现是死区补偿没做好,加了基于电流方向的补偿算法才解决:
function deadtime_comp = getDeadtimeComp(current_dir)
if current_dir > 0
deadtime_comp = DEADTIME * 1e-6 * SWITCH_FREQ;
else
deadtime_comp = -DEADTIME * 1e-6 * SWITCH_FREQ;
end
end
这算法根据电流方向动态调整补偿量,实测能把输出电压畸变率从8%压到3%以内。注意单位转换,死区时间通常是微秒级,别漏了1e-6换算。

玩三电平SVPWM还有个骚操作——虚拟矢量合成。通过组合相邻矢量来等效减小共模电压,这对长电缆驱动的永磁电机特别有用。具体实现时要在矢量作用时间上做文章:
void synthesizeVirtualVector(uint8_t sector) {
float t1 = mod_param * sin(60 - theta_el);
float t2 = mod_param * sin(theta_el);
float t0 = 1 - t1 - t2;
// 根据扇区选择实际矢量
switch(sector) {
case 0:
setCompareValues(t1, t2, t0);
break;
// 其他扇区类似处理
}
}
这里modparam是调制系数,thetael是电角度。注意时间分配要满足t0+t1+t2=1,否则会溢出。用FPGA实现的话可以搞流水线计算,比单片机快得多。
最后说下实验数据:在50kW永磁同步电机平台上,这套方案THD控制在3.5%以内,比传统两电平方案效率提升2个百分点。关键波形用示波器抓取时,记得把电压探头带宽调到至少50MHz,不然会漏掉开关细节。

更多推荐
所有评论(0)