FAST 8 - Commanding yaw in Simulink


I’m trying to migrate my wind turbine Simulink model from FAST v7 to FAST v8. Almost everything is working fine, but I can’t get nacelle yaw to work properly.

In the FAST v7 model, pitch and yaw angles (and yawing rate) were commanded from the Simulink model (PCMode and YCMode were set to the appropriate values).

In FAST v7, yaw moment YawMom was calculated without setting YawDof to True - I guess FAST simply calculated how much moment was needed to keep the turbine fixed at the commanded yaw position. Which was good, since the model could simulate motor overload, yaw braking torque etc.

In FAST v8, the pitch angle actuation works perfectly but it seems to me that there have been some changes in yaw calculations. If YawDof is False (as it was in FAST v7), then yaw is fixed at its initial position and YawMom is zero.
If YawDof is true, then the yaw spring and damping constants are taken into account but I don’t really want that.

After looking through the ServoDyn source code (I don’t know much about FORTRAN, but hey, it’s well written and documented code!) I found that it seems that contrary to FAST v7, yawing is only calculated if YawDof is set to true.

That could be OK but I also found that the FAST solver doesn’t couple the actual yaw angle between ServoDyn and ElastoDyn, only the yawing moment output by ServoDyn - which is calculated with the spring and damping constants. And then the yaw position change is calculated by ElastoDyn.

I also found that because of this, YawBrMzn is now different from YawMom (used to be the same in FAST v7).

It seems that setting GenDof to True and YCMode to 4 and setting yaw damping to 0 and yaw spring to a really high number, say, 1e7 so that this fictitious “yaw moment” generates almost instantaneous yaw changes could be a workaround.

But if the spring constant is too high, the program crashes, if it’s too low, then the yaw position will not be equal to the commanded position. And even in between, there are small changes in yaw position because of this system.

How should I use the system so that I can properly command yaw angle and rate, as it was supposed to be for FAST Simulink?


Dear Gergely,

You are correct that FAST v7 allowed active yaw control when the nacelle-yaw DOF was disabled (YawDOF = False) and that this is no longer possible in FAST v8. In FAST v7, the active yaw controller was allowed to control the nacelle-yaw angle and rate (states) directly. While this was allowed, it wasn’t recommend, because the corresponding nacelle-yaw acceleration was never calculated consistently (instead, the nacelle-yaw acceleration was assumed to be zero when YawDOF = False), so, the loads calculated by FAST may not be accurate. In FAST v8, active yaw control is only possible with the nacelle-yaw DOF enabled (YawDOF = True). While the nacelle-yaw angle and rate can be commanded, these will be passed through the second-order actuator (defined by the nacelle-yaw spring, YawSpr, and damper, YawDamp) in order to calculate the yaw moment command (YawMom).

I suggest that you set YawSpr and YawDamp appropriately to give an appropriate yaw control response. This is discussed a bit in my post dated May 11, 2010 in the following forum topic:

Best regards,

Dear Jason,

Thanks for the help! It worked indeed, and it seems that this is a typical “it’s not a bug, it’s a feature” situation.

Actually setting the natural frequency to 10 Hz, using your formulas and adding some YawDamp to the system worked. My problem is that these are still fictitious numbers - we’d need some actual measurements or more data about the drivetrain. (Especially regarding its natural frequency.) But as I can see while experimenting with multiple values, YawMom and YawBrMzp will stay in the same range regardless of my choice.

I have another question.

I suspect that YawMom is not in kNm as stated in OutListParameters.xlsx.

Just look at this:

Exactly 1000 times larger. Also, in function SrvD_CalcOutput in ServoDyn.f90, YawMom is not divided by 1000 before outputting to the FAST glue code - unlike GenTq and GenPwr.

If I’m wrong, we’ll need to buy a much larger yaw motor for the prototype. :laughing:

Dear Gergely,

You’re right. Output YawMom (or YawMomCom) from ServoDyn is currently output in N-m, not kN-m as stated. It also has the wrong sign compared to output YawBrMzn from ElastoDyn. We will be sure to fix these minor bugs in the next release of FAST. Thanks for reporting the issue.

Best regards,