Vai al contenuto
Controllo Digitale

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 P(z) = a_nz^n + \dots + a_1z + a_0, con a_n \gt  0, le condizioni necessarie (veloci da controllare, e spesso sufficienti per escludere la stabilità) sono

    \[ P(1) \gt  0,\qquad (-1)^nP(-1) \gt  0,\qquad |a_0| \lt  a_n \]

Perché. Se tutte le radici z_i sono dentro il cerchio, P(1) = a_n\prod(1 - z_i): per le radici reali 1 - z_i \gt  0, per le coppie complesse (1 - z_i)(1 - \bar z_i) = |1 - z_i|^2 \gt  0. Allo stesso modo (-1)^nP(-1) = a_n\prod(1 + z_i) \gt  0. Infine |a_0| = a_n\prod|z_i| \lt  a_n. ∎

Per il terzo ordine si aggiunge una sola condizione, che con le altre diventa necessaria e sufficiente:

    \[ |a_0^2 - a_3^2| \gt  |a_0a_2 - a_3a_1| \]

e per ordini più alti la tabella di Jury costruisce righe successive (ogni nuova riga è un determinante 2\times 2 tra il primo e l’ultimo coefficiente della riga precedente), con una condizione di modulo per ognuna.

Esempio. P(z) = z^3 - 1{,}2z^2 + 0{,}5z - 0{,}1: P(1) = 0{,}2 \gt  0; -P(-1) = 2{,}8 \gt  0; |a_0| = 0{,}1 \lt  1; |0{,}01 - 1| = 0{,}99 \gt  |0{,}12 - 0{,}5| = 0{,}38. Stabile: le radici hanno moduli 0,68, 0,38 e 0,38.

La trasformazione bilineare e Routh

Con z = \frac{1 + w}{1 - w} l’interno del cerchio unitario va nel semipiano sinistro di w (lezione sulla trasformata Zeta). Moltiplicando P per (1 - w)^n si ottiene un polinomio in w a cui applicare Routh. Per il secondo ordine z^2 + a_1z + a_0:

    \[ (1 - a_1 + a_0)w^2 + 2(1 - a_0)w + (1 + a_1 + a_0) \]

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 G(s) = \frac{1}{s(s + 1)} (costanti normalizzate). È comandato da un regolatore proporzionale K in un microcontrollore con T = 0{,}5 s, attraverso un D/A con mantenimento. Il modello esatto negli istanti di campionamento (ZOH, lezione sui sistemi a dati campionati) è

    \[ G(z) = \frac{0{,}1065\,z + 0{,}0902}{z^2 - 1{,}6065\,z + 0{,}6065} = \frac{0{,}1065(z + 0{,}847)}{(z - 1)(z - 0{,}607)} \]

Il polo in 1 è l’integratore, quello in e^{-0{,}5} = 0{,}607 è la costante di tempo meccanica; lo zero in -0{,}847 non esiste nel continuo: lo crea il campionamento.

Stabilità. Polinomio caratteristico z^2 + (0{,}1065K - 1{,}6065)z + (0{,}6065 + 0{,}0902K). Jury: |a_0| \lt  1 dà K \lt  4{,}36; P(1) = 0{,}197K \gt  0; P(-1) = 3{,}213 - 0{,}016K \gt  0 dà K \lt  197. Quindi 0 \lt  K \lt  4{,}36. In continuo l’anello chiuso s^2 + s + K è stabile per ogni K \gt  0: il campionamento ha introdotto un limite.

Luogo delle radici discreto del motore campionato
I rami partono dai poli in 1 e in 0,607, si incontrano sull’asse reale e descrivono un cerchio attorno allo zero in meno 0,847 creato dal campionamento; escono dal cerchio unitario, tratteggiato in verde, per K uguale a 4,36, nei punti 0,57 più o meno 0,82 i.

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 K = 4{,}36 il polinomio è z^2 - 1{,}142z + 1, con radici 0{,}571 \pm 0{,}821i di modulo 1 e angolo 55{,}2°: un’oscillazione persistente con \frac{360°}{55{,}2°} = 6{,}5 campioni per periodo, cioè di periodo 3,3 s.

Il guadagno massimo dipende dal periodo. Ripetendo il calcolo per altri periodi: K_{max} = 20{,}3 con T = 0{,}1 s, 4,36 con 0,5 s, 2,39 con 1 s, 1,46 con 2 s. Per T \to 0 il limite tende all’infinito, come nel continuo.

Guadagno massimo in funzione del periodo di campionamento
Al crescere del periodo di campionamento il guadagno che porta il sistema al limite di stabilità diminuisce rapidamente: da circa 20 con T uguale a 0,1 secondi a circa 1,5 con T uguale a 2 secondi.

Bode e Nyquist discreti

La risposta in frequenza di un sistema discreto è G(e^{i\omega T}), da \omega = 0 alla pulsazione di Nyquist \pi/T. Il criterio di Nyquist vale identico, con il percorso lungo la circonferenza unitaria (aggirando il polo in z = 1) al posto dell’asse immaginario: Z = N + P, con P i poli di L(z) fuori dal cerchio.

Il mantenitore è mezzo campione di ritardo. Il segnale a gradini prodotto dal D/A è, in media, in ritardo di T/2 rispetto al segnale campionato. In frequenza, per \omega T piccolo, G_{ZOH}(e^{i\omega T}) \approx G(i\omega)e^{-i\omega T/2}: il modulo quasi non cambia, la fase perde \frac{\omega T}{2}. Per il motore con K = 1: margine di fase continuo 51,8° a 0,786 rad/s; discreto 40,8°. La differenza, 11°, è proprio \frac{0{,}786\cdot 0{,}5}{2} radianti, cioè 11,3°.

Bode continuo e discreto del motore
Il modulo del sistema discreto, in blu, coincide con quello continuo, tratteggiato, fino a frequenze vicine a quella di Nyquist; la fase, in rossa, scende più in fretta di quella continua per il ritardo introdotto dal mantenitore, e il margine di fase si riduce.
Nyquist discreto del motore
La curva per K uguale a 1 viene dall’infinito per l’integratore e passa a destra del punto meno 1; il guadagno per cui lo raggiungerebbe è il margine di guadagno 4,36.

Nel tempo. Con K = 2 il sistema continuo ha \zeta = 0{,}35 e sovraelongazione del 30 %; quello campionato con T = 0{,}5 s arriva al 56 %, e la sua uscita è una scala che segue la curva continua con un ritardo visibile.

Risposta al gradino continua e campionata
Con lo stesso guadagno 2, la risposta del sistema campionato, in blu con i campioni, oscilla più di quella continua, tratteggiata, e si assesta più lentamente.

Un integratore con un passo di ritardo di calcolo

Il caso della lezione, L(z) = \frac{KT}{z(z - 1)}: poli in 0 e in 1, diramazione in \frac{1}{2} per KT = \frac{1}{4}, poi i rami salgono lungo la retta verticale \text{Re}\,z = \frac{1}{2} (somma dei poli costante, uguale a 1) e incontrano la circonferenza unitaria in \frac{1}{2} \pm i\frac{\sqrt 3}{2} per KT = 1: angolo 60°, sei campioni per periodo.

Luogo dell'integratore con ritardo di calcolo
I rami partono da 0 e da 1, si incontrano in 0,5 e salgono verticalmente fino alla circonferenza unitaria, che attraversano per KT uguale a 1.

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 K_{max} = 20{,}34, 4,36 e 2,39 per i tre periodi, con margini di fase (per K = 1) 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 G(z) coincide con K_{max} perché il regolatore è proporzionale.

Gli esercizi, con Jury, luogo discreto, guadagni massimi e margini, sono nella pagina degli esercizi collegata in cima.

Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted
0
Would love your thoughts, please comment.x
()
x