88 lines
2.0 KiB
Matlab
88 lines
2.0 KiB
Matlab
function damping_confirmed()
|
|
H = 1000; % m
|
|
V = 38; % m/s
|
|
m = 350; % kg
|
|
[success,opts, op_point] = get_trim_Lon(H,V,m);
|
|
if success
|
|
[Glon,Glat] = linfdm(opts.fcn,op_point);
|
|
end
|
|
U0 = V;
|
|
A1 = Glat.A;
|
|
B1 = Glat.B;
|
|
c1 = Glat.C;
|
|
D1 = Glat.D;
|
|
% inputs: [da dr]
|
|
% states: [beta p r phi]
|
|
% outputs: [beta p r phi]
|
|
A2 = [A1(1,1) A1(1,2:end)./U0;A1(2,1)*U0 A1(2,2:end);A1(3,1)*U0 A1(3,2:end);A1(4,1)*U0 A1(4,2:end)]; % delta_beta = atan(delta_v/u0)
|
|
B2 = [B1(1,:)./U0;B1(2,:);B1(3,:);B1(4,:)];
|
|
C2 = eye(4);
|
|
D2 = zeros(4,2);
|
|
% inputs: [dr da]
|
|
% states: [beta r p phi]
|
|
% outputs: [r phi]
|
|
A = A2([1 3 2 4],[1 3 2 4]);
|
|
B = B2([1 3 2 4],[2 1]);
|
|
C = [0 1 0 0;0 0 0 1];
|
|
D = zeros(2,2);
|
|
|
|
sys = ss(A,B,C,D);
|
|
set(sys, 'inputname', {'rudder' 'aileron'},...
|
|
'outputname', {'yaw rate' 'bank angle'},...
|
|
'statename', {'beta' 'yaw' 'roll' 'phi'});
|
|
damp(sys)
|
|
figure(1)
|
|
axis(gca,'normal')
|
|
h = pzplot(sys);
|
|
setoptions(h,'FreqUnits','rad/s','Grid','off');
|
|
figure(2)
|
|
impulseplot(sys,20)
|
|
|
|
figure(3)
|
|
sys11 = sys('yaw','rudder'); % select I/O pair
|
|
h = bodeplot(sys11);
|
|
setoptions(h, 'FreqUnits','rad/s','MagUnits','dB','PhaseUnits','deg');
|
|
|
|
figure(4)
|
|
h = rlocusplot(sys11);
|
|
setoptions(h,'FreqUnits','rad/s')
|
|
|
|
figure(5)
|
|
% need positive feedback
|
|
h = rlocusplot(-sys11);
|
|
setoptions(h,'FreqUnits','rad/s')
|
|
sgrid
|
|
% damping gain
|
|
k = 0.83;
|
|
cl11 = feedback(sys11,-k);
|
|
|
|
figure(6)
|
|
impulseplot(sys11,'b--',cl11,'r')
|
|
legend('open loop','closed loop','Location','SouthEast')
|
|
xlim([0 10]);
|
|
|
|
figure(7)
|
|
% see how the response for the aileron looks
|
|
cloop = feedback(sys,-k,1,1);
|
|
damp(cloop) % closed-loop poles
|
|
impulseplot(sys,'b--',cloop,'r',20) % MIMO impulse response
|
|
xlim([0 10]);
|
|
|
|
figure(8)
|
|
impulseplot(cloop('bank angle','aileron'),'r',18)
|
|
|
|
% Form the washout filter
|
|
s = tf('s');
|
|
H = tf([1 0],[1 1]);
|
|
figure(9)
|
|
oloop = H * (-sys11); % open loop'
|
|
h = rlocusplot(oloop);
|
|
setoptions(h, 'FreqUnits','rad/s')
|
|
sgrid
|
|
|
|
figure(10)
|
|
k = 0.83;
|
|
wof = -k * H; % washout compensator
|
|
cloop = feedback(sys,wof,1,1);
|
|
impulseplot(sys,'b--',cloop,'r',20)
|
|
end |