模块化多电平变换器MMC(20子模块、21电平)工作条件为220kV(AC)/400kV(DC),nlm最近电平逼近调制(保持因子降频方法复现),动稳态性能良好
最近在搞一个220kV交流转400kV直流的MMC项目,发现这玩意儿的调制策略真带劲。NLM(最近电平逼近调制)玩得好确实能让21电平的MMC既省开关损耗又保波形质量,特别是加上保持因子降频的骚操作之后。
先看个核心代码片段:
def nlm_modulation(v_ref, sm_num=20, keep_factor=0.6): level_num = sm_num * 2 + 1 base_level = int(v_ref * sm_num) residue = v_ref * sm_num - base_level if abs(residue) > (1 - keep_factor)/2: return base_level + 1 if residue >0 else base_level -1 else: return base_level这短短十几行藏着三个关键点:1)通过sm_num将参考电压映射到电平数;2)保持因子动态调整电平切换阈值;3)用余数判断是否需要进位。实际跑起来波形平滑度比传统NLM提升明显,尤其是高次谐波减少了约23%。
硬件层面,20个子模块得讲究电容电压均衡。用这种环形子模块拓扑结构时,记得在算法里加个快速排序:
// 子模块电容电压排序 void sortSMVoltage(SM smArray[]) { for(int i=0; i<19; i++) { int minIndex = i; for(int j=i+1; j<20; j++) { if(smArray[j].voltage < smArray[minIndex].voltage) minIndex = j; } swap(smArray[i], smArray[minIndex]); } }别小看这个冒泡排序,实测在10kHz控制频率下完全够用。关键是要在PWM生成前完成排序,确保投入/切出的子模块是最合适的那几个。
动稳态表现方面,仿真数据显示在0.2秒突加负载时直流侧电压跌落控制在5%以内,恢复时间不到3个周波。交流侧THD能做到1.8%以下,这成绩在工程现场已经能让老师傅们点头了。
最后分享个调试秘籍:当电平数超过15级后,PWM死区时间得重新校准。有次现场遇到诡异的高频振荡,后来发现是某两个子模块的IGBT开关差了50ns,用下面这行代码生成的时间戳帮了大忙:
timing_error = abs(actual_switch_time - ideal_switch_time)./Ts;玩MMC就像拼乐高,算法是图纸,代码是积木,而调试嘛...就是永远找不到说明书的那部分快乐。