做风电控制的人,早晚都要跟变桨过不去。风机一过额定风速,桨距角就是唯一能跟功率较劲的执行手段。但同样是变桨,“三片桨叶一起转”和“三片桨叶各转各的”完全是两个工程思路:前者叫统一变桨(Collective Pitch Control,CPC),后者叫独立变桨(Individual Pitch Control,IPC),两者解决的问题、控制的逻辑、仿真的复杂程度完全不在一个量级。这篇文章我围绕基于OpenFAST的联合仿真控制模型,把两类变桨策略从模型搭建、控制器设计、工况设置到仿真调试完整捋一遍。适合正在用Simulink做风机控制算法验证的工程师,也适合刚接触OpenFAST、想把控制逻辑从纸面跑到仿真里的研究生。文中机组以NREL 5MW公开模型为例,但整套方法和坑位,基本可以平移到你自己的机组模型上。
1. 先搞清楚:统一变桨和独立变桨到底在解决什么问题
很多新手一上来就急着搭模型,结果连控制器要控制什么都说不清楚。我建议先花十分钟把控制目标想明白,后面所有工作都顺了。
1.1 统一变桨:额定风速之后的第一道防线
风电机组的运行区域可以粗略分成两段。低于额定风速时,风机的主要目标是尽可能多捕获风能,这时候桨距角通常固定在一个最优角度附近,靠发电机扭矩控制来跟踪最大功率点,也就是MPPT。一旦风速超过额定风速,再继续傻乎乎地增大气动捕获,功率和转速都会失控,所以必须让叶片变桨,把一部分气动力卸掉,让功率和转速都稳定在额定值附近。
统一变桨的思路非常直接:三个叶片同步转动,角度完全一致。从控制系统角度看,它本质上是一个转速闭环,传感器是发电机转速或转子转速,执行机构是三个同步动作的变桨驱动器,被控量是输出功率或转速。只要转速高于额定值,就把桨距角往大了调,气动转矩降下来,转速自然回落;转速低了就往小了调。这个回路在工程上非常成熟,NREL 5MW这种公开模型上的经典控制器就是典型的增益调度PI加一阶变桨执行器。
统一变桨能解决“整体功率超限”的问题,但它有个天然盲区:它假设三片叶片所处的流场是一样的,只需要同步改变攻角就可以了。真实流场里这个假设根本不成立。风剪切让上面叶片风速高、下面叶片风速低,塔影效应让叶片转到塔架前时风速突然跌落,再加上湍流来流的随机性,三片叶片每时每刻感受到的气动载荷都不相同。结果是叶根、主轴、塔架上都存在明显的非对称循环载荷,统一变桨对此完全无能为力。
1.2 独立变桨:专治“三片叶子受力不一样”
独立变桨的思路是:既然每片叶子感受到的来流不一样,那就不该让它们转同一个角度。在统一变桨得到的公共桨距角基准之上,再给每片叶子叠加一个独立的附加角度,让每片叶子的攻角按需调整,从而把转子平面的非对称载荷压下去。
这里有一个容易被误解的点:独立变桨不是为了分别控制三片叶子的转速,转速只有一个,是转子整体的物理量,控制目标仍然是全机功率和转速。独立变桨的附加指令,主要面向的是载荷控制,尤其是叶根挥舞弯矩的1P循环载荷。所谓1P,就是转子每转一圈出现一次的载荷波动,频率等于转频,NREL 5MW额定转速12.1rpm,1P大约0.2Hz。风剪切和塔影效应引起的载荷波动,主要成分就是1P,独立变桨通过三片叶子的差异化动作,把这种周期性的不平衡载荷抑制掉。
通俗点说,统一变桨管的是“总功率有没有超”,独立变桨管的是“三片叶子受力均不均匀”。两者不是替代关系,而是上下层关系。实际控制器里,IPC输出的附加角度是叠加在CPC输出的公共基准角之上的,最终每片叶子的指令是两者之和。
1.3 联合仿真:为什么必须把OpenFAST和Simulink绑在一起
明确了控制目标,接下来要回答“在哪验证”。纯公式推导和线性化分析解决不了非线性问题,因为风机的气动弹性响应、变桨执行器限速、结构阻尼这些非线性因素,在工况极端时非常关键。直接用OpenFAST自带的简单控制器跑,又限制太大,很难把IPC这种多输入多输出算法落地。所以行业里的主流做法就是联合仿真:OpenFAST负责高保真气动-弹性求解,Simulink负责控制逻辑,两边实时交换数据。
联合仿真之所以能成立,是因为OpenFAST提供了S-Function接口。OpenFAST内部在计算每个时间步的气动力、结构动力学和伺服执行器响应,Simulink里的控制器在每个步进里读取转速、载荷等状态,计算变桨和扭矩指令,再作为输入喂回OpenFAST。这比用Bladed这类商业软件更开放,也比自己写一个BEM气动模型再算结构响应精确得多。
顺带说一句,联合仿真这个思路在工程领域其实很通用,汽车的Carsim和Simulink联合仿真、FPGA领域的Vivado和ModelSim联合仿真,本质上都是“高保真被控对象”加“灵活控制器”的组合。风电里的OpenFAST角色,就相当于Carsim在车辆动力学里的位置。理解了这个思想,后面搭模型就有了主心骨。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 仿真平台搭建:OpenFAST模型准备与Simulink对接
平台搭建是整个工作中最琐碎、也最容易卡住的一步。很多人在OpenFAST和Simulink接口上折腾一个星期,代码逻辑反而不是主要的。我把踩过的关键点按顺序说清楚。
2.1 模型准备:NREL 5MW与输入文件配置
如果你手头没有自己的机组模型,直接用NREL 5MW公开模型是最稳的选择。它出自NREL的技术报告,气动外形、结构参数、固有频率都是公开的,社区讨论也最充分,遇到问题搜一下就有答案。
OpenFAST是通过一系列文本输入文件来描述机组的,关键文件包括:主文件(.fst)、塔架文件(.dat)、叶片文件(.dat)、机舱/偏航/变桨等子模块文件。要跑联合仿真,主文件里的几个开关必须确认:
- 气动模块AeroDyn的入口文件路径要指对,风文件路径尤其不能错。
- 结构模块ElastoDyn的初始条件要和仿真起始风速匹配。比如你要从14m/s开始跑,初始桨距角就不要设成0度,否则第一步气动载荷和结构状态对不上,很容易造成仿真初期的瞬态冲击。
- ServoDyn里要把变桨执行器模型打开,时间常数一般设0.1s左右,用来模拟液压或电动变桨机构的惯性响应。
- 最关键的是要启用“外部控制器”接口,也就是让OpenFAST知道,桨距角和扭矩指令不是来自内部文件里的固定时间序列,而是来自外部程序。不同版本的OpenFAST对这个开关的名称和位置略有差异,但通常在ServoDyn的输入文件里,对应类似“外部控制模式”的选项。打开之后,Simulink端才能注入控制指令。
此外,OpenFAST主文件里的通信步长和内部求解步长是两个概念。内部求解步长(DT)控制气动和结构模块的计算步进,通常设0.005s到0.01s;通信步长是OpenFAST和Simulink交互数据的周期,一般可以比内部步长大一些,设0.01s到0.05s都行。如果通信步长太粗,IPC这种高频修正就不够及时;如果太细,仿真速度会明显变慢。
2.2 Simulink接口的两种主流实现方式
OpenFAST和Simulink的对接,我实际用下来主要有两种方式。
第一种是官方给的Simulink库封装。OpenFAST仓库里有现成的S-Function包装,你编译好OpenFAST后,在MATLAB里把这个库加载进来,拖一个OpenFAST模块,把模型路径作为参数传进去就行。S-Function内部在每个步进里完成OpenFAST的一步求解,同时把OutList里配置的通道作为输出暴露出来,控制指令作为输入传入。这个方式胜在省事,适合快速验证,但定制性稍差,端口顺序和数量不太方便改。
第二种是把OpenFAST编译成动态库,用MEX接口自己包一层。这种方式第一次配置麻烦,要写一点C接口代码,但好处是灵活性高:你可以精确控制哪些状态变量暴露出去,也可以把OpenFAST的输入输出封装得和控制器的数据结构完全对齐。比如你要做硬件在环,或者要给算法团队提供一个干净的接口,这种方式的优势就出来了。
我个人建议:先走官方库,把仿真链路跑通,确认模型参数、风文件、控制器雏形都没问题,再考虑是否要自己封装。一上来就封装动态库,问题叠加在一起,排查起来非常痛苦。
2.3 步长、输出通道与单位换算的工程细节
Simulink端的采样时间和通信步长要匹配。我常用的配置是:OpenFAST内部DT取0.005s,Simulink固定步长取0.01s,S-Function在这个步长上同步一次。控制器内部的滤波器如果工作频率远高于0.01s,比如要处理10Hz以上的信号,那通信步长就要相应缩小,否则奈奎斯特频率不够,信号会混叠。
输出通道的配置在OpenFAST主文件里,对应OutList数组。做CPC和IPC对比,我建议至少输出这些量:
- RotSpeed:转子转速,判断功率和转速控制效果。
- GenPwr:发电功率,后处理直接看额定功率维持情况。
- Azimuth:叶片1的方位角,IPC的Coleman变换必须要用到。
- RootMyb1、RootMyb2、RootMyb3:三个叶片根部挥舞弯矩,这是评价IPC降载效果的核心指标。
- RootMxb1、RootMxb2、RootMxb3:叶根摆振弯矩,用来评估变桨附加动作有没有把载荷转移到其他方向。
- BlPitch1、BlPitch2、BlPitch3:实际桨距角,判断执行器是否频繁触达限速。
- TwrBsMyt:塔基俯仰弯矩,看看IPC对塔架载荷有没有附带影响。
一个特别容易踩的坑是单位。OpenFAST的文本输出里,角度经常以度为单位,载荷以千牛·米为单位,但通过S-Function传给Simulink的接口信号,很多是按标准单位来的,角度是弧度,载荷是牛·米。如果你不确认接口文档里的单位,直接把输出通道的数据拿去做控制,轻则增益不对,重则控制器发散。我的习惯是:在Simulink模型里加一个信号监视模块,先跑一个风速阶跃,把转速、桨距角、弯矩的实际数值拉出来看一眼,确认量级和单位符合预期,再开始设计控制器。
3. 控制器设计:从CPC到IPC的完整实现
平台搭好后,控制器设计就是核心环节。这里我按实际工程中的实现顺序来讲:先把统一变桨调稳,再加独立变桨,每一步都清楚它在系统里扮演的角色。
3.1 统一变桨控制器:转速闭环、增益调度与扭矩解耦
统一变桨控制器的标准结构是一个转速外环加PI控制器。转速设定值在额定转速附近,误差经过PI后输出桨距角指令。但这里有一个非线性问题:桨距角越大,气动转矩对桨距角的灵敏度越低。也就是说,在12度桨距角位置和20度桨距角位置,同样增加1度桨距角,转矩下降的幅度差别很大。如果不做增益调度,一套固定PI参数在某个工作点调好了,换到另一个桨距角区间就可能震荡或响应过慢。
增益调度的经典做法是引入一个调度系数,随桨距角增大而减小。NREL 5MW参考控制器的调度形式是1/(1 + β/β_k)的变体,β_k通常在一个固定角度附近,比如6.3度左右。你拿到自己机组的模型时,可以用OpenFAST的线性化功能,在几个典型桨距角工作点分别跑一次线性化,得到从变桨指令到转速的传递函数,再反推不同工作点的增益修正系数。这一步看似繁琐,但对CPC和后续IPC稳定工作非常关键。
PI参数初值通常由带宽和阻尼比来决定。转速闭环的带宽一般取0.2到0.6rad/s,阻尼比取0.7到1.0,再根据传动链等效转动惯量算出一组Kp和Ki。这里注意,等效转动惯量要从ElastoDyn文件里的转子和发电机惯量折算到同一根轴上来算。算出来的参数只是初值,最后一定要在非线性仿真里微调,因为执行器延迟、滤波器相位、结构柔性都会影响闭环响应。我见过太多人纠结于理论计算的PI值,结果发现实际模型里换一组相差一倍的经验参数反而更稳。
扭矩控制也要和变桨控制解耦。在额定风速以上,发电机的扭矩通常保持在额定值附近,这时候变桨是调节功率的主要手段;但如果你让扭矩控制器和变桨控制器同时积极动作,两者会互相打架。常规工程做法是:额定风速以上把扭矩环维持在额定扭矩,或者只保留一个缓慢的功率平衡环路,把快速调节任务完全交给变桨。
3.2 Coleman变换:把三片叶子的载荷搬到静止坐标系
独立变桨的核心思想,是把三片旋转叶片上的非对称载荷变换到静止坐标系里,再用常规的线性控制器处理。这个变换就是经典的Coleman变换,也叫d-q变换,思路和电机控制里的Park变换很像。
假定叶片1的方位角为ψ,三片叶子的叶根挥舞弯矩分别是M1、M2、M3,那么变换到静止d-q坐标系的分量为:
Md = (2/3) * [M1·cos(ψ) + M2·cos(ψ + 2π/3) + M3·cos(ψ + 4π/3)]
Mq = (2/3) * [M1·sin(ψ) + M2·sin(ψ + 2π/3) + M3·sin(ψ + 4π/3)]
这里d轴大致对应垂直方向的载荷差,比如风剪切引起的上下差异;q轴对应水平方向的载荷差,比如塔影和偏航误差带来的左右差异。因为d轴分量通常比q轴大,所以很多文献里d轴控制器的增益会取得比q轴大一些。
反变换也就是把d-q轴的控制量变回三片叶子的附加桨距角,公式如下:
β1 = βd·cos(ψ) + βq·sin(ψ)
β2 = βd·cos(ψ + 2π/3) + βq·sin(ψ + 2π/3)
β3 = βd·cos(ψ + 4π/3) + βq·sin(ψ + 4π/3)
正变换里的系数是2/3,反变换里不乘系数,这样做的目的是保证d-q分量和实际正弦分量的幅值对等。不同文献对系数处理可能不一样,有的把2/3放到反变换里,有的用根号下2/3,这都不影响本质,因为最终你会通过增益调整来补偿。但你自己在一个项目里必须保持一致,不然控制器的物理意义就乱了。
在Simulink里实现这个变换非常容易,核心就是变量是方位角ψ。你要注意,ψ是随着时间变化的,如果方位角信号有间断或跳变,变换结果就会出问题。有些版本的OpenFAST输出的方位角会在0到360度之间跳变,一定要先做“去跳变”处理,用unwrap之类的操作把它变成连续递增的角度。
3.3 独立变桨控制器:d-q轴校正与反变换实现
拿到Md和Mq之后,独立变桨控制器的任务就是让这两个分量尽量接近零。因为Md、Mq本身是缓慢变化的量(在1P附近),最常用的控制器就是PI或纯积分控制器,再加上带通滤波器进行频率选择性处理。
工程里比较稳妥的结构是:先对M1、M2、M3做带通滤波,把零点附近的低频漂移和高频噪声都滤掉,只保留1P附近的分量,然后再做Coleman变换。滤波器中心频率就取转频1P(约0.2Hz),带宽不要太宽,否则会把其他频率的载荷成分引进来,导致额外的变桨动作。带通滤波会带来相位滞后,滞后太大会让控制器在环路增益高时产生振荡。一个补救措施是加相位超前补偿,或者用谐振控制器直接压在1P频率上,减小相位损失。
控制器的输出是βd和βq,然后经过反Coleman变换得到三片叶子的附加角度,再和CPC输出的公共基准角相加,就是最终的三片叶子变桨指令。整体结构可以这么理解:CPC负责把转速拉回额定值,输出一个公共角度;IPC输出的附加角度围绕这个公共值上下波动,三片叶子平均之后附加分量很小,所以对总功率影响有限,这正是我们想要的。
我特别提醒一点:独立变桨只是附加控制,它的前提是CPC已经把转速控制住了。如果CPC还没调稳,就急着加IPC,你根本分不清转速振荡是CPC引起的还是IPC引起的。正确的顺序永远是先把CPC独立调稳,再加IPC,再联合调试。
3.4 滤波、限幅与执行器带宽的工程处理
IPC在实际运行里,最大的敌人不是控制算法本身,而是执行器物理限制。变桨机构有最大变桨速率,NREL 5MW是每秒8度。当IPC附加角度和CPC基准角叠加在一起后,执行器需要同时响应两部分指令,速率很容易触顶。所以Simulink里一定要加变桨速率限制模块,并且留出足够的裕量,而且最好加一个软限幅,让附加角度在接近极限时平滑压缩,而不是直接硬切。
同样的道理,IPC输出的附加角度本身要有上下限。NREL 5MW这类机组,附加角度一般也就几度,超过这个范围说明增益给大了,或者滤波器选得不对。限幅值设得太大会让变桨机构一直满负荷跑,设得太小又会限制IPC的降载能力。建议先跑几个工况统计一下附加角度的分布,再定限幅。
另一个容易被忽略的是执行器带宽。OpenFAST的ServoDyn变桨执行器模型通常是一阶惯性,时间常数0.1s意味着它的闭环带宽只有1.6Hz左右。IPC在1P频率(0.2Hz)附近工作,这个带宽是够用的,但IPC指令不能包含太多高频成分,否则执行器根本响应不过来,还白白增加磨损。这就是为什么在Simulink端给IPC附加指令加低通滤波非常必要,通常截止频率设在1Hz到2Hz之间。
4. 仿真工况设计与两种控制策略的对比
控制器搭好了,接下来就是设计仿真实验。好的工况设计,决定了你能从仿真里提取出多少有用的信息。我的建议是每年做“一组湍流工况加一组阵风工况”,再把统计结果和极限结果分开看。
4.1 湍流风工况:载荷统计与疲劳评估
湍流风工况用来评估控制策略在正常运行中的疲劳载荷,这才是IPC的主战场。用TurbSim生成湍流风文件,风况按IEC标准选,比如IB类,平均风速取额定风速以上的典型值,比如18m/s,湍流强度按标准取。仿真时长建议600s,也就是10分钟,这是业内统计疲劳载荷比较常用的时长。为了结果更可靠,最好换不同的随机种子生成3组风文件,把载荷统计做平均。
在这个工况下,你需要记录的指标包括:转子转速的均值、标准差,功率的波动范围,三片叶子叶根挥舞弯矩的最大值、最小值和标准差,以及变桨速率是否经常触达限速。如果你想做更专业一点,可以用雨流计数法统计叶根弯矩的循环幅值分布,再按S-N曲线折算成等效疲劳载荷。MATLAB里有现成脚本可以处理,不算麻烦。
从统计结果看,CPC和IPC在功率和转速平均表现上不会差太多,都能稳住5MW;真正的差异出现在载荷侧。IPC把叶根挥舞弯矩的1P循环幅值大幅压缩,反映在标准差上,一般能降20%到30%,具体数字取决于风况、机组特性和IPC参数整定质量。如果看到标准差没怎么降,先别急着怀疑算法,先检查带通滤波器的中心频率有没有跟随实际转速,方位角信号有没有问题。
4.2 阵风工况:极限载荷和响应速度考察
独立变桨虽然主要针对疲劳载荷,但它附加角度的动态响应,在阵风工况下也会影响极限载荷。阵风可以用TurbSim生成,也可以直接在InflowWind里叠加一个自定义风速时间序列。比较典型的做法是:平均风速14m/s,在某个时刻叠加上一个峰值为24m/s左右的余弦型阵风,上升时间5到10秒,让风速快速穿透额定区间。
看这个工况时,我关注的指标有三个:阵风期间转速的最大超调量、叶根挥舞弯矩的最大峰值、以及变桨指令是否严重饱和。CPC在阵风下能保持转速不超限,但叶根弯矩峰值会比较猛;IPC由于预先对非对称载荷做了抑制,峰值弯矩通常更平滑。这里要注意,阵风工况下IPC的附加角度可能会短时间跳到限幅值,这本身不一定是坏事,但如果你看到变桨指令长期饱和,说明参数偏激进,需要回退增益。
4.3 典型结果与“IPC到底值不值得上”的判断
把两组工况的结果放在一起,基本可以回答工程上最关心的那个问题:独立变桨的成本和收益是否匹配。从控制性能看,IPC能显著降低叶根挥舞弯矩的疲劳载荷,对塔架载荷也有一定改善,因为它减小了转子传递给机舱和塔架的不平衡载荷。代价是变桨机构动作更频繁,对变桨轴承和驱动系统的磨损会增大,Simulink里能清楚看到BlPitch信号的活跃程度比CPC高不少。
我一般的判断标准是:如果机组变桨机构裕度充足,且所在风场的风剪切和湍流强度偏大,IPC的综合收益是正的。但如果变桨系统本身就偏弱,或者风场风况温和,那IPC带来的机械磨损可能就不划算。另外,IPC不要指望它能提升发电量,它的目标很纯粹,就是降载荷,这一点一定要在项目汇报里跟非专业的人讲清楚,否则很容易产生错误预期。
5. 联合仿真中的常见问题与调试经验
讲到这里,模型和控制器的框架都有了,但真正动手跑仿真的时候,你会遇到一堆文档里查不到的怪问题。我按自己的排查经验列几个高频坑位,每一个都是实际踩过的。
5.1 一跑就发散:数值不稳定的排查路线
联合仿真最常见的噩梦就是仿真开始没几步,转速或桨距角直接飞了。这种情况十有八九是初始状态和控制指令不匹配。比如你让仿真从额定风速附近启动,但初始桨距角设成了0度,气动转矩瞬间爆表,控制器还没来得及反应就发散了。解决办法是先用手算或OpenFAST静态计算,预估一下当前风速下的大致平衡桨距角,把初始角设置到那个值附近。
另一个常见原因是控制器端口接反了。S-Function输入端的变桨指令和扭矩指令顺序弄错,等于控制器一直在做反向调节,系统当然发散。解决这个问题的标准动作是:先给控制指令设成OpenFAST内部能接受的常数,比如固定桨距角、固定扭矩,跑一段看看状态是否平稳;平稳之后再切到闭环控制,这样能隔离出到底是接口问题还是控制参数问题。
5.2 信号对不上:接口错位与单位换算
联合仿真里所谓的“信号对不上”,通常表现为控制器里的数值和OpenFAST文本输出里的数值差一个数量级,或者角度差了一个量纲。前文提到过,接口信号和文本输出的单位可能不同。另外一个让很多人头大的问题是输出通道顺序。OpenFAST的S-Function输出的通道顺序,严格遵循你在OutList里配置的顺序,如果在控制器端按顺序取数据时错了一位,那整条控制回路都是错乱的。
我的调试技巧是:在Simulink模型里专门放一个“接口检查”子系统,把S-Function的所有输出信号按通道名认认真真连到示波器上,然后跑一个简单的风速阶跃仿真,观察转速、桨距角、方位角、叶根弯矩这些信号的变化趋势是否符合物理直觉。这个检查花不了十分钟,但能避免你后期拿着错误数据调三天参数。
5.3 IPC参数整定的试错路径
IPC加进去就开始振荡,是新手最常遇到的问题。我的整定路径一般是:先把带通滤波器中心频率设为当前平均转速对应的1P频率,让d-q轴控制器从很小的增益开始,比如CPC转速环Kp的十分之一左右,逐步增加。每增加一档增益,就观察叶根弯矩标准差和变桨速率,如果弯矩标准差下降而变桨速率增加不夸张,继续加;一旦看到某个频率上的振荡开始放大,立刻退回来。
振荡频率的识别也有讲究。如果振荡频率接近塔架一阶频率(NREL 5MW大约0.32Hz)或叶片一阶挥舞频率(大约0.68Hz),说明IPC的控制器带宽和结构模态发生了交互,这时候不是单纯降增益能解决的,要在IPC输出通道里加陷波滤波器,专门压掉这几个频率,或者把带宽进一步压低。
5.4 仿真太慢与数据前处理技巧
联合仿真跑600s,如果步长不当,可能要跑小半天。我的建议是调试阶段先跑60s,用比较粗糙的增益和滤波器参数把趋势看对,再拉长到600s做正式的对比统计。另外,通信步长能取0.02s就不要取0.005s,OpenFAST内部步长保持0.005s,Simulink通信步长适当放大,仿真速度差别很大,对控制结果的影响远小于你的直觉。
再有一个小技巧:TurbSim的风文件不要一上来就生成600s的超大文件,先用一个120s的短文件把整个仿真链路跑通,确认没有接口问题后,再生成正式的长风文件做最终统计。这样能省下大量等待时间。
最后再分享一个小经验
做这类联合仿真,我最开始经常陷入一个误区:总想把控制器设计得一步到位,参数理论推导得漂漂亮亮,结果一上非线性仿真就崩,反复在参数里打转。后来自己总结了一条笨但有效的工作流:先把接口和信号流检查清楚,再调CPC,CPC稳定了再加IPC,每个环节都留下可复现的仿真记录。不要小看这个工作流,它能让你在项目过程中随时回退到某个稳定版本,而不是在调试的泥潭里越陷越深。独立变桨和统一变桨这两个方向,实验做透了,你对风机控制的理解会上一个台阶,尤其是对“载荷控制”这件事的理解,绝对不只是在Simulink里多拉几个模块这么简单。
