Stabilità e progetto nel piano z, approfondimento: Jury, luogo delle radici, Bode e Nyquist discreti
Criterio di Jury per ogni ordine, bilineare e Routh, il motore campionato con luogo delle radici discreto, guadagno massimo in funzione del periodo, Bode e Nyquist discreti, il mantenitore come mezzo campione di ritardo, codice MATLAB e Python.
Questa pagina approfondisce le lezioni sulla stabilità nel piano z e sul progetto diretto dei regolatori digitali. Estende il criterio di Jury agli ordini superiori, mostra come usare la trasformazione bilineare e il criterio di Routh, e studia a fondo un caso completo: un motore in corrente continua comandato da un regolatore proporzionale digitale. Del caso si tracciano il luogo delle radici discreto, i diagrammi di Bode e di Nyquist discreti, e si vede come il periodo di campionamento riduca il guadagno ammissibile e il margine di fase. In fondo ci sono gli esempi in MATLAB e in Python, con il codice verificato.
Il criterio di Jury per ogni ordine
Per
, con
, le condizioni necessarie (veloci da controllare, e spesso sufficienti per escludere la stabilità) sono
![]()
Perché. Se tutte le radici
sono dentro il cerchio,
: per le radici reali
, per le coppie complesse
. Allo stesso modo
. Infine
. ∎
Per il terzo ordine si aggiunge una sola condizione, che con le altre diventa necessaria e sufficiente:
![]()
e per ordini più alti la tabella di Jury costruisce righe successive (ogni nuova riga è un determinante
tra il primo e l’ultimo coefficiente della riga precedente), con una condizione di modulo per ognuna.
Esempio.
:
;
;
;
. Stabile: le radici hanno moduli 0,68, 0,38 e 0,38.
La trasformazione bilineare e Routh
Con
l’interno del cerchio unitario va nel semipiano sinistro di
(lezione sulla trasformata Zeta). Moltiplicando
per
si ottiene un polinomio in
a cui applicare Routh. Per il secondo ordine
:
![]()
e “tutti i coefficienti positivi” ridà esattamente le tre condizioni di Jury. Il vantaggio della bilineare è che per ordini alti si riusa un criterio già noto.
Un caso completo: il motore campionato
Un motore in corrente continua, con posizione in uscita, ha
(costanti normalizzate). È comandato da un regolatore proporzionale
in un microcontrollore con
s, attraverso un D/A con mantenimento. Il modello esatto negli istanti di campionamento (ZOH, lezione sui sistemi a dati campionati) è
![]()
Il polo in 1 è l’integratore, quello in
è la costante di tempo meccanica; lo zero in
non esiste nel continuo: lo crea il campionamento.
Stabilità. Polinomio caratteristico
. Jury:
dà
;
;
dà
. Quindi
. In continuo l’anello chiuso
è stabile per ogni
: il campionamento ha introdotto un limite.

Il luogo delle radici discreto si traccia con le stesse regole del continuo (lezione di Controlli automatici); cambia solo il confine della stabilità, che è la circonferenza unitaria invece dell’asse immaginario. Al limite
il polinomio è
, con radici
di modulo 1 e angolo
: un’oscillazione persistente con
campioni per periodo, cioè di periodo 3,3 s.
Il guadagno massimo dipende dal periodo. Ripetendo il calcolo per altri periodi:
con
s, 4,36 con 0,5 s, 2,39 con 1 s, 1,46 con 2 s. Per
il limite tende all’infinito, come nel continuo.

Bode e Nyquist discreti
La risposta in frequenza di un sistema discreto è
, da
alla pulsazione di Nyquist
. Il criterio di Nyquist vale identico, con il percorso lungo la circonferenza unitaria (aggirando il polo in
) al posto dell’asse immaginario:
, con
i poli di
fuori dal cerchio.
Il mantenitore è mezzo campione di ritardo. Il segnale a gradini prodotto dal D/A è, in media, in ritardo di
rispetto al segnale campionato. In frequenza, per
piccolo,
: il modulo quasi non cambia, la fase perde
. Per il motore con
: margine di fase continuo 51,8° a 0,786 rad/s; discreto 40,8°. La differenza, 11°, è proprio
radianti, cioè 11,3°.


Nel tempo. Con
il sistema continuo ha
e sovraelongazione del 30 %; quello campionato con
s arriva al 56 %, e la sua uscita è una scala che segue la curva continua con un ritardo visibile.

Un integratore con un passo di ritardo di calcolo
Il caso della lezione,
: poli in 0 e in 1, diramazione in
per
, poi i rami salgono lungo la retta verticale
(somma dei poli costante, uguale a 1) e incontrano la circonferenza unitaria in
per
: angolo 60°, sei campioni per periodo.

Il motore digitale in MATLAB e in Python
MATLAB:
G = tf(1, [1 1 0]); % motore G(s) = 1/(s(s+1))
Gd = c2d(G, 0.5, 'zoh') % modello discreto con mantenitore
rlocus(Gd); zgrid % luogo con cerchio unitario e spirali di smorzamento
[Gm, Pm] = margin(Gd) % margini discreti
step(feedback(2*G, 1), feedback(2*Gd, 1))Python (numpy e python-control):
import numpy as np
import control as ct
G = ct.tf([1], [1, 1, 0]) # motore G(s) = 1/(s(s+1))
for T in (0.1, 0.5, 1.0):
Gd = ct.sample_system(G, T, method='zoh')
gm, pm, wpc, wgc = ct.margin(Gd)
print(f"T = {T}: Kmax = {gm:.2f}, PM = {pm:.1f} gradi")
gm, pm, wpc, wgc = ct.margin(G)
print(f"continuo: PM = {pm:.1f} gradi a {wgc:.3f} rad/s")L’esecuzione stampa
, 4,36 e 2,39 per i tre periodi, con margini di fase (per
) di 49,6°, 40,8° e 30,4°, e 51,8° per il sistema continuo (la libreria può avvisare che, per precisione numerica, calcola i margini sulla risposta in frequenza: è normale). Il margine di guadagno di
coincide con
perché il regolatore è proporzionale.
Gli esercizi, con Jury, luogo discreto, guadagni massimi e margini, sono nella pagina degli esercizi collegata in cima.




