第4章:电力电子模块库详解

各位同学,今天我们来聊聊Simulink里最核心的东西——电力电子模块库。说实话,我刚接触这个工具箱时,也被里面密密麻麻的模块搞得头晕。但用久了你会发现,其实核心模块就那么几类,搞懂了它们,你就能搭出各种复杂的逆变器模型。

4.1 电力电子开关模型:MOSFET与IGBT

开关器件是逆变器的心脏。Simulink里提供了理想开关、MOSFET、IGBT等多种模型。我个人习惯,在早期算法验证时用理想开关,跑得快;到了硬件在环测试阶段,再换成带寄生参数的详细模型。

4.1.1 MOSFET模型

MOSFET模块的参数设置里,有几个关键点我得提醒你:

  • 导通电阻Ron:默认0.1Ω,但实际项目中要根据数据手册来设。我曾经因为偷懒用默认值,结果仿真效率跟实测差了8%...
  • 缓冲电阻Rs和电容Cs:这两个参数直接影响开关暂态。你想想看,如果Rs设得太小,仿真步长就得压得很低,计算量暴增。
  • 内部电感Lon:高频应用里这个参数很关键,它会影响关断时的电压尖峰。

经验之谈:做低压逆变器(48V以下),MOSFET是首选。我做过一个48V/3kW的便携储能项目,用的就是CoolMOS,开关频率能跑到100kHz,效率做到97%以上。

4.1.2 IGBT模型

IGBT模块跟MOSFET长得有点像,但参数含义不同。IGBT有个重要的参数叫饱和电压Vce(sat),这玩意儿在高温下会变大。我记得有一次做热仿真,忘了考虑温度系数,结果实测温升比仿真高了15℃,后来老老实实加了温度查表模块。

参数 MOSFET IGBT
典型应用频率 20kHz~500kHz 1kHz~20kHz
导通压降特性 正温度系数(Rds(on)) 负温度系数(Vce(sat))
并联均流 容易(自动均流) 困难(需配对)
拖尾电流 有(影响关断损耗)

选型建议:做三相380V工业变频器,IGBT是主流。我见过一个同行用MOSFET做380V系统,结果炸管率居高不下——电压应力太大了。

4.2 无源元件:R/L/C与变压器

无源元件看着简单,但用不好会出大问题。我刚开始带项目时,就因为在滤波电感上栽过跟头。

4.2.1 电阻、电感和电容

Simulink里的RLC模块支持串联和并联两种模式。这里有个坑:电感初始电流的设置。如果你做稳态仿真,初始电流设0没问题;但做启动过程仿真,一定要设成实际值,否则前几个周期的电流波形会失真。

电容的等效串联电阻(ESR)也是个容易忽略的点。我做过一个DC-DC项目,仿真效率99%,实测只有94%。查了半天,原来是电容ESR没设对——高频下ESR比低频时大得多。

4.2.2 变压器模型

变压器模块有单相和三相两种。参数设置里,励磁电感Lm漏感Ll是最关键的。励磁电感决定了空载电流,漏感影响电压调整率。

嗯,这里要注意:Simulink的变压器模型默认是线性的,但实际变压器有饱和特性。如果你做的是并网逆变器,建议用饱和变压器模型,否则直流偏磁仿真会不准。

避坑指南:我曾经在做一个10kW光伏逆变器项目时,用了默认的线性变压器模型,结果并网电流THD仿真值3%,实测到了8%。后来换成饱和模型,加上磁滞效应,仿真才跟实测对上。

4.3 测量模块:电压、电流与功率

测量模块是仿真的眼睛。Simulink提供了电压测量电流测量功率测量三个基本模块。

4.3.1 电压/电流测量

这两个模块用法很简单,直接串/并联到电路中就行。但有个细节:输出信号类型。默认输出是Simulink信号,如果你要做快速傅里叶分析(FFT),记得把输出改成复数形式

我习惯在测量点后面加一个滤波模块,因为开关噪声会污染测量信号。你想想看,如果直接用原始信号做闭环控制,控制器会抖得厉害。

4.3.2 功率测量

功率测量模块可以同时输出有功功率、无功功率和视在功率。这里有个容易搞混的地方:三相功率测量模块,它默认是两瓦特计法,适用于三相三线制。如果你做的是三相四线制系统,得用三个单相功率模块。

实用技巧:做电机驱动仿真时,我经常用功率测量模块来算效率。把输入电功率和输出机械功率一除,效率曲线就出来了。比手动算方便多了。

4.4 自定义电力电子模块

Simulink允许你创建自己的模块,这个功能太实用了。我几乎每个项目都会封装几个自定义模块。

4.4.1 创建子系统模块

最简单的自定义方法:选中一组模块,右键→Create Subsystem。我建议你把常用的电路拓扑(比如半桥、全桥、三相桥)都封装成子系统,下次直接拖出来用。

% 自定义模块的初始化回调函数示例
% 在模块属性中设置
function initFcn(block)
    % 读取掩码参数
    Vdc = get_param(block, 'Vdc');
    fsw = get_param(block, 'fsw');
    
    % 计算死区时间
    Tdead = 1/fsw * 0.02;  % 2%的死区占比
    
    % 设置内部参数
    set_param([block '/PWM_Generator'], 'DeadTime', num2str(Tdead));
end

4.4.2 使用掩码(Mask)封装

掩码封装可以让你的模块看起来跟官方模块一样。我一般会设置:

  • 参数标签:用中文命名,方便团队协作
  • 文档链接:指向内部设计规范文档
  • 图标绘制:用简单的线条画出电路拓扑

封装经验:我习惯在掩码里加一个「版本号」参数。这样当模块升级时,旧模型里的模块还能识别出来,不会出现兼容性问题。

4.4.3 用S-Function实现复杂模型

当Simulink自带模块满足不了需求时,就该S-Function上场了。比如你要实现一个带温度特性的IGBT模型,用S-Function写最灵活。

function sys = mdlOutputs(t, x, u)
    % u(1): 栅极电压
    % u(2): 集电极电流
    % u(3): 结温
    
    % 查表获取导通压降
    Vce_table = [1.2, 1.5, 1.8;   % 25°C
                 1.4, 1.7, 2.0;   % 125°C
                 1.6, 1.9, 2.2];  % 150°C
                 
    Ic_points = [10, 20, 30];
    Tj_points = [25, 125, 150];
    
    Vce = interp2(Ic_points, Tj_points, Vce_table, u(2), u(3));
    
    sys = Vce;
end

重要提醒:写S-Function时,一定要处理好代数环问题。我见过一个同事写的S-Function,仿真时直接报代数环错误,折腾了两天才发现是输出直接依赖了输入,没有加单位延迟。

好了,电力电子模块库的核心内容就这些。说白了,开关模型要选对类型,无源元件参数要设准,测量模块要会用,自定义模块能提升效率。下一章我们讲PWM生成与调制策略,到时候会用到今天讲的这些模块来搭一个完整的逆变器模型。