| | Goal | Key Actions | Tips & Tricks | |----------|----------|----------------|-------------------| | A. Model Extraction | Convert the given description into ((\mathbfA,\mathbfB,\mathbfC,\mathbfD)). | ⢠Write the differential equations. ⢠Use the controllable canonical form (or observable, if convenient). ⢠Verify by reâderiving the original transfer function. | Shortcut : If a transfer function (G(s)=\fracN(s)D(s)) is given, the controllable canonical form is immediateâjust place the coefficients of (D(s)) in the (\mathbfA) matrix and the numerator coefficients in (\mathbfB). | | B. Controllability/Observability Test | Ensure you can place poles anywhere you like (or know the limitations). | ⢠Compute the controllability matrix (\mathcalC= [\mathbfB;\mathbfAB;\dots;\mathbfA^n-1\mathbfB]). ⢠Compute the observability matrix (\mathcalO= [\mathbfC^\top;\mathbfA^\top\mathbfC^\top;\dots;(\mathbfA^n-1)^\top\mathbfC^\top]^\top). ⢠Check rank = (n). | Quick test : If the system is in a canonical form, controllability (or observability) is guaranteed by construction. | | C. Desired Pole Set | Translate performance specs (e.g., 2 % overshoot, 0.5 s settling) into a target pole location. | ⢠Use the standard secondâorder formulas: (\zeta = -\ln(0.02)/\sqrt\pi^2+(\ln0.02)^2), ( \omega_n = 4/( \zeta , T_s )). ⢠For higherâorder systems, append extra âfastâ poles (e.g., at (-10\omega_n)). | Rule of thumb : Keep extra poles at least 5â10Ă farther left than the dominant pair to avoid affecting transient response. | | D. StateâFeedback Gain (\mathbfK) | Solve (\mathbfA cl= \mathbfA-\mathbfB\mathbfK) so that its eigenvalues = desired poles. | ⢠Pole placement : Use Ackermannâs formula (handâcalc) or place / acker in MATLAB. ⢠LQR : Choose (Q,R) to shape the closedâloop poles indirectly. | Numerical sanity check : After computing (\mathbfK), reâcalculate the eigenvalues of (\mathbfA cl) to confirm they match. | | E. OutputâFeedback (if required) | Design an observer or a compensator if only the output is measurable. | ⢠Build the observer gain (\mathbfL) using a dual poleâplacement problem on (\mathbfA^\top, \mathbfC^\top). ⢠Form the combined system (\beginbmatrix\mathbfA-\mathbfB\mathbfK & \mathbfB\mathbfK\ \mathbf0 & \mathbfA-\mathbfL\mathbfC\endbmatrix). | Tip : Separate the design of (\mathbfK) and (\mathbfL) unless you need a dynamic output feedback that couples them. | | F. Simulation & Validation | Prove that the design meets the specs. | ⢠Write a simple ode45 script or use lsim for the closedâloop system. ⢠Plot step response, Bode plot, and control effort.\n⢠Compare settling time, overshoot, steadyâstate error with the targets. | Debug : If the response deviates, revisit pole locations, verify model linearization, or check for hidden algebraic loops. | 4ď¸âŁ Common Pitfalls (and How to Dodge Them) | Mistake | Why It Happens | Fix | |------------|-------------------|--------| | Skipping the controllability check | Assuming the textbook guarantees it. | Always run the rank test; a singular (\mathcalC) means you must redesign the state variables (e.g., via a similarity transform). | | Misâreading the sign convention | Using (s = +\sigma + j\omega) vs. the standard (s = -\sigma + j\omega). | Write the characteristic equation explicitly: (\det(s\mathbfI - (\mathbfA-\mathbfB\mathbfK)) = 0). | | Placing extra poles too close | Overâconstraining the system, leading to high gain and actuator saturation. | Keep ânonâdominantâ poles at least a factor of 5â10 left of the dominant pair. | | Forgetting the feedâforward term (if the problem asks for zero steadyâstate error). | Only designing (\mathbfK) yields a typeâ0 system. | Compute the reference gain (N = 1/(\mathbfC( -\mathbfA + \mathbfB\mathbfK)^-1\mathbfB)). | | Using MATLABâs place without scaling | Numerical illâconditioning for highâorder systems. | Preâscale the state matrix or use lqr / care for a more robust solution. | 5ď¸âŁ Quick MATLAB CheatâSheet (CopyâPaste Friendly) % ------------------------------------------------- % Problem 28 â StateâSpace Design (Kuo 8th Ed.) % ------------------------------------------------- % 1. Define the plant A = [...]; % <-- fill in from the problem statement B = [...]; C = [...]; D = 0; % usually zero for control design
% 7. Simulate step response sys_cl = ss(Acl,B, C, D); figure; step(sys_cl); title('Closedâloop step response (stateâfeedback)'); | | Goal | Key Actions | Tips
% 2. Check controllability & observability Co = ctrb(A,B); % controllability matrix Ob = obsv(A,C); % observability matrix assert(rank(Co)==size(A,1), 'System not controllable'); assert(rank(Ob)==size(A,1), 'System not observable'); ⢠Use the controllable canonical form (or observable,
% 3. Desired poles (example: 2% overshoot, 0.5 s Ts) zeta = 0.78; % approx. for 2% overshoot wn = 4/(zeta*0.5); % natural frequency p1 = -zeta*wn + 1i*wn*sqrt(1-zeta^2); p2 = conj(p1); extraPoles = -10*wn*ones(1,size(A,1)-2); % fast poles desiredPoles = [p1 p2 extraPoles]; % or: K = acker(A
% 5. (Optional) Design observer gain L % Desired observer poles are usually 5â10Ă faster: obsPoles = 5*desiredPoles; L = place(A',C',obsPoles)'; % dual problem
% 4. Compute stateâfeedback gain K K = place(A,B,desiredPoles); % or: K = acker(A,B,desiredPoles);