Create a custom controller
If you want to write a controller that behaves like the NREL 5-MW controller (i.e. variable generator speed under rated conditions and collective pitch above rated conditions), you can follow the steps 3 and 4 of the Create a custom rated power turbine document.
If you want to create a controller with some specific features (such as a Shut down procedure, or pitch fault for example), you can use the Ashes Python controller found in the Python examples file. This Python script gives you the possibility to control
- the generator torque
- the demanded pitch angle
- the yawing torque
- the pitching torque
Note that this controller has been designed to match the NREL controller for the demanded pitch and the generator torque. The yawing and pitching torques are controlled via PIDs, and fine tuning of the gains might be necessary to improve the response time of both controllers
1 Example: pitch to feather after 60 seconds
In this section we show how to modify the provided Python controller so that the blade pitch goes from 0 to 90 degrees after 60 seconds at maximum pitch rate (i.e. 8 deg/s). The controllers used by this script are defined in the ashes_controller.py file.
The figure below shows a screen shot of the ashes_controller.py script. The line highlighted in the figure calls for the PID controller to update the value of the pitch.
In order to have the pitch going from 0 to 90 degrees, we can modify the code as follows:
The figure below illustrates the modifications brought to this controller, for the default onshore template and a turbulent wind of 7 m/s. At 60 seconds, the pitch starts increasing and reaches 90 degress at 71.25 seconds (i.e. 90/8=11.25 seconds after pitching has started). As expected, the rotor also stops rotating as a consequence of pitching the blades to feather.
Note: with the current modification, the pitch angle would always go to 0 at 60 seconds (even if the wind was above rated conditions and the blades were pitched before the pitching procedure is started). To account for non-zero pitch angles, a parameter storing the previous pitch value should be added (in a similar was as Previous_torque works for the VariableSpeedGeneratorController class).