400 likes | 612 Views
Proportional controller design. Obtain open loop Bode plot Convert design specs into Bode plot req. Select K P based on requirements: For improving ess: K P = K p,v,a,des / K p,v,a,act For fixing Mp: select w gcd to be the freq at which PM is sufficient, and K P = 1/|G(j w gcd )|
E N D
Proportional controller design • Obtain open loop Bode plot • Convert design specs into Bode plot req. • Select KP based on requirements: • For improving ess: KP = Kp,v,a,des / Kp,v,a,act • For fixing Mp: select wgcd to be the freq at which PM is sufficient, and KP = 1/|G(jwgcd)| • For fixing speed: from td, tr, tp, or ts requirement, find out wn, let wgcd = wn and choose KP as above
clear all; n=[0 0 40]; d=[1 2 0]; figure(1); clf; margin(n,d); %proportional control design: figure(1); hold on; grid; V=axis; Mp = 10/100; zeta = sqrt((log(Mp))^2/(pi^2+(log(Mp))^2)); PMd = zeta * 100 + 3; semilogx(V(1:2), [PMd-180 PMd-180],':r'); %get desired w_gc x=ginput(1); w_gcd = x(1); KP = 1/abs(polyval(n,j*w_gcd)/polyval(d,j*w_gcd)); figure(2); margin(KP*n,d); figure(3); stepchar(KP*n, d+KP*n);
n=[1]; d=[1/5/50 1/5+1/50 1 0]; figure(1); clf; margin(n,d); %proportional control design: figure(1); hold on; grid; V=axis; Mp = 10/100; zeta = sqrt((log(Mp))^2/(pi^2+(log(Mp))^2)); PMd = zeta * 100 + 3; semilogx(V(1:2), [PMd-180 PMd-180],':r'); %get desired w_gc x=ginput(1); w_gcd = x(1); Kp = 1/abs(polyval(n,j*w_gcd)/polyval(d,j*w_gcd)); Kv = Kp*n(1)/d(3); ess=0.01; Kvd=1/ess; z = w_gcd/5; p = z/(Kvd/Kv); ngc = conv(n, Kp*[1 z]); dgc = conv(d, [1 p]); figure(1); hold on; margin(ngc,dgc); [ncl,dcl]=feedback(ngc,dgc,1,1); figure(2); step(ncl,dcl); grid; figure(3); margin(ncl*1.414,dcl); grid;
KP/KD 20*log(KP) Place wgcd here
PD Control • C(s)=KP + KDs = KP(1+TDs) • For fixing wgcd and PMd • Compute wgcd from tr, td, etc • Compute PMd from Mp • Compute f = PMd – PM@wgcd • Compute TD = tan(f)/wgcd • KP = 1/sqrt(1+Td2wgcd2)/abs(G(jwgcd)) • KD=KPTD
Example C(s) G(s) Want: maximum overshoot <= 10% rise time <= 0.3 sec
Could be a little less n=[0 0 1]; d=[0.02 0.3 1 0]; figure(1); clf; margin(n,d); Mp = 10/100; zeta = sqrt((log(Mp))^2/(pi^2+(log(Mp))^2)); PMd = zeta * 100 + 3; tr = 0.3; w_n=1.8/tr; w_gcd = w_n; PM = angle(polyval(n,j*w_gcd)/polyval(d,j*w_gcd)); phi = PMd*pi/180-PM; Td = tan(phi)/w_gcd; KP = 1/abs(polyval(n,j*w_gcd)/polyval(d,j*w_gcd)); KP = KP/sqrt(1+Td^2*w_gcd^2); KD=KP*Td; ngc = conv(n, [KD KP]); figure(2); margin(ngc,d); figure(3); stepchar(ngc, d+ngc);
Variation • Restricted to using KP = 1 • Meet Mp requirement • Find wgc and PM • Find PMd • Let f = PMd – PM + (a few degrees) • Compute TD = tan(f)/wgcd • KP = 1; KD=KPTD
n=[0 0 5]; d=[0.02 0.3 1 0]; figure(1); clf; margin(n,d); Mp = 10/100; zeta = sqrt((log(Mp))^2/(pi^2+(log(Mp))^2)); PMd = zeta * 100 + 10; [GM,PM,wgc,wpc]=margin(n,d); phi = (PMd-PM)*pi/180; Td = tan(phi)/wgc; KP=1; KD=KP*Td; ngc = conv(n, [KD KP]); figure(2); margin(ngc,d); figure(3); stepchar(ngc, d+ngc);
n=[0 0 5]; d=[0.02 0.3 1 0]; figure(1); clf; margin(n,d); Mp = 10/100; zeta = sqrt((log(Mp))^2/(pi^2+(log(Mp))^2)); PMd = zeta * 100 + 18; [GM,PM,wgc,wpc]=margin(n,d); phi = (PMd-PM)*pi/180; Td = tan(phi)/wgc; Kp=1; Kd=Kp*Td; ngc = conv(n, [Kd Kp]); figure(2); margin(ngc,d); figure(3); stepchar(ngc, d+ngc);