Controllo dei motori CC
Questo esempio mostra il confronto di tre tecniche di controllo dei motori CC per il tracking dei comandi di setpoint e la riduzione della sensibilità ai disturbi di carico:
comando feed-forward
controllo di feedback integrale
regolazione LQR
Per ulteriori dettagli sul modello del motore CC, vedere "Come iniziare: creazione di modelli".
Dichiarazione del problema
Nei motori CC a controllo di armatura, la tensione applicata Va controlla la velocità angolare w dell'albero.

Questo esempio mostra due tecniche di controllo dei motori CC volte a ridurre la sensibilità di w alle variazioni di carico (variazioni nella coppia opposta dal carico del motore).

Un modello semplificato del motore CC è illustrato sopra. La coppia Td modella i disturbi di carico. È necessario minimizzare le variazioni di velocità indotte da tali disturbi.
In questo esempio, le costanti fisiche sono:
R = 2.0; % Ohms L = 0.5; % Henrys Km = 0.1; % torque constant Kb = 0.1; % back emf constant Kf = 0.2; % Nms J = 0.02; % kg.m^2/s^2
Per prima cosa, costruire un modello stato-spazio del motore CC con due input (Va, Td) e un output (w):
h1 = tf(Km,[L R]); % armature h2 = tf(1,[J Kf]); % eqn of motion dcm = ss(h2) * [h1 , 1]; % w = h2 * (h1*Va + Td) dcm = feedback(dcm,Kb,1,1); % close back emf loop
Nota: effettuare i calcoli utilizzando la forma stato-spazio per minimizzare l'ordine del modello.
Ora tracciare la risposta della velocità angolare a una variazione a gradino della tensione Va:
figure stepplot(dcm(1));

Fare clic con il tasto destro del mouse sul grafico e selezionare "Characteristics:Settling Time" (Caratteristiche: tempo di assestamento) per visualizzare il tempo di assestamento.
Progettazione di controllo di un motore CC feed-forward
È possibile utilizzare questa semplice struttura di controllo feed-forward per portare la velocità angolare w a un valore determinato w_ref.

Il guadagno feed-forward Kff deve essere impostato sul reciproco del guadagno CC da Va a w.
Kff = 1/dcgain(dcm(1))
Kff =
4.1000
Per valutare la progettazione feed-forward in presenza di disturbi di carico, simulare la risposta a un comando a gradino w_ref = 1 con un disturbo Td = -0,1 Nm compreso tra t = 5 e t = 10 secondi:
t = 0:0.1:15; Td = -0.1 * (t>5 & t<10); % load disturbance u = [ones(size(t)) ; Td]; % w_ref=1 and Td cl_ff = dcm * diag([Kff,1]); % add feedforward gain cl_ff.InputName = {'w_ref','Td'}; cl_ff.OutputName = 'w'; figure lp = lsimplot(cl_ff,u,t); title('Setpoint tracking and disturbance rejection') legend('cl\_ff'); % Annotate plot line([5,5],[.2,.3]); line([10,10],[.2,.3]); text(7.5,.25,{'disturbance','T_d = -0.1Nm'},... 'vertic','middle','horiz','center','color','r');

È evidente che il controllo feed-forward gestisce male i disturbi di carico.
Progettazione di controllo di un motore CC feedback
Provare adesso la struttura di controllo feedback mostrata di seguito.

Per garantire un errore allo stato stazionario pari a zero, utilizzare il controllo integrale della forma
C(s) = K/s
where K is to be determined.
Per determinare il guadagno K, è possibile utilizzare la tecnica del luogo della radice applicata alla funzione di trasferimento a loop aperto 1/s * (Va->w):
figure
rp = rlocusplot(tf(1,[1 0]) * dcm(1));
rp.FrequencyUnit = "rad/s";
xlim([-15 5]);
ylim([-15 15]);

Fare clic sulle curve per leggere i valori di guadagno e le informazioni correlate. In questo caso, una scelta ragionevole è K = 5. L'app Control System Designer è un'interfaccia utente interattiva che consente di realizzare tali progetti.
Confrontare questo nuovo progetto con quello iniziale di tipo feed-forward sullo stesso caso di test:
K = 5; C = tf(K,[1 0]); % compensator K/s cl_rloc = feedback(dcm * append(C,1),1,1,1); figure lp2 = lsimplot(cl_ff,cl_rloc,u,t); cl_rloc.InputName = {'w_ref','Td'}; cl_rloc.OutputName = 'w'; title('Setpoint tracking and disturbance rejection') legend('feedforward','feedback w/ rlocus','Location','NorthWest');

La progettazione basata sul luogo della radice è più efficace nella reiezione dei disturbi di carico.
Progettazione di controllo di un motore CC LQR
Per migliorare ulteriormente le prestazioni, provare a progettare un regolatore lineare quadratico (LQR) per la struttura di feedback mostrata di seguito.

Oltre all'integrale di errore, lo schema LQR utilizza anche il vettore di stato x=(i,w) per sintetizzare la tensione di comando Va. La tensione risultante ha la forma
Va = K1 * w + K2 * w/s + K3 * i
where i is the armature current.
Per una migliore reiezione dei disturbi, utilizzare una funzione di costo che penalizzi gli errori integrali elevati, ad esempio la funzione di costo

dove

Il guadagno LQR ottimale per questa funzione di costo viene calcolato come segue:
dc_aug = [1 ; tf(1,[1 0])] * dcm(1); % add output w/s to DC motor model
K_lqr = lqry(dc_aug,[1 0;0 20],0.01);
Quindi derivare il modello a loop chiuso ai fini della simulazione:
P = augstate(dcm); % inputs:Va,Td outputs:w,x C = K_lqr * append(tf(1,[1 0]),1,1); % compensator including 1/s OL = P * append(C,1); % open loop CL = feedback(OL,eye(3),1:3,1:3); % close feedback loops cl_lqr = CL(1,[1 4]); % extract transfer (w_ref,Td)->w
Questo grafico confronta i diagrammi di Bode a loop chiuso delle tre progettazioni di controllo del motore CC.
figure bodeplot(cl_ff,cl_rloc,cl_lqr);

Fare clic sulle curve per identificare i sistemi o esaminare i dati.
Confronto tra le progettazioni di controllo del motore CC
Infine, confrontare le tre progettazioni di controllo del motore CC sul caso di test di simulazione:
figure lp3 = lsimplot(cl_ff,cl_rloc,cl_lqr,u,t); title('Setpoint tracking and disturbance rejection') legend('feedforward','feedback (rlocus)','feedback (LQR)','Location','NorthWest');

Grazie ai suoi ulteriori gradi di libertà, il compensatore LQR offre le prestazioni migliori nella reiezione dei disturbi di carico (tra le tre tecniche di progettazione di controllo del motore CC qui analizzate).