Compare commits

...

6 Commits

Author SHA1 Message Date
Matte23
d7df2bdb92 feat: Add license notice
All checks were successful
Build document / build (push) Successful in 6s
2024-07-09 20:01:41 +02:00
Matte23
057d343e69 feat: Replace images with custom ones generated using MATLAB 2024-07-09 19:41:39 +02:00
Matte23
1a13fb3484 fix: Varie correzioni 2024-07-09 18:07:51 +02:00
88e4e7807c feat: Aggiunta sezione riguardante i controllori digitali
All checks were successful
Build document / build (push) Successful in 10s
2024-07-03 17:07:15 +02:00
dc90c96a6a feat: Aggiunta nota su problema con reti lead uguali
All checks were successful
Build document / build (push) Successful in 10s
2024-06-11 11:57:04 +02:00
6e90195737 improvement(workflow): Cambio nome e overwrite artifact
All checks were successful
Build document / build (push) Successful in 8s
2024-06-05 10:57:22 +00:00
14 changed files with 260 additions and 32 deletions

View File

@@ -16,5 +16,6 @@ jobs:
- name: Upload artifact
uses: actions/upload-artifact@v3
with:
name: ProgettareSistemi.pdf
name: appunti-loop-shaping-design
path: ./ProgettareSistemi.pdf
overwrite: true

View File

@@ -15,6 +15,11 @@
\usepackage{physics}
\usepackage{listings}
\usepackage{xspace}
\usepackage[
type={CC},
modifier={by-nc-sa},
version={3.0},
]{doclicense}
\graphicspath{ {./images/} }
\hypersetup{
@@ -116,6 +121,8 @@
\maketitle
\tableofcontents
\doclicenseThis
% \mainmatter
\section{Introduzione}
@@ -130,22 +137,22 @@
\paragraph{Fasi di progetto} La progettazione di un sistema di controllo a loop si divide in diverse fasi:
\begin{itemize}
\item Traduzione delle specifiche in vincoli di progetto. Si ottiene
\item Traduzione delle specifiche in vincoli di progetto. Si ootengono dei vincoli su
\[ \begin{cases}
G_f \\
\nu \\
\abs{K_c} > \gamma \\
\omega_c \in [\underline{\omega_c}, \overline{\omega_c}] \\
\text{Regioni proibite nel diagramma di Nichols}
\text{Regioni proibite nel diagramma di Nichols } (T_p, S_p)
\end{cases} \]
\item Progettazione del controllore:
\subitem Scelta del segno di $K_c$
\subitem Scelta della pulsazione di crossover desiderata $\omega_{c,des}$
\subitem Progetto delle reti \lead o \lag necessarie a risolvere il problema (ovvero a soddisfare tutti i vincoli di progetto). In questa fase si può anche modificare $K_c$ a patto di non cambiarne il segno e di non violare il vincolo $\abs{K_c} > \gamma$.
\subitem Inserimento delle reti \lead o \lag necessarie per stabilizzare il sistema e soddisfare tutti i vincoli di progetto. In questa fase si può anche modificare $K_c$ a patto di non cambiarne il segno e di non violare il vincolo $\abs{K_c} > \gamma$.
\item Verifica quantitativa delle prestazioni del sistema di controllo ottenuto.
\end{itemize}
\subparagraph{Attenzione} Sbagliare il valore di $\nu$ al termine della fase uno \textbf{determina il non superamento dell'esame}. Se $\nu$ è troppo grande le specifiche di prestazione sono comunque soddisfatte, a patto di essere in grado di stabilizzare il sistema (la difficoltà aumenta con l'aumentare di $\nu$, perché diventa più complicato evadere la regione proibita).
\subparagraph{Attenzione} Sbagliare il valore di $\nu$ al termine della fase uno \textbf{determina il non superamento dell'esame}. Un $\nu$ più grande del necessario porta comunque a soddisfare le specifiche di prestazione, ma rende più difficile progettare il controllore (la difficoltà aumenta con l'aumentare di $\nu$, perché diventa più complicato evadere la regione proibita).
\subparagraph{Attenzione} La scelta errata del segno di $K_c$ o il fatto di progettare un sistema che risulta instabile \textbf{determina il non superamento dell'esame}.
@@ -160,7 +167,7 @@
\[ y(s) = T(s) \frac{r(s)}{G_s G_f} + S(s) d_p(s) + G_p(s)S(s)d_a(s) - T(s) \frac{d_s(s)}{G_s} \]
Il comportamento del sistema di controllo è completamente determinato da due funzioni: la funzione di sensitività complementare $T(s)$ e la funzione di sensitività $S(s)$. Entrambe le funzioni sono definite implicitamente dalla funzione ad anello $L(s)$.
Per imporre il comportamento complessivo è necessario andare a scegliere la forma di $L(s)$. Infatti questa tecnica di progetto si chiama \textbf{loop shaping approach}.
Per modificare il comportamento complessivo del sistema è necessario modificare la forma di $L(s)$. Infatti questa tecnica di progetto si chiama \textbf{loop shaping approach}.
\paragraph{Condizioni su $T$ e $S$} Analizziamo uno per uno come i segnali si riflettono sull'uscita:
@@ -186,11 +193,15 @@ Si può ottenere questa condizione facendo tendere $G_c$ ad infinito. Costruendo
In ogni caso osserviamo un problema dato dal secondo punto. Ricordiamo però che la $T(s)$ è una funzione di trasferimento. Pertanto possiamo tenerla uguale a 1 a basse frequenze e poi la portiamo a 0 ad alte frequenze. In questo modo si filtra il disturbo ad alta frequenza del sensore. La condizione è avere i range di frequenza del disturbo separati da quelli del sistema (condizione che è quasi sempre verificata nei sistemi reali).
\subsection{Introduzione sulla progettazione della funzione ad anello}
Osserviamo che in genere la funzione ad anello a bassa frequenza tende ad infinito per inseguire il riferimento, mentre ad alta frequenza tende a zero. Per avere il modulo che va all'infinito è necessario inserire dei poli nell'origine.
Osserviamo che in genere la funzione ad anello a bassa frequenza tende ad infinito per inseguire il riferimento, mentre ad alta frequenza tende a zero. Per avere il modulo che va all'infinito a bassa frequenza è necessario inserire dei poli nell'origine.
\includegraphics[scale=0.3]{plotljw}
\begin{figure}
\centering
\includegraphics[scale=0.5]{plotljw.png}
\caption{Loop function su diagramma di Bode}
\end{figure}
La funzione è globalmente decrescente. Un punto interessante è dove $\abs{L(j \omega_c)} = 1$ dove $\omega_c$ si chiama \emph{pulsazione di crossover} (notare che $\abs{T(j\omega_c)}=\abs{S(j\omega_c)}$). Questo parametro è molto importante per la progettazione perché è legato, nel diagramma di Nyquist, a dove il modulo passa da essere maggiore di uno a essere minore di uno. Per evitare d'incircolare il punto critico (caso PoL=0) la fase attorno alla frequenza $\omega_c$ deve essere superiore rispetto a -180°, in modo che la curva una volta arrivata a $\omega_c$ non abbia ancora disegnato un semicerchio. Per garantire la robustezza la fase deve essere sufficientemente grande quando mi avvicino a $\omega_c$.
Il diagramma di Bode del guadagno è globalmente decrescente. Un punto interessante è dove $\abs{L(j \omega_c)} = 1$ ($\omega_c$ si chiama \emph{pulsazione di crossover}) (notare che $\abs{T(j\omega_c)}=\abs{S(j\omega_c)}$). Questo parametro è molto importante per la progettazione perché è legato, nel diagramma di Nyquist, a dove il modulo passa da essere maggiore di uno a essere minore di uno. Per evitare d'incircolare il punto critico (caso PoL=0) la fase attorno alla frequenza $\omega_c$ deve essere superiore rispetto a -180°, in modo che la curva una volta arrivata a $\omega_c$ non abbia ancora disegnato un semicerchio. Per garantire la robustezza la fase deve essere sufficientemente grande quando mi avvicino a $\omega_c$.
Individuiamo diverse zone di frequenza:
\begin{itemize}
@@ -205,7 +216,11 @@ Ad alta frequenza $S \sim 1$, mentre a bassa frequenza $S \to 0$.
Sia la S che la T a medie frequenze mostrano un picco di risonanza.
\includegraphics[scale = 0.3]{lts.png}
\begin{figure}
\centering
\includegraphics[scale=0.5]{lts.png}
\caption{Confronto tra $L(j \omega)$, $T(j \omega)$ e $S(j \omega)$}
\end{figure}
\section{Definizione dei vincoli di progetto}
Siccome il sistema di controllo è lineare, si può applicare il principio di sovrapposizione degli effetti. Pertanto si possono analizzare i disturbi singolarmente in modo da ottenere uno o più vincoli per ogni disturbo.
@@ -249,7 +264,16 @@ Si dimostra, applicando il teorema del valore finale e svolgendo il limite, che
\end{cases} \]
Per i diversi tipi di segnali e del sistema vale la tabella:
\includegraphics[scale=0.2]{tabellainseguimento.png}
\begin{center}
\begin{tabular}{ ||c || c | c | c || }
\hline System type & Step input & Ramp input & Parabola input \\
Input order & (order 0) & (order 1) & (order 2) \\ \hline
0 & $\frac{K_d^2 R_0}{K_d + K_p K_c G_a}$ & $\infty$ & $\infty$ \\ \hline
1 & 0 & $\frac{K_d^2 R_0}{K_p K_c G_a}$ & $\infty$ \\ \hline
2 & 0 & 0 & $\frac{K_d^2 R_0}{K_p K_c G_a}$ \\ \hline
\end{tabular}
\end{center}
dove il \textbf{tipo del sistema} è definito come $\nu + p$.
Da questo requisito si estrae un vincolo del tipo $\abs{K_c} > K_{c,inf}$, nonché un vincolo su $\nu \geq \nu_{inf}$.
@@ -273,7 +297,9 @@ Da questo requisito si estrae un vincolo del tipo $\abs{K_c} > K_{c,inf}$, nonch
\frac{D_{p0}}{\beta + K_c K_P G_a G_f G_s} & \se \nu + p = h
\end{cases} \]
\subparagraph{Nota} Questo caso vale solamente con un disturbo $d_p$ all'uscita. In generale questo limite va \textbf{sempre ricalcolato} perché dipende da dove è inserito il disturbo. Chiaramente i disturbi polinomiali hanno senso solo sulla catena diretta, perché la catena di retroazione è costruita dal progettusta (e quindi ha solo disturbi ad alta frequenza dati dalle misure del sensore).
\subparagraph{Nota} Questo caso vale solamente con un disturbo $d_p$ all'uscita. In generale questo limite va \textbf{sempre ricalcolato} perché dipende da dove è inserito il disturbo. Chiaramente i disturbi polinomiali hanno senso solo sulla catena diretta, perché la catena di retroazione è costruita dal progettista (e quindi ha solo disturbi ad alta frequenza dati dalle misure del sensore).
\paragraph{Riassumendo: steady state} Ricodiamo che tra i vari $\nu$ estratti dalle specifiche si sceglie il valore massimo. Considerando che l'equazione $\nu+p > h$ manda a zero l'errore, $K_c$ si sceglie prendendo il valore massimo \textbf{tra i requisiti aventi il valore massimo di} $\nu$.
\subsection{Disturbi di tipo sinusoidale $d_p$, $d_s$, $d_a$}
I disturbi sinusoidali assumono un importanza rilevante perché qualsiasi disturbo periodico (e non) può essere scomposto con la trasformata di Fourier in una somma di segnali sinusoidali.
@@ -323,14 +349,6 @@ Applicando la stessa regola approssimata del punto precedente:
La formula approssimata che si ottiene dalla regola è
\[ \omega_{l} = \omega_p \cdot 10^{-\frac{M_s^{LF}}{40}} \]
\paragraph{cose perse mezzoretta - Variazioni su G(s)}
Stiamo parlando delle incertezze del controllore ? (errore di modello) e ci preoccupiamo che anche in presenza di errori il sistema sia stabile.
\[ \overset{S_G^{Gry}} = \pdv{Gry}{G} \frac{G}{Gry} \]
\[ S_g^{Gry} = \lim_{\dd G \to 0} \overline{S_G^{Gry}} \]
\[ S_G^G = \frac{1}{1+G(s)H(s)} = S \]
\paragraph{Riassumendo: steady state} Ricodiamo che tra i vari $\nu$ estratti dalle specifiche si sceglie il valore massimo. Considerando che l'equazione $\nu+p > h$ manda a zero l'errore, $K_c$ si sceglie prendendo il valore massimo \textbf{tra i requisiti aventi il valore massimo di} $\nu$.
\paragraph{Variazioni relative su H(s)}
Ripetendo gli stessi conti con le derivate si ottiene
\[ S = - \frac{G(s)H(s)}{1+G(s)H(s)} = -T(s) \]
@@ -341,7 +359,11 @@ In genere, siccome il sistema è progettato in modo approssimato, risulta essere
L'obiettivo è minimizzare il transitorio, in modo che l'uscita rispecchi il prima possibile il riferimento. Anche la qualità della risposta è importante, perché nel transitorio l'uscita non deve allontanarsi troppo dal valore in regime permanente.
\includegraphics[scale=0.3]{transitorio.png}
\begin{figure}
\centering
\includegraphics[scale=0.5]{transitorio.png}
\caption{Risposta al gradino di un sistema. Notare sovraelongazione e tempo di salita}
\end{figure}
Definiamo alcuni parametri:
\begin{itemize}
@@ -357,8 +379,13 @@ Assumiamo la funzione $T(s)$ come
Il guadagno stazionario è 1, non ha zeri e ha due poli in generale complessi e coniugati.
Il parametro $\xi \in (0,1]$ è detto \emph{smorzamento}. Quando vale uno il polinomio ha due radici reali coincidenti. Se è compreso tra $(0,1)$ le radici sono complesse coniugate, mentre se è zero le radici sono immaginarie pure (caso che escludiamo perché il sistema deve essere stabile).
\includegraphics[scale=0.2]{rispostasecondoordine.png}
La $\omega_n$ determina la frequenza del seno.
\begin{figure}
\centering
\includegraphics[scale=0.5]{rispostasecondoordine.png}
\caption{Risposta al gradino di una funzione prototipo del secondo ordine, al variare di $\xi$}
\end{figure}
La $\omega_n$ determina la frequenza del seno.
La risposta al gradino è
\[ y(t) = 1- \frac{e^{\xi\omega_n t}}{\sqrt{1 - \xi^2}} \sin \left[ \omega_n t + \tan^{-1} \frac{\sqrt{1-\xi^2}}{\xi} \right]\]
@@ -369,16 +396,24 @@ Si nota che la sovraelongazione dipende solo dallo smorzamento. In particolare l
\[ t_r = \frac{1}{\omega_n \sqrt{1-\xi^2}} \left( \pi - \arccos \xi \right) \]
\[ t_{s,\alpha\%} = - \frac{\ln \alpha}{\omega_n \xi} \]
\includegraphics[scale=0.3]{bodeT.png}
\begin{figure}
\centering
\includegraphics[scale=0.5]{bodeT.png}
\caption{Diagramma di bode della funzione $T(j \omega)$}
\end{figure}
Calcoliamo il picco di risonanza:
Calcoliamo il picco di risonanza per la $T(j \omega)$:
\[ T_p = \max_\omega \abs{T(j \omega)}_{dB} \]
calcoliamo la banda del sistema a -3dB:
\[ \omega_B: T(j \omega_b)_{dB} = -3 dB \]
\includegraphics[scale=0.3]{bodeS.png}
\begin{figure}
\centering
\includegraphics[scale=0.5]{bodeS.png}
\caption{Diagramma di bode della funzione $S(j \omega)$}
\end{figure}
Calcoliamo il picco di risonanza:
Calcoliamo il picco di risonanza per la $S(j \omega)$:
\[ S_p = \max_\omega \abs{S(j \omega)}_{dB} \]
calcoliamo la banda del sistema a -3dB:
\[ \omega_{BS}: S(j \omega_{BS})_{dB} = -3 dB \]
@@ -413,7 +448,7 @@ Il valore assoluto di $K_c$ si sceglie in modo che sia rispettato il vincolo ric
\paragraph{Attenzione} Per prendere tutti i punti bisogna tracciare diagramma di Bode, contorno e diagramma di Nyquist quotati (quindi con il punto critico e con $j \infty$, $-j \infty$).
\subsection{Inserimento di reti \lead e \lag}
\paragraph{Grafico di partenza} Si parte dal diagramma di Nychols tracciato con $mynqichsdsdsa(T_p, s_p)$ e $nichols(Lin)$ con $L_{in}(s) = \frac{K_c}{s^\nu}G_p G_a G_s G_f$. Si disegnano inoltre i vincoli inferiori e superiori di $\omega_c$.
\paragraph{Grafico di partenza} Si parte dal diagramma di Nychols tracciato con $myngridst(T_p, s_p)$ e $nichols(Lin)$ con $L_{in}(s) = \frac{K_c}{s^\nu}G_p G_a G_s G_f$. Si disegnano inoltre i vincoli inferiori e superiori di $\omega_c$.
\paragraph{Valore di $\omega_{c,des}$} Il valore di $\omega_c$ si sceglie in modo da ottimizzare una determinata specifica (ad esempio se ci si avvicina a $\omega_{c,max}$ si ottiene un sistema più veloce). Scegliendo il valor medio si ottiene un compromesso tra tutti i vincoli (consigliata!), scelta che risulta vantaggiosa per soddisfare i vincoli dei disturbi sinusoidali dove i limiti di $\omega_c$ sono determinati in maniera approssimata.
@@ -432,9 +467,13 @@ La rete \lead è utilizzata per aumentare modulo e fase con una rete fisicamente
\[ R_d (s) = \frac{1 + \frac{s}{z_d}}{1 + \frac{s}{m_d z_d}} \quad m_d > 1 \]
Scegliendo $m_d > 1$ si garantisce che il polo compaia sempre a una frequenza maggiore dello zero. Più $m_d$ cresce più il comportamento della rete \lead assomiglia al comportamento di una rete con un solo zero.
\includegraphics[scale=0.3]{retelead.png}
\begin{figure}
\centering
\includegraphics[scale=0.5]{retelead.png}
\caption{Diagramma di una rete lead normalizzata, al variare del parametro $m_d$}
\end{figure}
Notare che un questi diagrammi di Bode si rappresenta la risposta in frequenza normalizzata su $z_d$. In questo modo la frequenza normalizzata $1$ corrisponde la frequenza dello zero $z_d$.
Notare che in questi diagrammi di Bode si rappresenta la risposta in frequenza normalizzata su $z_d$. In questo modo la frequenza normalizzata $1$ corrisponde la frequenza dello zero $z_d$.
La rete \lead permette di aumentare il modulo di una quantità finita (che cresce con il crescere di $m_d$). L'andamento della fase è sempre a campana, ovvero si può aumentare la fase solo all'interno di un certo range di frequenze. Il guadagno di fase cresce con $m_d$.
@@ -442,12 +481,22 @@ La rete \lead permette di aumentare il modulo di una quantità finita (che cresc
\[ R_z(s) = \left(1 + \frac{s}{z}\right) \]
La rete \zero è la migliore delle reti \lead possibili (è il caso limite $m_d \to \infty$). Pertanto è la scelta preferenziale tutte le volte che ho $\nu \geq 1$. In particolare, dato $\nu$, è sempre possibile inserire se necessario fino ad numero massimo di reti \zero pari a $\nu$. Il guadagno di fase massimo è di 90°.
\begin{figure}
\centering
\includegraphics[scale=0.5]{retezero.png}
\caption{Diagramma di una rete zero normalizzata}
\end{figure}
\paragraph{Necessità di aggiungere poli} In alcuni casi non è sufficiente diminuire $K_c$ per soddisfare i vincoli sulla frequenza di crossover (a causa dei vincoli su $K_c$). Quindi si devono inserire dei poli per diminuire il modulo alla frequenza $\omega_{c,des}$. Inserendo solamente dei poli la fase diminuisce in modo eccessivo portando $L(s)$ nella regione proibita, quindi per ogni polo si deve anche inserire uno zero.
\paragraph{Rete \lag}
\[ R_i(s) = \frac{1+\frac{s}{m_i p_i}}{1+ \frac{s}{p_i}} \quad m_i > 1 \]
\includegraphics[scale=0.3]{retelag.png}
\begin{figure}
\centering
\includegraphics[scale=0.5]{retelag.png}
\caption{Diagramma di una rete lag normalizzata, al variare del parametro $m_i$}
\end{figure}
Anche in questo caso il diagramma è normalizzato sulla frequenza del polo.
@@ -463,10 +512,12 @@ La regola è prendere $z_p = 100$ dove la fase torna a essere a zero. In genere
\subsection{Scelta di $\omega_c$, reti \lead e \lag}
In seguito una breve guida per capire come scegliere i parametri del controllore.
\paragraph{Scelta di $\omega_{c,des}$} In genere si sceglie $\omega_{c,des} = \frac{\omega_{c,sup} - \omega_{c,inf}}{2}$ se la frequenza si trova in un punto con modulo inferiore a zero o se non ci sono frequenze ammissibili con modulo inferiore a zero. Nel primo caso è sufficiente inserire solo reti \lead, mentre nel secondo caso non è possibile evitare d'inserire reti \lag.
\paragraph{Scelta di $\omega_{c,des}$} In genere si sceglie $\omega_{c,des} = \frac{\omega_{c,sup} + \omega_{c,inf}}{2}$ se la frequenza si trova in un punto con modulo inferiore a zero o se non ci sono frequenze ammissibili con modulo inferiore a zero. Nel primo caso è sufficiente inserire solo reti \lead, mentre nel secondo caso non è possibile evitare d'inserire reti \lag.
Se il valor medio corrisponde a un punto con modulo positivo ma esiste una $\omega_c$ ammissibile dove il modulo è negativo, si sceglie $\omega_c$ a sinistra dell'asse delle ordinate in modo tale che il sistema sia progettabile senza inserire una rete \lag.
In alcuni casi è preferibile scegliere una $\omega_c$ inferiore rispetto al valor medio in modo da ridurre il numero di reti \lead necessarie per stabilizzare il sistema.
\subparagraph{All'esame} Riportare sul foglio il diagramma di Nichols evidenziando le regioni proibite e la scelta di $\omega_{c,des}$.
\paragraph{Scelta di $K_c$} Se è necessario modificare il modulo e non la fase, è bene modificare direttamente $K_c$. Se si deve diminuire il modulo si sceglie il minimo valore possibile di $K_c$, in modo da non dover inserire reti \lag se possibile.
@@ -478,12 +529,25 @@ Il numero di reti da inserire dipende da quanto modulo e quanta fase è necessar
Si devono quindi inserire reti \lead in due casi:
\begin{itemize}
\item Devo aumentare modulo e fase: In questo caso si progetta la rete partendo dal grafico del modulo. Infatti il modulo deve crescere in maniera precisa, mentre la fase può aumentare anche più del dovuto. Dal grafico del modulo si sceglie $z_d$, e poi dal grafico della fase si sceglie $m$.
In alternativa si possono inserire prima le reti \zero o \lead per compensare la fase, e poi si fa crescere $\abs{K_c}$ in modo da compensare il modulo.
\item Devo solo aumentare la fase e devo diminuire il modulo: In questo caso si lavora solo sulla fase, in quanto il modulo è poi abbassato dalla rete \lag (che va progettata successivamente). Si sceglie quindi $z_d$ attorno al \textbf{valore normalizzato} $10^0$ in modo da minimizzare il guadagno al modulo.
\end{itemize}
Può essere necessario evitare che combinando più reti \lead uguali la funzione $L(s)$ abbia un picco di fase molto grande attorno all'asse delle ascisse. Altrimenti la funzione $L(s)$ si potrebbe allontanare troppo dalla sua approssimazione, ottenuta con il prototipo del secondo ordine. Per risolvere questo problema basta che le frequenze normalizzate delle due reti siano sufficientemente lontane tra loro.
\paragraph{Inserimento rete \lag} La rete \lag si progetta analizzando unicamente il guadagno. Si sceglie $z_p = 100$ e poi si calcola
\[ m_i = 10^{\frac{\text{attenuazione}}{20}} \]
\paragraph{Compensazione con modifica di $K_c$} Quando Kc è libero, si può modificare il guadagno della funzione $L(s)$ applicando la seguente formula:
\[ K_c^\text{new} = K_c^\text{old} 10^{\frac{\text{modulo da guadagnare in dB}}{20}} \]
Il modulo da guadagnare può essere sia positivo che negativo. Nel caso sia negativo è necessario verificare che il nuovo $K_c$ rispetti il vincolo sul limite inferiore.
\begin{figure}
\centering
\includegraphics[scale=0.5]{esempionichols.png}
\caption{Esempio della progettazione di un controllore. La funzione è stata prima spostata a destra con una rete \zero ed una \lead e poi è stato modificato il modulo di $K_c$}
\end{figure}
\section{Verifica delle specifiche}
L'ultimo passaggio della progettazione di un sistema di controllo è la verifica delle specifiche, ovvero la verifica che il sistema progettato soddisfi effettivamente i requisiti.
@@ -517,4 +581,48 @@ Dopo aver aggiunto il polo è necessario controllare di nuovo la sovraelongazion
In ogni caso se la specifica sul disturbo sinusoidale è violata di poco la penalizzazione è minima ($\sim 1$ punto).
\section{Controllori digitali}
\subsection{L'implementazione analogica} Il controllore $G_c(s)$ appena progettato è un sistema dinamico LTI a \textbf{tempo continuo}. La sua implementazione pratica, che può essere ottenuta direttamente dalla funzione di trasferimento $G_c(s)$, è un circuito elettronico analogico costituito da amplificatori operazionali con un certo numero di elementi passivi (resistori, condensatori, induttori). Esistono degli schemi circuitali generali con relative formule che permettono di ottenere il circuito partendo dalla funzione di trasferimento.
\subsection{L'implementazione digitale} In molti casi il controllore è implementato in forma digitale. Gli elementi fondamentali sono:
\begin{itemize}
\item Elaboratore digitale: calcola il segnale di comando a partire dalla misura del sensore e dal valore di riferimento.
\item Convertitore A/D: trasforma il segnale analogico del sensore in un segnale digitale.
\item Convertitore D/A: trasforma il comando digitale in un segnale analogico che pilota l'attuatore.
\end{itemize}
Il risultato della conversione A/D è un segnale discreto nel tempo e quantizzato. Un parametro importante è il tempo di sample $T_s$.
\paragraph{L'elaboratore digitale} L'elaboratore digitale implementa l'algoritmo di controllo:
\begin{itemize}
\item Generazione del segnale di riferimento da applicare al sistema di controllo
\item Calcolo a ogni tempo di sample la differenza $e$ tra il segnale di riferimento e il segnale ottenuto dal convertitore A/D moltiplicato per la costante $G_f$: $e(k) = r(k) - y(k) \cdot G_f$
\item Il segnale $e(k)$ deve essere elaborato in modo da generare il segnale di controllo $u(k)$, che è il segnale campionato corrispondente al segnale analogico $u(s)$ generato da $G_c(s)$.
\end{itemize}
Per fare quest'ultima operazione è necessario trasformare il controllore $G_c(s)$ in un sistema LTI a \textbf{tempo discreto}. Ciò si ottiene attraverso la trasformata z, che ci permette di calcolare $G_{cd}(z)$. Con \matlab:
\begin{lstlisting}
Gcd = czd(Gc, Ts, 'matched')
\end{lstlisting}
Vale la relazione:
\[ u(z) = G_{cd}(z)\cdot e(z) \]
Si antitrasforma quindi la $u(z)$ utilizzando le proprietà note (linearita, traslazione, \ldots) e si ottiene quindi la formula da implementare per ottenere il campione $u(k)$. In genere $u(k)$ dipende sia dal segnale $e$ che del segnale $u$ dell'istante attuale e degli istanti precedenti, che quindi devono essere memorizzati.
\paragraph{L'effetto del convertitore D/A sul sistema} Il convertitore D/A trasforma il segnale discreto $u(k)$ nel segnale a tempo continuo $u(t)$. Il segnale si approssima in genere con un filtro \emph{zero order hold}, che mantiene costante il segnale tra l'istante corrispondente a $k$ e $k+1$. Il filtro \emph{zero order hold} si può descrivere con una funzione di trasferimento a tempo continuo:
\[ G_{zoh} (s) = \frac{1 - e^{-Ts}}{s} \simeq \frac{T_s}{1 + s\frac{T_s}{2}} \]
Il filtro di tenuta modifica il comportamento del sistema di controllo, pertanto all'inizio della progettazione del sistema di controllo è bene includere la funzione $G_{zoh}$ nella funzione di trasferimento dell'impianto $G_p$. Osserviamo che è presente un polo che causa a una perdita di fase alla $\omega_{c,des}$. In particolare è possibile dimostrare che per contenere tale perdita di fase tra i -6° e -3° il tempo di campionamento va scelto nel seguente range:
\[ \omega_{c,des} \cdot T_s \in (0.1, 0.2) \]
\paragraph{Riassumendo} Quando si progetta un sistema di controllo analogico che deve poi essere implementato in forma digitale, si deve:
\begin{itemize}
\item Scegliere $T_s$ in modo che la perdita di fase alla $\omega_{c,des}$ sia al più 6° (vedi formula precedente).
\item Si definisce $\tilde{G_p(s)} = \frac{1}{1+s \frac{T_s}{2}}G_p(s)$.
\item Si progetta il sistema considerando come impianto $\tilde{G_p(s)}$.
\item Si calcola $G_{cd}(z)$ con il comando \emph{czd}.
\end{itemize}
\simulink può simulare automaticamente il sistema in tempo discreto considerando l'effetto dello \emph{zero order hold}.
\end{document}

119
images/Immagini.m Normal file
View File

@@ -0,0 +1,119 @@
%% Rete lead
clear
clf
s = tf('s');
figure(1)
for m_d = 3:16
Rz = (1+s)/(1+s/m_d);
bode(Rz)
grid on
hold on
end
title("Lead network")
saveas(gcf,'retelead.png')
%% Rete lag
clear
clf
s = tf('s');
figure(2)
for m_d = 3:16
Rz = (1+s/m_d)/(1+s);
bode(Rz)
grid on
hold on
end
title("Lag network")
saveas(gcf,'retelag.png')
%% Rete zero
clear
clf
s = tf('s');
figure(3)
Rz = (1+s);
bode(Rz)
grid on
title("Zero network")
saveas(gcf,'retezero.png')
%% Plots riguardo ad un generico sistema ad anello
clear
clf
omega_c = 690;
s = tf('s');
L = (1.498e14*s^2 + 8.615e16*s + 1.189e19)/(79350*s^5 + 3.468e08*s^4 + 2.732e11*s^3 + 7.539e13*s^2 + 6.611e15*s)
T = L/(1+L);
S = 1/(1+L);
figure(1)
bodemag(T)
hold on
grid on
[mag,~,wout] = bode(T,omega_c);
text(wout,mag2db(mag),'Tp','Color','red','FontSize',14, 'VerticalAlignment','bottom')
title("T(j \omega)")
xline(omega_c, '--b', "\omega_c", 'LabelOrientation','horizontal','LabelVerticalAlignment','bottom','FontSize',14)
saveas(gcf,'bodeT.png')
figure(2)
bodemag(S);
hold on
grid on
[mag,~,wout] = bode(S,omega_c);
text(wout,mag2db(mag),'Sp','Color','red','FontSize',14, 'VerticalAlignment','bottom')
xline(omega_c, '--b', "\omega_c", 'LabelOrientation','horizontal','LabelVerticalAlignment','bottom','FontSize',14)
title("S(j \omega)")
saveas(gcf,'bodeS.png')
figure(3)
bodemag(L)
hold on
grid on
bodemag(S)
bodemag(T)
xline(omega_c, '--b', "\omega_c", 'LabelOrientation','horizontal','LabelVerticalAlignment','bottom','FontSize',14)
legend
saveas(gcf,'lts.png')
figure(4)
bode(L)
hold on
xline(omega_c, '--b', "\omega_c", 'LabelOrientation','horizontal','LabelVerticalAlignment','bottom','FontSize',14)
title("L(j \omega)")
grid on
saveas(gcf,'plotljw.png')
%% Step response
clear
clf
s = tf('s');
T = 6.9846e09*s*(s+3450)*(s+2760)*(s+400)*(s+345)*(s+230)*(s+175)/(s*(s+4410)*(s+3450)*(s+2760)*(s+400)*(s+175)*(s^2 + 557.1*s + 7.863e04)*(s^2 + 1818*s + 1.598e06));
figure(1)
step(T)
hold on
grid on
xline(0.00292, '--b', "t_r", 'LabelOrientation','horizontal','LabelVerticalAlignment','bottom','FontSize',14)
yline(1, '--b', "y_\infty", 'LabelOrientation','horizontal','LabelVerticalAlignment','bottom','FontSize',14)
yline(1.05, '--b', "y_{max}", 'LabelOrientation','horizontal','LabelVerticalAlignment','top','FontSize',14)
saveas(gcf,'transitorio.png')
%% Step response second order system
clear
clf
s = tf('s');
t = linspace(0,20,1000);
figure(1)
for xi = 0:0.1:1
Rz = 1/(1+2*xi*s+s^2);
step(Rz,t)
hold on
grid on
end
title("Step response of prototype second order system")
saveas(gcf,'rispostasecondoordine.png')

Binary file not shown.

Before

Width:  |  Height:  |  Size: 115 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 103 KiB

After

Width:  |  Height:  |  Size: 42 KiB

BIN
images/esempionichols.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 86 KiB

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 124 KiB

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 198 KiB

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 201 KiB

After

Width:  |  Height:  |  Size: 108 KiB

BIN
images/retezero.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 184 KiB

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

After

Width:  |  Height:  |  Size: 31 KiB