NPC,三电平,三电平变换器,三电平逆变器,NPC,中点电位平衡控制,三电平SVPWM
最近在搞三电平逆变器的项目,发现中点电位平衡真是个磨人的小妖精。这玩意儿就像跷跷板,左边电压高了右边就掉下去,右边刚调好左边又开始作妖。今天就结合NPC(Neutral Point Clamped)结构聊聊怎么用代码驯服这个不听话的中点电压。
NPC,三电平,三电平变换器,三电平逆变器,NPC,中点电位平衡控制,三电平SVPWM
先看个三电平逆变器的桥臂结构,三个开关管带着俩钳位二极管。代码里建模的时候,每个桥臂的状态可以用-1、0、1表示:
class NPCPhaseLeg: def __init__(self): self.state = 0 # -1,0,1对应三种电平 def set_state(self, target): if abs(target - self.state) == 2: self._safe_transition(target) self.state = target重点来了——中点电位漂移的本质是上下电容电流不对称。用SVPWM调制时,每个开关周期选三个最近的空间矢量。比如在60度扇区常用的方案:
function [t1,t2,t3] = calc_duty(Vref, sector) % 矢量作用时间计算 T = 1/(2*cos(pi/6)); % 归一化系数 x = Vref * sin(pi/3 - mod(sector,60)*pi/180); y = Vref * sin(mod(sector,60)*pi/180); t1 = T*y; t2 = T*x; t3 = 1 - t1 - t2; end这里藏着个玄机:小矢量对中点电位的影响是相反的。比如P型小矢量(100)会抽走上电容的电荷,而N型小矢量(011)刚好反过来。实战中我常用这种骚操作:
def balance_control(v_diff): # 中点电压差超过阈值时动态调整矢量比例 balance_factor = 0.1 * np.clip(v_diff, -0.2, 0.2) if abs(balance_factor) > 0.05: self.use_p_vector = 0.5 + balance_factor self.use_n_vector = 0.5 - balance_factor else: self.use_p_vector = self.use_n_vector = 0.5实测这个算法能把中点电压波动压到直流母线的2%以内。不过要注意开关频率别太高,不然电容ESR引起的热损耗会教你做人。最后放个实测波形镇楼(假装有图),可以看到相电压的台阶明显,中点电位像被钉住一样稳如老狗。
调这玩意儿的终极奥义就是:把小矢量当砝码,用作用时间做秤杆,让中点电压在动态中维持微妙的平衡。下次遇到中点漂移乱跳,不妨检查下小矢量的使用比例,说不定有意外惊喜。