Open loop stability: Bode - Pole zero plot mismatch
11 ビュー (過去 30 日間)
古いコメントを表示
I'm analyzing open loop stability of an amplifier. Plotting the bode diagram I can see a negative phase margin (PM) indicating the system is not stable. When I plot the pole/zero plot however all the poles still remain on the left half plane. See attached figure. Note that instability results due to the 3rd zero crossing where the PM is negative. I do not understand why the complex poles have not shifted to right half plane (RHP). Using SPICE however I can observe these poles locating to RHP. How come this cannot be observed in matlab? While this is very likely because the model in Matlab is just a simplification, I do not understand how the bode plot can show a negative PM while the poles reside within LHP. Any thoughts?
3 件のコメント
Aquatris
2018 年 8 月 16 日
編集済み: Aquatris
2018 年 8 月 16 日
If you are referring to the ~-45 degree in the phase plot, it is not the phase margin. It is just the phase of the system. Phase margin is how much phase change is necessary for the magnitude 1 to become (-1 + 0i), which is equivalent to having a phase of 180. So if the systems phase is -45 degrees with magnitude of 1, it means the phase margin is 135 degrees.
Use the Matlab command "margin()" to calculate the margins.
採用された回答
Arkadiy Turevskiy
2018 年 8 月 17 日
編集済み: Arkadiy Turevskiy
2018 年 8 月 17 日
You did not post your system, so it is a bit hard to figure out what is going on, especially when you say that you see poles moving to RHP in Spice.
Going purely on the plots you provided (poe zero map primarily) I tried to construct a model that would create similar plots.
sys=zpk([2.4*10^9*j -2.4*10^9*j], [-0.0000001 -11.5*10^7+1.2*10^9*j -11.5*10^7-1.2*10^9*j],-100000000);
subplot(121);bode(sys);grid;
subplot(122);pzmap(sys);
xlim([-1.5e+8 2e+7]);
The first subplot shows full bode plot. If you focus on the region you are looking at, you will see similar plot to what you show:
subplot(121); bode(sys, {1e+9*0.1034 1e+9*2.8278}); grid;
Now if you zoom in bode plot magnitude that looks similar to your plot.
If you do
allmargin(sys)
you will see phase margins at first two crossovers are negative and phase margin at 3rd crossover is positive.
If you do
isstable(sys)
you will see the system is stable because all poles are in the left half plane, even though one of them is essentially at the origin.
Bottom line: even though you see negative phase margins, this system is stable, as all poles lie in the LHP. Hope this helps.
その他の回答 (1 件)
Paul
2024 年 12 月 8 日
sys=zpk([2.4*10^9*j -2.4*10^9*j], [-0.0000001 -11.5*10^7+1.2*10^9*j -11.5*10^7-1.2*10^9*j],-100000000);
The open-loop system is stable as all of its poles are in the open, left-half-plane
format short e
pole(sys)
Assuming unity, negative feedback, the closed-loop system is unstable. We can determine that this is true in one of two ways. We can apply the Nyquist criteria based on the Nyquist plot of the open-loop system, or we can compute the closed-loop poles and determine where they are located in the complex plane. The fact that the open-loop system has "negative phase margins" as returned from allmargin is, in general, not a criterion for determining closed-loop stability, i.e., a stable, closed-loop system can have negative phase margin (and negative gain margin for that matter).
To apply the Nyquist criteria we have to determine two things: the number (P) of unstable poles of the open-loop system, and the number of clockwise encirclements (N) of the -1 point of the Nyquist plot of the open-loop system. Then, the number unstable, closed-loop poles (Z), is determined by: N = Z - P.
We've already seen above that P = 0, hence, the number of unstable, closed-loop, poles is the same as number of clockwise encirclements of the -1 point.
The Nyquist plot of the open-loop system is
figure
nyquistplot(sys)
We have to zoom in around the origin to see what's happening there
w = linspace(1e7,3e8,5000)*2*pi;
figure
nyquistplot(sys,w),grid,axis equal
Based on those two plots, it is apparent that the Nyquist plot encircles the the -1 point one time (N = 1), hence we must have one unstable, closed-loop pole, which is, in fact, the case.
pole(feedback(sys,1))
Now that we have established that the closed-loop system is unstable, we are in position to interpret the results from allmargin
m = allmargin(sys)
The last field ('Stable') tells us that the closed-loop system is unstable, which we already knew. The phase margins only tell us how much the phase of the open-loop system has to change to rotate its Nyquist plot to touch the -1 point and change the number of encirclements. Here is the Nyquist plot after applying a bit more than the phase margin to the open-loop system
figure
nyquistplot(sys*exp(1j*-m.PhaseMargin(1)*1.0001*pi/180),[-flip(w) w]),axis equal
Now N = 0, so the closed-loop system is stable (I think the pole with Re(s) = -9.1e4 would be considered "close" to the imaginary axis for how this system is scaled).
pole(feedback(sys*exp(1j*-m.PhaseMargin(1)*1.0001*pi/180),1))
Now let's look at adding the phase indicated by the second phase margin
figure
nyquistplot(sys*exp(1j*-m.PhaseMargin(2)*1.0001*pi/180),[-flip(w) w]),axis equal
Now we're back to N = 1, so the closed-loop system has one unstable pole
pole(feedback(sys*exp(1j*-m.PhaseMargin(2)*1.0001*pi/180),1))
Doing the same for the third "phase margin"
figure
nyquistplot(sys*exp(1j*-m.PhaseMargin(3)*1.0001*pi/180),[-flip(w) w]),axis equal
Now we have N = 2, so we have two unstable, closed-loop poles
pole(feedback(sys*exp(1j*-m.PhaseMargin(3)*1.0001*pi/180),1))
In summary: The open-loop system is stable. The closed-loop system is unstable. The "margins" returned by allmargin only tell us how much the gain or phase, for positive frequencies (if the system has real coefficients) needs to change (assuming unity, negative feedback) in order to change the number of encirclements of the -1 point. If the closed-loop system is stable, then those "margins" are truly margins, i.e., they tell us how much the gain or phase of the open-loop system has to change, which could increase or decrease, to induce instability of the closed-loop system. But, if the closed-loop system is unstable, then the effect of those "margins" have to be interpreted in terms of how they change the number of encirclements of the -1 point and the number of unstable, open-loop poles.
0 件のコメント
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!