Home  |  Classical Feedback Control   | 

Please refer to the beginning of this document for copyright information and use permissions.

4.2.3  Example of a system having a loop response with a Bode step

In this section an example of the implementation of a loop response with a Bode step is considered. This response has been used as a prototype for several practical control systems.

Example 1. The plant

is a double integrator with an n.p. lag. The compensator function C(s) is a ratio of a 3rd-order to a 4th-order polynomials (the compensator design methods are described in the next chapter). The loop transfer function

is plotted in Fig. 4.3 with

    n = conv([11 55 110 36], [-1 10]);
    d = conv([1 7.7 34 97 83 0 0], [1 10]);
    w = logspace(-1,1,200);

Fig. 4.3  Open-loop frequency response

Fig. 4.4  L-plane Nyquist diagram

The crossover frequency  = 1 rad/sec. The L-plane Nyquist diagram is plotted in Fig. 4.4 with

    [mag, phase] = bode(n,d,w);
    plot(phase,20*log10(mag),'w', -180,0,'wo'); grid

The slope of the loop gain at lower frequencies approaches -12 dB/oct and the loop phase shift approaches -180°. This response provides larger feedback at lower frequencies than the response in Fig. 4.2(b) following the stability margin boundary in Fig. 4.2(a) but violates the stability margin at these frequencies. To ensure stability and good transient responses to large commands and disturbances (which saturate the actuator), the loop compensation must be nonlinear. Such compensation is described in the end of this example and explained at length in Chapters 10, 11, and 13.

The closed-loop transfer function M = n/g where g = n + d is plotted in Fig. 4.5 with

    n = conv([0 0 0 1],n);
    g = n + d;
    w = logspace(-1,1,200);

(The zeros are added to n to make the dimensions of vectors n and d equal so that MATLAB can calculate g.)

Fig. 4.5  Closed-loop frequency response

Fig. 4.6  Closed-loop step-response

As should be expected, the closed-loop step-response plotted by step(n,g) and shown in Fig. 4.6 has a large, 55% overshoot. The overshoot can be reduced by introduction of a prefilter R(s).

The command-to-output response of the system with the prefilter should be close to the response of a linear phase (Bessel, or Gaussian) filter. This can be achieved by using a notch prefilter


The notch is tuned to 0.9 with the gain at this frequency equal to 20 log(1/2) = - 6 dB. In the case considered,  = 1. The prefilter response is plotted in Fig. 4.7 with

    nr = [1 1 0.81]; dr = [1 2 0.81]; bode(nr, dr, w)

and the closed-loop response with the prefilter is plotted in Fig. 4.8 with

    nc = conv(nr, n); gc = conv(dr, g);
    bode(nc, gc, w)

The phase response in Fig. 4.8 has a lesser curvature than that in Fig. 4.5. We might therefore expect a better transient response. Indeed, the overshoot is only 7% on the step-response for the closed-loop system with the prefilter plotted by step(nc,gc) and shown in Fig. 4.8; the rise time and the settling time remain approximately the same.

Fig. 4.7  Prefilter frequency response

Fig. 4.8  Closed-loop response of
the system with a notch prefilter

Fig. 4.9  Closed-loop step-response
of the system with a notch prefilter

Fig. 4.10  Closed-loop step-response
of the system with the prefilter
composed of two notches

The gain response in Fig. 4.8 still has a hump at  = 1 which contributes to the phase nonlinearity and to the overshoot. By compensating for the hump with a small, 1.6 dB additional notch with

    nr2 = [1 0.5 1]; dr2 = [1 0.6 1];
    nc2 = conv(nr2, nc); gc2 = conv(dr2, gc);
    bode(nc2, gc2, w)
    step(nc2, gc2)

one can further reduce the overshoot as shown in Fig. 4.10. A still better and more economical equalization can be devised and implemented.

The equalization becomes less accurate when the plant parameters deviate from the nominal. The plant gain variations can be specified by a multiplier k. The effects of variations in k can be calculated as follows:

    n = conv([11 55 110 36], [-1,10]);
    d = conv([1 7.7 34 97 83 0], [1 10]);
    k = 1; n = conv(n, k);                 % specify k
    w = logspace(-1,1,200);
    bode(n, d, w)                          % open-loop response
    [mag, phase] = bode(n, d, w);
    plot(phase, 20*log10(mag))             % Nyquist diagram
    n = conv([0 0 1], n);
    g = n + d;
    bode(n, g, w)                          % closed-loop response
    nr = [1 1 0.81]; dr = [1 2 0.81];
    bode(nr, dr, w)                  % prefilter notch response
    nc = conv(nr, n); gc = conv(dr, g);
    bode(nc, gc, w)          % closed-loop response with notch
    nr2 = [1 0.5 1]; dr2 = [1 0.6 1];
    bode(nr2 ,dr2, w)                % second notch response
    nc2 = conv(nr2, nc); gc2 = conv(dr2, gc);
    bode(nc2, gc2, w)        % closed-loop response with notches
    step(nc2, gc2)                   % step response with notches

For ±20% variations in the plant gain coefficient, the step-responses are shown in Fig. 4.11. The overshoot remains less than 10%.

(a) (b)

Fig. 4.11  Closed-loop step-responses of the system with notches,
(a) for k = 1.2 and k = 0.8 and (b) for k = 2.5

When the plant's gain coefficient increases to 2.5, i.e., the plant's gain increases by 8 dB from the nominal thus reducing the gain stability margin to only 2 dB, the transient response becomes oscillatory as shown in Fig. 4.11(b); still, this is not a catastrophic failure of the controller.

With  40% variations in k the overshoot remains under 20%, and with k  3.2 (i.e., with 20 log k = 10.1 > x) the output starts growing exponentially; the proof (simulation) is left as a recommended student exercise. It is also recommended to make simulations with small (say, 5%) variations in the coefficients of the polynomials in the compensator transfer function and to observe that these changes do not critically affect the system performance, and therefore, the coefficients can be appropriately rounded.

To ensure that large-amplitude commands which overload the actuator will not trigger self-oscillation, and to improve the transient responses for large-amplitude commands, the compensation can be made nonlinear. This is done by, first, splitting the compensator transfer function C(s) into the sum of two functions C1(s) and C2(s) which represent transfer functions of two parallel paths, the first path being dominant at lower frequencies; and second, by placing a saturation link with an appropriate threshold in front of the first path's linear link. The related theory and design methods are described in Chapters 10, 11, and 13. The transfer functions of the paths can be found as

C1 = ao/(s + p1)    and    C2 = [C(s- C1(s)]

where p1 is the lowest pole of C(s) (p1 can be 0), and ao is its residue. For finding p1 and ao , the MATLAB function residue or the function bointegr from the Bode Step toolbox in Appendix 14 can be used.

Example 2. A dc motor rotates a spacecraft radiometer antenna whose moment of inertia J = 0.027 Nm2. is the antenna angle, s is the antenna angular velocity, and U is the voltage applied to the motor. The motor winding resistance R = 2. The motor constant (the torque-to-current ratio) k = 0.7 Nm/A. The torque is k(U - EB)/R where the back electromotive force EB = ks. The angle  = [k(U - EB)/R]/(s2J).

From the latter two equations, the voltage-to-angle transfer function


If the loop n.p. lag equals that in Example 1, and if the loop response needs to be the same as in Example 1, the compensator and driver transfer function should be C(s) from Example 1 multiplied by


The MATLAB code for this transfer function's numerator and denominator is

    k = 0.7; res = 2; ja = 0.027; a = k*k/(res*ja);
    nc1 = conv(res*ja/k,[1 a]); dc1 = [1 0];

Example 3. To use the response in Example 1 as a prototype for a control system with crossover frequency fb = 12 Hz, s must be replaced by s/ (where  = 12 × 2  75.4) in the transfer functions for the loop and for the prefilter. The numerator ns and the denominator ds of the loop transfer function can be found with

    n = conv([11 55 110 36], [-1,10]); wb = 75.4;
    d = conv([1 7.7 34 97 83 0 0], [1 10]);
    format short e;  [ns, ds] = lp2lp(n, d, wb)

and the numerators and denominators of the two notch transfer functions of the prefilter with

    nr = [1 1 0.81]; dr = [1 2 0.81];
    [nrs, drs] = lp2lp(nr, dr, wb)
    nr2 = [1 0.5 1]; dr2 = [1 0.6 1];
    [nr2s, dr2s] = lp2lp(nr2, dr2, wb)

The results will be displayed with single precision (format short e), although the calculations will be performed and the numbers stored with double precision.

(Notice that if we apply the lp2lp transform not to the entire loop but only to the compensator and retain 1/s2 as the plant, the new compensator transfer function must be multiplied by .)

Example 4. We can now write an example of a design specification for a time-invariable controller for a plant with a prescribed nominal transfer function Pn, with high-frequency flexible modes, and with hard saturation in the actuator:

The specifications on the overshoot guarantee minimum performance for the worst case of maximum plant parameter variations, and also assure that most systems in production (with the plant parameters close to the nominal) have much better performance than the worst case.

From Example 1 it is seen that these specifications can be met when the stability margins are 30° and 10 dB. If smaller stability margins are chosen, the sensitivity in the frequency neighborhood of fb increases and the variations in k cause larger deviations of the transient response from the nominal.

Home  |  Classical Feedback Control   |