Modelling Passive Blade Pitch IEA 15 MW - help with custom blade pitch control at runtime?

Hi all,

For my research I am trying to see how a passive blade pitching mechanism would fare in wind turbines, and I’ve been wanting to implement this in OpenFAST. I’ve been running fixed-point simulations on the IEA 15 MW turbine and my results seem to agree with the turbine specifications, so at least I feel ok about running basic simulations.

Now I’m intending on implementing the passive pitching mechanism into the model and would appreciate if someone could help me by maybe pointing out a good starting point.

My main problem is not knowing how to control blade pitches during runtime. The system I’m interesting in implementing is very simple: a torsional spring system which arrives at a blade pitch by reaching an equilibrium between forces of the spring and blade loading. I want to increment blade pitches at each timestep, given corresponding aero-loading and spring reaction forces.

I know that turbine controls can be handled by ROSCO - I have that downloaded, I know that it comes with a nice Simulink interface, and I am prepared to learn how it works to try to implement my mechanism.

However, ROSCO is a a complex tool with a lot of optimisation control mechanisms, and from outside it seems like it could be overkill for what I want to do. Could someone please shed some light whether trying to achieve this through ROSCO or any other controller (say, DTU) would be a good way, or whether there’s a simpler method. I am aware that ServoDyn has a user-defined PitchCntrl method in its source code, and that it’s somehow possible to communicate with the module using Simulink, but I don’t know FORTRAN to write my own method there and I can’t seem to find in-depth information about the Simulink interface. Happy to learn it if needed.

If the information is easily findable, apologies for taking up your time but I’ve spent a few weeks (months evens) skimming through documentation for relevant information but am not getting anywhere. And with how big of a system FAST is, I’d prefer to avoid spending a disproportionate amount of time going down the documentation rabbit hole for modules that might not be relevant, hence me finally posting this question here.

Thanks in advance,

Hi Kuba,

I think that ROSCO may be overkill for your application, and the Simulink interface might be a better starting point. This is a great starting point: openfast/OpenLoop.mdl at main · OpenFAST/openfast · GitHub

From there, you can access any OpenFAST outputs (the ROSCO Simulink model has examples), so you can access the pitching moment at each blade (B1RootMzr in BeamDyn or RootMzb1 in ElastoDyn).

Then, the blade pitch provided to the OpenFAST input is directly applied to the rotor. Any dynamics you wish to include can be modeled in Simulink.

If you choose to go the ROSCO route, you’ll need to edit the Fortran source, and make sure that the load channels you want are shared in the avrSWAP. It’s a bit more involved. If you’re interested, we can point you in the right direction.

Best, Dan

Hi Daniel,

Thanks for that. I’ll look into the Simulink model first and see how it goes.