多电平逆变器仿真技术
多电平逆变器概述
多电平逆变器(Multilevel Inverter, MLI)是一种通过使用多个直流电压源或电容来生成多电平输出的逆变器。相比于传统的两电平逆变器,多电平逆变器在输出电压波形的质量、谐波含量、开关损耗和电磁干扰(EMI)等方面具有显著优势。多电平逆变器广泛应用于高压大功率变换场合,如高压直流输电(HVDC)、风力发电、光伏系统和电动汽车等。
多电平逆变器的基本结构可以通过级联多个单元(如H桥单元)来实现。常见的多电平逆变器结构包括二极管钳位型逆变器、飞电容型逆向器和级联H桥型逆变器等。每种结构都有其特点和适用场合。
二极管钳位型逆变器
二极管钳位型逆变器(Diode-Clamped Inverter, DCI)是一种常用的多电平逆变器结构。它通过使用多个二极管将输出电压钳位在多个电平,从而实现多电平输出。DCI的基本结构包括多个电容和二极管网络,能够生成奇数电平的输出电压。
原理
二极管钳位型逆变器的基本原理是利用二极管的单向导电特性,将输出电压钳位在多个电平。例如,一个三电平二极管钳位型逆变器包含两个电容和多个二极管,可以生成三个电平的输出电压:+Vdc/2、0和-Vdc/2。通过控制不同的开关组合,可以实现不同的输出电平。
结构
一个三电平二极管钳位型逆变器的结构如图1所示:
图1:三电平二极管钳位型逆变器结构
飞电容型逆变器
飞电容型逆变器(Flying Capacitor Inverter, FCI)是一种利用电容来实现多电平输出的逆变器。它的基本结构包括多个电容和开关单元,能够生成奇数或偶数电平的输出电压。
原理
飞电容型逆变器的基本原理是通过电容的充放电过程,将输出电压维持在多个电平。例如,一个三电平飞电容型逆变器包含一个电容和多个开关单元,可以生成三个电平的输出电压:+Vdc、0和-Vdc。通过控制不同的开关组合,可以实现不同的输出电平。
结构
一个三电平飞电容型逆变器的结构如图2所示:
图2:三电平飞电容型逆变器结构
级联H桥型逆变器
级联H桥型逆变器(Cascaded H-Bridge Inverter, CHBI)是一种通过级联多个H桥单元来实现多电平输出的逆变器。它的基本结构包括多个独立的H桥单元,每个单元可以生成两电平的输出电压,通过级联可以生成更多的电平。
原理
级联H桥型逆变器的基本原理是通过级联多个H桥单元,每个单元可以独立控制其输出电压,从而实现多电平输出。例如,一个三电平级联H桥型逆变器包含两个H桥单元,可以生成三个电平的输出电压:+Vdc、0和-Vdc。通过控制不同的H桥单元组合,可以实现不同的输出电平。
结构
一个三电平级联H桥型逆变器的结构如图3所示:
图3:三电平级联H桥型逆变器结构
多电平逆变器的控制策略
多电平逆变器的控制策略是实现高质量输出电压的关键。常见的控制策略包括脉冲宽度调制(PWM)、空间矢量调制(SVM)和特定谐波消减(SHR)等。这些控制策略通过不同的方法来优化逆变器的输出波形,减少谐波含量,提高效率和电压质量。
脉冲宽度调制(PWM)
脉冲宽度调制(Pulse Width Modulation, PWM)是一种通过控制开关的导通和关断时间来调节输出电压的控制策略。在多电平逆变器中,PWM可以用于生成高精度的多电平波形。
原理
PWM的基本原理是通过改变脉冲的宽度来调节输出电压的平均值。在多电平逆变器中,通过控制不同开关的导通和关断时间,可以生成多个电平的输出波形。例如,三电平逆变器可以通过PWM生成+Vdc/2、0和-Vdc/2的输出电压。
实现
在MATLAB/Simulink中,可以使用PWM生成器模块来实现多电平逆变器的PWM控制。以下是一个简单的三电平逆变器PWM控制的仿真示例:
% 创建一个新的Simulink模型
new_system('Multilevel_Inverter_PWM_Control');
% 添加必要的模块
add_block('simulink/Sources/Sine Wave','Multilevel_Inverter_PWM_Control/Sine Wave');
add_block('simulink/Sinks/Scope','Multilevel_Inverter_PWM_Control/Scope');
add_block('simulink/Discrete/Pulse Generator','Multilevel_Inverter_PWM_Control/Pulse Generator');
add_block('simulink/Discrete/Zero-Order Hold','Multilevel_Inverter_PWM_Control/Zero-Order Hold');
add_block('simulink/Logic and Bit Operations/Logical Operator','Multilevel_Inverter_PWM_Control/Logical Operator');
add_block('simulink/Logic and Bit Operations/Logical Operator','Multilevel_Inverter_PWM_Control/Logical Operator1');
add_block('simulink/Signal Routing/Sum','Multilevel_Inverter_PWM_Control/Sum');
add_block('simulink/Signal Routing/Sum','Multilevel_Inverter_PWM_Control/Sum1');
add_block('simulink/Signal Routing/Sum','Multilevel_Inverter_PWM_Control/Sum2');
add_block('simulink/Signal Routing/Mux','Multilevel_Inverter_PWM_Control/Mux');
add_block('simulink/Signal Routing/Demux','Multilevel_Inverter_PWM_Control/Demux');
add_block('simulink/Extras/Power System/Multilevel Inverter','Multilevel_Inverter_PWM_Control/Multilevel Inverter');
% 连接模块
connect('Multilevel_Inverter_PWM_Control/Sine Wave/1','Multilevel_Inverter_PWM_Control/Sum/1');
connect('Multilevel_Inverter_PWM_Control/Pulse Generator/1','Multilevel_Inverter_PWM_Control/Zero-Order Hold/1');
connect('Multilevel_Inverter_PWM_Control/Zero-Order Hold/1','Multilevel_Inverter_PWM_Control/Sum1/1');
connect('Multilevel_Inverter_PWM_Control/Logical Operator/1','Multilevel_Inverter_PWM_Control/Sum1/2');
connect('Multilevel_Inverter_PWM_Control/Logical Operator1/1','Multilevel_Inverter_PWM_Control/Sum2/1');
connect('Multilevel_Inverter_PWM_Control/Sum/1','Multilevel_Inverter_PWM_Control/Logical Operator/1');
connect('Multilevel_Inverter_PWM_Control/Sum1/1','Multilevel_Inverter_PWM_Control/Logical Operator1/1');
connect('Multilevel_Inverter_PWM_Control/Sum2/1','Multilevel_Inverter_PWM_Control/Mux/1');
connect('Multilevel_Inverter_PWM_Control/Mux/1','Multilevel_Inverter_PWM_Control/Multilevel Inverter/1');
connect('Multilevel_Inverter_PWM_Control/Multilevel Inverter/1','Multilevel_Inverter_PWM_Control/Scope/1');
connect('Multilevel_Inverter_PWM_Control/Multilevel Inverter/2','Multilevel_Inverter_PWM_Control/Scope/2');
connect('Multilevel_Inverter_PWM_Control/Multilevel Inverter/3','Multilevel_Inverter_PWM_Control/Scope/3');
% 设置模块参数
set_param('Multilevel_Inverter_PWM_Control/Sine Wave','Amplitude','1','Frequency','50','Phase','0','SampleTime','0.0001');
set_param('Multilevel_Inverter_PWM_Control/Pulse Generator','Pulse Type','Square wave','Period','0.02','Duty Cycle','50','Phase Delay','0','Sample Time','0.0001');
set_param('Multilevel_Inverter_PWM_Control/Zero-Order Hold','SampleTime','0.0001');
set_param('Multilevel_Inverter_PWM_Control/Logical Operator','Operator','>=','Inputs','2');
set_param('Multilevel_Inverter_PWM_Control/Logical Operator1','Operator','>=','Inputs','2');
set_param('Multilevel_Inverter_PWM_Control/Sum','List of Signs','++');
set_param('Multilevel_Inverter_PWM_Control/Sum1','List of Signs','++');
set_param('Multilevel_Inverter_PWM_Control/Sum2','List of Signs','++');
set_param('Multilevel_Inverter_PWM_Control/Mux','Inputs','3');
set_param('Multilevel_Inverter_PWM_Control/Demux','Inputs','3');
set_param('Multilevel_Inverter_PWM_Control/Multilevel Inverter','Levels','3','DC Voltage','100');
% 仿真设置
set_param('Multilevel_Inverter_PWM_Control','StopTime','0.1','Solver','ode23t','FixedStep','auto');
% 运行仿真
sim('Multilevel_Inverter_PWM_Control');
空间矢量调制(SVM)
空间矢量调制(Space Vector Modulation, SVM)是一种通过控制逆变器的开关状态来生成多电平输出电压的控制策略。SVM能够更有效地利用直流电压源,减少开关次数,提高输出电压的质量。
原理
SVM的基本原理是将逆变器的输出电压看作一个空间矢量,通过选择不同的开关状态组合来合成所需的输出电压矢量。在多电平逆变器中,SVM可以用于生成高精度的多电平波形。
实现
在MATLAB/Simulink中,可以使用SVM生成器模块来实现多电平逆变器的SVM控制。以下是一个简单的三电平逆变器SVM控制的仿真示例:
% 创建一个新的Simulink模型
new_system('Multilevel_Inverter_SVM_Control');
% 添加必要的模块
add_block('simulink/Sources/Sine Wave','Multilevel_Inverter_SVM_Control/Sine Wave');
add_block('simulink/Sinks/Scope','Multilevel_Inverter_SVM_Control/Scope');
add_block('simulink/Discrete/Pulse Generator','Multilevel_Inverter_SVM_Control/Pulse Generator');
add_block('simulink/Discrete/Zero-Order Hold','Multilevel_Inverter_SVM_Control/Zero-Order Hold');
add_block('simulink/Logic and Bit Operations/Logical Operator','Multilevel_Inverter_SVM_Control/Logical Operator');
add_block('simulink/Logic and Bit Operations/Logical Operator','Multilevel_Inverter_SVM_Control/Logical Operator1');
add_block('simulink/Signal Routing/Sum','Multilevel_Inverter_SVM_Control/Sum');
add_block('simulink/Signal Routing/Sum','Multilevel_Inverter_SVM_Control/Sum1');
add_block('simulink/Signal Routing/Sum','Multilevel_Inverter_SVM_Control/Sum2');
add_block('simulink/Signal Routing/Mux','Multilevel_Inverter_SVM_Control/Mux');
add_block('simulink/Signal Routing/Demux','Multilevel_Inverter_SVM_Control/Demux');
add_block('simulink/Extras/Power System/Multilevel Inverter','Multilevel_Inverter_SVM_Control/Multilevel Inverter');
add_block('simulink/Extras/Power System/Space Vector PWM','Multilevel_Inverter_SVM_Control/Space Vector PWM');
% 连接模块
connect('Multilevel_Inverter_SVM_Control/Sine Wave/1','Multilevel_Inverter_SVM_Control/Space Vector PWM/1');
connect('Multilevel_Inverter_SVM_Control/Pulse Generator/1','Multilevel_Inverter_SVM_Control/Zero-Order Hold/1');
connect('Multilevel_Inverter_SVM_Control/Zero-Order Hold/1','Multilevel_Inverter_SVM_Control/Space Vector PWM/2');
connect('Multilevel_Inverter_SVM_Control/Space Vector PWM/1','Multilevel_Inverter_SVM_Control/Mux/1');
connect('Multilevel_Inverter_SVM_Control/Mux/1','Multilevel_Inverter_SVM_Control/Multilevel Inverter/1');
connect('Multilevel_Inverter_SVM_Control/Multilevel Inverter/1','Multilevel_Inverter_SVM_Control/Scope/1');
connect('Multilevel_Inverter_SVM_Control/Multilevel Inverter/2','Multilevel_Inverter_SVM_Control/Scope/2');
connect('Multilevel_Inverter_SVM_Control/Multilevel Inverter/3','Multilevel_Inverter_SVM_Control/Scope/3');
% 设置模块参数
set_param('Multilevel_Inverter_SVM_Control/Sine Wave','Amplitude','1','Frequency','50','Phase','0','SampleTime','0.0001');
set_param('Multilevel_Inverter_SVM_Control/Pulse Generator','Pulse Type','Square wave','Period','0.02','Duty Cycle','50','Phase Delay','0','Sample Time','0.0001');
set_param('Multilevel_Inverter_SVM_Control/Zero-Order Hold','SampleTime','0.0001');
set_param('Multilevel_Inverter_SVM_Control/Logical Operator','Operator','>=','Inputs','2');
set_param('Multilevel_Inverter_SVM_Control/Logical Operator1','Operator','>=','Inputs','2');
set_param('Multilevel_Inverter_SVM_Control/Sum','List of Signs','++');
set_param('Multilevel_Inverter_SVM_Control/Sum1','List of Signs','++');
set_param('Multilevel_Inverter_SVM_Control/Sum2','List of Signs','++');
set_param('Multilevel_Inverter_SVM_Control/Mux','Inputs','3');
set_param('Multilevel_Inverter_SVM_Control/Demux','Inputs','3');
set_param('Multilevel_Inverter_SVM_Control/Multilevel Inverter','Levels','3','DC Voltage','100');
set_param('Multilevel_Inverter_SVM_Control/Space Vector PWM','DC V','100','Sampling Time','0.0001','Frequency','50','Phase','0');
% 仿真设置
set_param('Multilevel_Inverter_SVM_Control','StopTime','0.1','Solver','ode23t','FixedStep','auto');
% 运行仿真
sim('Multilevel_Inverter_SVM_Control');
特定谐波消减(SHR)
特定谐波消减(Selective Harmonic Reduction, SHR)是一种通过优化开关序列来减少特定谐波的方法。SHR可以显著提高逆变器的输出电压质量,减少谐波含量。
原理
SHR的基本原理是通过优化逆变器的开关序列,使得输出电压波形中的特定谐波成分最小化。在多电平逆变器中,SHR可以通过数学优化方法来实现,例如傅里叶级数分析和优化算法。通过调整开关序列,可以有效地减少输出波形中的特定谐波,从而提高输出电压的质量。
实现
在MATLAB/Simulink中,可以使用优化算法模块来实现多电平逆变器的SHR控制。以下是一个简单的三电平逆变器SHR控制的仿真示例:
% 创建一个新的Simulink模型
new_system('Multilevel_Inverter_SHR_Control');
% 添加必要的模块
add_block('simulink/Sources/Sine Wave','Multilevel_Inverter_SHR_Control/Sine Wave');
add_block('simulink/Sinks/Scope','Multilevel_Inverter_SHR_Control/Scope');
add_block('simulink/Discrete/Pulse Generator','Multilevel_Inverter_SHR_Control/Pulse Generator');
add_block('simulink/Discrete/Zero-Order Hold','Multilevel_Inverter_SHR_Control/Zero-Order Hold');
add_block('simulink/Logic and Bit Operations/Logical Operator','Multilevel_Inverter_SHR_Control/Logical Operator');
add_block('simulink/Logic and Bit Operations/Logical Operator','Multilevel_Inverter_SHR_Control/Logical Operator1');
add_block('simulink/Signal Routing/Sum','Multilevel_Inverter_SHR_Control/Sum');
add_block('simulink/Signal Routing/Sum','Multilevel_Inverter_SHR_Control/Sum1');
add_block('simulink/Signal Routing/Sum','Multilevel_Inverter_SHR_Control/Sum2');
add_block('simulink/Signal Routing/Mux','Multilevel_Inverter_SHR_Control/Mux');
add_block('simulink/Signal Routing/Demux','Multilevel_Inverter_SHR_Control/Demux');
add_block('simulink/Extras/Power System/Multilevel Inverter','Multilevel_Inverter_SHR_Control/Multilevel Inverter');
add_block('simulink/User-Defined Functions/MATLAB Function','Multilevel_Inverter_SHR_Control/SHR Function');
% 连接模块
connect('Multilevel_Inverter_SHR_Control/Sine Wave/1','Multilevel_Inverter_SHR_Control/SHR Function/1');
connect('Multilevel_Inverter_SHR_Control/Pulse Generator/1','Multilevel_Inverter_SHR_Control/Zero-Order Hold/1');
connect('Multilevel_Inverter_SHR_Control/Zero-Order Hold/1','Multilevel_Inverter_SHR_Control/SHR Function/2');
connect('Multilevel_Inverter_SHR_Control/SHR Function/1','Multilevel_Inverter_SHR_Control/Mux/1');
connect('Multilevel_Inverter_SHR_Control/Mux/1','Multilevel_Inverter_SHR_Control/Multilevel Inverter/1');
connect('Multilevel_Inverter_SHR_Control/Multilevel Inverter/1','Multilevel_Inverter_SHR_Control/Scope/1');
connect('Multilevel_Inverter_SHR_Control/Multilevel Inverter/2','Multilevel_Inverter_SHR_Control/Scope/2');
connect('Multilevel_Inverter_SHR_Control/Multilevel Inverter/3','Multilevel_Inverter_SHR_Control/Scope/3');
% 设置模块参数
set_param('Multilevel_Inverter_SHR_Control/Sine Wave','Amplitude','1','Frequency','50','Phase','0','SampleTime','0.0001');
set_param('Multilevel_Inverter_SHR_Control/Pulse Generator','Pulse Type','Square wave','Period','0.02','Duty Cycle','50','Phase Delay','0','Sample Time','0.0001');
set_param('Multilevel_Inverter_SHR_Control/Zero-Order Hold','SampleTime','0.0001');
set_param('Multilevel_Inverter_SHR_Control/Logical Operator','Operator','>=','Inputs','2');
set_param('Multilevel_Inverter_SHR_Control/Logical Operator1','Operator','>=','Inputs','2');
set_param('Multilevel_Inverter_SHR_Control/Sum','List of Signs','++');
set_param('Multilevel_Inverter_SHR_Control/Sum1','List of Signs','++');
set_param('Multilevel_Inverter_SHR_Control/Sum2','List of Signs','++');
set_param('Multilevel_Inverter_SHR_Control/Mux','Inputs','3');
set_param('Multilevel_Inverter_SHR_Control/Demux','Inputs','3');
set_param('Multilevel_Inverter_SHR_Control/Multilevel Inverter','Levels','3','DC Voltage','100');
% 设置SHR Function模块的代码
set_param('Multilevel_Inverter_SHR_Control/SHR Function', 'Function', 'function out = fcn(ref, carrier)
% 实现SHR控制逻辑
if ref >= carrier
out = 1;
else
out = 0;
end');
% 仿真设置
set_param('Multilevel_Inverter_SHR_Control','StopTime','0.1','Solver','ode23t','FixedStep','auto');
% 运行仿真
sim('Multilevel_Inverter_SHR_Control');
比较与选择
在选择多电平逆变器的控制策略时,需要综合考虑多个因素,包括输出波形质量、开关损耗、控制复杂性和硬件成本等。以下是对三种控制策略的简要比较:
-
PWM:
- 优点:实现简单,适用于多种多电平逆变器结构。
- 缺点:开关频率较高,可能会增加开关损耗和电磁干扰(EMI)。
-
SVM:
- 优点:开关次数少,输出波形质量高,能够更有效地利用直流电压源。
- 缺点:控制算法相对复杂,需要较高的计算资源。
-
SHR:
- 优点:能够显著减少特定谐波,提高输出波形质量。
- 缺点:控制算法复杂,需要进行数学优化,计算时间较长。
根据具体的应用需求和系统条件,可以选择最合适的控制策略。例如,在高功率应用中,SVM和SHR可能更合适,因为它们能够更有效地减少开关损耗和提高输出质量。而在低功率应用中,PWM可能是一个更简单且经济的选择。
结论
多电平逆变器在高压大功率变换场合具有显著优势,其控制策略的选择对系统的性能有着重要影响。通过仿真技术,可以有效地验证和优化这些控制策略,确保逆变器在实际应用中表现出最佳性能。MATLAB/Simulink提供了强大的工具和模块,使得多电平逆变器的仿真和控制策略设计变得更加便捷和高效。