Control de motores de CC
Este ejemplo compara tres técnicas de control de motores de CC para efectuar un seguimiento de comandos de valores de consigna y reducir la sensibilidad a las perturbaciones de carga:
Comando feedforward
Control por feedback integral
Regulación LQR
Consulte el apartado "Introducción: Creación de modelos" para obtener más detalles sobre el modelo de motor de CC.
Planteamiento del problema
En el caso de motores de CC controlados por inducido, el voltaje aplicado Va controla la velocidad angular w del eje.
Este ejemplo presenta dos técnicas de control de motores de CC que permiten reducir la sensibilidad de w a las variaciones de la carga (alteraciones del par motor opuesto por la carga del motor).
Arriba se presenta un modelo simplificado del motor de CC. El par motor Td modeliza las perturbaciones de la carga. Debe reducir al mínimo las variaciones de velocidad inducidas por tales perturbaciones.
Para este ejemplo, las constantes físicas son las siguientes:
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
En primer lugar, construya un modelo de espacio de estados del motor de CC con dos entradas (Va, Td) y una salida (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: Calcule con el formato de espacio de estados para reducir el orden del modelo.
Ahora represente la respuesta a la velocidad angular ante un cambio de escalón en el voltaje Va:
stepplot(dcm(1));
Haga clic con el botón secundario en la gráfica y seleccione "Characteristics:Settling Time" para que se muestre el tiempo de establecimiento.
Diseño de control de motor de CC de feedforward
Puede utilizar esta sencilla estructura de control de feedforward para determinar que la velocidad angular w debe corresponder con un valor dado w_ref.
La variable Kff de ganancia de feedforward debe configurarse para que sea recíproca a la ganancia de CC desde Va a w.
Kff = 1/dcgain(dcm(1))
Kff = 4.1000
Para evaluar el diseño de feedforward ante las perturbaciones de la carga, simule la respuesta a un comando de escalón w_ref=1 con una perturbación de Td = -0,1 Nm entre t=5 y t=10 segundos:
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'; h = 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');
Queda claro que el control de feedforward no asimila las perturbaciones de la carga demasiado bien.
Diseño de control de motor de CC de feedback
A continuación, probemos la estructura de control por feedback que se muestra más abajo.
Para imponer un estándar de error de estado estacionario, utilice el control integral del formato
C(s) = K/s
where K is to be determined.
Para determinar la ganancia K, puede utilizar la técnica de lugar de las raíces aplicada al lazo abierto 1/s * transferencia(Va->w):
h = rlocusplot(tf(1,[1 0]) * dcm(1)); setoptions(h,'FreqUnits','rad/s'); xlim([-15 5]); ylim([-15 15]);
Haga clic en las curvas para ver los valores de ganancia y la información relacionada. Aquí una opción razonable sería elegir K = 5. La app Control System Designer es una interfaz de usuario interactiva que permite ejecutar estos diseños.
Compare este nuevo diseño con el diseño inicial de feedforward aplicado al mismo caso práctico:
K = 5; C = tf(K,[1 0]); % compensator K/s cl_rloc = feedback(dcm * append(C,1),1,1,1); h = 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')
El diseño de lugar de las raíces es mejor para rechazar las perturbaciones de la carga.
Diseño de control de motor de CC LQR
Para mejorar aún más el rendimiento, pruebe a diseñar un regulador lineal cuadrático (LQR) para la estructura de feedback que se muestra a continuación.
Además de la integral de error, el esquema LQR también utiliza el vector de estado x=(i,w) para sintetizar el voltaje de impulso Va. El voltaje resultante tiene el formato
Va = K1 * w + K2 * w/s + K3 * i
where i is the armature current.
Para mejorar la anulación de perturbaciones, utilice una función de coste que penalice el error integral cuando sea grande. P. ej., la función de coste
donde
La ganancia de LQR óptima para esta función de coste se calcula como sigue:
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);
A continuación, derive el modelo de lazo cerrado para realizar simulaciones:
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
Esta gráfica compara los diagramas de Bode de lazo cerrado correspondientes a los tres diseños de control de motor de CC.
bodeplot(cl_ff,cl_rloc,cl_lqr);
Haga clic en las curvas para identificar los sistemas o revisar los datos.
Comparación de diseños de control de motores de CC
Por último, vamos a comparar los tres diseños de control de motor de CC de nuestro caso práctico de simulación:
h = lsimplot(cl_ff,cl_rloc,cl_lqr,u,t); title('Setpoint tracking and disturbance rejection') legend('feedforward','feedback (rlocus)','feedback (LQR)','Location','NorthWest')
Gracias al grado de libertad adicional que permite, el compensador LQR es el que mejor se comporta rechazando las perturbaciones de la carga (de entre los tres diseños de control de motores de CC que abordamos aquí).