Stability of negative feedback amplifiers#
In the previous sections, we studied the design of the low-pass and high-pass cut-off frequencies of the servo function. We have not yet investigated whether the feedback amplifier is stable. A system is called stable if all system poles have a negative real part. If there are single poles with a real part equal to zero, the system is called marginally stable. Since it is our intention is to build stable amplifiers (not oscillators), the ideal transfer of an amplifier will have all its poles in the left half plane. With the loop gain reference selected properly, the stability with respect to the ideal gain is thus governed by the servo function. Hence, in order to investigate the stability of a feedback amplifier, we need to investigate whether the servo function has all its poles in the left half plane.
There are several ways to do this, and they will be discussed briefly in the following sections. For further study on these topics, the reader is referred to control theory, for which references will be given.
Routh-Hurwitz criterion
The quote
taken from Truxal [47] introduces the Routh test, which will be presented in section Routh–Hurwitz criterion. The Routh test states that the number of solutions of a polynomial with a positive real part equals the number of sign changes in the first column of the Routh array. A brief and clear description of the method is also given by Dorf [48].
Nyquist criterion
The Nyquist [45] criterion states that the number of poles in the right half plane of a feedback system is equal to the number of clockwise encirclements around the point \(-1\) in the polar plot of the loop gain.
This criterion can also be used for systems that incorporate delay lines. The Nyquist theorem will be discussed in section Nyquist criterion. For a detailed treatment of this criterion, the reader is referred to literature on control theory.
Root locus analysis
The root locus technique was introduced by Evans [49]. It is a graphical method for finding the poles of the servo functions based on the poles and the zeros of the loop transfer function. It will briefly be discussed in section Root locus analysis.
Routh–Hurwitz criterion#
The Routh–Hurwitz stability criterion is a mathematical test that is a necessary and sufficient condition for the stability of a linear time-invariant system. The Routh test was proposed in 1876 by the English mathematician Edward John Routh. The German mathematician Adolf Hurwitz independently proposed an equivalent procedure in 1895, but the Routh test is more efficient.
The Routh test takes the coefficients of the characteristic polynomial of a system as input to determine the Routh array. The number of sign changes in the first column of the Routh array is equal to the number of solutions of the characteristic polynomial that have a positive real part. The procedure is extensively discussed in the references to control theory. In this section, we will only briefly describe the procedure.
The Routh test has been implemented in SLICAP.
The procedure#
The Routh array is determined as follows:
The polynomial \(D(s)\) under test is
\[a_{n}s^{n}+a_{n-1}s^{n-1}+a_{n-2}s^{n-2}+\cdots+a_{1}s+a_{0}.\]The coefficients of this polynomial are arranged in the first two rows of the Routh array. The number of rows of this array equals \(n+1\), and the number of columns is \(m,\) with \(m=\frac{n}{2}\) if \(n\) is odd and \(m=\frac{n+1}{2}\) if \(n\) is even, \(n\) being the order of the polynomial
\[\begin{split}\begin{array} [c]{c} s^{n}\\ s^{n-1}\\ \cdot\\ \cdot\\ \cdot\\ \cdot\\ s^{0} \end{array} \left[ \begin{array} [c]{ccccc} a_{n} & a_{n-2} & a_{n-4} & \cdot & \cdot\\ a_{n-1} & a_{n-3} & a_{n-5} & \cdot & \cdot\\ c_{3,1} & c_{2,2} & \cdot & \cdot & c_{3,m}\\ c_{4,1} & c_{5,1} & \cdot & \cdot & c_{4,m}\\ \cdot & \cdot & \cdot & \cdot & \cdot\\ \cdot & \cdot & \cdot & \cdot & \cdot\\ c_{n,1} & c_{n,1} & \cdot & \cdot & c_{n,m} \end{array} \right] .\end{split}\]The remaining coefficients \(c_{i,j}\) are obtained as follows:
\[\begin{split}c_{i,j}=-\frac{1}{c_{i-1,j}}\det\left[ \begin{array} [c]{cc} c_{i-2,j} & c_{i-2,j+1}\\ c_{i-1,j} & c_{i-1,j+1} \end{array} \right] .\end{split}\]The number of solutions of the polynomial that have a positive real part equals the number of sign changes in the first column of the Routh array. There are two special cases; see Dorf [48] for details:
If the entry in the first column of a row becomes \(0\) while other entries are nonzero, the first entry will be replaced with \(\varepsilon\). This allows the array to be completed. After completion of the array, we let \(\varepsilon\) approach zero to check for stability
If a complete row of zeros is detected, the auxiliary polynomial of the above row is differentiated and its coefficients are used as entries. The auxiliary polynomial \(P_{i}\) of the \(i-th\) row is
\[P_{i}=\sum_{j=1}^{m}R_{i,j}s^{n+3-i-2j}.\]A row of zeros indicates instability or marginal instability.
In the following example, we will investigate the stability of the
transimpedance amplifier from example ex-transimpedanceOPA627
with the
aid of the Routh array.
Example
1htmlPage('Routh array')
2i1.setGainType('gain')
3i1.setDataType('denom')
4denomLaplace = i1.execute().denom
5text2html('The characteristic equation of the gain is:')
6eqn2html('charPoly', denomLaplace)
7text2html('The Routh array of this poly is:')
8eqn2html('RA', routh(denomLaplace))
The html page with the Routh array \(RA\) is shown in Fig. 361. It shows that the transimpedance amplifier is stable: all numbers in the first column of the array are positive.
Fig. 361 Result of the execution of the SLiCAP-MATLAB script.#
Design application of the Routh array#
Because it can be evaluated symbolically, the Routh array can be used as a design tool.
Nyquist criterion#
The Routh array provides a clear method for the determination of the stability of a feedback system, but it requires the transfer of a system to be written as a rational function of the Laplace variable \(s\). This is not possible for systems that include delay elements. The Laplace transfer of a delay \(\tau\) is \(\exp(-s\tau),\) which cannot be written as a rational function. The Nyquist stability criterion (see: [45]) is applicable for all types of loop gain functions. The Nyquist stability criterion states that
if the loop gain \(-L(s)\) is plotted as a contour in the complex \(L\) plane: \(\operatorname{Re}\{-L(s)\}\) versus \(\operatorname{Im}\{-L(s)\}\), with \(s=j\omega\) varying along the contour from \(0\) to \(j\infty\) and from \(-j\infty\) to \(0\), where:
\(n\) is the number of clockwise encirclements of the point \(\left( -1,0\right) \) in the complex \(L\) plane by the contour
\(p\) is the number of poles of the servo function \(S(s)=\frac{-L(s)}{1-L(s)}\) inside the right half of the \(s\) plane
\(q\) is the number of poles of the loop gain \(L(s)\) inside the right half of the \(s\) plane
Please notice that we use \(-L\) throughout this section about the Nyquist criterion. This is because the Nyquist criterion has been derived with Black’s feedback model. That model includes a \(-1\) transfer in the loop that is not included in the asymptotic gain model.
In almost all cases, the loop gain itself will be a stable transfer and the Nyquist stability criterion simplifies to \(n=p\). Nyquist stability analysis is a graphical technique. The contour plot is usually only constructed for positive values of \(j\omega\). For negative values, the contour can be completed with a complex conjugated curve. Respective examples of so-called Nyquist plots for an unstable and a stable system are shown in Fig. 362.
Fig. 362 Examples of Nyquist plots: A: Instable feedback system: clockwise encirclement of (-1,0). B: Stable feedback system: counterclockwise encirclement of (-1,0).#
Gain and phase margin#
It is common practice to use the gain margin and the phase margin as measures for the margin in the loop gain function before instability of the servo function occurs. Fig. 363 illustrates the definition of these terms:
The gain margin is the magnitude of \(1+L\) if the loop gain \(\left( -L\right) \) has a phase shift of \(180\) degrees.
The phase margin is the difference between \(180\) degrees and the phase shift of the loop gain at a frequency where the magnitude of the loop gain equals unity.
However, single-frequency gain and phase margin descriptions do not completely characterize the dynamic behavior of feedback systems. First of all, such a description is incomplete for higher order systems. Secondly, we are interested in the stability of the gain (source-to-load transfer) and the loop gain only has a well defined relationship with the gain if the asymptotic gain equals the ideal gain.
In the following example, we will demonstrate the use of SLICAP for making Nyquist plots.
Example
Lines 113 to 119 of the transimpedance.m script generate the Nyquist plot of the transimpedance amplifier and display it on the html page. This page is shown in Fig. 364. The Nyquist plot in SLICAP only works with data type LAPLACE and gain type LOOPGAIN. It shows a polar plot of \(-L\).
1htmlPage('Nyquist plot')
2i1.setGainType('loopgain')
3i1.setDataType('laplace')
4result = i1.execute()
5result.laplace = -result.laplace
6figNyquist = plotSweep('Nyquist', 'Nyquist plot: polar plot of $-L$', result, 1e6, 10e6, 100, axisType='polar', funcType='mag', show=True)
7fig2html(figNyquist, 800)
Fig. 364 clearly shows the very small phase margin of the uncompensated transimpedance amplifier. This corresponds with the peaking in the magnitude characteristic of the servo function, as shown in Fig. 355.
Fig. 364 SLiCAP simulation results.#
Root locus analysis#
The root locus method is a graphical method for determining the poles of the servo function. It was introduced by Evans in 1948 \cite[-1cm]{Evans1948} [50] and is also often used in control engineering practice. The root locus shows how the poles of a system move around in the complex plane as a parameter is varied. In negative feedback systems, the DC loop gain is used as a variable for the root locus. For electronic amplifiers, varying the DC loop gain might be interesting for analytical purposes, but we will see that it is not the best method for maneuvering poles into their desired positions. However, the root locus technique is very useful for finding the poles of the servo function from the poles and zeros of the loop gain and the DC value of the loop gain, and it can be helpful in understanding frequency compensation, which will be discussed in Chapter Frequency compensation.
In this section, we will briefly discuss the rules for drawing the root locus plots. For complete proofs of the rules, the reader is referred to literature on control theory.
A general expression of a loop transfer function with poles and zero has been given in ((150)). The general expression for the servo function \(S(s)\) can thus be obtained as
The poles of the servo function are the solutions of the denominator:
which can be written as
If \(\ell=0\) and \(k=0\), the gain factor \(\frac{b_{\ell}}{a_{k}}\) equals the DC loop gain \(L_{DC}\). From ((153)), we can easily see that the poles of the servo function depend on:
The \(n\) poles\ \(p_{i}\) of the loop gain
The \(m\) zeros \(z_{j}\) of the loop gain
The gain factor \(\frac{b_{\ell}}{a_{k}}\), or the DC loop gain \(L_{DC}\) if both \(\ell\) and \(k\) are zero.
The root locus is the path in the complex plane as it is traced by the poles when the gain factor \(\frac{b_{\ell}}{a_{k}}\) is varied. The construction rules for the root loci are given without proof:
The number of branches of the root locus is equal to the number of poles.
Poles are either real or complex conjugates. As a consequence, the root locus is symmetrical with respect to the real axis.
The root locus starts \((\frac{b_{\ell}}{a_{k}}=0)\) in the poles of \(L(s).\)
The root locus ends \((\frac{b_{\ell}}{a_{k}}=\infty)\) on the zeros of \(L(s);\) if the number of zeros \(m\) is smaller than the number of poles \(n\), \(n-m\) zeros are supposed to be at infinity.
Parts of the real axis left to an odd number of poles and zeros are part of the root locus.
If there are \(n\) poles and \(m\) zeros, \(n-m\) branches go to infinity, the angle with the positive real axis of the asymptotes of these branches is given by
\[\theta_{i}=\frac{2i+1}{n-m}\pi,\qquad i=0,1,2,...\]These asymptotes intersect the real axis \((\sigma-axis)\) at: \(\sigma=\frac{\sum_{k=1}^{n}p_{k}-\sum_{i=1}^{m}z_{i}}{n-m}.\)
If a branch of the real axis lies between two poles or two zeros, the point where the poles leave or arrive at the real axis are called the break away points. The value of \(s\) at these break away points follows from
\[\frac{d}{ds}L(s)=0.\]The tangents to the loci at the break away points are equally spaced over \(2\pi.\) Two poles break away at \(\pm\frac{\pi}{2},\) three poles at \(\pi\ \)and \(\pm\frac{\pi}{3},\) four poles break away at \(\pm\frac{\pi}{4},\) and \(\pm\frac{3\pi}{4},\) etc.
Each point of the root locus satisfies the condition: \(\left\vert L(s)\right\vert =1\) and \(\arg\left( L(s)\right) =k2\pi;\) \(k=0,\pm1,\pm2,...\)
Below, we will show how to generate root-locus plots with SLICAP.
The circuit that we will use for drawing the root locus plots is shown in Fig. 365. It is a unity-gain voltage follower with a voltage-controlled voltage source as the controller. This controlled source will be selected as the loop gain reference, hence the loop gain equals the gain of the controller. With each root locus plot, we will plot the poles and the zeros of the loop gain and the poles of the servo function while stepping the DC loop gain or, if there are any poles or zeros in the origin,\ the gain factor \(\frac{b_{\ell}}{a_{k}}\).
The SLICAP netlist of the circuit from Fig. 365 with a single-pole transfer is listed below. The transfer of the voltage-controlled voltage source E1 will be changed for the other root locus plots depicted in Fig. 366 to Fig. 373
The script RL1_0.py plots the root locus of the single-pole circuit. Similar scripts have been used to generate the root locus plots from Fig. 367 to Fig. 373. Lines 1-19 of the scripts check the circuit and define the source, the load and the loop gain reference.
1RL1_0
2* file: RL1_0.cir
3V1 1 0 0
4E1 2 0 1 2 {A_0/(1-s/2/pi/p_1)}
5.param A_0=100 p_1=-10
6.end
1#!/usr/bin/env python3
2# -*- coding: utf-8 -*-
3"""
4Created on Thu Mar 18 12:11:37 2021
5
6@author: anton
7"""
8from SLiCAP import *
9
10fileName = 'RL1_0'
11#prj = initProject(fileName)
12i1 = instruction()
13i1.setCircuit(fileName + '.cir')
14htmlPage('Root locus plot: ', fileName)
15i1.setSource('V1')
16i1.setDetector('V_2')
17i1.setLGref('E1')
18i1.setSimType('numeric')
19i1.setGainType('loopgain')
Lines 20 and 21 evaluate the poles and the zeros of the loop gain.
1i1.setDataType('pz')
2pzL = i1.execute()
Lines 22 to 30 evaluate the poles of the servo function.
1i1.setGainType('servo')
2i1.setDataType('poles')
3i1.stepOn()
4i1.setStepVar('A_0')
5i1.setStepStart(1)
6i1.setStepStop(100)
7i1.setStepMethod('lin')
8i1.setStepNum(100)
9plsS = i1.execute()
Lines 31 and 32 generate the root locus plot and place it on the html page.
1figPZ = plotPZ(fileName, fileName, [plsS, pzL], xscale='k', xmin=-2, xmax=0, ymin=-1, ymax=1, show=True)
2fig2html(figPZ, 500)
The root-locus plot generated by this script is shown in Fig. 366. The loop gain of the circuit is:
with \(p_{1}=-10\) Hz. The root-locus has one branch (rule 1), it starts at \(p_{1},\) (rule 3) and it ends at \(-\infty\) (rule 4). The part of the real axis, left from \(p_{1},\) belongs to the root locus (rule 5), and there is one asymptote with an angle of \(180\) degrees (rule 6). The root-locus in Fig. 366 is drawn for \(A_{0}=0\cdots100\).
Fig. 367 shows the root locus if a zero is located right from the pole: \(z_{1}=-10\)Hz, \(p_{1}=-100\)Hz. The root locus starts on the pole and ends on the zero, while the part of the real axis between the pole and the zero belongs to the root locus (rule 5). The root-locus in Fig. 367 is drawn for \(A_{0}=0\cdots3\).
Fig. 368 shows the root locus if a zero is located left from the pole: \(p_{1}=-10\)Hz, \(z_{1}=-100\)Hz.
The root locus starts on the pole and ends on the zero, while the part of the real axis between the pole and the zero belongs to the root locus (rule 5). The root-locus in Fig. 368 is drawn for \(A_{0}=0\cdots100\).
Fig. 369 shows the root locus for a loop gain with two real negative poles: \(p_{1}=-10\)Hz, \(p_{2}=-40\)Hz. The poles of the servo function move along two asymptotes with an angle of \(\frac{\pi}{2}\) and \(\frac{3\pi}{2}\) towards infinity(rule 6). The asymptotes intersect with the real axis at \(-25\)Hz (rule 7) and the poles leave the real axis at \(-25\)Hz (rule 8). The expression for the loop gain \(L(s)\) with two poles is
The derivative \(\frac{d}{ds}L(s)\) is obtained as
The solution of \(\frac{d}{ds}L(s)=0\) is
Fig. 369 shows the root-locus from \(A_{0}=0\cdots100\).
Fig. 370 shows the root locus for a loop gain with two real negative poles: \(p_{1}=-10\)Hz, \(p_{2}=-40\)Hz and one zero, left from the poles: \(z_{1}=-100\). One of the poles moves to the zero and the other to infinity along an asymptote that has an angle of \(\pi\) with respect to the positive real axis. The part of the real axis between the poles and the part of the real axis left from the zero belongs to the root locus. The frequency at which the poles leave and arrive at the real axis can be found according to rule 8. The loop gain \(L(s)\) with two poles and one zero can be written as
The derivative \(\frac{d}{ds}L(s)\) is obtained as
The arrival points are found as the solutions of
from which we obtain
Hence, the poles leave the axis at \(\ -25.84\)Hz and arrive at \(-174.2\)Hz. It can be shown that when they leave the real axis, the poles move along a circular path around the zero. The center of that circle is \(z_{1}\) and the radius \(\sqrt{\left( p_{2}-z_{1}\right) \left( p_{1}-z_{1}\right) }\).
Fig. 371 shows an example of a root locus of a third order system. This loop gain function \(L(s)\) of this system has one pole in the origin and two complex conjugated poles:
Fig. 371 shows the root locus with \(A_{0}\) stepping from zero to \(2.5\times10^{8}\). According to rule 4, the poles move to infinity along three asymptotes. The angles of the asymptotes with the positive \(x\) axis are \(\frac{\pi}{3}\), \(\pi\) and \(\frac{2\pi}{3}\) (rule 6). The pole in the origin moves along the \(x\) axis (rule 5). The asymptotes intersect the real axis at \(-33.33\)Hz (rule 7).
Fig. 372 shows the root locus of this system after one zero at \(-75\)Hz has been added to \(L(s)\):
The number of asymptotes now reduces to two, and the intersection point of the asymptotes and the real axis is found at \(-12.5\)Hz. The pole in the origin moves towards the zero.
Fig. 373 shows the root locus of this system after another real zero at \(-100\)Hz has been added to \(L(s)\):
The number of asymptotes now reduces to one: two poles will end on the zero and another will move towards infinity. The part of the real axis between the two zeros does not belong to the root locus.
Non-observable and non-controllable states#
Unstable behavior cannot always be detected though determination of a time domain response. The only way to ensure detection of instability is to solve the characteristic equation of a network.
The solutions of this equation are the solutions of the homogeneous differential equation of the network and yield all the poles of the network, including those associated with non-observable or non-controllable state variables.
Determination of instability with the aid of a time domain simulation does not disclose instability if, for the given excitations and responses, the state variables associated with poles in the right half plane are not controllable or not observable.
We will elucidate the terms ‘observable’ and ‘controllable’ below.
Non-controllable state variable#
Definition
A non-controllable state variable of a network is one that cannot be changed by excitation(s) applied to the input(s) of a network.
Consider, for example, the network from Fig. 374. It shows a passive network with an input port and an output port. The output voltage of the network is the capacitor voltage, which is the only state variable of the network. Although this voltage can be observed at the output port, it cannot be controlled by a current or by a voltage applied to the input port. In other words, the transfer from a current or voltage applied to the input port to the voltage across the capacitor is zero. Hence, in this network, the state variable is not controllable.
If we determine the poles and the zeros of the transfer parameters of this network, we would find one pole and one zero with equal frequencies. The pole is associated with the independent capacitor voltage. Because it cannot be controlled, it is canceled by a zero.
Non-observable state variable#
Definition
A non-observable state variable of a network is one that cannot be observed at the output(s) of the network.
Let us now consider the network from Fig. 375. It shows a passive network with an input port and an output port. There exists a nonzero transfer from a voltage or from a current applied to the input port to the voltage across the capacitor. Hence, the voltage across the capacitor is controllable. However, the transfer from the capacitor voltage to the voltage or current in the output is zero. So, in this network, the state variable is not observable and called a non-observable state.
If we were to determine the poles and the zeros of the transfer parameters of this network, we would find one pole and one zero with equal frequencies. The pole is associated with the independent capacitor voltage. Because it cannot be observed, it is canceled by a zero.
Design conclusions#
At this stage, the design of adequate high-pass and low-pass cut-off frequencies of negative feedback amplifiers had our interest. The DC gain of the controller can be used as a design parameter for high-pass cut-off frequency, while the gain-poles product can be used as a design parameter for the low-pass cut-off frequency.
The Nyquist stability analysis and the root locus technique show that negative feedback may yield unstable behavior. The root locus technique in particular indicates that feedback circuits with a loop gain with more than two poles may become unstable.
It also shows that the number of asymptotes can be decreased by inserting zeros into the loop. This changes the coefficients of the denominator of the servo function. The Routh array method could be used to investigate the conditions under which stability is achieved. In Chapter Frequency compensation, we will discuss frequency compensation techniques that can be applied to achieve the desired frequency response of the amplifier without affecting the high-pass and low-pass cut-off frequencies that have been designed at this stage.