Skip to content

Commit 2e6c7fc

Browse files
committed
Updated WindTurbineDesign, GenerateSteadyOp, and SteadyState.m
1 parent a53da15 commit 2e6c7fc

3 files changed

Lines changed: 19 additions & 16 deletions

File tree

subfunctions/GenerateSteadyOp.m

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ function GenerateSteadyOp_OpeningFcn(hObject, eventdata, handles, varargin)
2828
handles.Airfoil = varargin{2};
2929
handles.Drivetrain = varargin{3};
3030
handles.Control = varargin{4};
31+
handles.AirDensity = varargin{5};
3132

3233
% Propose values for the pitch angle range
3334
set(handles.PitchAngle_From, 'String', '0')
@@ -97,11 +98,12 @@ function Calculate_Callback(hObject, eventdata, handles)
9798
end
9899
pause(0.1)
99100

100-
% Get geometry from handles
101+
% Get geometry and air density from handles
101102
Blade = handles.Blade;
102103
Airfoil = handles.Airfoil;
103104
Drivetrain = handles.Drivetrain;
104105
Control = handles.Control;
106+
AirDensity = handles.AirDensity;
105107

106108
Pitchi = [];
107109
if get(handles.CalcPerformanceFine_checkbox, 'Value') == 1
@@ -191,16 +193,16 @@ function Calculate_Callback(hObject, eventdata, handles)
191193
disp('Generating steady operating curves...')
192194

193195
% Determine steady state curves (external function, which is also used in 'Linearization.m'
194-
[CT, CQ, OmegaU, PitchAngle] = SteadyState(Blade, Airfoil, Drivetrain, Control, U);
196+
[CT, CQ, OmegaU, PitchAngle] = SteadyState(Blade, Airfoil, Drivetrain, Control, U, AirDensity);
195197

196198
TSR = OmegaU.*Blade.Radius(end)./U;
197199
CP = CQ.*TSR;
198200
TSR(1) = 0;
199201
CP(1) = 0;
200202

201-
P = 0.5*1.225*pi*Blade.Radius(end)^2 * U.^3 .* CP .* Drivetrain.Gearbox.Efficiency .* Drivetrain.Generator.Efficiency;
202-
T = 0.5*1.225*pi*Blade.Radius(end)^2 * U.^2 .* CT;
203-
Q = 0.5*1.225*pi*Blade.Radius(end)^3 * U.^2 .* CQ;
203+
P = 0.5*AirDensity*pi*Blade.Radius(end)^2 * U.^3 .* CP .* Drivetrain.Gearbox.Efficiency .* Drivetrain.Generator.Efficiency;
204+
T = 0.5*AirDensity*pi*Blade.Radius(end)^2 * U.^2 .* CT;
205+
Q = 0.5*AirDensity*pi*Blade.Radius(end)^3 * U.^2 .* CQ;
204206
RPM = OmegaU * 60/(2*pi);
205207

206208
Prated = max(P);

subfunctions/SteadyState.m

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
function [CT, CQ, OmegaU, PitchAngle] = SteadyState(Blade, Airfoil, Drivetrain, Control, U)
1+
function [CT, CQ, OmegaU, PitchAngle] = SteadyState(Blade, Airfoil, Drivetrain, Control, U, AirDensity)
22
% Initialise parameters
33
OmegaU = zeros(size(U));
44
PitchAngle = zeros(size(U));
@@ -24,9 +24,9 @@
2424

2525
% Update rotor torque curve points to new wind speed
2626
[~, CQr] = PerformanceCoefficients(Blade, Airfoil, Beta(1), (Omega(1)/Drivetrain.Gearbox.Ratio)*Blade.Radius(end)/U(i));
27-
Qr(1) = 0.5*CQr*1.225*U(i)^2*pi*Blade.Radius(end)^3*Drivetrain.Gearbox.Efficiency/Drivetrain.Gearbox.Ratio;
27+
Qr(1) = 0.5*CQr*AirDensity*U(i)^2*pi*Blade.Radius(end)^3*Drivetrain.Gearbox.Efficiency/Drivetrain.Gearbox.Ratio;
2828
[~, CQr] = PerformanceCoefficients(Blade, Airfoil, Beta(2), (Omega(2)/Drivetrain.Gearbox.Ratio)*Blade.Radius(end)/U(i));
29-
Qr(2) = 0.5*CQr*1.225*U(i)^2*pi*Blade.Radius(end)^3*Drivetrain.Gearbox.Efficiency/Drivetrain.Gearbox.Ratio;
29+
Qr(2) = 0.5*CQr*AirDensity*U(i)^2*pi*Blade.Radius(end)^3*Drivetrain.Gearbox.Efficiency/Drivetrain.Gearbox.Ratio;
3030

3131
% Move test section along control curve until control and rotor torque
3232
% cross or until end of control curve is reached
@@ -51,7 +51,7 @@
5151

5252
% Determine torque from rotor performance
5353
[~, CQr] = PerformanceCoefficients(Blade, Airfoil, Beta(2), (Omega(2)/Drivetrain.Gearbox.Ratio)*Blade.Radius(end)/U(i));
54-
Qr(2) = 0.5*CQr*1.225*U(i)^2*pi*Blade.Radius(end)^3*Drivetrain.Gearbox.Efficiency/Drivetrain.Gearbox.Ratio;
54+
Qr(2) = 0.5*CQr*AirDensity*U(i)^2*pi*Blade.Radius(end)^3*Drivetrain.Gearbox.Efficiency/Drivetrain.Gearbox.Ratio;
5555
end
5656

5757
if strcmp(Region, 'lin') % Operation linear transition section of partial load control region
@@ -78,7 +78,7 @@
7878
QcCross = Qc(1) + (OmegaCross-Omega(1))*(Qc(2)-Qc(1))/(Omega(2)-Omega(1));
7979
% Determine torque from rotor performance
8080
[CTr, CQr] = PerformanceCoefficients(Blade, Airfoil, Beta(2), (OmegaCross/Drivetrain.Gearbox.Ratio)*Blade.Radius(end)/U(i));
81-
QrCross = 0.5*CQr*1.225*U(i)^2*pi*Blade.Radius(end)^3*Drivetrain.Gearbox.Efficiency/Drivetrain.Gearbox.Ratio;
81+
QrCross = 0.5*CQr*AirDensity*U(i)^2*pi*Blade.Radius(end)^3*Drivetrain.Gearbox.Efficiency/Drivetrain.Gearbox.Ratio;
8282
Diff = (QrCross - QcCross)/Control.Torque.Demanded;
8383

8484
if abs(Diff) < Tolerance
@@ -124,7 +124,7 @@
124124

125125
% Determine torque from rotor performance
126126
[CTr, CQr] = PerformanceCoefficients(Blade, Airfoil, Beta(2), (OmegaCross/Drivetrain.Gearbox.Ratio)*Blade.Radius(end)/U(i));
127-
QrCross = 0.5*CQr*1.225*U(i)^2*pi*Blade.Radius(end)^3*Drivetrain.Gearbox.Efficiency/Drivetrain.Gearbox.Ratio;
127+
QrCross = 0.5*CQr*AirDensity*U(i)^2*pi*Blade.Radius(end)^3*Drivetrain.Gearbox.Efficiency/Drivetrain.Gearbox.Ratio;
128128
Diff = (QrCross - QcCross)/Control.Torque.Demanded;
129129

130130
if abs(Diff) < Tolerance
@@ -172,7 +172,7 @@
172172

173173
% Determine torque from rotor performance
174174
[~, CQr] = PerformanceCoefficients(Blade, Airfoil, Beta(2), TSRFull);
175-
Qr(2) = 0.5*CQr*1.225*U(i)^2*pi*Blade.Radius(end)^3*Drivetrain.Gearbox.Efficiency/Drivetrain.Gearbox.Ratio;
175+
Qr(2) = 0.5*CQr*AirDensity*U(i)^2*pi*Blade.Radius(end)^3*Drivetrain.Gearbox.Efficiency/Drivetrain.Gearbox.Ratio;
176176

177177
end
178178

@@ -192,7 +192,7 @@
192192
Beta(2) = Beta(1)+2;
193193
% Determine torque from rotor performance
194194
[~, CQr] = PerformanceCoefficients(Blade, Airfoil, Beta(2), TSRFull);
195-
Qr(2) = 0.5*CQr*1.225*U(i)^2*pi*Blade.Radius(end)^3*Drivetrain.Gearbox.Efficiency/Drivetrain.Gearbox.Ratio;
195+
Qr(2) = 0.5*CQr*AirDensity*U(i)^2*pi*Blade.Radius(end)^3*Drivetrain.Gearbox.Efficiency/Drivetrain.Gearbox.Ratio;
196196
success = false;
197197
198198
for iter = 1:20
@@ -201,7 +201,7 @@
201201
202202
Beta(2) = interp1(Qr, Beta, Control.Torque.Demanded, 'linear', 'extrap');
203203
[CTr, CQr] = PerformanceCoefficients(Blade, Airfoil, Beta(2), TSRFull);
204-
Qr(2) = 0.5*CQr*1.225*U(i)^2*pi*Blade.Radius(end)^3*Drivetrain.Gearbox.Efficiency/Drivetrain.Gearbox.Ratio;
204+
Qr(2) = 0.5*CQr*AirDensity*U(i)^2*pi*Blade.Radius(end)^3*Drivetrain.Gearbox.Efficiency/Drivetrain.Gearbox.Ratio;
205205
206206
Diff = (Qr(2) - Control.Torque.Demanded)/Control.Torque.Demanded;
207207
if abs(Diff) < Tolerance
@@ -215,7 +215,7 @@
215215
216216
OmegaU(i) = OmegaC/Drivetrain.Gearbox.Ratio;
217217
PitchAngle(i) = Beta(2);
218-
CQ(i) = Control.Torque.Demanded/(0.5*1.225*U(i)^2*pi*Blade.Radius(end)^3*Drivetrain.Gearbox.Efficiency/Drivetrain.Gearbox.Ratio);
218+
CQ(i) = Control.Torque.Demanded/(0.5*AirDensity*U(i)^2*pi*Blade.Radius(end)^3*Drivetrain.Gearbox.Efficiency/Drivetrain.Gearbox.Ratio);
219219
CT(i) = CTr;
220220
%}
221221
end

subfunctions/WindTurbineDesign.m

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2959,7 +2959,8 @@ function GenerateSteadyOp_Callback(hObject, eventdata, handles)
29592959
handles.Blade, ...
29602960
handles.Airfoil, ...
29612961
handles.Drivetrain, ...
2962-
handles.Control);
2962+
handles.Control,...
2963+
handles.AirDensity);
29632964

29642965
% Enable window
29652966
for i = 1:length(buttons)

0 commit comments

Comments
 (0)