Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

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

$$ C = \int^\infty_0 (20q(t)^2+\omega(t)^2+0.01V_a(t)^2) dt $$

donde

$$ q(s) = \omega(s)/s. $$

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í).