diff --git a/ProgettareSistemi.tex b/ProgettareSistemi.tex index b4876f7..aa40e84 100644 --- a/ProgettareSistemi.tex +++ b/ProgettareSistemi.tex @@ -188,7 +188,11 @@ In ogni caso osserviamo un problema dato dal secondo punto. Ricordiamo però che \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 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 } + \end{figure} 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$. @@ -205,7 +209,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 +257,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}$. @@ -335,7 +352,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} @@ -351,8 +372,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]\] @@ -363,16 +389,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 \] @@ -426,9 +460,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$. @@ -436,12 +474,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. @@ -487,6 +535,12 @@ Può essere necessario evitare che combinando più reti \lead uguali la funzione \[ 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. diff --git a/images/Immagini.m b/images/Immagini.m new file mode 100644 index 0000000..f7d5944 --- /dev/null +++ b/images/Immagini.m @@ -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') diff --git a/images/bodeS.png b/images/bodeS.png index 8469136..43da029 100644 Binary files a/images/bodeS.png and b/images/bodeS.png differ diff --git a/images/bodeT.png b/images/bodeT.png index 1188cbb..95912fc 100644 Binary files a/images/bodeT.png and b/images/bodeT.png differ diff --git a/images/esempionichols.png b/images/esempionichols.png new file mode 100644 index 0000000..14a30fd Binary files /dev/null and b/images/esempionichols.png differ diff --git a/images/lts.png b/images/lts.png index 469c3c3..d5c7ca8 100644 Binary files a/images/lts.png and b/images/lts.png differ diff --git a/images/plotljw.png b/images/plotljw.png index 1037b88..beba152 100644 Binary files a/images/plotljw.png and b/images/plotljw.png differ diff --git a/images/retelag.png b/images/retelag.png index 7a37390..e70e10c 100644 Binary files a/images/retelag.png and b/images/retelag.png differ diff --git a/images/retelead.png b/images/retelead.png index 4af367e..00c05da 100644 Binary files a/images/retelead.png and b/images/retelead.png differ diff --git a/images/retezero.png b/images/retezero.png new file mode 100644 index 0000000..58c3611 Binary files /dev/null and b/images/retezero.png differ diff --git a/images/rispostasecondoordine.png b/images/rispostasecondoordine.png index 4dc90ef..9f2fba8 100644 Binary files a/images/rispostasecondoordine.png and b/images/rispostasecondoordine.png differ diff --git a/images/tabellainseguimento.png b/images/tabellainseguimento.png deleted file mode 100644 index 0611a0a..0000000 Binary files a/images/tabellainseguimento.png and /dev/null differ diff --git a/images/transitorio.png b/images/transitorio.png index 0e9ca3c..727e78e 100644 Binary files a/images/transitorio.png and b/images/transitorio.png differ