
把飞轮当成一个“机械电池”核心就是用转速变化来吞吐能量。而在这套系统里永磁同步电机PMSM既是充电时拽着飞轮转的电动机又是放电时被飞轮拖着发电的发电机。要在Simulink里把这段动态过程完整描出来我一开始以为是拖几个现成模块就能跑的事真正动手后才发现从电机选型计算、dq轴数学模型到功率环怎么配合转速环再到离散仿真步长的坑每一步都可能让结果偏离物理实际。这篇文章就围绕飞轮储能系统中PMSM建模与仿真这条线把我在实际搭建中的计算过程、模型划分、参数整定和排错经验完整梳理一遍。适合正在做飞轮储能仿真的工程师也适合刚接触电机双闭环控制的同学用来建立一套完整的“从能量到转矩再到电流”的思维框架。1. 先算清飞轮的能量账再谈电机选型飞轮储能系统里最核心的关系不是“电机能不能转”而是电机和飞轮之间能不能在规定功率下完成储能和释能。很多人一上来就选电机、搭Simulink模型结果仿真里飞轮转速半天上不去或者放电时电压瞬间塌了根子往往在能量匹配这一步就错了。1.1 飞轮容量不是只看“转多快”还要看“能掉到多少转”飞轮储存的动能是转动惯量和角速度平方的乘积表达式很简单E 0.5 × J × ω²但真正能在工程上放出来的能量不是把转速降到0来算的。一方面飞轮不能完全停转否则系统失去支撑另一方面转速过低时反电动势太小电机根本无法维持母线电压和功率输出。所以有效可用能量应该写成E_usable 0.5 × J × (ω_max² - ω_min²)这里ω_min通常取最高转速的50%到70%。拿我做过的一个模拟项目参数来说转动惯量J取1.2 kg·m²最高转速12000 rpm对应角速度约1256.6 rad/s最低转速取6000 rpm对应约628.3 rad/s。那么总储能是E_total 0.5 × 1.2 × 1256.6² ≈ 947 kJ可用能量是E_usable 0.5 × 1.2 × (1256.6² - 628.3²) ≈ 710 kJ如果系统要求放电功率100 kW那么这段有效能量只能支撑大约7.1秒。这个数字一出来你就知道电机额定功率、电力电子器件容量、飞轮惯量三者必须一起定而不是单独看某个转速值。1.2 永磁同步电机在高速飞轮里的三个优势和一个麻烦飞轮储能要求电机转速高、功率密度大、动态响应快PMSM几乎是为这个工况量身定做的。它的转子没有绕组和铜耗发热集中在定子冷却结构更好布置转子转动惯量小同样的飞轮惯量占比更大意味着储能密度更高电磁转矩直接和q轴电流线性相关控制带宽很容易做上去。但麻烦也明显永磁体产生的反电动势随转速近似线性上升超过基速之后必须弱磁。飞轮系统恰恰要跑在宽速范围里低速段要能大电流输出转矩高速段又要防反电动势超过母线电压。一个飞轮系统如果只做额定点仿真不把弱磁区纳入模型后面母线电压规划、电流极限分配都会失真。1.3 系统工作模式电动与发电的四象限切换飞轮储能的工况本质上就是电机四象限运行的其中两段充电时电机正转电动从直流母线吸功率放电时电机仍正转但转矩反向进入发电状态把机械能回馈到母线。比较特殊的是飞轮没有固定的负载转矩电磁转矩直接作用在飞轮惯量上所以转速环也好、功率环也好本质上都是在控制“转矩的大小和方向”。我在模型里最常看到的问题是把飞轮当成电动机的恒转速负载来建转速环给定一个固定值完事。真实的飞轮系统转速是不断变化的外环必须根据电网或母线的功率需求来实时调整电磁转矩否则仿真的物理过程就是错的。2. 建模仿真前必须敲定的边界参数Simulink模型不是越复杂越好。在拖动完整的PMSM模型之前应该先把边界参数都算清楚。这几个参数之间相互牵制任何一个拍脑袋都会让仿真结果没法解释。2.1 转动惯量与充放电功率的匹配计算转动惯量J直接决定转速动态快慢。很多人把电机转子惯量和飞轮惯量混在一起仿真里转速响应特别慢以为是PI参数问题实际上就是惯性时间常数远大于控制器响应时间。从运动方程看J_total × dω/dt T_e - T_loss如果想要系统在100 kW下从6000 rpm升到12000 rpm需要的时间大约是t J_total × (ω_max - ω_min) / T_avg假设平均电磁转矩约95 N·m角速度差628.3 rad/sJ_total取1.25 kg·m²飞轮1.2加电机转子0.05理论充电时间大约是8.3秒。如果仿真里出现充电时间几十秒甚至调不上去先别动PI检查J是不是比设计值大了一个量级。我见过有人把飞轮的加减速时间常数算成分钟级结果电流环无论怎么整定都像拖着一堵墙在跑。2.2 额定转速、最高转速和母线电压的关系反电动势是PMSM在飞轮系统里的“天花板”。反电动势幅值近似等于永磁磁链与电角速度的乘积。飞轮转速越高要求母线电压越高。拿上面那组参数举例极对数p2最高机械转速12000 rpm时电角速度ω_e p × ω_m ≈ 2513 rad/s。若永磁磁链ψ_f取0.125 Wb每相绕组反电动势幅值约E_phase ψ_f × ω_e ≈ 314 V换算到线反电动势幅值约544 V。直流母线电压如果只有500 V高速段就会因为反电动势超过逆变器可输出电压而失控这时就必须加大负的d轴电流去弱磁用电流换电压。我在初始建模时把母线电压定到750 V留出足够的阻抗压降和调制余量这样在不启动弱磁的区间内仿真得到的电流波形更干净整个控制逻辑也更好调试。2.3 飞轮转速范围对电流极限的隐约束飞轮转速低时永磁体反电动势小同样的母线电压下电机能输出的最大电流实际更大但问题是转矩系数没变同样的电流在低速时吸收的功率更小。放电过程中随着转速下降要保持恒定功率转矩必须逐渐上升转速越低转矩越大直到电流极限。这个约束在仿真里必须显式建模。我在电流环限幅里设置了dq轴电流极限同时根据转速变化在线计算允许的最大转矩防止控制器给出一个低速下根本实现不了的功率指令。这样处理之后仿真就不会出现放电末段电流爆表的情况。3. 永磁同步电机的数学模型这是整个仿真的“物理内核”Simulink里的PMSM模型可以自己搭也可以用现成模块但不管用哪种方式你必须清楚每一步数学变换对应什么物理过程。模型搭完谁能把eq方程讲清楚谁能看到異常局部波形不慌。3.1 dq坐标系的磁链方程为什么要这样写三相静止坐标系下的PMSM方程含有时变耦合项直接仿真要处理正弦量的三相对称运算数值效率低控制器设计也不方便。通过Clark变换和Park变换转到dq旋转坐标系把基波正弦量变成直流量方程变成常系数形式u_d R_s × i_d L_d × di_d/dt - ω_e × L_q × i_qu_q R_s × i_q L_q × di_q/dt ω_e × (L_d × i_d ψ_f)这里最关键的是右边后两项交叉耦合项-ω_e L_q i_q和ω_e L_d i_d以及永磁体在q轴产生的反电动势项ω_e ψ_f。仿真中如果忽略耦合项低速问题不明显转速一到高速dq轴电流会出现明显的静态误差转矩波形也会带偏。3.2 电磁转矩与运动方程仿真中“转起来”的本质电磁转矩方程在dq坐标系下写作T_e 1.5 × p × [ψ_f × i_q (L_d - L_q) × i_d × i_q]对于表贴式永磁同步电机L_d ≈ L_q第二项近似为零转矩就只跟q轴电流成正比。这也是为什么飞轮储能系统常用表贴式PMSM控制简单线性低速大转矩也好实现。内嵌式电机有磁阻转矩同样的电流能出更多转矩但控制非线性强弱磁策略也更复杂。运动方程则是把机械和电气两个世界连起来的桥梁J_total × dω_m/dt T_e - T_friction - T_windage在飞轮系统里摩擦和风阻损耗不是常数它们通常随转速升高而增大。为了贴近实际我在模型里把摩擦转矩分成库仑摩擦项和粘性摩擦项前者是常量5 N·m后者正比于转速。这样仿真里能看到一个现象转速越高稳态维持损耗越大所以飞轮不会无限转在最高转速否则待机损耗会吃掉不少可用能量。3.3 弱磁区不是可选项飞轮工况绕不开它飞轮储能的特点决定了它要在很宽的转速范围内工作最低转速和最高转速相差两倍甚至更多。如果全程用id0控制最高转速受母线电压限制通常只能达到基速附近想要跑到额定转速以上就必须把负的d轴电流加进去用永磁磁链的“抵消”来降低反电动势。弱磁控制本质上是牺牲一部分电流裕度去换取电压平衡。在Simulink里实现时我习惯用电压极限圆来判断当逆变器输出电压指令接近母线电压允许的调制极限时弱磁调节器开始输出负的i_d_ref。这个调节器不能用普通大增益PI否则转速刚过基速d轴电流就猛冲下限转矩波动很剧烈。我在实际调试中给它限定了每分钟固定的弱磁深度变化率并加了一阶低通滤波让负d轴电流平缓切入。4. Simulink模型的搭建顺序与分模块实现模型搭建我会按“先物理层、再控制层、后调度层”的顺序来避免一开始就在一个文件里把所有环节连成一大团。模块划分清楚后期每一个控制参数的调整都能定位到具体环节。4.1 顶层拓扑直流母线、逆变器、PMSM、控制环怎么连顶层拓扑大致是直流电压源模型代表母线电容和外部电网接口接三相全桥逆变器逆变器输出接PMSMPMSM输出转矩到飞轮转动惯量。控制侧通过电压、电流传感器反馈信号经坐标变换进入电流环电流环输出通过Park逆变换和SVPWM生成开关管驱动脉冲。这里有一个重要的选型决策逆变器用理想开关模型还是平均模型。理想开关模型可以看到真实的PWM谐波和电流纹波但仿真步长必须要小否则开关切换瞬间极易出现数值震荡平均模型把开关过程等效成连续电压输出计算快、调试友好但看不到纹波细节。我在前期的控制参数整定阶段用平均模型等控制逻辑确认无误后再换回开关模型验证谐波和损耗特性。4.2 坐标变换与SVPWM的实现细节坐标变换模块在Simulink里可以用现成的库函数但有一个容易被忽略的问题转子初始角度。PMSM模型通常默认转子初始角为0但仿真的瞬态起动过程中如果初始角设置和实际位置不一致初期电流会出现一个冲击尖峰。我在仿真开始前先把转速环断开给一个恒定q轴电流指令观察转子位置能否正常收敛再闭合转速环。这个步骤能省掉后面一大堆莫名其妙的波形排查。SVPWM模块要处理的则是调制比和限幅。在飞轮放电时电机在发电状态q轴电流反向功率流向也跟着反向但SVPWM本身和电流方向无关它只负责按照电压矢量指令输出期望的定子电压矢量。为了保证弱磁阶段不超出线性调制区我给逆变器输出电压做了限幅幅度对应母线电压除以√3一旦指令超过限幅就给弱磁调节器置位。4.3 电流内环和转速外环的参数整定电流环设计采用典型的“零点对消”思路。把电流环近似成一阶惯性环节带宽定得越高动态响应越好但不能超过PWM开关频率的1/10。假设开关频率10 kHz电流环带宽取1000 rad/s。对应PI参数可以按以下方式估算Kp L_avg × ω_ccKi R_s × ω_cc其中L_avg取d轴和q轴电感平均值0.35 mHR_s取0.05 Ω。于是Kp约0.35 V/AKi约50 V/(A·s)。这个初值放到仿真里再微调一般都能稳定。转速环带宽要比电流环低一个数量级取10到20 rad/s左右。因为飞轮惯量大转速本身是慢变物理量带宽设太高反而会让转矩指令抖动系统变得神经质。Kp先按常规公式估算再在仿真里观察转速响应是否有一两次轻微超调。我习惯把转速环PI的积分饱和限幅做成转矩极限对应的电流值这样充电切换到放电时积分器不会在踩到底的期间大量积分切换过渡更平滑。4.4 功率外环怎么叠上去飞轮储能系统的最终指令往往不是转速而是直流母线侧的功率或电压。所以我在转速环外面再加了一个功率外环输入功率参考值输出转速参考或直接输出转矩参考。这里有两种实现路线。第一种功率环输出转速参考值转速环再去决定转矩结构清晰但功率响应会多一级延迟。第二种根据当前转速把功率参考值换算成转矩参考值T_ref P_ref / ω_m然后直接作为电流环的q轴电流参考依据。这个换算必须处理低速时的分母趋零问题。我在转速低于一定阈值时把转矩参考值钳位到电流极限允许的最大值同时封锁转速值用于功率观测的有效性判断。两种路线我最终选择了第二种因为飞轮系统的功率动态要求高少一重转速环延迟母线电压跌落时恢复得更快。5. 飞轮储能特有的控制策略从“转速环”到“功率环”这一节是飞轮储能仿真和平常电机调速仿真区别最大的地方。普通电机控制目标通常是“让转速稳在某个值”飞轮储能则相反转速是不断滚动的存量指标真正要控制的是充放电功率和母线电压稳定。5.1 恒功率充放电的参考值怎么来充电过程如果从电网或外部电源向直流母线注入功率母线电压会上升此时功率环给定正值电机把电能转成飞轮动能。放电过程外部需求从母线抽取功率母线电压下降功率环给定负值电机反拖飞轮发电。功率参考值不是固定不变而是由上级能量管理系统动态下发。在仿真里建这个环节时我习惯把外部功率需求做成一个可编辑的阶跃信号或者时序片段分别模拟满载充电、部分放电、突加功率和突甩负荷几种工况。这样调试一次就能把控制参数覆盖到全部典型场景。5.2 母线电压跌落的快速响应机制母线电压跌落是飞轮储能最关心的瞬态工况。我模拟过这样一个场景母线侧突然接入一个100 kW的负载持续时间2秒。如果只有功率外环检测功率变化再调整电磁转矩电压跌落最大点会出现在初始段功率环闭环的带宽如果不够母线电压会跌到允许范围以下。更稳的做法是在母线电压控制器和电机电流环之间加一个前馈通道。母线电压变化率作为前馈信号直接乘以一个系数叠加到转矩指令上。这一步不需要等功率误差积分满电压一开始跌转矩马上跟着提起来。仿真验证下来这套前馈能把电压恢复时间缩短接近一半代价只是转矩略微过冲在飞轮机械应力允许范围内是完全可以接受的。5.3 待机损耗与低转速保护策略飞轮的待机损耗主要来自摩擦、风阻和电力电子的空载损耗。在Simulink里如果不建模这部分仿真出的自放电时间会显著短于实际。我在电机模块的机械输入端并列了摩擦转矩和风阻转矩转速越高衰减越快。另一个容易忽略的是低转速保护。飞轮转速低于某个值时反电动势不足放电能力大幅下降如果继续强拖功率电流会逼近极限转矩大但功率出不来系统效率很低。我的策略是当转速低于最低工作转速时功率环参考值按比例线性降额降到额定转速一半以下时直接封锁功率输出转入待机状态。这个降额在仿真里表现为放电波形末段功率缓降而不是陡然切断更贴近工程实际。6. 仿真参数表与典型波形解读参数整定完成后下一步就是跑仿真看波形。这一节我给出一个完整可复现的参数集合并对照波形说明哪些现象是正常的哪些是隐患。6.1 我用的仿真参数表下面这组参数来自我之前搭建的一个模拟项目整体逻辑可以迁移到不同功率等级的飞轮系统。参数数值说明额定功率100 kW充放电功率参考直流母线电压750 V允许波动范围±10%极对数2PMSM基本参数定子电阻0.05 Ω相电阻d轴电感0.35 mH表贴式电机L_dq轴电感0.35 mH表贴式电机L_q永磁磁链0.125 Wb转子磁链幅值飞轮转动惯量1.2 kg·m²不含电机转子部分电机转子惯量0.05 kg·m²参数从电机手册折算最高转速12000 rpm充电上限最低放电转速6000 rpm低于此值降额开关频率10 kHzSVPWM载波电流环带宽1000 rad/sKp0.35 V/AKi50 V/(A·s)转速环带宽15 rad/s基于飞轮大惯量仿真步长方面用平均模型阶段我选固定步长1e-5秒即10 kHz的十倍以上换开关模型后步长改为1e-6秒确保PWM边沿被正确解析。6.2 充电工况转速上升、转矩收敛、功率恒定充电仿真开始前飞轮初始转速设为6000 rpm功率参考给定100 kW。仿真开始后功率环立即输出正向转矩指令q轴电流迅速拉升到限幅值附近电磁转矩维持在约80 N·m转速在积分作用下平稳上升。这段波形里最值得看一眼的是q轴电流的包络。系统还没有达到最高转速之前转速环会限制充电功率防止转速超调。转速越接近12000 rpm功率环给出的转矩参考就越小q轴电流缓慢下降最终停在维持飞轮转速所需的损耗转矩水平。此时d轴电流仍然维持在0附近说明还工作在基速以下。如果充电波形里发现q轴电流先冲到限幅又突然掉到0大概率是功率环积分饱和了。解决办法是把功率环积分器的输出限幅和当前转速下允许的最大转矩关联起来防止控制器在低速时发出了一个超出物理能力的功率指令。6.3 放电工况功率反转、转速下降、弱磁过渡放电工况从12000 rpm开始功率参考改为-100 kW。q轴电流参考从正变负电磁转矩反向转速开始平滑下降机械能转换为电能送回直流母线。放电过程我重点关注两个局部波形。第一是切换瞬间的母线电压变化率如果母线电压突跌超过预定的5%说明电流环或者功率环的响应速度还需要再提一提。第二是转速到达基速附近时d轴电流的变化弱磁开始退出负d轴电流逐渐回到0。如果这里d轴电流发生振荡多半是弱磁调节器和q轴电流环之间出现了耦合需要增大弱磁调节器的滤波时间常数。正常放电波形里转速是一条平滑下降的弧线而不是直线或抖动的折线。弧线的斜率越来越缓是因为功率恒定时转速越低转矩要求越大但电流极限限制了实际可发出的最大转矩所以末端功率会降额。我这里把降额阈值设置在6000 rpm以下波形表现为功率平滑衰减母线电压小幅回落整体退出过程稳定。7. 建模仿真中踩过的几个坑把模型搭完、波形跑通只算完成了50%。另一半工作量基本都花在排查各种“看起来不合理但又说不出原因”的异常上。下面这几个坑我几乎每换一组参数都要碰一次。7.1 转动惯量参数错了系统“慢半拍”我最早搭建飞轮模型时直接把飞轮惯量填成了总惯量电机转子惯量没有叠加进去。仿真波形表面上看也能跑电流环和转速环都稳定但响应明显偏慢充电从6000 rpm到12000 rpm花了12秒远高于理论计算的8秒多。查了一圈才发现总惯量被少算控制器以为只需要拖动1.2 kg·m²实际上要拖1.25 kg·m²。这种差异在PI参数用理论计算公式确定时尤其明显因为理想的最小时间常数直接依赖惯量。检查这个参数不用看波形直接对比理论加速时间和仿真加速时间就能定位。7.2 电流环带宽掏太高高频毛刺全出来了电流环带宽想要高动态响应确实快但带宽超过开关频率的五分之一时数字离散化引入的相位滞后就会让电流环失稳d轴和q轴电流上都会出现高频振荡转矩波形跟着毛刺化。我最初把电流环带宽设到2000 rad/s仿真里电机电流纹波大波形跟砂纸一样降到1000 rad/s之后振荡立刻消失。这个坑告诉我仿真里PI参数不是越大越好带宽和开关频率之间的比例关系要严格遵守。工程上我最后按开关频率的1/10左右取留出充足裕量。7.3 低速区间直接放电电流失控在模拟一个深度放电场景时我把初始转速设到了4500 rpm低于最低工作转速6000 rpm但还是直接给了-100 kW的功率参考。结果q轴电流参考值因为功率恒定而飙升很快顶到电流限幅母线电压持续下跌最后仿真直接报错。这个现象在实际工程里对应着“飞轮转速不够还强放功率”的恶劣工况必须由功率降额策略兜底。我在功率环后面加了一个与转速相关的功率限幅函数低于最低转速时功率参考线性降到0系统才真正稳住。7.4 离散仿真步长选得太大电流波形离谱用开关模型仿真时步长如果大于载波周期的十分之一PWM边沿检测就会出现严重误差电流波形会出现不该有的尖峰和毛刺。我的经验是开关频率10 kHz时仿真步长至少取1e-6秒如果用固定步长跑平均模型1e-5秒足够但换开关模型必须缩小步长。否则电流波形那种高频抖动会让人误以为是控制器不稳定花大半天去整定结果只是数值仿真精度问题。还有一个和步长相关的细节PWM发生器内部的载波相位在每个仿真步进里更新如果步长和载波周期之间不是整数倍关系载波会漂移最后电流波形里会出现周期的拍频现象。解决方法是把仿真步长设为载波周期的整数分之一比如开关频率10 kHz载波周期100微秒步长取5微秒或2微秒就不会出现拍频。7.5 初始转子角设置不当起动瞬间电流冲击我最初用现成PMSM模块时没有考虑转子初始角的设定直接运行。结果每次仿真的头几个毫秒q轴电流都会出现一个很大的负向尖峰看起来像控制器瞬间给出了错误转矩。排查后确认是转子初始角与坐标变换初始角度不一致导致的。后来我把转子初始角固定成零同时让控制器内部的Park变换初始角也设为零并在一开始以开环方式给定小转矩让转子对齐再切换到闭环运行。这个“预对准”步骤让起动电流冲击完全消失仿真更接近实际电机起动的过程。这些坑单看都不难理解但叠在一起足够让一个初版模型调试三五天。我在后来搭建新项目时先建立一张参数核对表把惯量、转速范围、母线电压、带宽比例、步长关系这些在运行前全部过一遍再上电仿真。这样可以省掉大部分反复试错的时间也能帮你把注意力集中在真正需要分析的控制问题上。如果你手头正在做一个飞轮储能仿真的项目希望这组经验和参数能节省一些你原本要踩坑的时间。