做飞轮储能系统仿真,绕不开的一个问题就是驱动电机怎么选。我最初在某项目里搭Simulink模型时,把大量精力放在飞轮本体和轴承损耗上,结果系统动态响应怎么调都不对,最后才意识到,真正决定充电快慢、放电平稳度的,是永磁同步电机(PMSM)的电磁转矩特性,以及整个控制环路能不能把这份转矩精确压到目标值。这篇文章就把飞轮储能系统建模到Simulink仿真的完整链路拆开讲,核心是PMSM作为飞轮驱动电机时的数学建模、双闭环控制策略设计、模型搭建步骤,以及我实际跑仿真时踩过的那些坑。无论你是刚入门的储能方向研究生,还是准备用仿真平台验证控制算法的工程师,这篇文章都能让你少走不少弯路。我默认你已经有Simulink和Simscape Electrical的基础模块使用经验,如果没有也没关系,我会把参数配置、整定思路一并讲清楚,照着做也能把模型跑起来。1. 飞轮储能的基本原理与PMSM选型逻辑1.1 飞轮储能是如何存电和放电的飞轮储能的核心是旋转质量储存动能。一个转动惯量为J的飞轮,以角速度ω旋转时,储存的动能为:E = 0.5 × J × ω²充电时电机作为电动机运行,把电网或直流母线的电能转化为飞轮动能;放电时电机切换为发电状态,飞轮带动电机旋转,动能转化为电能反馈回电网或直流母线。这种储能方式和电池相比,最突出的特点是功率密度高、响应速度快、循环寿命长。电池的充放电倍率受化学体系限制,分钟级甚至小时级的调频需求是它的强项,但秒级至分钟级的高频功率波动,反复充放电很容易损耗循环寿命。飞轮储能几乎没有循环寿命概念,充放电次数可达百万次级别,因此特别适合电网一次调频、动态电压补偿、轨道交通再生制动回收、数据中心UPS短时供电等场景。飞轮储能的能量释放深度和转速范围直接相关。如果把最高转速设为ω_max,最低准许转速设为ω_min,则可释放的最大能量为:ΔE = 0.5 × J × (ω_max² - ω_min²)这里有一个很关键的设计权衡:最低转速不能无限压低,因为电机输出电压与转速成正比,转速过低时电机反电动势不足,运行效率大幅下降。通常工程上把工作转速范围控制在最高转速的50%到100%之间,释放约70%以上的可存储能量。1.2 为什么飞轮驱动电机普遍选PMSM飞轮驱动电机的候选其实有几种:异步电机、开关磁阻电机、永磁同步电机。我在项目里对比过之后,PMSM几乎是综合最优解。首先是效率。飞轮储能系统为了减少自身损耗,很多实现会采用真空腔体加磁悬浮轴承,此时电机损耗成为系统最主要的损耗来源。PMSM转子无绕组,没有转子铜耗,定子侧用矢量控制还能做到基速以下只输出有功电流,效率轻松超过95%。异步电机转子有铜耗,低速轻载时效率会明显下降,对长时间维持待机转速的飞轮系统来说非常不利。其次是功率密度。PMSM采用高性能永磁体励磁,体积和重量可以做得比同功率异步电机小很多,这对飞轮这种需要把电机和飞轮同轴安装在狭小腔体内的结构非常重要。电机越短,轴承间距越短,转子动力学设计难度越低。第三是可控性。PMSM是正弦波反电动势电机,配合矢量控制可以得到非常平滑的电磁转矩,转矩波动小意味着飞轮转子受到的激励小,机械振动和噪声更容易控制。开关磁阻电机虽然是另一种高功率密度选择,但它的转矩脉动大、噪声高,在要求低振动的飞轮高速应用里并不理想。当然PMSM也有短板,成本比异步电机高,永磁体在高温下有退磁风险。但飞轮储能通常运行在恒温真空环境里,温度可控,退磁风险是可以通过设计规避的。1.3 整个飞轮储能系统的组成部分从仿真的角度,不能只盯着电机本身。一个完整的飞轮储能系统在Simulink里至少包括五部分:飞轮本体:用转动惯量和阻尼系数建模,是系统的储能核心。PMSM:负责机电能量转换,运行在电动或发电状态。三相逆变器:实现直流母线电压与电机交流电压之间的变换。控制系统:负责转速外环、电流内环、SVPWM调制以及充放电逻辑切换。电网或直流母线接口:在仿真里通常用一个理想直流电压源加负载电阻模拟。把这五部分的结构记在脑子里,后面建模才不会乱。很多初学者一开始就直接搭电机加逆变器,忽略飞轮的机械转动惯量,结果仿出来的转速飞升快得离谱,正是因为缺少了储能本体对转速变化的缓冲作用。2. 物理层建模:PMSM数学模型与飞轮转动惯量的匹配2.1 从三相坐标系到dq坐标系:PMSM模型为什么要做坐标变换PMSM三相绕组在静止abc坐标系下的电压方程是对称耦合的,电感矩阵随转子位置变化,直接用它做控制器设计非常困难。所以工程上几乎都会做Clark变换和Park变换,把三相交流量折算到与转子同步旋转的dq坐标系中。经过坐标变换后,PMSM在dq坐标系下的定子电压方程为:ud = Rs × id + Ld × did/dt - ωe × Lq × iquq = Rs × iq + Lq × diq/dt + ωe × Ld × id + ωe × ψf其中:Rs是定子电阻,Ld、Lq是d轴和q轴电感,id、iq是d轴和q轴电流,ωe是电角速度,ψf是永磁体磁链。第一眼看到这两个方程,很多初学者会困惑:为什么q轴方程里会多出两项?这两项分别代表交叉耦合电动势和反电动势。从物理上看,d轴电流会在q轴方向感应出与转速成正比的电压,产生耦合;永磁体旋转同样会在定子绕组中感应出反电动势。在控制器设计时,如果忽略这两项,动态响应会变差,尤其在高转速下,交叉耦合电压占比很大。电角速度ωe与机械角速度ωm之间满足:ωe = p × ωm其中p是极对数。这一点在Simulink建模时特别容易搞混,PI参数整定或转速反馈换算时如果漏乘极对数,系统会直接发散。2.2 电磁转矩方程与机械运动方程PMSM的电磁转矩表达式为:Te = 1.5 × p × [ψf × iq + (Ld - Lq) × id × iq]括号里第一项是永磁转矩,由q轴电流产生;第二项是磁阻转矩,只有在d轴和q轴电感不等时才会出现。对于表面贴式PMSM,Ld约等于Lq,磁阻转矩基本为零。对于内置式PMSM,Ld小于Lq,可以利用负的id产生正磁阻转矩,这就是最大转矩电流比(MTPA)控制的基础。飞轮储能应用中,绝大多数情况下用的是表面贴式转子结构,因为飞轮电机更看重稳定性和简单性,所以我们的控制策略可以简化为id=0,电磁转矩与iq成正比:Te = 1.5 × p × ψf × iq这个简化非常关键,它让转速外环的输出直接对应iq指令,整个控制器结构变得非常清晰。飞轮的机械运动方程为:J × dωm/dt = Te - TL - B × ωm其中J是飞轮与电机转子折算后的总转动惯量,TL是负载转矩(充放电时对应发电制动或电动加速时的阻力矩),B是粘滞阻尼系数。在飞轮储能模型里,TL的物理意义需要仔细区分。充电时电机输出正向电磁转矩克服自身损耗和轴承阻力,推动飞轮加速;放电时负载从直流母线侧抽取功率,等效为电机轴上的反向制动转矩,飞轮转速下降。如果不把放电阶段的功率抽取建模进去,仿真里飞轮只会加速,永远放不出电。2.3 转动惯量与储能容量的定量匹配:一个具体算例转动惯量J是连接机械侧和电气侧的核心参数,它的大小直接决定了系统能存多少能量,也决定了转速环的动态响应快慢。设计时应该先根据储能需求确定J,再反过来校核电机的转矩能力。举个例子。假设我们要做一个模拟级的小型飞轮储能系统,目标工作转速区间为1000到2000 rad/s,对应约9549到19098 rpm。这个转速区间在高速飞轮里很典型,铝合金飞轮在这个线速度下还在材料安全范围内。如果要存储约15000 J的能量,根据能量公式:J = 2 × ΔE / (ω_max² - ω_min²) = 2 × 15000 / (2000² - 1000²) = 0.01 kg·m²这个转动惯量并不算大,如果飞轮半径是0.1 m,对应质量约2 kg的均匀圆盘。接下来校核电机转矩。假设我们希望飞轮在20秒内从1000加速到2000 rad/s,平均角加速度为:α = (2000 - 1000) / 20 = 50 rad/s²所需平均电磁转矩为:Te = J × α + B × ωm忽略阻尼后约0.5 N·m。这个转矩对PMSM来说很轻松,但如果要求5秒内完成加速,转矩就要2 N·m,电机体积和逆变器电流都要上一个量级。很多仿真做出来转速环响应慢,原因往往不是PI参数不够激进,而是转动惯量相对于电机转矩能力太大了,物理上就加速不了那么快。在Simulink里,我建议把J作为单独参数放在模型工作空间里,用symbolic变量统一管理,方便后续做参数扫描。不要把J写成常量埋在转动惯量模块里,否则想研究不同飞轮设计的响应特性时,改参数会非常痛苦。3. 控制策略设计:转速外环加电流内环的完整逻辑3.1 为什么采用id=0矢量控制PMSM的矢量控制核心思路是把定子电流分解为励磁分量id和转矩分量iq,分别独立控制。对飞轮储能用的表面贴式PMSM,磁阻转矩为零,让id=0时,用最小电流产生最大转矩,铜耗最低,控制算法也最简单。有些项目为了追求更高的功率密度,会在基速以上切换到弱磁控制,也就是让id负向增大,牺牲一部分转矩能力换取转速上限。但对第一版仿真模型来说,我建议先做id=0,把系统跑通后再做弱磁扩展。一开始就带弱磁环,参数之间相互耦合,出了问题很难定位。3.2 电流环PI参数整定:零极点对消法电流环是内环,带宽必须远高于转速环,才能保证电流对转矩指令的快速跟踪。常用整定方法是零极点对消,把PI控制器的零点抵消掉被控对象的大惯性极点。PMSM的q轴电流动态可以近似为一阶惯性环节:G(s) = iq / uq = 1 / (Lq × s + Rs)用PI控制器抵消极点后,取期望闭环带宽为ω_cc,则:Kp_i = Lq × ω_ccKi_i = Rs × ω_cc这里ω_cc的单位是rad/s。假设前面算例中Lq=0.2 mH,Rs=0.05 Ω,取电流环带宽ω_cc=500 rad/s,也就是约80 Hz,可得:Kp_i = 0.0002 × 500 = 0.1Ki_i = 0.05 × 500 = 25这个带宽相对于开关频率10 kHz来说已经比较保守,只用了约1/20,工程上是稳妥的。如果你用的是更高开关频率,比如20 kHz,可以适当把带宽往上提,电流环响应更快,但PI增益增大后,对噪声和采样延时的敏感度也会提高。电流环整定有一个原则:先保证不振荡,再追求快速。仿真里如果电流波形出现高频振铃,首先怀疑采样延时补偿不够,其次怀疑带宽太高。3.3 转速外环设计与充放电模式切换转速环是飞轮储能系统最上层的控制环。它的任务是让实际转速跟踪转速指令。转速指令的变化本身就代表了充放电逻辑:充电时把转速指令从ω_min阶跃到ω_max,电机自动输出正转矩加速;放电时把转速指令下调,电机会主动进入发电状态,把动能回馈到母线。转速环被控对象近似为:ωm(s) / Te(s) = 1 / (J × s + B)设计PI控制器后,闭环可以整定为一阶或二阶系统。工程经验上,转速环带宽ω_cn取电流环带宽的1/10左右,即50 rad/s左右。用前面J=0.01 kg·m²,B忽略不计,电磁转矩系数Kt=1.5×p×ψf=1.5×4×0.02=0.12 N·m/A(假设极对数p=4,磁链ψf=0.02 Wb),转速环PI参数可以按以下方式估算:Kp_n = J × ω_cn / Kt = 0.01 × 50 / 0.12 ≈ 4.17Ki_n = Kp_n × ω_cn ≈ 208注意这只是初始值,实际要在仿真里微调。我见过很多人直接把这两个数填进去,发现转速超调很大,然后怀疑公式不对。其实是因为忽略了转速环PI输出限幅对积分项的影响。转速环输出就是iq指令,必须做限幅处理,把iq限制在逆变器允许的最大电流范围内。否则大阶跃指令下积分疯狂累加,去限幅时系统就会出现明显超调甚至振荡。限幅值最好和电流环最大电流保持一致。比如逆变器峰值电流30 A,iq限幅就设正负30 A。限幅之后,积分器需要配anti-windup功能。Simulink的PI控制器模块自带这个选项,把Limit output勾上,再勾选Anti-windup gain,就相当于给积分器加了一个反馈衰减,效果非常明显。充放电切换还有一个细节:转速指令不要用斜率无穷大的阶跃,最好设成有限斜率,比如100 rad/s每仿真秒的上升速率。这样既模拟了实际飞轮储能系统的功率限制,也避免了对电流环的冲击。3.4 功率和电流的进一步约束飞轮储能的功率不是无限大的,它受逆变器电流极限和电机热极限共同约束。在仿真里,除了电流限幅,还应该在控制层加功率限制环节。具体做法是在转速环输出iq指令之前,根据当前转速和最大允许电磁转矩计算允许的电磁功率上限。因为电磁功率Pe = Te × ωm,如果Te被iq限制住了,转速越高功率越大,所以恒功率区要注意降低允许的iq指令。在基础仿真里,如果工况没有特别极端的功率需求,这一块可以先不加。但如果你研究的是电网一次调频或者平滑新能源波动这类场景,电流限幅之外必须再包一层功率外限幅,否则仿真里会出现母线电压泵升或直流侧过压,结果不符合实际。4. Simulink模型分步搭建与参数配置实操4.1 顶层模型该长什么样我搭Simulink模型的习惯是自顶向下分层。顶层模型只放四个大模块:逆变器与电机子系统、控制子系统、飞轮机械子系统、直流母线侧负载。每个子系统内部再往下拆。这种层次结构最大的好处是排错方便。仿真跑出nan之后,不用在一坨连线上到处找问题,直接进入子系统看是哪一层出了问题。顶层连线关系是这样的:直流母线电压源接三相逆变器输入端,逆变器输出端接PMSM三相端子,PMSM的机械端口接飞轮转动惯量模块,PMSM内部测量出的三相电流和转子角度反馈给控制子系统,控制子系统输出SVPWM开关信号给逆变器。4.2 PMSM本体和逆变器的建模选择Simulink的Simscape Electrical库里提供了完整的PMSM模块,配置界面里有几个关键参数必须和前面数学模型严格对应:转子类型:选择Surface-mounted(表贴式),这样Ld=Lq,控制上id=0就是最优。永磁磁链:填0.02 Wb,对应反电动势系数。极对数:填4。定子电阻和电感:按前面算例填0.05 Ω和0.2 mH。机械输入端口:选择运动输入,接飞轮转动惯量和阻尼。逆变器的建模有两种方式。第一种是理想平均模型,用三个受控电压源等效逆变器输出电压,这种模型速度快、不涉及PWM细节,适合先验证控制算法。第二种是全桥IGBT模型加SVPWM调制,更贴近实际,但仿真耗时明显增加,而且需要处理死区时间。我的建议是分两步走:先跑平均模型把物理逻辑打通,再加入SVPWM和IGBT桥做精细化验证。这能帮你把“控制逻辑问题”和“调制实现问题”分开排查。如果你用SVPWM,Simulink里有现成的PWM Generator模块,也可以自己搭SVPWM扇区计算加切换时间合成。自建的优点是可以深入理解调制原理,缺点是容易在扇区判断和时间计算上出错。我实际项目中用的是自建SVPWM,调试时发现扇区号判断绕过了0到2π的边界就会突然反转。如果你第一次做,直接用Simulink内置的三相PWM Generator把载波频率设为10 kHz,运行效率和可靠性都更高。4.3 控制环路的离散化与求解器配置飞轮储能仿真的控制系统部分,我推荐用手写的离散控制模块,采样时间固定为Ts=1e-4秒,也就是10 kHz的控制频率,与PWM载波同步。连续域PI设计好参数后,需要通过离散化方法转换成离散域的差分方程。Simulink自带的PID Controller模块可以配置成离散域,方法选Forward Euler,采样时间填Ts,它会自动处理积分和抗饱和。求解器方面,如果系统里包含IGBT开关和PWM载波,仿真步长不宜超过1e-6秒,建议用ode23tb,它处理刚性系统比ode45稳定得多。如果只跑平均模型,步长可以放大到1e-5秒,速度会快很多。很多人在仿真开始几步就报错“Inputs must be finite”,十有八九是求解器步长太大,导致PI控制器输出在极限值上反复跳动,积分器瞬间发散。把最大步长限制到1e-5秒,这类问题基本就消失了。4.4 从开环到双闭环的联调顺序拿到一个能跑的PMSM模型,不要急着直接上双闭环。我的习惯是三阶段联调:第一阶段,开环测试。给PMSM一个固定电压矢量,看转子能不能正常旋转,电流反电动势方向对不对。这一阶段先把电机模型本身验证掉。第二阶段,只闭环电流环,转速环开环。给定iq指令,看电流能不能快速跟踪、有没有超调。设置iq为5 A阶跃,观察响应时间。如果电流环PI参数正确,应该在几个毫秒内到达目标。第三阶段,接通转速外环。给定转速指令从1000阶跃到1500 rad/s,观察转速上升过程。如果上升太慢,增大Kp_n;如果超调大,减小Kp_n并适当增大Ki_n。这个顺序看起来保守,但它能让你在拿到最终双闭环结果时,对每一段波形的来历心里有数。直接一把梭搭全闭环,出了问题很难判断是电流环还是转速环的锅。5. 仿真结果分析与仿真中绕不开的那些坑5.1 典型工况波形应该长什么样先说充电过程。转速指令从1000 rad/s阶跃到2000 rad/s,限幅iq在初始阶段会顶到上限30 A,电磁转矩很快拉升到约3.6 N·m,转速以接近J除以转矩的斜率线性上升。随着转速升高,如果转速环PI工作正常,iq会慢慢退出限幅,最终转速稳定在2000 rad/s,iq回落到一个很小的空载损耗补偿值。放电过程刚好反过来。转速指令从2000调到1000 rad/s,转速环输出负iq,电机进入发电状态,能量从飞轮流向直流母线。这时你会看到直流母线电流反向,母线电压如果没有稳压机制会上升。如果母线侧只是一个理想电压源加电阻,电压会保持在设定值附近,但母线电流方向会反转,直流负载功率增大。典型的储能功率波形是:充电阶段功率为正值,放电阶段为负值。功率峰值受iq限幅和当前转速共同限制,转速低时相同电流对应的电磁功率也低,所以放电后期虽然还有电流余量,功率已经明显下降。这就是前文提到的恒功率区限制,飞轮储能天然具有这个特性,并不是控制器的问题。5.2 排查链路:转速发散、母线泵升、PI饱和我把实际运行中最常遇到的三个异常情况整理成一条排查链路,按顺序检查,九成的仿真崩溃都能解决。第一步看电流波形。如果电流在开关频率附近出现持续高频振荡,优先排除电流环带宽过高、采样延时补偿缺失、逆变器死区设置过大。把电流环带宽从500降到300 rad/s再试,很多人这一步就解决问题了。第二步看转子角度反馈方向。转速指令设置为正向充电时,如果转速不变,但电流一直很大,很可能电机角度反馈了符号反了。比如本来应该用正增量编码器方向的信号,结果用了负方向,Park变换角度错误,id和iq解析全乱。Simulink里检查方法很简单:断开转速环,直接给额定iq,看转速响应是否为正向加速。因为这时不存在角度方向混乱导致的闭环锁定,系统会暴露最原始的机电关系。第三步看PI输出限幅。转速环输出iq如果长时间顶在限幅值,说明要么转速指令变化太快,要么飞轮转动惯量和转矩能力不匹配。这时候需要检查你的机械参数:如果J=0.01 kg·m²,电机额定转矩只有0.5 N·m,却要求5秒内从1000加速到2000 rad/s,物理上就做不到,无论PI参数怎么调都是徒劳。物理极限永远在控制器之前,这是仿真教会我最重要的一件事。另一个典型异常是母线电压泵升。放电时飞轮动能回流到直流侧,如果直流母线上只有一个很小的电容和一只固定电阻,能量无处释放,电压会迅速飙升,触发过压保护甚至仿真报错。正确做法是给直流母线挂一个足够大的电容,或者接一个可控负载模拟飞轮储能的并网换流器。在车载或微电网场景里,这个问题尤其突出,很多人在电机模型上花了大量时间,最后卡在直流母线侧。5.3 损耗建模:摩擦和阻尼到底要不要加进模型很多初始仿真模型会把阻尼系数B设成0,认为理想飞轮可以无损耗旋转,便于集中观察控制逻辑。这个做法在验证控制算法时没问题,但一旦你开始分析稳态波形或者做能量效率评估,B=0的模型会让你得出严重偏乐观的结论。实际飞轮系统的损耗来源包括轴承摩擦、风阻(若腔内非高真空)、电机铁耗。损耗与转速密切相关,最简化的模型可以写成:TL = B × ωm + Tc其中B是粘滞阻尼系数,Tc是恒定阻力矩。在Simulink里,可以用一维查表模块来表达损耗随转速变化的曲线,把实测或估算的损耗数据输入进去,比单纯的线性B模型更接近真实。加损耗后你会发现一个很实际的现象:充电完成后系统进入待机模式,转速会缓慢下降,因为损耗转矩始终存在。控制器的转速环为了维持转速,会一直输出一个很小的正向iq来补偿损耗。这个“待机电流”的大小,直接反映了系统空载损耗水平。仿真阶段我建议先把粘滞阻尼设为一个非零的小值,比如B=1e-4 N·m·s/rad,通过观察待机转速下降快慢来评估它对系统效率的影响。确认损耗机理之后,再根据项目需求决定是否引入完整损耗模型。我个人的习惯是在模型里加B=1e-4和Tc=0.05 N·m的简化损耗组合。前者模拟轴承粘滞摩擦,后者模拟磁阻转矩和风阻。这样既不会让PI控制器设计变得过于复杂,又保留了物理真实性。5.4 让别人能编辑你的仿真模型:参数命名与文档注释最后分享一点和模型本身无关但影响深远的经验。飞轮储能仿真模型的参数往往超过二十个,如果不做统一管理,三个月后你自己都会忘记哪个参数对应哪个物理量。我的做法是在MATLAB脚本里定义所有符号变量,再加上中文注释,Simulink模型里的所有模块参数都引用这些符号,而不是直接填数值。这样整个模型就有了一个清晰的数据源头。改动飞轮转动惯量时,只需要改脚本里的一行J=0.01,全模型各处自动更新。对于PI参数,建议在脚本里同时写上整定公式和设计带宽,方便后人(包括未来的自己)快速理解每个参数为什么是这个量级。仿真模型的注释也很重要。我不建议在模型里写大段文字,而是在信号线命名上花功夫。比如把转速环输出的信号命名为“iq_Ref_RampAndLimit”,把经过限幅后的信号命名为“iq_Ref_Lim”。所有中间变量命名尽量说清楚来源和处理方式,排错时可以少很多无意义的追踪。实际项目中最令人头大的问题,往往不是模型本身不收敛,而是模型经过了三个人的手之后,每个人改了参数但没人更新注释,最后模型跑出来的波形是谁也说不清楚的中间态。飞轮储能涉及的能量管理、电机控制、机械动力学三个领域,团队协作时清晰命名比什么都重要。
做飞轮储能系统仿真,绕不开的一个问题就是驱动电机怎么选。我最初在某项目里搭Simulink模型时,把大量精力放在飞轮本体和轴承损耗上,结果系统动态响应怎么调都不对,最后才意识到,真正决定充电快慢、放电平稳度的,是永磁同步电机(PMSM)的电磁转矩特性,以及整个控制环路能不能把这份转矩精确压到目标值。这篇文章就把飞轮储能系统建模到Simulink仿真的完整链路拆开讲,核心是PMSM作为飞轮驱动电机时的数学建模、双闭环控制策略设计、模型搭建步骤,以及我实际跑仿真时踩过的那些坑。无论你是刚入门的储能方向研究生,还是准备用仿真平台验证控制算法的工程师,这篇文章都能让你少走不少弯路。我默认你已经有Simulink和Simscape Electrical的基础模块使用经验,如果没有也没关系,我会把参数配置、整定思路一并讲清楚,照着做也能把模型跑起来。1. 飞轮储能的基本原理与PMSM选型逻辑1.1 飞轮储能是如何存电和放电的飞轮储能的核心是旋转质量储存动能。一个转动惯量为J的飞轮,以角速度ω旋转时,储存的动能为:E = 0.5 × J × ω²充电时电机作为电动机运行,把电网或直流母线的电能转化为飞轮动能;放电时电机切换为发电状态,飞轮带动电机旋转,动能转化为电能反馈回电网或直流母线。这种储能方式和电池相比,最突出的特点是功率密度高、响应速度快、循环寿命长。电池的充放电倍率受化学体系限制,分钟级甚至小时级的调频需求是它的强项,但秒级至分钟级的高频功率波动,反复充放电很容易损耗循环寿命。飞轮储能几乎没有循环寿命概念,充放电次数可达百万次级别,因此特别适合电网一次调频、动态电压补偿、轨道交通再生制动回收、数据中心UPS短时供电等场景。飞轮储能的能量释放深度和转速范围直接相关。如果把最高转速设为ω_max,最低准许转速设为ω_min,则可释放的最大能量为:ΔE = 0.5 × J × (ω_max² - ω_min²)这里有一个很关键的设计权衡:最低转速不能无限压低,因为电机输出电压与转速成正比,转速过低时电机反电动势不足,运行效率大幅下降。通常工程上把工作转速范围控制在最高转速的50%到100%之间,释放约70%以上的可存储能量。1.2 为什么飞轮驱动电机普遍选PMSM飞轮驱动电机的候选其实有几种:异步电机、开关磁阻电机、永磁同步电机。我在项目里对比过之后,PMSM几乎是综合最优解。首先是效率。飞轮储能系统为了减少自身损耗,很多实现会采用真空腔体加磁悬浮轴承,此时电机损耗成为系统最主要的损耗来源。PMSM转子无绕组,没有转子铜耗,定子侧用矢量控制还能做到基速以下只输出有功电流,效率轻松超过95%。异步电机转子有铜耗,低速轻载时效率会明显下降,对长时间维持待机转速的飞轮系统来说非常不利。其次是功率密度。PMSM采用高性能永磁体励磁,体积和重量可以做得比同功率异步电机小很多,这对飞轮这种需要把电机和飞轮同轴安装在狭小腔体内的结构非常重要。电机越短,轴承间距越短,转子动力学设计难度越低。第三是可控性。PMSM是正弦波反电动势电机,配合矢量控制可以得到非常平滑的电磁转矩,转矩波动小意味着飞轮转子受到的激励小,机械振动和噪声更容易控制。开关磁阻电机虽然是另一种高功率密度选择,但它的转矩脉动大、噪声高,在要求低振动的飞轮高速应用里并不理想。当然PMSM也有短板,成本比异步电机高,永磁体在高温下有退磁风险。但飞轮储能通常运行在恒温真空环境里,温度可控,退磁风险是可以通过设计规避的。1.3 整个飞轮储能系统的组成部分从仿真的角度,不能只盯着电机本身。一个完整的飞轮储能系统在Simulink里至少包括五部分:飞轮本体:用转动惯量和阻尼系数建模,是系统的储能核心。PMSM:负责机电能量转换,运行在电动或发电状态。三相逆变器:实现直流母线电压与电机交流电压之间的变换。控制系统:负责转速外环、电流内环、SVPWM调制以及充放电逻辑切换。电网或直流母线接口:在仿真里通常用一个理想直流电压源加负载电阻模拟。把这五部分的结构记在脑子里,后面建模才不会乱。很多初学者一开始就直接搭电机加逆变器,忽略飞轮的机械转动惯量,结果仿出来的转速飞升快得离谱,正是因为缺少了储能本体对转速变化的缓冲作用。2. 物理层建模:PMSM数学模型与飞轮转动惯量的匹配2.1 从三相坐标系到dq坐标系:PMSM模型为什么要做坐标变换PMSM三相绕组在静止abc坐标系下的电压方程是对称耦合的,电感矩阵随转子位置变化,直接用它做控制器设计非常困难。所以工程上几乎都会做Clark变换和Park变换,把三相交流量折算到与转子同步旋转的dq坐标系中。经过坐标变换后,PMSM在dq坐标系下的定子电压方程为:ud = Rs × id + Ld × did/dt - ωe × Lq × iquq = Rs × iq + Lq × diq/dt + ωe × Ld × id + ωe × ψf其中:Rs是定子电阻,Ld、Lq是d轴和q轴电感,id、iq是d轴和q轴电流,ωe是电角速度,ψf是永磁体磁链。第一眼看到这两个方程,很多初学者会困惑:为什么q轴方程里会多出两项?这两项分别代表交叉耦合电动势和反电动势。从物理上看,d轴电流会在q轴方向感应出与转速成正比的电压,产生耦合;永磁体旋转同样会在定子绕组中感应出反电动势。在控制器设计时,如果忽略这两项,动态响应会变差,尤其在高转速下,交叉耦合电压占比很大。电角速度ωe与机械角速度ωm之间满足:ωe = p × ωm其中p是极对数。这一点在Simulink建模时特别容易搞混,PI参数整定或转速反馈换算时如果漏乘极对数,系统会直接发散。2.2 电磁转矩方程与机械运动方程PMSM的电磁转矩表达式为:Te = 1.5 × p × [ψf × iq + (Ld - Lq) × id × iq]括号里第一项是永磁转矩,由q轴电流产生;第二项是磁阻转矩,只有在d轴和q轴电感不等时才会出现。对于表面贴式PMSM,Ld约等于Lq,磁阻转矩基本为零。对于内置式PMSM,Ld小于Lq,可以利用负的id产生正磁阻转矩,这就是最大转矩电流比(MTPA)控制的基础。飞轮储能应用中,绝大多数情况下用的是表面贴式转子结构,因为飞轮电机更看重稳定性和简单性,所以我们的控制策略可以简化为id=0,电磁转矩与iq成正比:Te = 1.5 × p × ψf × iq这个简化非常关键,它让转速外环的输出直接对应iq指令,整个控制器结构变得非常清晰。飞轮的机械运动方程为:J × dωm/dt = Te - TL - B × ωm其中J是飞轮与电机转子折算后的总转动惯量,TL是负载转矩(充放电时对应发电制动或电动加速时的阻力矩),B是粘滞阻尼系数。在飞轮储能模型里,TL的物理意义需要仔细区分。充电时电机输出正向电磁转矩克服自身损耗和轴承阻力,推动飞轮加速;放电时负载从直流母线侧抽取功率,等效为电机轴上的反向制动转矩,飞轮转速下降。如果不把放电阶段的功率抽取建模进去,仿真里飞轮只会加速,永远放不出电。2.3 转动惯量与储能容量的定量匹配:一个具体算例转动惯量J是连接机械侧和电气侧的核心参数,它的大小直接决定了系统能存多少能量,也决定了转速环的动态响应快慢。设计时应该先根据储能需求确定J,再反过来校核电机的转矩能力。举个例子。假设我们要做一个模拟级的小型飞轮储能系统,目标工作转速区间为1000到2000 rad/s,对应约9549到19098 rpm。这个转速区间在高速飞轮里很典型,铝合金飞轮在这个线速度下还在材料安全范围内。如果要存储约15000 J的能量,根据能量公式:J = 2 × ΔE / (ω_max² - ω_min²) = 2 × 15000 / (2000² - 1000²) = 0.01 kg·m²这个转动惯量并不算大,如果飞轮半径是0.1 m,对应质量约2 kg的均匀圆盘。接下来校核电机转矩。假设我们希望飞轮在20秒内从1000加速到2000 rad/s,平均角加速度为:α = (2000 - 1000) / 20 = 50 rad/s²所需平均电磁转矩为:Te = J × α + B × ωm忽略阻尼后约0.5 N·m。这个转矩对PMSM来说很轻松,但如果要求5秒内完成加速,转矩就要2 N·m,电机体积和逆变器电流都要上一个量级。很多仿真做出来转速环响应慢,原因往往不是PI参数不够激进,而是转动惯量相对于电机转矩能力太大了,物理上就加速不了那么快。在Simulink里,我建议把J作为单独参数放在模型工作空间里,用symbolic变量统一管理,方便后续做参数扫描。不要把J写成常量埋在转动惯量模块里,否则想研究不同飞轮设计的响应特性时,改参数会非常痛苦。3. 控制策略设计:转速外环加电流内环的完整逻辑3.1 为什么采用id=0矢量控制PMSM的矢量控制核心思路是把定子电流分解为励磁分量id和转矩分量iq,分别独立控制。对飞轮储能用的表面贴式PMSM,磁阻转矩为零,让id=0时,用最小电流产生最大转矩,铜耗最低,控制算法也最简单。有些项目为了追求更高的功率密度,会在基速以上切换到弱磁控制,也就是让id负向增大,牺牲一部分转矩能力换取转速上限。但对第一版仿真模型来说,我建议先做id=0,把系统跑通后再做弱磁扩展。一开始就带弱磁环,参数之间相互耦合,出了问题很难定位。3.2 电流环PI参数整定:零极点对消法电流环是内环,带宽必须远高于转速环,才能保证电流对转矩指令的快速跟踪。常用整定方法是零极点对消,把PI控制器的零点抵消掉被控对象的大惯性极点。PMSM的q轴电流动态可以近似为一阶惯性环节:G(s) = iq / uq = 1 / (Lq × s + Rs)用PI控制器抵消极点后,取期望闭环带宽为ω_cc,则:Kp_i = Lq × ω_ccKi_i = Rs × ω_cc这里ω_cc的单位是rad/s。假设前面算例中Lq=0.2 mH,Rs=0.05 Ω,取电流环带宽ω_cc=500 rad/s,也就是约80 Hz,可得:Kp_i = 0.0002 × 500 = 0.1Ki_i = 0.05 × 500 = 25这个带宽相对于开关频率10 kHz来说已经比较保守,只用了约1/20,工程上是稳妥的。如果你用的是更高开关频率,比如20 kHz,可以适当把带宽往上提,电流环响应更快,但PI增益增大后,对噪声和采样延时的敏感度也会提高。电流环整定有一个原则:先保证不振荡,再追求快速。仿真里如果电流波形出现高频振铃,首先怀疑采样延时补偿不够,其次怀疑带宽太高。3.3 转速外环设计与充放电模式切换转速环是飞轮储能系统最上层的控制环。它的任务是让实际转速跟踪转速指令。转速指令的变化本身就代表了充放电逻辑:充电时把转速指令从ω_min阶跃到ω_max,电机自动输出正转矩加速;放电时把转速指令下调,电机会主动进入发电状态,把动能回馈到母线。转速环被控对象近似为:ωm(s) / Te(s) = 1 / (J × s + B)设计PI控制器后,闭环可以整定为一阶或二阶系统。工程经验上,转速环带宽ω_cn取电流环带宽的1/10左右,即50 rad/s左右。用前面J=0.01 kg·m²,B忽略不计,电磁转矩系数Kt=1.5×p×ψf=1.5×4×0.02=0.12 N·m/A(假设极对数p=4,磁链ψf=0.02 Wb),转速环PI参数可以按以下方式估算:Kp_n = J × ω_cn / Kt = 0.01 × 50 / 0.12 ≈ 4.17Ki_n = Kp_n × ω_cn ≈ 208注意这只是初始值,实际要在仿真里微调。我见过很多人直接把这两个数填进去,发现转速超调很大,然后怀疑公式不对。其实是因为忽略了转速环PI输出限幅对积分项的影响。转速环输出就是iq指令,必须做限幅处理,把iq限制在逆变器允许的最大电流范围内。否则大阶跃指令下积分疯狂累加,去限幅时系统就会出现明显超调甚至振荡。限幅值最好和电流环最大电流保持一致。比如逆变器峰值电流30 A,iq限幅就设正负30 A。限幅之后,积分器需要配anti-windup功能。Simulink的PI控制器模块自带这个选项,把Limit output勾上,再勾选Anti-windup gain,就相当于给积分器加了一个反馈衰减,效果非常明显。充放电切换还有一个细节:转速指令不要用斜率无穷大的阶跃,最好设成有限斜率,比如100 rad/s每仿真秒的上升速率。这样既模拟了实际飞轮储能系统的功率限制,也避免了对电流环的冲击。3.4 功率和电流的进一步约束飞轮储能的功率不是无限大的,它受逆变器电流极限和电机热极限共同约束。在仿真里,除了电流限幅,还应该在控制层加功率限制环节。具体做法是在转速环输出iq指令之前,根据当前转速和最大允许电磁转矩计算允许的电磁功率上限。因为电磁功率Pe = Te × ωm,如果Te被iq限制住了,转速越高功率越大,所以恒功率区要注意降低允许的iq指令。在基础仿真里,如果工况没有特别极端的功率需求,这一块可以先不加。但如果你研究的是电网一次调频或者平滑新能源波动这类场景,电流限幅之外必须再包一层功率外限幅,否则仿真里会出现母线电压泵升或直流侧过压,结果不符合实际。4. Simulink模型分步搭建与参数配置实操4.1 顶层模型该长什么样我搭Simulink模型的习惯是自顶向下分层。顶层模型只放四个大模块:逆变器与电机子系统、控制子系统、飞轮机械子系统、直流母线侧负载。每个子系统内部再往下拆。这种层次结构最大的好处是排错方便。仿真跑出nan之后,不用在一坨连线上到处找问题,直接进入子系统看是哪一层出了问题。顶层连线关系是这样的:直流母线电压源接三相逆变器输入端,逆变器输出端接PMSM三相端子,PMSM的机械端口接飞轮转动惯量模块,PMSM内部测量出的三相电流和转子角度反馈给控制子系统,控制子系统输出SVPWM开关信号给逆变器。4.2 PMSM本体和逆变器的建模选择Simulink的Simscape Electrical库里提供了完整的PMSM模块,配置界面里有几个关键参数必须和前面数学模型严格对应:转子类型:选择Surface-mounted(表贴式),这样Ld=Lq,控制上id=0就是最优。永磁磁链:填0.02 Wb,对应反电动势系数。极对数:填4。定子电阻和电感:按前面算例填0.05 Ω和0.2 mH。机械输入端口:选择运动输入,接飞轮转动惯量和阻尼。逆变器的建模有两种方式。第一种是理想平均模型,用三个受控电压源等效逆变器输出电压,这种模型速度快、不涉及PWM细节,适合先验证控制算法。第二种是全桥IGBT模型加SVPWM调制,更贴近实际,但仿真耗时明显增加,而且需要处理死区时间。我的建议是分两步走:先跑平均模型把物理逻辑打通,再加入SVPWM和IGBT桥做精细化验证。这能帮你把“控制逻辑问题”和“调制实现问题”分开排查。如果你用SVPWM,Simulink里有现成的PWM Generator模块,也可以自己搭SVPWM扇区计算加切换时间合成。自建的优点是可以深入理解调制原理,缺点是容易在扇区判断和时间计算上出错。我实际项目中用的是自建SVPWM,调试时发现扇区号判断绕过了0到2π的边界就会突然反转。如果你第一次做,直接用Simulink内置的三相PWM Generator把载波频率设为10 kHz,运行效率和可靠性都更高。4.3 控制环路的离散化与求解器配置飞轮储能仿真的控制系统部分,我推荐用手写的离散控制模块,采样时间固定为Ts=1e-4秒,也就是10 kHz的控制频率,与PWM载波同步。连续域PI设计好参数后,需要通过离散化方法转换成离散域的差分方程。Simulink自带的PID Controller模块可以配置成离散域,方法选Forward Euler,采样时间填Ts,它会自动处理积分和抗饱和。求解器方面,如果系统里包含IGBT开关和PWM载波,仿真步长不宜超过1e-6秒,建议用ode23tb,它处理刚性系统比ode45稳定得多。如果只跑平均模型,步长可以放大到1e-5秒,速度会快很多。很多人在仿真开始几步就报错“Inputs must be finite”,十有八九是求解器步长太大,导致PI控制器输出在极限值上反复跳动,积分器瞬间发散。把最大步长限制到1e-5秒,这类问题基本就消失了。4.4 从开环到双闭环的联调顺序拿到一个能跑的PMSM模型,不要急着直接上双闭环。我的习惯是三阶段联调:第一阶段,开环测试。给PMSM一个固定电压矢量,看转子能不能正常旋转,电流反电动势方向对不对。这一阶段先把电机模型本身验证掉。第二阶段,只闭环电流环,转速环开环。给定iq指令,看电流能不能快速跟踪、有没有超调。设置iq为5 A阶跃,观察响应时间。如果电流环PI参数正确,应该在几个毫秒内到达目标。第三阶段,接通转速外环。给定转速指令从1000阶跃到1500 rad/s,观察转速上升过程。如果上升太慢,增大Kp_n;如果超调大,减小Kp_n并适当增大Ki_n。这个顺序看起来保守,但它能让你在拿到最终双闭环结果时,对每一段波形的来历心里有数。直接一把梭搭全闭环,出了问题很难判断是电流环还是转速环的锅。5. 仿真结果分析与仿真中绕不开的那些坑5.1 典型工况波形应该长什么样先说充电过程。转速指令从1000 rad/s阶跃到2000 rad/s,限幅iq在初始阶段会顶到上限30 A,电磁转矩很快拉升到约3.6 N·m,转速以接近J除以转矩的斜率线性上升。随着转速升高,如果转速环PI工作正常,iq会慢慢退出限幅,最终转速稳定在2000 rad/s,iq回落到一个很小的空载损耗补偿值。放电过程刚好反过来。转速指令从2000调到1000 rad/s,转速环输出负iq,电机进入发电状态,能量从飞轮流向直流母线。这时你会看到直流母线电流反向,母线电压如果没有稳压机制会上升。如果母线侧只是一个理想电压源加电阻,电压会保持在设定值附近,但母线电流方向会反转,直流负载功率增大。典型的储能功率波形是:充电阶段功率为正值,放电阶段为负值。功率峰值受iq限幅和当前转速共同限制,转速低时相同电流对应的电磁功率也低,所以放电后期虽然还有电流余量,功率已经明显下降。这就是前文提到的恒功率区限制,飞轮储能天然具有这个特性,并不是控制器的问题。5.2 排查链路:转速发散、母线泵升、PI饱和我把实际运行中最常遇到的三个异常情况整理成一条排查链路,按顺序检查,九成的仿真崩溃都能解决。第一步看电流波形。如果电流在开关频率附近出现持续高频振荡,优先排除电流环带宽过高、采样延时补偿缺失、逆变器死区设置过大。把电流环带宽从500降到300 rad/s再试,很多人这一步就解决问题了。第二步看转子角度反馈方向。转速指令设置为正向充电时,如果转速不变,但电流一直很大,很可能电机角度反馈了符号反了。比如本来应该用正增量编码器方向的信号,结果用了负方向,Park变换角度错误,id和iq解析全乱。Simulink里检查方法很简单:断开转速环,直接给额定iq,看转速响应是否为正向加速。因为这时不存在角度方向混乱导致的闭环锁定,系统会暴露最原始的机电关系。第三步看PI输出限幅。转速环输出iq如果长时间顶在限幅值,说明要么转速指令变化太快,要么飞轮转动惯量和转矩能力不匹配。这时候需要检查你的机械参数:如果J=0.01 kg·m²,电机额定转矩只有0.5 N·m,却要求5秒内从1000加速到2000 rad/s,物理上就做不到,无论PI参数怎么调都是徒劳。物理极限永远在控制器之前,这是仿真教会我最重要的一件事。另一个典型异常是母线电压泵升。放电时飞轮动能回流到直流侧,如果直流母线上只有一个很小的电容和一只固定电阻,能量无处释放,电压会迅速飙升,触发过压保护甚至仿真报错。正确做法是给直流母线挂一个足够大的电容,或者接一个可控负载模拟飞轮储能的并网换流器。在车载或微电网场景里,这个问题尤其突出,很多人在电机模型上花了大量时间,最后卡在直流母线侧。5.3 损耗建模:摩擦和阻尼到底要不要加进模型很多初始仿真模型会把阻尼系数B设成0,认为理想飞轮可以无损耗旋转,便于集中观察控制逻辑。这个做法在验证控制算法时没问题,但一旦你开始分析稳态波形或者做能量效率评估,B=0的模型会让你得出严重偏乐观的结论。实际飞轮系统的损耗来源包括轴承摩擦、风阻(若腔内非高真空)、电机铁耗。损耗与转速密切相关,最简化的模型可以写成:TL = B × ωm + Tc其中B是粘滞阻尼系数,Tc是恒定阻力矩。在Simulink里,可以用一维查表模块来表达损耗随转速变化的曲线,把实测或估算的损耗数据输入进去,比单纯的线性B模型更接近真实。加损耗后你会发现一个很实际的现象:充电完成后系统进入待机模式,转速会缓慢下降,因为损耗转矩始终存在。控制器的转速环为了维持转速,会一直输出一个很小的正向iq来补偿损耗。这个“待机电流”的大小,直接反映了系统空载损耗水平。仿真阶段我建议先把粘滞阻尼设为一个非零的小值,比如B=1e-4 N·m·s/rad,通过观察待机转速下降快慢来评估它对系统效率的影响。确认损耗机理之后,再根据项目需求决定是否引入完整损耗模型。我个人的习惯是在模型里加B=1e-4和Tc=0.05 N·m的简化损耗组合。前者模拟轴承粘滞摩擦,后者模拟磁阻转矩和风阻。这样既不会让PI控制器设计变得过于复杂,又保留了物理真实性。5.4 让别人能编辑你的仿真模型:参数命名与文档注释最后分享一点和模型本身无关但影响深远的经验。飞轮储能仿真模型的参数往往超过二十个,如果不做统一管理,三个月后你自己都会忘记哪个参数对应哪个物理量。我的做法是在MATLAB脚本里定义所有符号变量,再加上中文注释,Simulink模型里的所有模块参数都引用这些符号,而不是直接填数值。这样整个模型就有了一个清晰的数据源头。改动飞轮转动惯量时,只需要改脚本里的一行J=0.01,全模型各处自动更新。对于PI参数,建议在脚本里同时写上整定公式和设计带宽,方便后人(包括未来的自己)快速理解每个参数为什么是这个量级。仿真模型的注释也很重要。我不建议在模型里写大段文字,而是在信号线命名上花功夫。比如把转速环输出的信号命名为“iq_Ref_RampAndLimit”,把经过限幅后的信号命名为“iq_Ref_Lim”。所有中间变量命名尽量说清楚来源和处理方式,排错时可以少很多无意义的追踪。实际项目中最令人头大的问题,往往不是模型本身不收敛,而是模型经过了三个人的手之后,每个人改了参数但没人更新注释,最后模型跑出来的波形是谁也说不清楚的中间态。飞轮储能涉及的能量管理、电机控制、机械动力学三个领域,团队协作时清晰命名比什么都重要。