68 lines
2.9 KiB
Plaintext
68 lines
2.9 KiB
Plaintext
|
||
Frequency Response Analysis
|
||
|
||
These examples show to how to extract the small-signal, AC open-loop
|
||
gain from time-domain, closed-loop simulations. The technique is a
|
||
subset of the method shown in ../LoopGain.asc and ../LoopGain2.asc.
|
||
The method assumes that the input impedance of the error amplifier is
|
||
infinite so that the loop gain can be computed solely by the voltage
|
||
loop gain.
|
||
|
||
The open-loop gain is computed from the closed-loop system by inserting
|
||
a perturbing voltage source in the loop and measuring how well the
|
||
perturbation is servoed out of the the loop via the feedback. The
|
||
open-loop gain is given by the ratio of complex voltages at either side
|
||
of the perturbing voltage source.
|
||
|
||
But since the SMPS macromodels are implemented as time-domain models
|
||
that include detailed switching information but don't include
|
||
continuous-time(average) equivalents, the complex voltage is determined
|
||
from Fourier analysis of a time-domain sine wave perturbation.
|
||
|
||
A script of .measure statements is used to perform the Fourier analysis
|
||
and computer the open-loop response. To use this script into your own
|
||
SMPS design, follow these steps:
|
||
|
||
1. Place these .measure statements on your circuit as a SPICE
|
||
directive:
|
||
|
||
.measure Aavg avg V(a)
|
||
.measure Bavg avg V(b)
|
||
.measure Are avg (V(a)-Aavg)*cos(360*time*Freq)
|
||
.measure Aim avg -(V(a)-Aavg)*sin(360*time*Freq)
|
||
.measure Bre avg (V(b)-Bavg)*cos(360*time*Freq)
|
||
.measure Bim avg -(V(b)-Bavg)*sin(360*time*Freq)
|
||
.measure GainMag param 20*log10(hypot(Are,Aim) / hypot(Bre,Bim))
|
||
.measure GainPhi param mod(atan2(Aim,Are)-atan2(Bim,Bre)+180,360)-180
|
||
|
||
2. Insert a voltage source in the feedback loop under analysis. Give
|
||
this voltage sourse the value SINE(0 5m {Freq})
|
||
|
||
3. Place a SPICE directive on the schmatic that defines Freq:
|
||
|
||
.param Freq=10K
|
||
|
||
4. Run a .tran command to see how long it takes your circuit to come to
|
||
steady state and then edit the .tran command so that data isn't saved
|
||
until this time.
|
||
|
||
5. Rerun the .tran command to do the analysis at the frequency defined
|
||
with the .param statement of step 3.
|
||
|
||
6. Execute menu command View=>SPICE Error Log to see the results of this
|
||
analysis. The open-loop response magnitude is given by GainMag[dB]
|
||
and the phase is given by GainPhi[<5B>].
|
||
|
||
You can iterate the param Freq to zero dB. That frequency is the loop
|
||
crossover frequency and phase margin will be reported as GainPhi in the
|
||
error log.
|
||
|
||
You can set up a .step statement to sweep the parameter Freq. Then you
|
||
can plot the open-loop response be executing menu command
|
||
View=>SPICE Error Log, and then right mouse clicking and executing menu
|
||
command "Plot .step'ed .meas data" Answer yes to the dialog that asks
|
||
if LTspice should combine the real .meas data to complex data. Then you
|
||
can plot the quanity gain to get a Bode plot the open-loop response of
|
||
the system.
|
||
|
||
--Mike |