SERIES COMPENSATION DESIGNUSING THE ROOT LOCUS\251 2004 J.M. Redwood.<Text-field layout="Heading 2" style="Heading 2">Synopsis</Text-field> This worksheet illustrates a method for designing a series-compensation network for a simple servo. The method involves altering the root locus of a servo by suiting the network's poles and zeros in the complex plane so that the locus passes through dominant poles that produce the desired response. The compensated servo's responses to standard inputs are then compared with those of the uncompensated servo. Finally, the network is designed using standard components and the compensated servo's performance is checked using these components.<Text-field layout="Heading 2" style="Heading 2">License</Text-field> This worksheet and the package of procedures entitled "Bode2", may be used, adapted, or copied, provided that copyright is acknowledged and the whole of this License section is included in any copies, or adaptations, of the worksheet, or of the package. This worksheet and the "Bode2" package may be used for educational purposes free of charge. Commercial users are not required to pay a license fee for this worksheet, or for the "Bode2" package. Instead, they are requested to make a donation to Cancer Research UK, National Office, 61 Lincoln's Inn Fields, LONDON, WC2A 3PX, UK. The donations line telephone number is +44 (0)20 7009 8820; the Fax number is +44 (0)20 7269 3100; and the E-mail address is "customerservices@cancer.org.uk". The size of donation is left to the user's discretion. This worksheet and associated "Bode2" package of procedures are offered without warranty of any kind whatsoever.<Text-field layout="Heading 2" style="Heading 2">Resources</Text-field> This worksheet uses significant computer resources. If necessary, the user should separate the worksheet into two parts, comprising everything down to and including the subsection "Poles and Zeros" in the "Compensated Servo" section, and then that subsection together with the remainder. Copying the diagrams to a different file, and then deleting them from the worksheet may also help to free resources.<Text-field layout="Heading 2" style="Heading 2">Introduction</Text-field> The servo examined in this worksheet rotated a turntable about its vertical axis to a position determined by a remote synchro-control transmitter. The turntable carried a load firmly fixed to it with its center of mass on the turntable's vertical axis. The servo comprised a torque motor driving the table and a synchro control transformer through 3:1 reduction gearing. The table drove another synchro control transformer through 36:1 step-up gearing. The error between this 36-speed synchro control transformer and the remote synchro control transmitter was fed through a pre-amplifier, phase discrimination circuits and a series compensation network to a power amplifier and thence to the torque motor's field windings. The torque motor had a permanent-magnet armature and the torque it produced was proportional to the current in the field windings. Without compensation, the servo was unstable. A series compensation network was used to stabilize the servo and its design is illustrated in this worksheet.<Text-field layout="Heading 2" style="Heading 2">Performance Required</Text-field> The servo was required to have a fast response to a change of position input and to follow a constant speed input closely, which could contain noise at 16 cycles per second (cps) and above. The maximum constant speed to be followed was 30 rpm. Experience suggested that a servo with the following parameters would produce satisfactory results:a. Velocity error coefficient = 80 radians/second,b. Undamped natural frequency = 30 radians/second, andc. Damping ratio = 0.55. Since radians are dimensionless, radians/second will be expressed as 1/sec in the remainder of this worksheet. The servo loop is illustrated in the sketch below.<Text-field layout="Heading 2" style="Heading 2">Block Diagram</Text-field>TUZOV3RLVWI8b2I8Uj1NRExDZE5OWmpqOnRzOkg6PHVaYXRRSj08T2BMb1xcanl5eXlRdGZ5c2hDO0NYTENUSmNEWG9YdXF4UUt1UGVEQUlCdmF1VW9oQ29XVHFmSGNnckt1bklSSkV0S3lCO2VCYW1Xaz1GRnNidU11WF1EZHVVPl1FcltSakdEUGFlREF0Y1lkQktDRD9XWV9FbE9yRE9iWk9iWGl0R0tDeElWSVNEQFdETG9jcnliY1NzR1VHcENTaW13a2FldXVzd1lkbmNXaHVXaFNVT3lXWGtXSHVXTXdTSXllWUlJeVdYPE1naktEQVlSXztWOkFiO1NCQFtDUjtIWj1yOjpaUmh3RWFfS0dlUm9mVHZxUFBebHZoYk9walhyTEl5b3Bdb0hkU3ZxYl9ySnlgRGFwclBtZ29pTVlcXGBpd2ZpalNZZmNJW0tPb1k/cV5gYWBId0tBbTxxeXd5bVFfYjtXZ1ZZeWtpX0VPZW5wYm9ucURBbHFgd0tRYGVHeXE+Z1NwYl1PXFxOZ2l5T3N5SXhmd3RbeWBed3hOX2RAZ19GZ2RXSGxJb11VUF50R3BNVmRtV14+aFtDUWpSXmxZX2w/YHNnUG49b2RYb2lOYXU9d1tGX3BDZmpgUF9sUHM6WGRqcG9GZmhtdm5MT3hTUWxWSHVXYXRudnByVnJNZnM7P2Z4P2h5UXZtWHlwP1xcbWZ4W3lwQ1F5YXdlWEZxbXFweEBbb0h5dUBiUW9pdU9jTnBpcnF5RVB5RWhqTUd5YUlnPlB1Vml5S1F2W1FkdEdkbVZcXF1RdWJHdzp5XVF3XXl4bl5oZ3dwYD9hdl5pYml5altPYFxceGpmWW1vV2RtP3lhVnlwWFxcaHdjZml5c052Qkd0ZEZlX2BiZ2hjS1BwPz93UWlhXFxwYWhXcmVecUpfWzthdFlGbVt4YVhQeUB4Yl9BdVhYYmlweFdOYXdPeWN5djxmd3RIa3RGZldJX0RodjxHdz5xZUtZbVN2Zl53X1VPZ1pxd29QY2pOaGZwdndJb3BxdT9GZURxZmM/bXJIcFlWcVd4bkFmYT9oc09vXWxvZFRgdztnZmZedDp4cGdQeENGbVE/dVphdXhAc0NuanNJaEZhaExOcUtnb0lWZ0xgZE1xYExnYFk+ZEFOcVJGb2xgZVdmaz9IaUxmcGlvaWdeXWl5bU1mak9IdHVxWk1Jbj15b0dZbnc/dFd3b2dPdHZfYUZJZGZHXnlZXkZXd14/XFxlaW5cXEdcXGBZeFNncVtuZW5OZFZhaG1Hc1B5Ynd2ZWxHbVxcaXVLaWBrYFpFeGVGQWllSGJ5SFxcX0d1bFd3P3FgVmldXT9yPU9gb05dRVZyXFxPZ05fYW9IZFxcQFtHWG5oVnRCYWhLQW9PYWtFQW9haXZXQF9GSGlqaHBLR2toUXFSaWdGaXNLX1o9WWdOdm1kZ3RSTnJJaGM+UVxcP2FjRXhmbD5nXml4YmFqWD5dY3hsXFxWXz1uXV1vZnRAZ0lQYldvdkQ/ZktfZ0ZvbXFxa3JwdU5WZXhnY3BxXVVpcUhId3FReWA/aUZ4XWVxa0Vxc3R3cmVQZUhZaWNpa0F4ZldQclRRZmFIb1N3Z1hpXFxteXF2QHZJP3lDd2hVPnFlPnhYV3FAeHFBRm15QFtVSFxcUW95YFduR3lqXFxWZ2d3YFp4Z0RYc1o/bHNIamFvXkR5b14+aHBAZkRRcHlwbUNhZlFnY3hWdlFHeGhGaGNpW2BJbz5mbXB4b05AYGRpbkFRdU14bUJgYXRub1JvXFxbVmNdYGF5T1xcbG9vdldxckZcXG9mZ15GaWxZcG1wbk1IaGdpYmVfdkx3b3h4cEFxbWdwXFxzYG1LSGVteXNXX2hcXFZyRV9yWnd2eFhuaEldYVBtXFxebHRGeW94YmBYYlhXbXZmdnFXa0RmdHJmc1R4eFlQb1l3ckl3dW95a2JOdnJBcFB5XFxiWW1AZnhoUHVgSW14YWJFcWpqUWdqWGtRR3llRm93UHlTSF1xeGtPVnN1XnRRb25faXNOR2FqSXdHcHd3P2tcXFFgdUZrTHhcXFFvXUt5XmFnZWBmcE1paT1Jc3FoXl1AZ0ZwZ3h4cUt4bnlJdlZjUGlZPEFkRUlzS3NTWG13TmNyQT1oXT9CPWtCRnVCYGFXXmdZWUd0RGFJdmVFVWNmVFNFVlNzcm1UTXNiPkFySFVJZVd1Yz9jWUtESWFjaT1ZdFd4TXViaztob1F1akdYd2tjQEVHVEtmcnlVRWFVRndiY2NXZW9SZ1tXZU91dk9iallCPWtCRjs9XltSOjo6XFxzeVFqY3V5T1RvZ1RQZUV4amxUQnBSc3l1Vj1vXlhObklTWG1RQUB5WXVrZE1PUHBSY0h4RmBUaV1RV11vSl1TQDxQWj1CPj06Ojo6cm9rVnhJUnVHQlFbUl5pc2lrOjtSTEVkTUNkZT9EUj80Pg==<Text-field layout="Heading 3" style="Heading 3">Definitions</Text-field> R is the reference input (angular position). C is the controlled output (angular position). e = R - C is the error between the controlled output and the reference input. C/R is the closed loop response of the controlled output to the reference input.N.B. The servo is assumed to be linear throughout the operating region and the principle of super-position therefore applies.<Text-field layout="Heading 3" style="Heading 3">Initialization</Text-field> The "Bode2" package will be required for plotting attenuation and phase margin diagrams. It is also necessary to call the "plots" package and to change the imaginary unit to j, instead of I. More than 2 or 3 decimal places imply much greater precision than is warranted. However, about 5 decimal places are needed to view the results of calculations satisfactorily, so "displayprecision" is set to 5 (computation occurs at the precision set by "Digits").restart:interface(imaginaryunit=j): interface(displayprecision=5):with(plots): with(Bode2): Some settings are now defined for the plots produced in this worksheet.txt := axesfont=[TIMES,ROMAN,12], labelfont=[TIMES,ROMAN,12], titlefont=[TIMES,ROMAN,12]:plotset := txt, colour=[blue,red,black], linestyle=[SOLID,SOLID,DOT]:<Text-field layout="Heading 3" style="Heading 3">Transfer Functions shown in the Block Diagram</Text-field>a. Pre-amplifier (including gains of synchros and error-phase-discriminating circuits).K1; K1 has units of volts/radian.b. Compensation NetworkGc;Gc has units of volts/volt.c. Power AmplifierK2; K2 has the units of volt/volt.d. Motor and Load The transfer function may be approximated as Gm \273 NiMqJiIiIkYkKiomJSJLRzYjJSJiR0YkJSJzR0YkLCYqKiUiSkdGJCYlIlJHNiMlImZHRiQqJkYmRiQmRic2IyUkdGF1R0YkISIiRipGJEYkRiRGJEYkLCYqKCYlIkxHRjBGJEYuRjZGKkYkRiRGJEYkRiRGNg== = NiMqJiIiIkYkKiomJSJLRzYjJSJiR0YkJSJzR0YkLCYqJiYlIlRHNiMlIm1HRiRGKkYkRiRGJEYkRiQsJiomJkYuNiMlImZHRiRGKkYkRiRGJEYkRiQhIiI=. This assumes that the combined motor and load friction is relatively small, and if represented by q, a coefficient of viscous friction, then NiMqKCUicUciIiImJSJSRzYjJSJmR0YlKiYmJSJLRzYjJSJiR0YlJkYsNiMlJHRhdUdGJSEiIg== << 1. NiMmJSJURzYjJSJtRw== is the motor and load's mechanical time constant, and NiMmJSJURzYjJSJmRw== is the motor field's time constant. Gm := 1/(K[b]*s*(T[m]*s + 1)*(T[f]*s + 1)); Gm has the units of (radian/sec/volt = 1/volt.sec)<Text-field layout="Heading 2" style="Heading 2">Motor & Load Time Constants</Text-field><Text-field layout="Heading 3" style="Heading 3">Data</Text-field> The combined mass of the load and table was 1.5 kg with a radius of gyration given by NiMvKiQlImtHIiIjKiYiI3MiIiIqJCUjbW1HRiZGKQ==. The moment of inertia of the 3:1 reduction gearing between the load-table and the motor referred to the motor shaft was NiMqKCInK0ZSIiIiJSJnR0YlJSNtbUciIiM=. The 36-speed synchro control transformer's moment of inertia was NiMqKCIlU3YiIiIlImdHRiUlI21tRyIiIw== The moment of inertia of the 36-speed synchro control transformer's gearing referred to the load-table's drive shaft was NiMqKCInNS9YIiIiJSJnR0YlJSNtbUciIiM=. The moment of inertia of the motor was NiMqKC0lJkZsb2F0RzYkIiInISIkIiIiJSNvekdGKSUlaW5jaEciIiM=. The motor's torque constant was NiMvJiUiS0c2IyUkdGF1RyoqLSUmRmxvYXRHNiQiI28hIiIiIiIlJG96ZkdGLiUlaW5jaEdGLiUkYW1wR0Yt and its back-emf constant was NiMvJiUiS0c2IyUiYkcqKCIiJiIiIiUldm9sdEdGKiomIiUrNUYqJSRycG1HRiohIiI=. The overall gain K1 of the pre-amplifier, including the synchro chain, was 10 volts/radian. The gain K2 of the power amplifier was 2 volt/volt. The motor's field resistance was 0.84 ohms and its inductance was 0.1 mH. All the above data are converted below to SI units.<Text-field layout="Heading 3" style="Heading 3">Inertias</Text-field> The moments of inertia of the 36-speed and 1-speed synchros, the 36-speed synchro's gearing and the load-table, each referred to the load-table's drive shaft wereJ_synchros := convert( 7540.*(36^2 + 1),'units',g*mm^2,kg*m^2);J_synchrogears := convert(450410.,'units',g*mm^2,kg*m^2);J_load := convert(1.5*72,'units',kg*mm^2,kg*m^2); The total moment of inertia referred to the load-table's drive shaft wasJ_total := J_synchros + J_synchrogears + J_load; The moment of inertia of the gearing between the motor and the load-table's drive shaft wasJ_gears := convert(392700,'units',g*mm^2,kg*m^2); The combined total moment of inertia at the load-table's drive shaft referred to the motor and that of the gearing between the motor and load drive shaft wasJ_combined := J_total*(1/3)^2 + J_gears;<Text-field layout="Heading 3" style="Heading 3">Mechanical and Motor Field Time Constants</Text-field>R[m] := 0.84;K[b] := convert(5/1000,'units',volt/rpm,volt/(radian/s) );K[tau] := convert(6.8,'units','ounceforce*inch/A','N*m/A'); The inertias and the above are combined into the mechanical time constant, NiMmJSJURzYjJSJtRw==, of the motor and load.T[m] := R[m]*J_combined/(K[b]*K[tau]);evalf(T[m]); The motor field's parameters are combined into the shunt field constant NiMmJSJURzYjJSJmRw==L[m] := 0.1*10^(-3);T[f] := L[m]/R[m]; Because NiMmJSJURzYjJSJmRw== is very small compared with NiMmJSJURzYjJSJtRw==, it can be ignored initially, thus the motor and load transfer function isGm := '1/(K[b]*s*(T[m]*s + 1))';Gm := evalf(%);<Text-field layout="Heading 2" style="Heading 2">Loop Transfer Function</Text-field>By definition, the loop transfer function is NiMvKiYlIkNHIiIiJShlcHNpbG9uRyEiIiUjS0dH. Setting the compensation network's transfer function to unity and ignoring the motor field time constant NiMmJSJURzYjJSJmRw==, the loop transfer function for the uncompensated servo is given by,KG := K1*K2*1*Gm; Before considering compensation, the gains should be set to small values and the uncompensated servo's response should be examined. Setting K1 = K2 = 1, the loop transfer function, is given byKG_small := eval(KG,{K1=1,K2=1}); Inserting the normal gain settings K1 = 10 and K2 =2,KG := eval(KG,{K1=10,K2=2});<Text-field layout="Heading 2" style="Heading 2">Uncompensated Servo</Text-field> The closed loop transfer function for the uncompensated servo with gains set to small values is `C/R uncomp small gains` := (KG_small/(1+KG_small)); The poles of this uncompensated servo are obtained thus,poles := [solve(denom(normal(`C/R uncomp small gains`)))]; The poles result in the following damping ratio and undamped natural frequency,eq1 := sqrt(1-zeta^2)/zeta = abs( Im(poles[2])/Re(poles[2]) ):eq2 := zeta*omega[n] = abs( Re(poles[2]) ):solve({eq1,eq2}); These indicate an unstable servo - sluggish and very lightly damped. A faster response is not possible without increasing the gains, but to do so would make the servo even more unstable. The root locus of the compensated servo's open-loop transfer function is now plotted. The poles of the uncompensated servo's closed loop transfer function with small values of gain are superimposed on this root locus.r := rootlocus(KG,s,0..1,colour=cyan,symbolsize=18):p := plot(map([Re,Im],poles),0..-15,-15..15,txt,style=point,symbol=cross,symbolsize=18,colour=red):display([r,p],labels=[\302,\301],axes=normal,labelfont=[SYMBOL],title="Root Locus of\134n Uncompensated Open-Loop Transfer Function\134n with Poles of Closed Loop Transfer Function\134n at Small Gains Superimposed",scaling=constrained);
To achieve the required parameters of NiMvJiUmb21lZ2FHNiMlIm5HKiYiI0kiIiIlJHNlY0chIiI= and NiMvJSV6ZXRhRyomIiNiIiIiIiQrIiEiIg==, the root locus needs to be moved to the left along the real axis, so that the dominant poles can be at a radius of 30 from the origin and make an angle of NiMtJSdhcmNjb3NHNiMsJComIiNiIiIiIiQrIiEiIkYr = 56.6 degrees with the negative real axis. These parameters would yield a fast, adequately damped transient performance of the closed loop servo. Zeros to the left of the locus pull it to the left, and a lag-lead compensation network was used to provide a zero for this purpose. The closed loop transfer function for the uncompensated servo with its normal gain settings will be needed later and is `C/R uncomp` := (KG/(1+KG));<Text-field layout="Heading 2" style="Heading 2">Compensation Network</Text-field><Text-field layout="Heading 3" style="Heading 3">Finding the Compensation Network's Constants</Text-field>1. The transfer function for a lag-lead network is NiMvJSNHY0cqMCUjS2NHIiIiJSViZXRhR0YnJSZhbHBoYUchIiIsJiomJiUiVEc2I0YnRiclInNHRidGJ0YnRidGJywmKiZGLUYnRilGKkYnRidGJ0YqLCYqJiZGLjYjIiIjRidGMEYnRidGJ0YnRicsJiooRihGJ0Y1RidGMEYnRidGJ0YnRio= = NiMqLCUjS2NHIiIiLCYlInNHRiUqJkYlRiUmJSJURzYjRiUhIiJGJUYlLCZGJ0YlKiYlJmFscGhhR0YlRilGLEYlRiwsJkYnRiUqJkYlRiUmRio2IyIiI0YsRiVGJSwmRidGJSomRiVGJSomJSViZXRhR0YlRjJGJUYsRiVGLA==, in which NiMyIiIiJSViZXRhRw==, NiMyIiIiJSZhbHBoYUc= and NiMwJSViZXRhRyUmYWxwaGFH. If NiMmJSJURzYjIiIj is chosen sufficiently large, the lag network's transfer function (the second part of Gc) will have unit magnitude and zero phase at the dominant poles. The first part of Gc, NiMqJiwmJSJzRyIiIiomRiZGJiYlIlRHNiNGJiEiIkYmRiYsJkYlRiYqJiUmYWxwaGFHRiZGKEYrRiZGKw==, (the lead network's transfer function) must contribute a phase change such that the root loci of the lead-compensated servo pass through dominant poles that yield the desired damping ratio and undamped natural frequency. Having chosen NiMmJSJURzYjIiIi, the phase change required from the lead network determines the value of NiMlJmFscGhhRw==. It is often convenient to choose NiMmJSJURzYjIiIi equal to the motor and load mechanical time constant NiMmJSJURzYjJSJtRw==, so that the NiM3IywmKiYmJSJURzYjIiIiRiklInNHRilGKUYpRik= term (approximately) cancels the NiM3IywmKiYmJSJURzYjJSJtRyIiIiUic0dGKkYqRipGKg== term in the uncompensated servo's loop transfer function. However, any reasonable choice can be made.2. With the lead network's constants determined, Kc can be obtained by equating to unity the magnitude of the transfer function for the combination of lead-network and uncompensated servo at the desired dominant poles. 3. As NiNmKjYjJSJ0RzciNiQlKW9wZXJhdG9yRyUmYXJyb3dHNiIlKWluZmluaXR5R0YqRipGKg==, the compensated servo's transfer function tends toward the value of Kv, the velocity error coefficient. Since the required value of Kv is specified, and both a and Kc are known, b can be found from this limiting value of the transfer function. 4. It remains to find sufficiently large NiMmJSJURzYjIiIj from the condition, mentioned at paragraph 1 above, that the lag network's transfer function must have approximately unit magnitude and zero phase at the desired dominant poles, <Text-field layout="Heading 3" style="Heading 3">Lead Angle Required</Text-field> The required dominant poles are NiMvJSZzX2RvbUcsJiomJSV6ZXRhRyIiIiYlJm9tZWdhRzYjJSJuR0YoISIiKiglImpHRihGKUYoLSUlc3FydEc2IywmRihGKCokRiciIiNGLUYoRig= and its conjugate, where NiQvJiUmb21lZ2FHNiMlIm5HIiNJLyUlemV0YUcqJiIjYiIiIiIkKyIhIiI=. Considering the positive pole, s_dom := -zeta*omega[n]+j*omega[n]*sqrt(1-zeta^2);s_dom := simplify( eval(s_dom,{omega[n] = 30, zeta = 55/100}) ); The phase of the uncompensated servo at the dominant poles is obtained by evaluating the loop transfer function's phase at that pole thusphase := argument(eval(KG,s=s_dom)); Hence, the phase change to be contributed by the lead network is given bylead_angle := Pi - phase;evalf(convert(%,degrees)); That is, the lead part of the compensation network has to contribute 64 degrees to the phase of the compensated servo's loop transfer function for its root locus to pass through the chosen dominant pole. This is represented in the sketch below by the angle BPA.<Text-field layout="Heading 3" style="Heading 3">Sketch of Dominant Pole on Root Locus</Text-field>TUZOV3RLVWI8b2I8Uj1NRExDZE5OWmpqOnRzOkg6PHVaYXRRSj08T2BMb1xcanl5eXlRdGZ5c2hTO21STENUSmNEWG9YdXNYRll2QEVEP0lCdm1YSEFGUUNSU1FCQ1tiXFxDVktlZkZjRzw/aG5bdHNBQ3hBQ05HYz5fckBNZjo9dGpJREhNZltfWDt5QlJFVFc/Z0w9VHJPUj1VQmNbVWZdZF1haFB3WGE9eD9DdnJlaW1XaGlpc3ZJUkFDWVBPVl9reHR5ZnFTeVhZdVNHVXNrc1ZPUnZbaExrUlJDVj5HREA9RVttVW9rZmU7RkZXVTw9ZXBZUkZJaXNnYlttdUA/SG13ZkprUllNVlJHRT5HaWZHRkZZd1JPR3hTcmpLeTtbYkNhY1Z1V3hZRUZnZG1VRkY/SDxBQ11bY2prdUFZaDxLcnZHWEhHRU5teXldc05ld3VFaFtRSEFVZWpfZGJNaERZUlFLd1VRSHdhdXJXeGB5WEZJR3hdc15tZVFPV3ZhRU1JZVVxVWBZSD07RU5teEtPaVVvc3Jfd3VbUk9zVmR5d1xcO2VfY0NkV0dld2hYeVNgXXV4dVlxYUd3PVRpc1R1YXhiXXdReXRJeVVjc2RlU3lYeUdFY3RQc2dnWVNpP3ZsY3c9WXdheWJ3P1Z0Z3lBeUloP1VGcXZXc3NYeXRrV0R4Z3h4T1k7aVZGd3lIQUJNR1hPd3hfUWJFQVl0U1hBeWl0SVV5aVNEb2RDYWhSR2VbZWVPP2NTR2Zwb3lkTVZsa3k+RWdpSVlGdXZ5T0Rld3NzXWM9YVN4Z3dbT3RMP2VgW1leY2RTRVZAY1ZaW2NlQ0ZGcXNZYVRWbXZUQVVeV0hHa1ZLcVRdPWVfW2Jzb2k8T0JEeVdsWUM/W0hgUUNtT1NpRUhLYXRES1R4bUJMY3NCYVRBcVZYXUhgYUlPR2hSZ0VGcVZsQVNHP1dGTUZdPUZGYVhcXD9XRlljPkV1U01GbWNlYktETVFWUmdIQEdna1tzWUVjTFFJR0d3RD1TbltkaV9WYz1TXFw/R0ZVUmJvRTxTaDxhUl1tQ3VTc05rck8/ZGJtWFJXeXFrZGxdZmBvRmRjSFRXUkFlVl9NQ21fYj5VWHJPYmBnZFljd0VtY01fc09rYmNFSEZlSVJpdkBFSEBFRkR5Y2pjdEs/ZUxLclJlQlttSG47VG1LRW1FRElBRUZBZmQ7Q01pZEprcktzY05hY0hPc11HZW9PYkZLZ0BBSE9PUk53RWtXZmA/ZVdPYmpjeTtfc11FZUBTREdRUztNc0lBUlxcR0ZhS1c8R3d5WVhQQ3NWRWRpc2Z0Y1lkV2VeTVdGU2g+P0g+SWdoTWRzQ0lMdXJra1Q7TWZTQVZSb0I9QUU/P0d5a1JcXE9iRklXXW1WS11DXUNUW2tWPUdWVGtSVUFXOmlmaVtzRktETzt1dT13XmlIQ2FCXUFJQ1d0OldTWT1kU1VWUk9FPUFZdEtnWllIPW9jRFdHeWdlPFxcbD9BUEdsalNFWTxZVWpJTT1Ea0BpbFJsUjs9bWVcXEtNUXhQZEtUWHRLRVFVSFU8bUo/SW1kUVJGVHB1XFxQXFxYbkBFTXlhVHF0dmxkS2BuWjxBeUxmXFxLb2lGcXJWVmZySGtURmZAb250SF1NSGVlPmNzaXRSSGJPP1xcYFhfW15beXlpY1dnbE9ubj9vPGZgXFxYbkA/bU9uams+XFxAeXVLX3dsWV1XV2xeX19AaHVScGlgSHJqZmBASGVseWhmUWF3T29VVmZAd1tYdnV1P3deaWBDQV1NcWJGX25UTmxidl1dP15GP19LZ1o9SF9bRnRSQWtVQVxcWHhgcU5bTGZjPUhmRl5qU2ZjTj94RVFkVE5sYkheXWdcXD5IZ2tec1RWck5Jbl1WaGxWZDtPbmNRY0JWXFxzWXNrTm1WQF9QaXRpSHI+V1xcWFdsRklvRkhqPldcXFFJZD1uZlFGaFVOcm1xZlZXZkg+bUBWckZfY29XYFxcVlxcUnFpbU5zSWlkSkhiP05hZFdpQ3dmPFZnTFhwVV9oYGhmcHBzamlrYWhkckZkbU5lc2llUEh4V2ZoPmFmRWFqPmdda2ZidldmWEZgc2ddaEBwUHBkeFd4YV5qb0ZjcEZzclh4cnFydk5ncGhnc1l3PFh5W2FzSD5tVmdxRWltVl9vWG5bZGZnVVFocllvR3Bfd3BdTWFfTD9tPUlxc1hoQWh5U3F3RnBod3htcl9dT2ZhV0hxUl9yVkdiQHZrYXljWl5zYU5bPGFwb15qY1hfQlZ4YFlaQlZuTnlhPmFma2ZobWlzd0hyTmliUmB1QXZrQXdrSlZqdEl4a29dbWB0cmZpVnlxeWlaXmFcXGlHYFNQW0hPZm5vZmhwZ0xHeTtwWj9Qa0BWclJfc1pweTphYm1XeUBnbVxceWRVSGhtP1tNaHlKXm09eXFWeWFvUWx4aF93eWR5QHZCdndXaV1ueGJLVmBzcXh5PnVZR2VjQXd1eVp1SXdydnh5SGlLZnBucF1qdl1GZ3NLcGc7R2ZseGldYHlEWHRNX2FAYWpRSHd1SVpzcHU8aV9xeXlWWW11YWhESGFTUGhGZFxcQXZIZ3hhZ3lZd3V4bXdXT3NRV3dpX1N4bUJTPUVbXVpbX2pLOjo6WlJYbURheUNuaUN3ZDxhXnB3YHNdOkZjP29jPm9vPD9mPDM8 The sketch above illustrates the vectors of the lead network on the complex plane. The point "P" represents the positive dominant pole that is to be located at NiM3JCwkKiYiI0wiIiIiIiMhIiJGKSoqJSJqR0YnIiIqRidGKEYpLSUlc3FydEc2IyIjSkYn. The point "A" represents the zero produced by the lead network at NiM3JCwkKiYiIiJGJiYlIlRHNiNGJiEiIkYqKiYlImpHRiYiIiFGJg== and the point "B" represents the pole produced by it at NiM3JCwkKiYlJmFscGhhRyIiIiYlIlRHNiNGJyEiIkYrKiYlImpHRiciIiFGJw==. Since NiMvJSNBT0csJComIiIiRicmJSJURzYjRichIiJGKw==, BO can be found by plane trigonometry, thus yielding NiMvJSZhbHBoYUcqJiUjQk9HIiIiJSNBT0chIiI=.<Text-field layout="Heading 3" style="_cstyle336"><Font bold="true" foreground="[0,0,0]" size="12" underline="false">a</Font></Text-field> Arbitrarily choosing NiMvJiUiVEc2IyIiIiZGJTYjJSJtRw==, T[1] := T[m];AO := 1/T[1]:BPA := lead_angle:AP := abs((s_dom) - (-1/T[1] + j*0) ):NP := Im(s_dom):PAN := arcsin(NP/AP):NPA := Pi/2 - PAN:BPN := BPA - NPA:BN := NP*tan(BPN):BO := BN + NO:NO := -Re(s_dom):alpha := BO/AO: Henceevalf(alpha);<Text-field layout="Heading 3" style="Heading 3">Kc</Text-field>At the dominant pole, the magnitude of the transfer function for the combined lead network and uncompensated servo should be unity.eq1 := abs( 'Kc*((s+1/T[1])/(s + alpha/T[1]) )'* KG ) = 1;eq1 := eval(eq1,s=(s_dom) ):sol := solve(eq1,{Kc}) assuming Kc>0:evalf(sol);assign(sol);<Text-field layout="Heading 3" style="_cstyle337"><Font bold="true" foreground="[0,0,0]" size="12" underline="false">b</Font></Text-field> The value of b for the lag portion of the compensation circuit, NiMqJiwmJSJzRyIiIiomRiZGJiYlIlRHNiMiIiMhIiJGJkYmLCZGJUYmKiZGJkYmKiYlJWJldGFHRiZGKEYmRixGJkYs, is easily obtained from the compensated servo's required value of velocity error coefficient, Kv = 80/sec. Gc := 'Kc*( (s + 1/T[1])/(s + alpha/T[1]) ) * ( (s + 1/T[2])/(s + 1/(beta*T[2]) ) )'; Since the velocity error coefficient, Kv, is given by the limit of the open-loop transfer function as NiNmKjYjJSJ0RzciNiQlKW9wZXJhdG9yRyUmYXJyb3dHNiIlKWluZmluaXR5R0YqRipGKg==, using the final value theorem of the Laplace transform,eq1 := Kv = limit(s*Gc*KG,s=0);eq2 := Kv = 80;sol := solve({eq1,eq2});assign(sol);<Text-field layout="Heading 3" style="2D Comment"><Equation input-equation="T[2];" style="2D Comment">NiMmJSJURzYjIiIj</Equation></Text-field> Next, the value of NiMmJSJURzYjIiIj has to be chosen sufficiently large for the lag part of the compensation network to have approximately unit magnitude and approximately zero phase at the dominant pole.lag := 'eval( (s + 1/T[2])/(s + 1/(beta*T[2])),s=s_dom )';eq1 := 0.99 < abs(lag):eq2 := abs(lag) < 1.01:eq3 := -5*Pi/180 < argument(lag):eq4 := argument(lag) < 0:sol := solve({eq1,eq2,eq3,eq4}) assuming real; Choosing NiMmJSJURzYjIiIj as the next higher integer,T[2] := ceil(op([1,1],sol));<Text-field layout="Heading 2" style="Heading 2">Compensated Servo</Text-field><Text-field layout="Heading 3" style="Heading 3">Poles and Zeros</Text-field> Inserting the term for the motor's shunt field time constant, the compensated servo's loop transfer function isKG_comp := evalf(Gc*KG/(T[f]*s + 1)); The zeros and poles of the compensated servo's closed loop transfer function, C/R, are given by`C/R` := evalf( simplify( KG_comp/(1+KG_comp) ) ):zeros := [solve(numer(normal(`C/R`)))];poles := [solve(denom(normal(`C/R`)))]; Due to very slight rounding errors, the zero of the compensation network at NiMvLCQqJiIiIkYmJiUiVEc2I0YmISIiRiosJC0lJkZsb2F0RzYkIiVyPCEiJEYq/sec has not cancelled the pole caused by the motor time constant at NiMvLCQqJiIiIkYmJiUiVEc2IyUibUchIiJGKywkLSUmRmxvYXRHNiQiJXI8ISIkRis=/sec as intended - though such a small error is unimportant. Much greater discrepancies occur in practice due to the assumptions made about the motor and load transfer function. The effect of the zero not canceling a pole is to increase the order of the servo, and to cause greater overshoots and longer transients than would otherwise be the case. The positive dominant pole is NiMsJi0lJkZsb2F0RzYkIicleWkiISIlISIiKiYlImpHIiIiLUYlNiQiJz4pXCNGKEYsRiw=, which is slightly different from the desired value, namely NiMsJi0lJkZsb2F0RzYkIiVdOyEiIyEiIiomJSJqRyIiIi1GJTYkIidcMEQhIiVGLEYs, and similarly for the conjugates. This results in slight differences between the achieved and desired damping ratio and undamped natural frequency. If these differences are too great, a second lead network could be needed. As it was, the damping ratio and undamped natural frequency of the compensated servo wereeq1 := sqrt(1-zeta^2)/zeta = abs( Im(poles[2])/Re(poles[2]) ):eq2 := zeta*omega[n] = abs( Re(poles[2]) ):solve({eq1,eq2}) ; These are close enough to the required values. The root locus of the compensated servo's open-loop transfer function is now plotted, with the poles and zeros of the compensated servo's closed loop transfer function superimposed. However, the pole caused by the motor's shunt field time constant at NiMvKiYiIiJGJSYlIlRHNiMlImZHISIiIiUrJSk=/sec is of no interest, so the horizontal and vertical ranges for the plot are chosen to confine the plot to the area close to the origin.r := rootlocus(KG_comp,s,0..1,colour=cyan,symbolsize=18):z := plot(map([Re,Im],zeros),0..-18,-26..26,style=point,symbol=circle,symbolsize=18,colour=blue):p := plot(map([Re,Im],poles),0..-18,-26..26,style=point,symbol=cross,symbolsize=18,colour=red):display([r,z,p],labels=[\302,\301],axes=normal,txt,labelfont=[SYMBOL],title="Root Locus of Compensated Open-Loop Transfer Function\134n with Poles and Zeros of Closed Loop Transfer Function Superimposed");unassign('p','z','r'); It should be noted that the scales in the plot above are not equal, but they can be made so by including the "scaling = constrained" option in the "display" command. However, the region close to the origin then becomes very congested. The dominant poles are at NiMsJi0lJkZsb2F0RzYkIicleWkiISIlISIiKiYlImpHIiIiLUYlNiQiJz4pXCNGKEYsRiw= and its conjugate. In addition to the zero at -1.7708 and the almost cancelled pole at -1.7708 due to NiMmJSJURzYjJSJtRw== (the motor and load's mechanical time constant) there is a zero at -0.5 due to NiMmJSJURzYjIiIj that almost cancels a pole at -0.5647, as well as the pole at the origin. The effect of the zero canceling, or almost canceling NiMmJSJURzYjJSJtRw==, is to pull the uncompensated servo's root locus to the left, thus making the servo more stable at higher gains.<Text-field layout="Heading 3" style="Heading 3">Bode Diagrams</Text-field> The loop transfer function and phase margins are now plotted for both the uncompensated and compensated servos.<Text-field layout="Heading 3" style="_cstyle345"><Font bold="true" family="Times New Roman" foreground="[0,0,0]" italic="true" underline="false">Uncompensated Servo</Font></Text-field> Recalling that the open loop transfer function of the uncompensated servo including its motor field time constant isKG/(1 + T[f]*s); The Bode attenuation diagram for the uncompensated servo is plotted thusdisplay(linelog(numer(KG),1,[ ],[evalf(T[m]),T[f]],0.1,10^4),attenlog(KG/(1+T[f]*s),0.1,10^4)); The break point at w = 1.77 is due to NiMmJSJURzYjJSJtRw==, the motor and load's mechanical time constant. The motor's electrical time constant, NiMmJSJURzYjJSJmRw==, is responsible for the break point at w = 0.0001. (The normalizing time constant used in the diagram is T = 1 sec.) The uncompensated servo's phase margin diagram isphaselog(KG/(1+T[f]*s),0.1,10^4); The small phase margin and consequent instability when the uncompensated servo's loop was closed is readily apparent.<Text-field layout="Heading 3" style="Heading 3">Compensated Servo</Text-field> The compensated servo's loop transfer function isnormal(KG_comp); The Bode attenuation diagram for the compensated servo isdisplay( linelog2((508.24221/0.56471/.11905e-3),1,[1.77081,0.50000],
[33.00000,0.17045,1/0.56471,1/.1190e-3],0.01,10^4),
attenlog(KG_comp,0.01,10^4),plot([[2.71,-60],[2.71,0]],0..4,colour=black,linestyle=DOT) ); The effect of the lag network is clearly apparent between NiMvJSZvbWVnYUcqJiIiIkYmKiYlJWJldGFHRiYmJSJURzYjIiIjRiYhIiI= = 0.1766/sec and NiMvJSZvbWVnYUcqJiIiIkYmJiUiVEc2IyIiIyEiIg== = 0.5/sec. (The normalizing time constant used in the diagram is T = 1 sec.) The downward break at NiMvJSZvbWVnYUcqJiUmYWxwaGFHIiIiJiUiVEc2I0YnISIi = 33/sec marks the end of the phase-lead network's influence. The velocity error coefficient, Kv, is given by the intercept of the lowest frequency part of the attenuation with the loop gain axis, and is seen to be 38 dB = 80/sec as specified. The vertical dotted line is drawn through the frequency NiMvLSUmbG9nMTBHNiMqJiUmb21lZ2FHIiIiJSJUR0YpLSUmRmxvYXRHNiQiJHIjISIj when the phase margin = 0, as measured with the cursor on the phase margin diagram. It shows that the gain margin is positive and approximately 49.4 dB. The compensated servo's phase margin diagram isdisplay(phaselog(KG_comp,0.01,10^4),plot([[1.34,0],[1.34,70]],0..4,colour=black,linestyle=DOT)); The vertical dotted line is at gain crossover frequency, NiMvLSUmbG9nMTBHNiMqJiUmb21lZ2FHIiIiJSJUR0YpLSUmRmxvYXRHNiQiJE0iISIj, as measured with the cursor on the attenuation diagram. It shows that the phase margin is about 55 degrees. The phase margin would remain positive across the entire frequency range out to about w = 500/sec, that is NiMvLSUmbG9nMTBHNiMqJiUmb21lZ2FHIiIiJSJUR0YpLSUmRmxvYXRHNiQiJHIjISIj.<Text-field layout="Heading 3" style="Heading 3">Position Step Input</Text-field> The compensated servo's normalized response to a unit step input of angular displacement, together with that of the uncompensated servo, is obtained and plotted below. The Laplace of transforms of the responses, C, to a unit step input of displacement, for both the compensated and uncompensated servo are: with(inttrans):step := `C/R`/s:uncomp_step := `C/R uncomp`/s: The inverse Laplace transforms of these (angular) position responses, C, are then normalized by dividing them by the input's (angular) position, R = 1 radian. step_resp := invlaplace(step,s,t):uncomp_step_resp := invlaplace(simplify(KG/((1+KG)*s)),s,t):plot([step_resp,uncomp_step_resp,1],t=0..3,title="Normalized Response of\n Compensated Servo (blue) & Uncompensated Servo (red)\nto a Unit Step of Input Position",plotset,labels=["t sec","C/R"]
);
Over a shorter time scale the plot appears as,plot([step_resp,uncomp_step_resp,1],t=0..0.5,title="Normalized Response of\n Compensated Servo (blue) & Uncompensated Servo (red)\nto a Unit Step of Input Position",plotset,labels=["t sec","C/R"]
);
The improvement made by the compensation is obvious: the servo is now fast and adequately damped. The maximum overshoot is about 13% and the transient is virtually complete within 0.23 second. There is, however, a long transient tail amounting to an "overshoot" of about 1% until about t = 2.6 seconds. This is the effect of the uncancelled zeros and poles mentioned earlier. The maximum overshoot and the time at which it occurs can be obtained analytically as shown below. Because of rounding errors, the imaginary terms in the step response are not exactly zero, so it is necessary to disregard them as shown.slope := diff(step_resp,t):`Max overshoot at t` := Re(fsolve(slope=0,t,0.05..0.2));`Max overshoot` := eval(Re(step_resp),t=`Max overshoot at t`);unassign('slope');<Text-field layout="Heading 3" style="Heading 3">Velocity Step Input</Text-field> The compensated servo's normalized response to a unit step input of velocity, or ramp input, together with that of the uncompensated servo, is obtained and plotted below. The Laplace of transforms of the responses, C, to a unit step of (angular) velocity input, or ramp input, for both the compensated and uncompensated servo arevel_step := `C/R`/s^2:uncomp_vel_step := `C/R uncomp`/s^2: The inverse Laplace transforms of these (angular) position responses, C, are then normalized by dividing them by the input's (angular) position, R. That is, each C is divided by R = velocity \327 t = 1 radian/sec \327 t sec = t radian, thus, vel_step_resp := invlaplace(vel_step,s,t) / (1*t):uncomp_vel_step_resp := invlaplace(uncomp_vel_step,s,t) / (1*t):plot([vel_step_resp,uncomp_vel_step_resp,1],t=0..3.5,title="Normalized Response of Compensated Servo (blue)\n& Uncompensated Servo (red)\nto Unit Step of Input Velocity",labels=["t sec","C/R"], colour=[blue,red],plotset);
The uncompensated servo's response oscillates violently before following the input. The compensated servo's response is greatly improved with a smooth response and virtually no error after t = 3 sec. Since the input is a constant 1 radian/sec velocity, that means the output follows the input accurately after NiMqJiIiJCIiIiomIiIjRiUlI1BpR0YlISIi radians, or after a little less than 1/2 a revolution. If this is not fast enough, then the undamped natural frequency must be increased, at the expense of greater susceptibility to noise in the input.Return to Observations The response, C, to a unit step of velocity input is simply the normalized response shown above, multiplied by the normalizing factor R = 1 radian/sec \327 t sec, and is shown below.plot([vel_step_resp*(1*t),uncomp_vel_step_resp*(1*t),t], t=0..3.5, title="Response of Compensated Servo (blue)\n& Uncompensated Servo (red)\nto Unit Step of Input Velocity",labels=["t sec","C and R"],
labeldirections=[horizontal,vertical],plotset);
The uncompensated servo's response oscillates about the input, while the compensated servo exhibits the long-tail transient already mentioned. The error between the input, C, and the servo's response, R, is plotted belowplot( 1000*(1*t - vel_step_resp*t), t=0..1,title="Error of Compensated Servo's Response to Unit Step of Velocity", labels=["t sec","1000 \327 Error"],labeldirections=[horizontal,vertical],plotset);
The maximum error is seen to be about 44.4/1000 radians = 2.55 degrees. After about t = 0.3 sec, the error decreases smoothly toward the steady state value of 1/Kv radians. The steady-state error of the output when following the maximum constant speed input of 30 rpm (180 degrees/sec) is given by,`ss error` := evalf(180*degrees/Kv);unassign('`ss error`'); This was considered acceptable.<Text-field layout="Heading 3" style="Heading 3">Closed Loop Frequency Response</Text-field> The closed loop frequency responses for the compensated and uncompensated servos are plotted below.a := attensemilog(`C/R`,0.1,100):uncomp_gain_dB := 20*log10(abs(subs(s=j*omega,`C/R uncomp`))):b := semilogplot(uncomp_gain_dB,omega=0.1..100,colour=red):c := plot([[-1,-3],[2,-3]],linestyle=DOT,colour=black):display([a,b,c],title="Closed Loop Frequency Responses of\nCompensated Servo (blue) & Uncompensated Servo (red)",txt,
labels=["","Gain dB"],PLOT(TEXT([2,5],"wT",ALIGNLEFT,FONT(SYMBOL,10))),
PLOT(TEXT([1.87,5],"log10",ALIGNLEFT,FONT(TIMES,ROMAN,11))));
unassign('a','b','c'):
Using the cursor, it will be seen that the compensation network has reduced the servo's peak magnification (resonance) by a factor of 13.8 (22.8 dB) from 23.8 dB to 0.88 dB; reduced the frequency at which it occurs from 27 to 19/sec; and reduced the bandwidth from 42 to 36/sec. (The normalizing time constant, T, is 1 sec) The bandwidth of the servo, i.e. the frequency range in which the magnitude of the closed loop frequency response, C/R (jw), is greater than -3 dB, can be obtained more accurately by substituting jl = s (where l = wT) in C/R to obtain a function, C/R f, from which the maximum value of C/R (jw) can be found, thus`C/R f` := map(abs, subs(s=j*lambda,`C/R`) ):`C/R max` = maximize(`C/R f`,location,lambda=15..30); The maximize function yields not only the maximum value of C/R (jw) = 1.106 (0.88 dB), but also its location, l = wT = 18.95, whence w = 18.95/sec. Setting C/R f = -3 dB and solving for l yields the cutoff frequency, NiMmJSZvbWVnYUc2IyUiY0c=. In this case, the bandwidth extends from w = 0/sec (constant amplitude input) to the cutoff frequency, so it has the same value as the cutoff frequency.omega[c]*T = fsolve( `C/R f`=10^(-3/20), lambda,0..40);omega[c] := evalf(rhs(%)/(2*Pi)*cps);unassign('lambda','omega[c]'); This bandwidth is small enough to reject most 16 cps noise in the input - any such noise will be attenuated by a factor of about 11 (20.75 dB). As has been seen in the plots of transient response above, it is adequate for good performance. However, if a faster response to a step input of velocity is necessary, the bandwidth would have to be increased, and that would result in poorer rejection of 16 cps noise - indeed, some of it could be reproduced in the servo's output. If the input were to contain noise at frequencies much lower than 16 cps, say 5 - 8 cps, the bandwidth would be excessive, and the noise would appear in the output. It might also cause the motor to overheat, or the amplifiers to saturate, with resulting instability of the servo.Return to Observations<Text-field layout="Heading 2" style="Heading 2">Compensation Network Design</Text-field> The compensation network for the servo used operational amplifiers as shown in the sketch below.TUZOV3RLVWI8b2I8Uj1NRExDZE5OWmpqOnRTPkQ6O1I7VUVlcVtGTl5DX2I7X2RyT3VnaXVlUWxVQHFQPmpLV2FPeHh5Z2ZJd2NzT2JSRmNCWG06aFtUV3dBSW9Idm5BeVxcakh5Xj5uZ3l4YVl4c0daOml0eEdlP0I8X0o+RFs8YDo/Rjs7RkI9Qlo7Uzo7Q0w8TF4+W0xCPE5KO1o6TDpHWlpKSkI8PjtEYjpKOkNaQEpKQkI+O1xcOj9OOkJaPko9QkI+Pko+QjxOSjtaOkw6R1pKXnVpV29aPnFxWXl3bnlheVZNYllhV2xVVD1pRUd3ZFlbWGlZdVhDdl95SG9rVVVzU1dlREdzd2VdWWVVdlVnaWRlSFxcO1NXQ3NZQVlbdVdwQ3NGTVhBdUZ2Q2dndWNqdXZ0W1d1V0d5U1hXX0VuO2lzU1hda2NlXVRmU0RxUXZKZ0VhY3dacUhmcUZUd3dTTWZHW2VtYXl2YXltQXR3SXdLc0h4U2lQdWlJVWhPaVVJcXVXR3dLP0Y7YXl4XXJKaWhYVUZlS2NISUledXg+Z3lUbUlqW0doW0locVZ5V3NRX0NXVUdBX2ZMV0V5cXltc0lQeUh4aWh2SXheeWNeXUl2c1V1YVVMd3lkc1k+V3ZZa2RZaXJUQVdPc1RpRXhzd0Z5X1VTZWZzcWhSeWlkcXh5U2l2ZWJJZUl3YXlRS2NJWVc9UVU8PWRiPUhEcWdWR3dXVXlIVVVsVWg/eVVSPUlJTXNZc1N4VWJzcWVfWXltQVlzYXRpYUZJQ2dsc0Rjd1NKbXJ5c3ZxR0lYVXI/WWlYeWlPa2Rpd3l2SWVQeVRjTWhrb1ZRZXVmWXJSZ1lnY0RNRWRWaVVYO3lcXGl5YEloY2tJaWdUZUVzZl90W1NJVFtFQVNTWGFlRXNYdVdTcHFiWWV4dVFFeXdocXljUVdkdV11VkN0Xj1DVnV3WXFob21ldlN3XWtTZl12cV1kZkd5a1F3RHlFQGV5b0dIb2VGP2F3ZFdXb2V3OmV2O3NHc015T0d4PmV2P2VUU0FVYHdSYD1TblNJXnVIdU12W2V3P0VoTXVSQm1VdXdTbF1TR01kZHljZD15aU94eWl1dl1IbFVyPXFjbXd2VE14aktlZnVnd3lIdUV2XllWW0lWXkVSTFtGVFtFZldlVFloYXliP3lEeHd1ZHl2ck1Vd0dXaWdJaXVpc1FmbWlUeUlWa1VHZkNDbVVyeXNXdEtWYVNpZHFWRXdyU1FmZ1F5aU95XVtCbG1DU2l1cm9STVViSkl2PkdyWFdUQWVkW2lXbEN1RHlzYF93VktpYHlmcUtjST9Ic11oP1l4d2NTYE9CZW9lUVFnZz9kQUdpbGdWYW9lTmF3PVNnaUVyR1lnaGFlW2NSZWdXdGN4YmVldEtjb3dWbTtHQnd1WE95am9HeUt4al92SlVZd3FWWVVEUXdGR2VFX0FldD9YZWlUd0FUQE92T21VaWdCUV9zR3F2bU9YV11VX3llP1l1Q3lTdHVTV1dCWU9pVEtWTz1iRVd4Q2dGUUV1Z1t1WEV5RV9WZGVXSWVVR0FpaklJSHFld11lV3VXXVlCbXdnb3l2aG9EaEVYUT91Q0tEYXVTWF9XX1llaGViSHloV3dkaHVXVktoPUhNTHRqR1hPQXl5bkhraU1xT0xReUxtXkFWVEBOOzxyb1xcTWxYSjo9bDo8QjtbWko+QjxOSjtaOkw6R1paSkpCPD47RGI6SjpDWkBKSkJCPjtcXDo/TjpCWj5KPUJCPj5cXDpLWldXeWdnXFw6R3R1aXlIb2x2b2FZYHZ5UV1QYGBzWG5ZWGV1SXlzWWlVaGdpUVo+RltoX2dWeGpbYF1DUXJeeVxccGh0YnZ3Vld1dUBqdUBoQnFbUHdqZEh2Xl5ndldnPXlzRF5qWkZaSUlvV151SFhicD9gbUZrU1BvP0lbQVZ0VnZvPWFbQz55VUZuaU9cXD5IWj5GWzxfZmNGcWJxd1pIcUVBeVhfY0lAXFxePmZ4Vl1DaXJTaWN0dmR2QHFod3ZXP3JXcHVTb2paP2RZYG9eeWxfd15LR2F0cWt2SGNLXj5rc11BZFdcXEpDPjtEYk5ea3lWc0hRdTo/bDo+YkpAXkBhWl93dkw+YkpEPkNDaHlJd0tHeG1XPFF1X2hzdk11cWRNX3RyREduWWFueEZvO3BvYEFiRXluREdzQVFzZ15lbFh4O29fc2F5dHZ3U19zSkBqX2hiU3lhQVhtdGhdbWFhWF5zc15eQldrTHhpbUB5QGheOkBeO0pyTXNeRG9DUUw6PTw8SlJhck9tWEpkcmo9dGlwWW55V3NpanBta1xcTE5CPXJTZHVkWFg7QFFxWHZKaF0+RltcXEZ4Y3d1amdfQWB3OlZaS3h5Q29bRHBpeUdyQ0ZhbV5ecnZnaWB2TXFxdWF4Z2ZzYV9eWWFyZF9mQGBaQXhrP0hmcD9tXFxnYUJOXFxWZmBQbm95UWJsSWNYWWdRQGVDeWtWYGBFUWxaRnI9Vm1BX3lTWWhsaW9cXG5uRHdua29bQ05zTWBuV1hjcmh1cHddYFlxQHhcXDxgWkpOZnJOZndKPGR3T1BtZkRKUEVYSERLYlF1cU1TTmBVXFxQbEZxbEZwUD5ES1pRc0NEcEhkbUZJTnVadkl2SmhdTmhzeF9yU1lzWXhuOkBeO0lbbHlhZ05zeUlnZ0ZiPW9bU0lyQEl5TUhxSz5bTHI9Q0ledUJtU0hbR3ZhYXlda3M6U0heO0lDbXlLc1ZkXUI8bG9GUVRsaW5ndVVpdGxwPFJ1bEtTaVhecFlXVFg9SWp5QXk9dFRAeVB1YWtzaHI7VU9HPFA9TXdlPW15UW1yUW9gcWo9YXlbWU9ZWHhTZXJXVHlXYHJPYVliSWxdVHBnVVNKXFxOSHRNb3l3aUhUa3FWaXVQTUBNbFBtZkRRXFxlcTtMaj5pV0x1Skd0ckZFc1ZpWT1RTEhAdlZMVEl4V0JlcFpYbFE9UTxgckdsbmZsc0BZdG1hcXY9cVZxTnNRTV5odkVdTUFATF5MVXhQaklJV0xQeEt5Vm1hc0J0UGptS0NweFdYVF1sd3JsTlVxcD5EUlxcVXlCTW9yZU1tVXJ5SHhWbFdwQHlTQXVIeHc9VGx1QU9jeG5ZcE1xZXhkdXdwPU5pVVJVSE47PGpaREpaPGM6QzpbSjo8S0xeWkNuZHJOdmVpXzp4bmxJdDs/YkVJckFBXnlZcGJ5bElZeD9hW0NxYVxcd3ZMPm1PR3l0eXJbeVxcTkFbO09aXFxnW0ZAYkpQcVVZW3JRXmxOakZvbXZAb1JPcnNeXl1YY3Jedl9RbXlndXV4c0NxYkpwbWo+clZZeFlxWnNRXmxQc0dHdUNnYWZpcGReYUJOXFxbUWhyYHZlUXRpR2A/XmhLQHVwSGZKaGQ7QF5rVnBxP3g/X2Z1b3J4UXNuSGFkcWRUTmo+ZndhWWtEYWRWYGJgdmJ3V2VHZ3BLXm5YY0p1Q2llZHZJQ2hVVTxPSGdJWUdHYlpjc1k7Umo9SDtjVjxDUkRzcD5Mcz5MWj5xdT5HX0lAZWVoeE9ZaVRZaHZ2dkhgbENeWmNneFhXcnhRcmI/dkpRbGNWdFc/dTpPal53YUJ3aGlgYHVucVpZdUJxWkxeXkheXXFpXmlZb2dXY0pvXlU+WztPWnVuYT1pXVU+Y0pAaT5heGJ2cXRoaWdRXFxmQXlmP15VPmNKVENZSTtvWXBdWTt5eHRlRUhzWE5HU0o/dXVRZklXeGN1dWZPdVxcaVNQYWlHeWZGTWI+T0Zsd2hcXHNYc0N0TFNYcld2SWtzPkNjYllZR2dlRT1JW1dSd2d3TlFidkN1V0dCTW1GO01CV0tIVklDVHlUX01EXmtURldSd011cW9DW19TPF9CdFt4Ymd1TUd2SGl1RWFEYUloQ0tEd3FUO3Vick9nRkVYWEVDW29pQndSSj93dHV3aj1XPWFYQkdnUXFVVUlUS1lWaHd3UVtGanNFXFxhT0lAVG1cXE47TUpXTHJFWU4+YWtHSVFeTFJGZGpWVUteWFJyRVk+SVlmTWpOSWx2eWt5bG54ZFdGUXFMSU52YFE+RGtoeHJBbVhuPFlzPUtMPG1YZE9UeXRSdVFiQWxaRHR4aXNNYHF5XVlsXFxwQ11OdFxcTkJdVWp4V0d5Tj1VVEVJdnhYUmhkTUxcXE5oSWxfZHc7YWtwRVk9YVhCPWw6TFJGeXBuPVNKQFd5cXREbXFhZFdhQXRMXFxYQkRSXFxlUFk9UDtMUV48Uzp0UEJFbEhES0w8ck9gWGI8a1ltVDteWkM+Wj5GOz1kOjtSSjxOQj9CO0I+Q0tCQjteOkBeOkpaQlJBZ1l5Z1k/eF9FZzprVkJFRkZzVV1peV9pZjo7RkJFYnRhSjtNcUxtWXJxSzpYbG9xeU9sdkxdSlptak5Mak08Yz5GX1BvbGZgWjpYZ3dxcERuWml5eHU/X01BeWE/amFmd2JRckhAc3V3eXVebmtxcFN2Z09mYDxuXWN5ZmFxbEZucUdBbDxfZ092X0c/YllQdnY+XWFBbERZbGF2ZFlJWnded2VRYnduXTtPYHNPWkZWcT9GWzpYa0BodTt2YlhRaj4+dGlvbD5GWzpAX1xcYV11WHhxP2NNdGt5ZkI9cj13eGlFQmFJUzxfWD1HV2ZYTHB5Vz1lbmhQdUFMS0w8SltsUWRwcnNcXF4+QF5CP1pCTjxzUUhEW3lpaWJRd2pZcFpGWmpnZk1wb3c/WkhGdTs+XFw8QF47Pj48XFw6PjtcXDo/Rjs7Ylo8Yjs+alpGWlpKSkI8PjtEYjpKOkNaQEpKQkI+O1xcOj9OOkJaPko9QkI+PlxcOktaPEQ6Pko8Yjs+ckl4dXd2YXN5eHVpeXdJdm1JeXJHP2dJWz9GV21oR2tib3dJeEltd0RuWmRqUlROWlVYXVV5XFw8U1FNUD1Nd209U0JsdUhMak5Mbjptc1tESkBRdkhJTlNoTDs8dU1seUlYc3hISkpcXF5aSj5CPE5KO1o6P2d4YWZXcGFYP3dNeWlIcHdnYlpDQjp5VUhDdTs7RDx3Q1FlZl1DcztXSUF3QlprdHVbdHVNRDo/Q1ZLaD07Rj5zYmZBd0V3d1ZDYnJ3V0l1V0U9QlxcO1hCcWN4dUZDPWJTS0Q6O2VbQ0JaO0s6R1paSkpCPD47REI/TjpDWkBKSkJCPjtcXDo/TjpCWj5KPUJCPj5cXDpLWjxEOj5KPGI7Pj48PEI8PjtEYjpKOkNaQEpKQkI+O1xcOj9OOkJaPko9QkI+PlxcOktaPEQ6Pko8Yjs+Pjw8S1pCSjs/OjxCO246PDw7Oz47XFw6P046Qlo+Sj1CQj4+XFw6S1o8RDo+SjxiOz4+PDxLWkJKOz86PEI7bjo8PDtbQko+Ylo8OjteOlQ6QkI+PlxcOktaPEQ6Pko8Yjs+Pjw8S1pCSjs/OjxCO246PDw7W0JKPmJaPDo7XjpUOjtbWko+QjxOSjtaOkw6R1o6eXF4SVpyb2FWUFs8YWpdYHE6SjpgblxcdE5cXHRUWzxQOzI7 C1 and C2 were chosen as 1 mF and R5 was arbitrarily chosen as 100 kW. The other components of the compensation network can be determined using the following relationships to produce the desired values for NiQmJSJURzYjIiIiJkYkNiMiIiM=, a and b.
R5 := 10^5;C1 := 10^(-6);C2 := C1;
eq1 := R1*C1 = evalf(T[1]/alpha);
eq2 := (R1 + R3)*C1 = T[1];
eq3 := R2*C2 = T[2];eq4 := (R2 + R4)*C2 = beta*T[2];
eq5:= (R2*R4*R6)/(R1*R3*R5) * (R1 + R3)/(R2 + R4) = Kc;
sols := solve({eq1,eq2,eq3,eq4,eq5},{R1,R2,R3,R4,R6}) assuming R1>0,R2>0,R3>0,R4>0;
These are reasonable values, but using standard values they would be chosen as: R1 = 30.1 kW + 205 W = 30.305 kW,
R2 = 2 MW, R3 = 511 kW + 24.3 kW = 635.3 kW, R4 = 2 MW + 1.78 MW + 86.7 kW = 3.8667 MW, R6 = 2.55 kW + 90.9 W = 2.6409 kW. Inserting these values,
R1 := 30.1*10^3 + 205; R2 := 2*10^6; R3 := (511 + 24.3)*10^3 ;
R4 := (2 + 1.78)*10^6 + 86.7*10^3; R6 := 2.55*10^3 +90.9;
From eq1 - eq5,
Kc := (R2*R4*R6)/(R1*R3*R5) * (R1 + R3)/(R2 + R4);
T[1] := (R1 + R3)*C1;alpha := T[1]/(R1*C1);T[2] := R2*C2;beta := evalf( (R2 + R4)*C2/T[2]);unassign('R1','R2','R3','R4','R5','R6','C1','C2'); The values found are sufficiently close to those derived earlier for the compensation network, namely NiYvJSNLY0ctJSZGbG9hdEc2JCInTTg3ISImLyYlIlRHNiMiIiItRiY2JCImaGwmRikvJSZhbHBoYUctRiY2JCIoYk4nPUYpLyZGLDYjIiIjRjo= and NiMvJSViZXRhRy0lJkZsb2F0RzYkIidMTEghIiY=.
Inserting these new values in the compensation circuit's transfer function, the new poles and zeros of the servo's closed loop transfer function can be obtained together with the new damping ratio and undamped natural frequency thus
Gc := Kc*( (s + 1/T[1])/(s + alpha/T[1]) ) * ( (s + 1/T[2])/(s + 1/(beta*T[2]) ) );KG_comp := evalf(Gc*KG/(T[f]*s + 1)):zeros := [solve(numer(normal(`C/R`)))]:poles := [solve(denom(normal(`C/R`)))]:eq1 := sqrt(1-zeta^2)/zeta = abs( Im(poles[2])/Re(poles[2]) ):eq2 := zeta*omega[n] = abs( Re(poles[2]) ):solve({eq1,eq2}); These are identical to those found previously, namely NiQvJiUmb21lZ2FHNiMlIm5HLSUmRmxvYXRHNiQiKFo8KUghIiYvJSV6ZXRhRy1GKTYkIiYkZmFGLA==. <Text-field layout="Heading 2" style="Heading 2">Observations</Text-field>1. The method illustrated in this worksheet for choosing the poles and zeros of a series-compensation network for a simple servo is quite straightforward. It allows the compensation to be designed directly from the damping ratio and undamped natural frequency specified for the servo. This is an advantage over frequency response methods since these rely on indirect relationships with the damping ratio and undamped natural frequency. In practice, though, the choice of method depends mostly on the designer's preference and experience.2. One of the lead network's time constants, NiMmJSJURzYjIiIi, was chosen equal to the motor and load's mechanical time constant, NiMmJSJURzYjJSJtRw==, so that the zero it produced cancelled with the pole produced by NiMmJSJURzYjJSJtRw==. This is common practice, though any reasonable choice can be made. Sometimes it is not be possible to generate a lead angle sufficiently large to cause the root loci to pass through the desired dominant poles. In these cases, it is necessary to use two lead networks in series, use more elaborate compensation networks, or use parallel compensation.3. Although algebraic and trigonometric methods were used to determine the parameters of the compensation network (Kc, a, b and NiMmJSJURzYjIiIj), semi-graphical methods can be used instead. These methods were pioneered by W.R. Evans in 1948 and were in use long before the PC was invented. They are quick, easy to use and sufficiently accurate.4. The compensation network used in this example allows the constants a and b to differ, but for other lag-lead networks they may be identical. For such networks, a slightly different approach is used to obtain the values of Kc, a, NiMmJSJURzYjIiIi and NiMmJSJURzYjIiIj, though the principles remain the same.5. Using the cursor to measure values of plotted functions is sufficiently accurate for most practical purposes. When such values were obtained analytically, they differed little from those obtained with the cursor. In any case, the precision obtained in this worksheet is misleading. As noted earlier, the servo's transfer function is an approximation that does not take account of any damping produced by friction, or of any non-linearities. Even if friction were to be included, it would have to be represented by viscous friction, which is not entirely realistic. Furthermore, motor constants vary slightly from one motor to another. Despite these reservations, the method yields solutions that are a good starting point for experimental work to determine the best choice of components when the effects of friction, backlash, etc., can be taken into account.6. The compensated servo's closed loop response to a step input of velocity highlighted the compromise between a wide bandwidth needed for fast performance and a narrow bandwidth needed for noise rejection. This can be a difficult compromise because the noise in the input may not be known in the early design stages, particularly when the input forms part of separate equipment being designed by others. Velocity Step InputBandwidth7. The ease with which Maple produces transient responses contrasts with the long and painstaking work that was needed before its advent, and its rich graphics (particularly in the "classic" interface) are ideal for illustrating aspects of servo design.<Text-field layout="Heading 2" style="Heading 2">References</Text-field> Inter alia: Servomechanism Analysis by G.J. Thaler and R.G. Brown, published by McGraw-Hill Book Company Inc, 1953; Control System Dynamics by W.R. Evans, published by McGraw-Hill Book Company Inc, 1954; and Modern Control Engineering by Katsuhiko Ogata, published by Prentice-Hall Inc, 2002.Disclaimer: While every effort has been made to validate the solutions in this worksheet, Waterloo Maple Inc. and the contributors are not responsible for any errors contained and are not liable for any damages resulting from the use of this material.