Esercitazione di laboratorio #3 - Controlli Automatici
Esercizio #1: progetto del controllo di un levitatore magnetico mediante retroazione statica dallo stato
Autori: M. Indri, M. Taragna (ultima modifica: 28/04/2020)
Contents
- Introduzione
- Passo 0: definizione del sistema da controllare (levitatore magnetico)
- Passo 1: verifica della completa raggiungibilita' del sistema da controllare
- Passo 2: assegnazione degli autovalori mediante retroazione statica dallo stato
- Passo 3: definizione del sistema controllato mediante retroazione dallo stato
- Passo 4: simulazione del sistema controllato mediante retroazione dallo stato
Introduzione
Si puo' suddividere il programma in diverse sezioni di codice usando i caratteri "%%". Ogni sezione puo' essere eseguita separatamente dalle altre con il comando "Run Section" (nella toolbar dell'Editor, subito a destra del tasto "Run"). Si puo' ottenere lo stesso risultato selezionando la porzione di codice che si vuole eseguire e premendo il tasto funzione F9, risparmiando cosi' tempo rispetto all'esecuzione di tutto il programma. Si prenda questo script come esempio di riferimento.
clear all, close all, clc
Passo 0: definizione del sistema da controllare (levitatore magnetico)
A=[0, 1; 900, 0];
B=[0; -9];
C=[600, 0];
D=0;
eig_A=eig(A) % Il modello linearizzato e' instabile
eig_A = 30.0000 -30.0000
Passo 1: verifica della completa raggiungibilita' del sistema da controllare
Mr=ctrb(A,B) rank_Mr=rank(Mr)
Mr = 0 -9 -9 0 rank_Mr = 2
Passo 2: assegnazione degli autovalori mediante retroazione statica dallo stato
l1=-40; l2=-60; K=place(A,B,[l1,l2]) % In alternativa: acker(A,B,[l1,l2]) eig_A_minus_BK=eig(A-B*K) % Verifica della corretta assegnazione degli autovalori % Scelta del guadagno alfa alfa=-1 % Per imporre la condizione di regolazione dell'uscita, basta scommentare: % alfa=inv(-(C-D*K)*inv(A-B*K)*B+D)
K = -366.6667 -11.1111 eig_A_minus_BK = -40.0000 -60.0000 alfa = -1
Passo 3: definizione del sistema controllato mediante retroazione dallo stato
Ars=A-B*K Brs=alfa*B Crs=C-D*K Drs=alfa*D
Ars = 1.0e+03 * 0 0.0010 -2.4000 -0.1000 Brs = 0 9 Crs = 600 0 Drs = 0
Passo 4: simulazione del sistema controllato mediante retroazione dallo stato
sistema_retroazionato=ss(Ars,Brs,Crs,Drs); t_r=0:.001:4; r=sign(sin(2*pi*0.5*t_r)); dx0_1=[ 0.00; 0]; dx0_2=[+0.01; 0]; dx0_3=[-0.01; 0]; [dy_1,t_dy_1]=lsim(sistema_retroazionato,r,t_r,dx0_1); [dy_2,t_dy_2]=lsim(sistema_retroazionato,r,t_r,dx0_2); [dy_3,t_dy_3]=lsim(sistema_retroazionato,r,t_r,dx0_3); figure, plot(t_r,r,'k',t_dy_1,dy_1,'r',t_dy_2,dy_2,'g',t_dy_3,dy_3,'b'), grid on, title(['Risposta \deltay(t) del sistema controllato mediante retroazione', ... ' dallo stato al variare di \deltax_0']), legend('r(t)',' \deltay(t) per \deltax_0^{(1)}', ... ' \deltay(t) per \deltax_0^{(2)}',' \deltay(t) per \deltax_0^{(3)}')