Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- clear
- clc
- sympref('FloatingPointOutput',true)
- syms s k1 k2 k3 k4 ke zeros;
- %% Input:
- % Problem 3
- numg = [20]; % Define numerator of G(s)
- deng = poly([2 4 8]); % Define denominator of G(s)
- Os = 15; % Overshoot (%)
- Ts = 0.75; % Time settling
- % Problem 4
- %numg = [20 40]; % Define numerator of G(s)
- %deng = poly([0 5 7]); % Define denominator of G(s)
- %Os = 10; % Overshoot (%)
- %Ts = 2; % Time settling
- % Problem 5
- %numg = [1 6]; % Define numerator of G(s)
- %deng = poly([3 8 10]); % Define denominator of G(s)
- %Os = 10; % Overshoot (%)
- %Ts = 1; % Time settling
- %zeros = -6
- zeta = (-log(Os/100))/(sqrt(pi^2+log(Os/100)^2));
- Wn = 4/(zeta*Ts);
- zeros = real(solve(s^2 + 2*zeta*Wn*s + Wn^2))*10; % Third pole / Open loop zero
- %speed = 10 % observer speed
- %% Process
- G = tf(numg,deng) % Generate transfer function G(s)
- [Ac Bc Cc Dc] = tf2ss(numg,deng);
- P = [0 0 1; 0 1 0; 1 0 0];
- A = inv(P)*Ac*P
- B = inv(P)*Bc
- C = Cc*P
- D = Dc
- Cm = det(ctrb(A,B)) % Controlbility
- Om = det(obsv(A,C)) % Observability
- %% controller
- %state-feedback control
- pole1 = s^2 + 2*zeta*Wn*s + Wn^2
- pole2 = s-zeros(1)
- Anew = A-(B*[k1 k2 k3])
- %Integral control
- %pole1 = s^2 + 2*zeta*Wn*s + Wn^2
- %pole2 = s-zeros(1)
- %a11 = A-(B*[k1 k2 k3]);
- %a12 = B*ke;
- %a21 = -C;
- %Anew = [a11 a12; a21 0];
- % Observer
- %pole1 = s+zeta*Wn*speed + (Wn*sqrt(1-zeta^2))*speed*1i;
- %pole2 = s+zeta*Wn*speed - (Wn*sqrt(1-zeta^2))*speed*1i;
- %pole3 = s+zeta*Wn*speed*10;
- %Anew = A-[L1; L2; L3]*C;
- Ds = expand(pole1*pole2)
- Ts = det(s*eye(3)-Anew)
- % Solve
- Dsm = coeffs(Ds,s);
- Tsm = coeffs(Ts,s);
- k = vpa(struct2cell((solve(Dsm==Tsm))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement