提到储能,很多人第一反应是锂电池、抽水蓄能或者飞轮,但在电力电子和电力系统领域,超导磁能储存系统(SMES)一直是个独特存在。它不是通过化学能或势能存储能量,而是直接把电能以磁场形式“锁”在超导线圈里,需要时再瞬间释放出来。这几年我陆续做过几个跟SMES相关的仿真项目,最常用到的就是Simulink,这套工具配合SimPowerSystems(现在并入Simscape Electrical)做系统级建模非常顺手。
这篇东西我打算把一套完整的超导磁能储存系统建模、仿真实现过程完整梳理一遍,包括模型怎么搭、参数怎么选、哪些地方容易踩坑,适合正在做储能系统仿真、电力电子变流器控制的同学参考。无论你是课程设计要交差,还是毕业论文需要出波形,或者纯粹想搞明白这套系统内部怎么配合,都应该能从里面找到用得上的东西。
1. SMES系统的整体设计思路与方案选型
1.1 超导磁能储存系统凭什么能瞬间吞吐功率
SMES的核心元件就是那卷超导线圈。超导体在临界温度以下电阻为零,电流在线圈里流动时几乎没有焦耳损耗,所以直流电流一旦建立,磁能就可以长时间保存。这个储能密度的计算非常简单,磁场储能公式是:
W = 0.5 × L × I²
其中L是线圈电感,I是流过线圈的电流。比如一个电感值为0.1H的线圈,充到2000A,存进去的能量就是0.5 × 0.1 × 2000² = 200kJ。这个能量级别不算大,但关键在于它可以在毫秒级时间内把功率全部放出,这是电池和抽水蓄能完全做不到的。电力系统里用它来平抑功率波动、补偿电压暂降、抑制低频振荡,就是冲着这个瞬态响应速度去的。
SMES系统整个组成不复杂,包含三块:超导线圈及低温恒温器、功率变换系统(PCS)、控制器。线圈负责储能量,PCS负责能量交换——把电网的交流电整流成直流、给线圈充电,或者把线圈里的直流能量逆变成交流、送回电网。控制器实时监测网侧电压电流和功率需求,计算PWM脉冲去驱动变流器,实现有功无功的独立调节。
这里必须提一句,我这篇讲的是Simulink仿真实现,不会涉及超导材料制备、低温系统的具体工程设计,这些物理层面的东西在仿真里统统被简化成“一个理想电感模型”。仿真关注的是电气量怎么变化、控制策略是否有效、系统能不能稳定运行,这是仿真真正有价值的地方。
1.2 为什么选Simulink而不是自己写代码或者用别的工具
建模这事,方法论选项其实不少。你完全可以用Python手搓微分方程,用PSCAD搭电磁暂态模型,甚至用MATLAB脚本纯数值求解。但我的经验是,SMES这种“电力电子+磁场储能+控制系统”耦合的系统,用Simulink是综合性价比最高的选择。
原因有几点。第一,Simulink的Simscape Electrical库已经把IGBT、二极管、三相桥、变压器、滤波电感这些元件做成了现成的物理模型,你不用自己推导每一个开关器件的导通截止逻辑,只需要搭拓扑、给参数,仿真步长到微秒级也能跑起来。第二,Simulink的控制系统部分和物理模型无缝衔接,PI调节器、PWM发生器、坐标变换都能直接用库里的模块拖出来,省掉大量底层编码时间。第三,Simulink方便做参数扫描和后处理分析,我经常把同一个模型跑好几组工况,用MATLAB脚本自动改参数、采集数据、画图,一条龙完成。
另外从复现角度讲,Simulink的simulink cache和mdl/slx文件特别好传递。我给别人对比模型,直接把slx发过去,版本兼容的话双击就能跑,比把代码包带依赖环境拷来拷去省事太多。对于课程设计或课题组合作,这几乎是最低摩擦的交付方式。
2. 从物理系统到仿真模型:核心建模思路拆解
2.1 把超导线圈等效成什么最合理
仿真第一步最关键的决策:超导线圈用哪种模型表达。这直接决定仿真结果的准确性和仿真速度。
最精确的做法是用有限元模型,把线圈每一匝的几何位置、磁场分布、互感全部建模。但这是我强烈不建议在Simulink系统级仿真里干的事,计算量巨大、仿真极慢,且对控制策略研究没多大帮助。系统级仿真需要的是“快速、稳定、能反映外特性”。
所以工程实践里的通用做法是把超导线圈等效成一个串联的电阻和电感。超导体零电阻这个特性在仿真里怎么体现?很简单,R就设得很小,比如1e-6 Ω。注意不能直接设为0,否则Simulink的一些微分方程求解器在计算时可能出现矩阵奇异,我后面会专门讲这个问题。
电感值L的选取也不是拍脑袋,要结合系统能量需求确定。假设一个典型课题场景:需要系统在电压暂降时支撑0.5秒、提供100kW有功,那需要释放的能量约50kJ。取线圈额定电流3000A,反推电感L = 2W / I² = 2 × 50000 / 3000² ≈ 0.011H。实际选取时留一定裕量,取0.015H比较稳妥。
这里额外提一下,有些文献会用超导磁体的动态电感模型,考虑电流变化时磁场分布变化的影响,那只在超导材料内部研究才用得上。做系统并网仿真,固定L完全够用,跑出来的结果和实验装置对照误差很小。
2.2 功率变换系统(PCS)的拓扑选择
PCS是SMES和电网之间的桥梁,拓扑选型直接决定了系统能做四象限运行还是只能单向充放电。
2.2.1 三相全桥变流器方案
最常用的是两电平三相电压源型PWM变流器。交流侧通过滤波电感接到电网,直流侧直接连接超导线圈。由于超导线圈本质是个大电感,直流侧不需要额外加直流电容,这点和常规的电压源变流器背靠背系统很不一样——线圈本身就能起到维持直流电流平稳的作用。
这个结构的好处是控制灵活。在dq坐标系下解耦后,有功功率和无功功率可以独立调节,SMES既能向电网输送有功,也能进行无功补偿。仿真模型里我会用Universal Bridge模块,选IGBT/Diode,三相桥臂,导通压降设置默认值。
2.2.2 为什么不用斩波器加网侧变流器的两段式结构
还有一种常见的SMES结构是“网侧PWM整流器 + 直流斩波器”两级级联,斩波器负责调节线圈电流、维持直流母线电压恒定。这个方案多一级变换,系统冗余度更高,但控制环节更多、损耗更大,建模也更复杂。
我个人的建议是,如果你是刚接触SMES仿真,用单级三相全桥结构就够了,也就是功率器件直接连接交流电网和超导线圈,通过控制IGBT的导通占空比来改变线圈端电压,进而控制充放电功率。这个方案模型简洁、控制直接,做课程设计或毕业设计完全拿得出手。两级结构等吃透基础之后再研究也不迟。
2.3 控制器在dq旋转坐标下的建模思路
三相交流要无缝地转化为可控制的直流量,最经典的方式就是帕克变换。把三相静止abc坐标变换成dq旋转坐标后,有功电流id和无功电流iq解耦,控制就简洁多了。
整体的控制框图可以理解成三个环。外环是功率参考计算,根据系统需求(恒压控制、恒功率控制或非网规约)得到id和iq的参考值;中间是电流内环,两个PI调节器分别跟踪id、iq指令,输出控制量vd、vq;最后是PWM调制环节,把vd、vq反变换成三相正弦调制波,与三角载波比较生成IGBT开关信号。
仿真里这部分模块都用现成的:坐标变换可以通过写MATLAB Function模块或直接用库里的abc_to_dq0 Transformation模块;PI调节器用Discrete PI Controller;调制信号生成用PWM Generator,载波频率一般设10kHz。
这部分是整个模型最容易出问题的地方。数据方向弄反、dq变换角度不对、PI参数不匹配,都会导致仿真发散或波形异常。我下面会展开讲具体怎么排查。
3. Simulink仿真实操:手把手搭一个可运行的SMES模型
3.1 仿真环境的准备和版本选择
我用的是MATLAB R2020b以上版本,Simscape Electrical Libraries和Simulink是必须装的工具箱。如果你的License只有基础的MATLAB和Simulink,那很可惜,库文件不完整,很多电力电子元件用不了。安装时看到Simscape Electrical字样务必勾上,这是整个SMES模型的地基。
建模型之前先做两件事。先在MATLAB主界面执行“powerlib”命令,它能弹出电力系统元件库窗口,顺手检测工具箱是否正常加载。然后新建一个Simulink模型,Model Settings里把求解器类型设成变步长、ode23tb或ode15s。为什么用这两个?因为电力电子电路里IGBT的开关动作会让系统呈现刚性特征,普通ode45很容易算不动或者误差大,刚性求解器在解这类方程组时能自动缩步长、保证收敛。仿真时间0.4秒、最大步长1e-4秒,精度通常就够看了。
3.2 构建三相电网到PCS再到线圈的主回路
主回路是模型的主体骨架。我习惯把整个模型分成三大区块,用Subsystem封装,分别命名为“Grid Interface”“PCS Converter”“SMES Coil”,这样到后期无论是调参数还是给别人讲模型,都一目了然。
3.2.1 电网接口区
从Simscape Electrical里拖一个Three-Phase Source,线电压有效值设400V、频率50Hz。之后接一个RL串联阻抗模块用来模拟线路阻抗和变压器漏抗,电阻0.01Ω、电感0.5mH。这个阻抗不能省,一方面真实系统离不开线路阻抗,另一方面它能防止仿真初瞬间的那个阶跃电流太过剧烈,对数值收敛也有帮助。
3.2.2 PCS变流器区
变流器用Universal Bridge模块,桥臂数设3,功率器件选IGBT/Diode,Ron(导通电阻)1e-3Ω、Forward voltage 1V左右,缓冲电路Snubber resistance设1e6Ω,简化处理。直流侧的正负极直接引到SMES线圈区,中间不加大电容——这里又得提醒一句,超导线圈是大电感,直流侧电流本来就平滑,不需要电容支撑,加了反而可能和线圈形成LC谐振,波形乱七八糟。
3.2.3 超导线圈区
用一个Series RLC Branch,参数设置为:电阻Type选择R,值填1e-6Ω;电感L填0.015H;电容C那栏断开(设inf)。然后接一个断路器或者理想开关模拟线圈的初始励磁过程。实际SMES启动时需要先把线圈电流充起来,这个电流建立过程不能省略。仿真里我通常让一个Step信号在0.02秒时刻触发断路器,把线圈接入PCS直流侧,开始励磁。
3.3 控制系统的详细搭建过程
3.3.1 电压电流测量与坐标变换
在PCS和电网之间要放三个Current Measurement和三个Voltage Measurement,测到的abc三相量送入dq变换模块。dq变换需要电网电压相位角度,这个角度用PLL(锁相环)来获取。从Simscape Electrical里拖Three-Phase PLL模块,输入三相电压,输出wt角度,作为坐标变换的基准。
所有电压电流测量值都转成标幺值或者幅值统一这个环节我建议提前做好,否则后面的PI参数很难跨工况复用。我的习惯是id、iq除以额定电流的峰值进行标幺化,控制量输出再乘以额定电压标幺化回实际值。
3.3.2 电流内环PI控制器的设计
电流内环控制SMES与电网交换的电流。根据前文分析,dq轴电压方程可以近似写成:
vd = Rid - ωLfiq + ud vq = Riq + ωLfid + uq
R是滤波电阻,Lf是滤波电感,ω是电网角频率。交叉耦合项−ωLfiq和ωLfid如果不管,动态过程中dq轴会互相干扰。处理好它的方法很经典:在PI输出两端分别加上解耦补偿项,公式表现为:
vd = (Kp + Ki/s)(id_ref - id) - ωLfiq + ud vq = (Kp + Ki/s)(iq_ref - iq) + ωLfid + uq
具体到模型,PI的Kp、Ki给多少最省事?工程上按典型I型系统整定。假设电流环带宽设计为1000rad/s,滤波电感1mH,那么电压每变化1V能带来约1000A/s的电流变化率,用小信号模型能推出Kp = Lf × 带宽 = 1e-3 × 1000 = 1,Ki = R × 带宽 = 0.01 × 1000 = 10。在此基础上现场微调,基本上波形就很好看了。
3.3.3 功率外环和电流参考值生成
SMES的有功给定可以从两个角度出:当用于平抑功率波动时,外环接收功率参考Pref,有功电流参考id_ref = 2/3 × Pref / ud;当用于维持电压稳定时,则用直流电压闭环生成有功电流参考。无功电流iq_ref由Qref或交流电压偏差经PI输出,这个根据需要而定。
我在模型里做一个“工况选择”常量,通过Switch模块切换恒功率模式和恒电压模式,这样后期做对比实验特别方便。参考值全部限幅在±1.2倍额定值,防止PI饱和导致线圈过流。
3.3.4 PWM调制和脉冲分配
经电流内环算出的vd、vq,要做坐标反变换得到三相调制波ua、ub、uc,送入PWM Generator。
PWM Generator的参数设置,载波频率我设10kHz,载波幅值归一化1。从变换出来的调制波信号幅值如果超过1,会发生过调制,输出波形畸变,必须在前面加Saturation模块限幅。输出是六路PWM脉冲,连接到Universal Bridge的门极输入g。
3.4 一个完整仿真实例的初始参数
为了方便你直接复现,我把整套参数列成表放在下面。这套参数对应的是一个100kW级SMES实验平台的缩比模型,仿真0.4秒能完整看到充电、待机、放电全过程。
| 参数项 | 数值 | 备注 |
|---|---|---|
| 三相电网线电压 | 400V | 50Hz |
| 线路阻抗R/L | 0.01Ω / 0.5mH | 模拟线路及变压器漏抗 |
| 滤波电感Lf | 1mH | 交流侧滤波与升压 |
| 超导线圈电感L | 0.015H | 根据储能需求反推 |
| 超导线圈电阻R | 1e-6Ω | 保留数值,防止矩阵奇异 |
| 线圈额定电流 | 3000A | 对应67.5kJ磁能 |
| 载波频率 | 10kHz | PWM频率 |
| 电流内环Kp/Ki | 1 / 10 | 按带宽1000rad/s整定 |
| 仿真时间 | 0.4s | 前0.1s预充电 |
3.5 分段工况仿真的过程记录
我实际跑一次完整的0.4秒仿真,设置三段工况。0到0.08秒是系统启动期,断路器断开,PWM封锁,电网直接给一个小电流给支撑回路充点电。0.08秒闭合断路器启动预励磁,线圈电流从0快速上升,到0.2秒时稳定在额定3000A附近,此时存储磁能约67.5kJ。0.25秒时切换功率给定为放电模式,电网有功指令突然拉到-100kW(下标说明:负号代表向电网输送功率),观察直流电流下降和网侧功率响应波形。
从Scope波形上看,线圈电流在预励磁阶段呈线性上升段——因为电感两端电压恒定,di/dt = U/L,一个350V左右的直流电压就能让电流以约23kA/s的速度上升,从0到3000A大概0.13秒。放电阶段电流指数下降,网侧有功几乎在一个工频周期内就跟踪到-100kW附近,超调不超过8%,调节时间约30毫秒。这个数据放在仿真报告里,非常能说明SMES的快速响应优势。
4. 仿真中必须注意的操作细节与经验方法
4.1 启动那一刻的初始化问题
电力电子仿真最常见的崩溃之一就是启动瞬间电流冲击过大,导致Simulink报错或波形发散。根源在于初始时刻线圈电流为零,但PWM一开就强行给电感加电压,电感电流不能突变,容易出现数值振荡。
我的处理方式是分三步启动:PWM使能延迟、断路器延迟、功率给定延迟。具体讲就是PWM Generator内部有个Enable端口,先保持0信号到0.08秒;断路器在0.08秒才闭合;有功功率参考在0.2秒后才从0渐变到目标值。这样做有两个好处:一是物理上符合实际启动流程,二是数值上给求解器留出了充分的过渡时间,让它把步长策略稳定下来。
4.2 PI参数整定不要纸上谈兵
公式算出来的PI参数只能作为初值,必须结合仿真波形微调。我见过很多人直接把课本上算出来的值填进去,结果电流波形发散。问题是物理模型里存在PWM延时、采样延时、死区效应,控制对象的高频特性比一阶惯性环节复杂得多,这些因素在理想模型里是没法全部计入的。
一个实用的微调技巧:先把Kp调大直到电流波形出现高频抖动,再回退20%,固定Kp后微调Ki直到稳态误差归零但不引入明显超调。这个办法不花哨,但每一次仿真迭代至少能让你明白“哪个参数在起作用”,而不是盲目试错。
4.3 电源内阻抗和采样延时不能随意省略
有些入门教程为了简单,把电网当成理想电压源,逆变器的测量信号当成离散时刻瞬时采样。这么做在稳态分析里看起来问题不大,但一旦要做动态响应分析就全露馅了——理想电源无法体现电网阻抗对功率交换的制约,实时采样忽略计算延时会让控制器超前于实际系统,相位裕度不足。
在SMES这种对响应速度要求极高的场景里,电网阻抗等效和采样保持环节一定要体现在模型里。我习惯在电压电流测量后端加一个Zero-Order Hold模块,采样频率设20kHz,再进PI和控制器。这样仿真结果和真实装置之间的差距会小得多。
4.4 模型的模块化封装是后期调试的生命线
一个几百个模块平铺在画布上的Simulink模型跑发散的时候,你根本不知道是哪个环节出了问题。所以从一开始就要按子系统封装:电力电子主电路、PLL与测量、电流内环、功率外环、PWM调制,各自封装成独立的Subsystem,内部信号通过Goto/From或Logging标签表,模型跑完直接通过Dashboard Scope观察各层级的变量。
封装完了还有一桩好处:你可以对单个子系统单独做开环测试。比如先把电流内环断开,直接给vd/vq一个固定的值,看主电路开环响应是否符合理论预期;再接通内环,看闭环跟踪。这样每一级都验证过,最后闭环出问题的概率会大幅降低。
5. 常见问题与排查技巧实录
5.1 仿真发散
仿真中途报“Input must be finite”或者波形跑到1e10,最常见的元凶有三个:代数环没有打破、PI输出不饱和导致超调进入负阻区、PWM调制波幅值超过载波。逐个查:看闭环里有没有直接测量信号又直接参与反馈的同一步计算,有的话在路径上加一个Memory模块或Transfer Function小延迟;给每个PI输出都加上限幅;检查坐标反变换后的调制波幅值,超过1就缩小PI输出或者调整调制方式。
5.2 启动瞬间电流尖峰异常大
如果预励磁阶段电流不是平滑上升而是瞬间冲上去出现尖峰,多半是断路器闭合时刻正好遇到某相电压过零点,或者变压器漏抗太小导致冲击电流。解决办法:断路器闭合时间点避开相电压零点,网格同步信号用Step控制一个“软启动”斜坡,让PWM占空比从0慢慢增加。这样线圈电流会平滑爬升,尖峰基本消除。
5.3 dq轴电流互相拖拽、解耦失败
明明id参考变了,iq也跟着抖,这是dq解耦没做好。查两个地方:第一,坐标变换的相位角度是不是用的PLL出来的角度,很多初学者直接用一个固定频率斜坡代替,电网频率偏移时自然解耦失败;第二,解耦补偿项−ωLfiq、ωLfid是否真的加到了PI输出之后。如果这两个都没问题,再检查id/iq的定义方向是不是和主电路电压电流方向一致,别把电流方向标反。
5.4 仿真速度特别慢
变步长求解器步长被压到1e-8量级,仿0.4秒要跑好几个小时,大概率是系统存在高频谐振,常见原因是线圈和分布电容形成了谐振回路。没有实际电容的话可以限制PWM载波频率降低开关次数,或者把模型改成平均值模型——用受控电压源代替IGBT桥臂,开关频率的谐波被忽略,只保留基波动态特性。平均值模型虽然看不到开关纹波,但控制策略验证足够用,仿真速度能提升一个数量级。
5.5 模型普遍参数查错方法
如果波形规律对但幅值全偏,优先检查标幺化和方向。电网侧有功计算公式P = 1.5 × ud × id,有些教程喜欢用峰值标幺有些用有效值标幺,混搭起来结果全部偏30%。我踩过坑后把每个测量量前面都标注清楚是“peak”还是“rms”,并在模型描述里写下来,传给别人的时候能省很多解释的功夫。
6. 写在最后:关于SMES仿真的一些个人体会
做SMES仿真这几年,我最深的感触是:这个东西看起来只比普通的三相PWM整流器多了一个电感和一个低温罐,但真正跑起来你会发现,由于直流侧没有电容“兜底”,整个系统的惯性全部来自那个大电感,控制器必须格外小心才能不让电流越限。很多时候跑出来的波形不正常,问题不在超导线圈的模型复杂度,而恰恰出在最基础的控制环路稳定性上。
如果让我给后来者一条建议,我会说:第一次做不要急着上完整系统,先跑通“电网+三相桥+纯电阻负载”的整流模型,确认PWM、PLL、坐标变换这一套技术底座没问题之后,再把电阻换成超导线圈,加上储能控制逻辑。分步推进看着多花时间,实际上比整体调试快得多。
另外,Simulink模型跑通了之后,建议你有意识地把所有参数改成可配置的MATLAB脚本模式,用“data dictionary”或结构体统一管理。你的模型本身是一个技术验证工具,但只要参数变成可以批量扫描的形式,这个模型就能变成一个研究平台,可以做PI参数寻优、做工况对比、做容量配置讨论,价值完全不同。
最后再分享一个小技巧:给线圈电流设计一个可视化仪表界面,在仿真过程中实时显示磁能值W和功率值P,用Dashboard库里的Gauge模块就能实现。看着磁能数字随着充放电过程跳动,比盯着一堆Scope波形直观得多,汇报演示的时候效果也出奇的好。希望这些经验能帮你少走点弯路。