最近在做一个飞轮储能系统的仿真项目,电机端用的是永磁同步电机(PMSM),任务是把从物理储能、电机控制到Simulink仿真的整条链路打通。飞轮储能这个概念并不新,但真正能把模型搭到能用的状态、并且波形和能量流都对得上,还是有不少门道。这篇文章我把整个建模思路、参数计算、控制策略和踩过的坑完整捋一遍,适合正在做飞轮储能、PMSM变频驱动、或者想用Simulink做机电储能仿真的同行参考。
先说结论:飞轮储能仿真的核心难点不在电机本体,而在三个地方——转动惯量与能量区间怎么匹配、充放电双工况下的控制结构如何平滑切换、以及仿真步长与模型精度之间的平衡。把这三点想清楚,模型基本就成了一半。
1. 飞轮储能系统拓扑与PMSM的定位逻辑
1.1 从电网到飞轮的功率链路
飞轮储能系统的整体结构并不复杂:电网侧经过双向AC/DC变流器接到直流母线,母线上再挂电机侧逆变器,逆变器驱动永磁同步电机,电机转轴与飞轮刚性连接,飞轮封装在真空腔体里。常规的容量等级大概在几十千瓦到几兆瓦之间,转速从一万转到几万转不等。
在这条链路上,电机不是普通意义上的"拖动电机",它承担了电能与机械能的双向转换。充电时,电机工作在电动状态,把直流母线的电能变成转子动能;放电时,电机变成发电机,飞轮的惯性带动转子旋转,把动能变回电能,通过逆变器回馈到直流母线。换句话说,电机就是飞轮储能系统的"能量转换器",而且是双向的。
为什么选永磁同步电机而不是异步电机?核心原因有两个。第一,PMSM转子无绕组,没有转子铜耗,高速工况下效率明显占优。飞轮储能最怕的就是损耗,一转起来就是几万转,异步机的转子铜耗会直接拉低往返效率。第二,PMSM功率密度高、响应快,磁场定向控制下转矩可以精确到毫牛米级别,这对于充放电功率的精确控制非常关键。而且PMSM可以和飞轮共用一根轴,做成一体化结构,省去齿轮箱之类的中间环节。
1.2 充电、悬浮保持、放电三工况的能量变化关系
飞轮储能的一个显著特点是:储能多少和转速平方成正比。动能公式是:
E = 1/2 × J × ω²
其中J是转动惯量(kg·m²),ω是飞轮角速度(rad/s)。因为转速是平方项,所以存在一个非常实用的工作区间设计原则:实际工程中不会让飞轮把能量全部放光。通常最低转速取最高转速的一半左右,这样可释放的能量比例是多少?用公式算一下:
E_release / E_max =(ω_max² - ω_min²)/ ω_max²
如果ω_min = 0.5 × ω_max,那么可释放能量占75%。剩下25%的动能属于"保底",用来维持飞轮旋转和低速时的反电动势支撑。
这三个工况对应的控制本质完全不同。充电是电动加速,电磁转矩为正,转速上升;悬浮保持是让飞轮维持额定转速,转矩只需克服摩擦和风阻损耗,数值很小;放电是发电制动,电磁转矩为负,转速下降。在Simulink里做仿真时,这三个工况不是三个独立模型,而是同一套控制系统下转矩指令的符号切换和幅值调节,这一点后面第四章细说。
2. 飞轮本体建模与储能参数计算:先把惯量和能量算准
2.1 为什么储能计算要盯住转动惯量而不是质量
很多人一上来就问"飞轮多重",其实飞轮设计里真正决定储能的是转动惯量J,而不是单纯的质量。同样质量的飞轮,材料分布越靠外,转动惯量越大,储能越多。这就是为什么飞轮通常做成轮缘厚、中心薄的形状。
对于实心圆柱飞轮,转动惯量是:
J = 1/2 × m × R²
其中m是质量,R是圆柱半径。如果是轮缘式飞轮(内径R1、外径R2),公式是:
J = 1/2 × m ×(R2² + R1²)
从结构上看,半径的贡献是平方级的,所以同等重量下,把材料放在外缘远比增加厚度有效。这也解释了为什么高速飞轮大多采用细长轴加厚轮缘的构型。
2.2 一个50kW级飞轮的具体参数计算全程
我做仿真时按一个50kW、3kWh左右的飞轮系统来设定参数。飞轮材料用钢材,密度取7850kg/m³,设计成实心圆柱:
- 半径 R = 0.25 m
- 轴向长度 L = 0.3 m
- 质量 m = ρ × π × R² × L = 7850 × 3.1416 × 0.0625 × 0.3 ≈ 462 kg
- 转动惯量 J = 1/2 × m × R² = 1/2 × 462 × 0.0625 ≈ 14.4 kg·m²
最高转速取12000 rpm,换算成角速度:
ω_max = 12000 × 2π / 60 ≈ 1256.6 rad/s
最高转速下的总储能为:
E_max = 1/2 × J × ω_max² = 1/2 × 14.4 × 1256.6² ≈ 11.4 MJ ≈ 3.17 kWh
这个储能配50kW功率,按75%放电深度算,能支撑大约3分钟左右的满功率放电,符合储能调频的典型应用场景。仿真时可以直接把这个惯量值填进PMSM模块的机械参数里。
2.3 风阻摩擦损耗怎么在仿真中体现
飞轮在空气中的风阻损耗和转速近似成立方关系,所以真机都会把飞轮放在真空腔体中。但在实际仿真中,如果完全忽略机械损耗,结果会偏理想化——尤其是悬浮保持阶段的电流波形会和实际差很多。
建议在电机轴系上增加两部分损耗:一部分是常数摩擦转矩T_f(模拟轴承摩擦),另一部分是与转速平方或三次方相关的风阻转矩T_w = k_w × ω²。在Simulink里可以把它建模成一个受转速控制的力矩源,作用方向与旋转方向相反。真空环境下k_w取一个很小的值即可,但如果仿真目标是做真空腔体设计或者长时间保持工况分析,这一步就不能省。
3. 永磁同步电机的dq模型与Simulink参数配置
3.1 PMSM的电压方程与表贴式电机的关键简化
PMSM在三相静止坐标系下的方程是非线性的交流量,不方便做PI控制。所以仿真的第一步是把它变换到dq旋转坐标系。在dq坐标系下,电压方程为:
ud = Rs × id + Ld × d(id)/dt - ωe × Lq × iq
uq = Rs × iq + Lq × d(iq)/dt + ωe ×(Ld × id + ψf)
电磁转矩方程为:
Te = 1.5 × p × [ψf × iq +(Ld - Lq)× id × iq]
这里面p是极对数,ψf是永磁体磁链,Rs是定子电阻,Ld和Lq分别是d轴和q轴电感。
我做仿真时选的是表贴式PMSM,它的特点是Ld和Lq基本相等。这样转矩方程可以大幅简化为:
Te = 1.5 × p × ψf × iq
这个简化的物理意义非常直接:电磁转矩只和q轴电流成正比,和d轴电流无关。这就是id=0控制的根本原因——把电流全部用在产生转矩的q轴上,d轴电流保持为零,既不产生有效转矩,还增加铜耗。飞轮储能这种低速大转矩、高速低转矩的应用场景,用id=0控制既简单又高效,完全够用。
3.2 Simulink中PMSM模块的核心参数设置
Simulink的电气库里有现成的永磁同步电机模型,参数配置界面大致这几项:
| 参数 | 数值(我用的) | 说明 |
|---|---|---|
| 定子电阻 Rs | 0.05 Ω | 影响铜耗和PI整定 |
| d轴电感 Ld | 0.35 mH | 表贴式 |
| q轴电感 Lq | 0.35 mH | 与Ld相同即为表贴式 |
| 永磁体磁链 ψf | 0.12 Wb | 决定反电动势和转矩常数 |
| 极对数 p | 2 | 高速机常用2对极 |
| 转动惯量 J | 14.45 kg·m² | 必须包含飞轮惯量 |
| 初始转速 | 628.3 rad/s | 对应6000rpm,直接从中速起步 |
这里最容易出错的是转动惯量。电机模块默认的J通常只有0.0几kg·m²,如果忘了改,飞轮一个阶跃指令就能从零飙到几万转,仿真结果完全失真。记住:J用的是电机转子加飞轮的总惯量。我习惯把电机自身转子惯量忽略(相对飞轮太小),直接把14.4 kg·m²填进去。
3.3 坐标变换与SVPWM在仿真链路中的真实位置
从控制结构上看,矢量控制链路是:采样三相电流 → Clark变换(abc→αβ) → Park变换(αβ→dq) → dq轴PI调节器 → 反Park变换 → SVPWM → 逆变器 → 电机。
在Simulink里搭建时,这一串模块每个都能在库里找到现成的。重要的是理解每个环节的作用:Clark变换和Park变换是为了把交流量变成可做PI控制的直流量;PI调节器输出的是dq电压指令;反Park变换把它变成αβ坐标系下的电压矢量;SVPWM再把电压矢量转成三相桥臂的开关信号。
如果你用的是仿真库自带的高精度PMSM模型,其实可以直接给定子侧加三相电压源代替逆变器,那SVPWM环节就可以省略。但这样无法反映母线电压波动和开关纹波的影响,无法观察充放电切换时母线电压的跌落特性。所以我建议第一版保留逆变器+SVPWM,等整条控制链路调试稳定了,再做平均值模型的简化版本。
4. 充放电控制策略与PI参数整定:可以抄作业的部分
4.1 外环是电压环还是功率环?
飞轮储能系统的控制需求取决于应用场景。如果是做平滑新能源功率波动,外环是功率指令;如果是做调频或母线电压支撑,外环是母线电压。
我这次做的是直流母线电压支撑场景:外环采集直流母线电压,与额定值750V比较,经过PI调节器输出有功功率指令,再折算成q轴电流指令。充电时q轴电流为正,电机加速;放电时q轴电流为负,电机发电。从控制结构上看,充放电切换根本不涉及切换控制律,只是指令符号的自然翻转。
这里要注意一个工程细节:转矩指令不能从正到负直接阶跃,否则机械轴系冲击极大,仿真波形也会出现剧烈的电压过冲。我习惯在转矩给定通道上加一阶惯性限制,斜坡时间取0.1~0.5s,模拟实际变流器的功率变化率限制。
4.2 电流内环PI参数的一个直接给法
电流环的被控对象近似是一个RL惯性环节,时间常数τ = L/R。对于表贴式PMSM,d轴和q轴对称,所以两个电流环的PI参数相同。工程整定方法很简单:
设期望电流环带宽为α(rad/s),则:
Kp = α × L,Ki = α × R
这里有个经验法则:α不要超过开关频率的1/10。比如开关频率取10kHz,α取1000rad/s。用我前面的参数:
Kp = 1000 × 0.00035 = 0.35
Ki = 1000 × 0.05 = 50
这个参数可以直接作为初值。注意:α选得太大会导致离散化后相位裕量不足,电流环高频振荡;选得太小则电流跟踪慢,储能响应速度跟不上。
电流环之外还要设两个限幅:输出限幅(对应最大相电流)和积分限幅。积分限幅很关键——启动时如果不限制积分项,q轴电流会严重超调,转速爬升过程中出现明显的转矩尖峰。我的经验是积分限幅取额定转矩对应iq值的1.2倍。
4.3 转速保护与最低转速约束
飞轮储能和普通电机驱动还有一个不同点:转速不仅是被控量,也是储能水平的直接反映。仿真中必须加上转速保护逻辑:
- 当转速达到1.05倍额定转速时,封锁PWM或强制进入悬浮保持;
- 当转速低于0.5倍额定转速时,禁止继续放电,防止反电动势过低导致母线电压塌陷。
这层逻辑在Simulink里用几个比较器和一个RS触发器就能搭出来。别小看它,没有这层保护,你做长时间充放电循环仿真时,转速一冲到上限,电流环就饱和了,波形就会乱掉。
5. Simulink模型的顶层搭建骨架与求解器选择
5.1 模型顶层结构和推荐模块
把模型分成四个部分来搭:主电路、电机、控制、观测,结构清晰也方便挑错。
主电路用直流电压源+直流电容+通用三相桥(IGBT模块)组成。母线电容参数对电压波动影响很大,我这个50kW系统取了C=20mF,后面会专门分析电容对母线电压波动的定量关系。
电机直接用电气库的PMSM模型,机械端口接到飞轮惯量模块。控制部分用离散PID控制器,采样时间取1e-4s(与10kHz开关频率对应)。观测部分做一个SOC(荷电状态)计算模块。
飞轮SOC不建议用转速线性表示,而应该用动能比例:
SOC =(ω² - ω_min²)/(ω_max² - ω_min²)× 100%
这个公式直接对应"还能放出多少能量"的物理含义,是飞轮储能区别于电池储能的特殊指标。
5.2 求解器选择:连续还是离散,步长多大
这是新手最容易卡死的环节。PMSM模型加逆变器是典型的非线性快速系统,如果用连续变步长求解器,默认最大步长往往过大,导致仿真结果剧烈震荡;如果强行调小最大步长,仿真速度又慢到无法接受。
我的做法是:第一版直接用离散固定步长求解器,步长取1e-5s(开关周期10kHz的十分之一)。这样能保证开关纹波被正确采样,同时避免连续求解器反复试探步长带来的额外开销。等到第一版调通,再根据需求做平均值模型提速。
第二个实用技巧是仿真时长的控制。一次完整的充放电循环,按前面算的,从6000rpm加速到12000rpm需要约250秒,如果直接用开关级模型跑完,仿真步数达到2500万步,耗时完全不可接受。解决思路是分两步走:先用小步长(比如0.5~2s的物理时间)验证控制环动态;再用平均值模型或者直接给转速一个斜坡设定值,快速跑完整个储能循环,观察SOC和能量流。
5.3 效率计算模块里容易踩的坑
效率计算模块看起来简单,实际上很多人算错铜损。总铜损的正确公式是:
Pcu = 1.5 × Rs ×(id² + iq²)
为什么是1.5?因为dq坐标系下的电流幅值是相电流幅值,相电流有效值是幅值的√2分之一,三相总损耗是3 × Rs × I_rms²,I_rms² =(id² + iq²)/2,所以系数是3/2。有人直接套3×Rs×(id²+iq²),算出来的损耗直接翻倍,后面效率分析全歪了。
6. 仿真波形解读与关键参数影响量化
6.1 一次完整充放电循环的波形观察点
第一版验证用短时仿真,设定初始转速628 rad/s,充电50s,悬浮保持20s,放电30s。重点观察四个信号:转速、q轴电流、直流母线电压、SOC。
充电段的预期行为是转速从628 rad/s线性升到约800 rad/s(50s内),q轴电流在限幅范围内保持恒定,母线电压稳定在750V附近。如果q轴电流出现锯齿状波动,多半是PI参数或坐标变换角度有问题。悬浮保持段q轴电流降到一个很小值(只补偿损耗),SOC几乎不变。放电段q轴电流反向,转速下降,母线电压会出现小幅跌落——跌落的幅度由母线电容和放电功率共同决定。
6.2 母线电容对电压波动的定量影响
母线电压波动这个问题需要量化地看。电容上的电荷变化满足:
C × ΔV = I × Δt
直流侧电流I约等于P/Vdc,即50kW/750V ≈ 67A。如果要求在10ms内完成从空载到满载的功率阶跃,且允许电压波动不超过33V(约4.4%):
C = I × Δt / ΔV = 67 × 0.01 / 33 ≈ 0.02 F
这就是我取20mF电容的来源。如果电容选小了,比如只有5mF,同样条件下电压波动会达到130V以上,母线电压直接突破工作范围。在仿真里做参数扫描时,把C从5mF扫到50mF,看母线电压的峰值跌落实在直观。
6.3 转动惯量变化对动态特性的影响
飞轮系统的功率响应速度和惯量直接相关。同样的充电电流下,J从14.4 kg·m²减半到7.2 kg·m²,转速上升速度翻倍,储能容量减半,放电时的母线电压跌落则更深更快。
这个特性的工程意义是:如果想提升飞轮的快速响应能力,减小惯量是手段之一,但代价是储能容量下降。仿真中做两组参数扫描对比,可以很清楚地看到这个权衡关系。这也是为什么实际飞轮设计必须在强度、惯量和运行转速三个变量之间反复折中。
7. 仿真踩坑实录:从"发散"到"效率对不上"的解决链路
7.1 启动抖动:转子初始位置与坐标变换角度不一致
有一次模型一启动,转速没有按斜坡上升,反而先在零附近来回震荡了两三秒,q轴电流出现了很大的正负交替尖峰。排查后发现:PMSM模块的初始转子位置设成了0,但坐标变换模块的Park变换初始角度也是0,两者理论上应该一致,问题出在初始速度——电机模块默认初始转速为0,我从零开始加速时,低速阶段反电动势很小,电流环在"强行推一个几乎没有反电动势的电机",导致电流尖峰。
解决办法:仿真初始转速直接设为628rad/s(对应SOC=75%),而不是从零开始。这样一开始就处于正常的工作区间,启动瞬间的控制量是平滑的。这也符合飞轮储能的实际运行场景——飞轮正常情况下不会停机,始终维持在最低工作转速以上。
7.2 "照抄"的PI参数发散了
我前面给出的Kp=0.35、Ki=50是基于10kHz开关频率。如果把开关频率改成5kHz,同样的带宽α=1000rad/s就会有问题——因为离散化后的控制延迟增大,系统相位裕量不足,电流环出现高频振荡。
我也踩过这个坑。当时把开关频率从10kHz改到8kHz,带宽没变,仿真一跑,id和iq直接发散。解决办法不是调PI增益,而是把带宽α降到开关频率的1/20,也就是400rad/s左右。记住这个规律:α要与开关频率成比例降低,而不是独立整定。
7.3 母线电压在充放电切换瞬间过冲
第一次做完整的充转放切换时,母线电压在切换瞬间冲到了800V以上,超过了额定值的6%。原因不是PI问题,而是转矩指令阶跃变化时,电流环响应延迟造成短暂的能量不平衡——飞轮还在高速转动往母线回馈能量,而负载还没来得及吸收。
解决方法是给转矩指令加斜坡限制。我把斜坡时间设为0.2s后,母线电压过冲降到了40V以内。这个场景也直接对应实际变流器的功率斜坡控制,不是仿真的"bug",而是真实的工程约束。
7.4 储能效率算出来超过100%?
调试效率模块时出现过一次非常离谱的结果:放出的能量比充进去的还多。查了一圈发现是两个模型叠加了机械损耗,但放电时损耗的符号写反了——制动工况下机械损耗的方向与旋转方向相同?不对,机械损耗力矩永远与旋转方向相反,在放电工况下它消耗的是机械能,所以损耗项在能量平衡方程中应该作为"从机械能里扣掉"的项目。符号写反之后,损耗变成了额外注入的能量,效率自然就爆表了。
这个问题的排查过程提醒我:效率模块最好用积分能量来验证,而不是瞬时功率。将充电段P_in对时间积分、放电段P_out对时间积分、再扣除全部损耗项,能量守恒才对得上。这比盯着瞬时波形更可靠。
工作区间的保护逻辑在长时间仿真里尤其重要。有一次我把最低转速保护关掉,让系统持续放电到接近零转速,结果转速过零后,模型出现了明显的数值不稳定,母线电压也开始剧烈振荡。因为PMSM的反电动势与转速成正比,接近零速时电流环已经没有能力控制母线电压了。实际工程中不会让飞轮放到这个程度,仿真里更不该这样做。
总结一下我这轮项目下来的整体感受:飞轮储能仿真真正花时间的不是搭模型本身,而是参数之间的匹配——惯量、电容、带宽、限幅值,每个参数都和你想要的工作区间绑定。建议新手先照着我这个流程把一套完整参数跑通,再根据自己项目的功率和储能需求去调整,不要一上来就拿具体真机数据去怼仿真模型。模型调顺以后,再逐步加入风阻、铁损、逆变器损耗这些"非理想项"也不迟。