Contenu principal

Contrôle de moteur DC

Cet exemple montre la comparaison de trois techniques de contrôle de moteur DC permettant le pistage des commandes de consigne et la réduction de la sensibilité aux perturbations de charge :

  • commande feedforward

  • système d’asservissement intégral

  • réglementation LQR

Consultez « Pour bien démarrer : Création de modèles » pour plus de détails sur le modèle de moteur DC.

Énoncé du problème

Dans les moteurs DC à induit contrôlé, la tension appliquée Va contrôle la vitesse angulaire w de l’arbre.

Cet exemple montre deux techniques de contrôle de moteur DC permettant la réduction de la sensibilité de w aux variations de charge (changements dans le couple contrés par la charge du moteur).

Un modèle simplifié du moteur DC est affiché ci-dessus. Le couple Td modèle les perturbations de charge. Vous devez minimiser les variations de vitesse induites par ces perturbations.

Pour cet exemple, les constantes physiques sont :

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

Construisez d’abord un modèle de représentation d’état du moteur DC avec deux entrées (Va,Td) et une sortie (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

Remarque : Calculez avec la forme de la représentation d’état pour minimiser l’ordre des modèles.

Tracez maintenant la réponse de vitesse angulaire à un changement de pas dans la tension Va :

figure
stepplot(dcm(1));

Faites un clic droit sur le tracé et sélectionnez « Characteristics:Settling Time » pour afficher le temps de stabilisation.

Design de systèmes de contrôle feedforward pour moteurs DC

Vous pouvez utiliser cette simple structure de contrôle feedforward pour attribuer à la vitesse angulaire w une valeur indiquée w_ref.

Le gain feedforward Kff devrait être défini sur l’inverse du gain DC de Va à w.

Kff = 1/dcgain(dcm(1))
Kff =

    4.1000

Pour évaluer le design feedforward face aux perturbations de charge, simulez la réponse à une commande indicielle w_ref=1 avec une perturbation Td = -0.1Nm entre t=5 et t=10 secondes :

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');

Il est clair que le contrôle feedforward gère mal les perturbations de charge.

Design de systèmes de contrôle de moteurs DC en boucle fermée

Ensuite, essayez la structure de système d’asservissement affichée ci-dessous.

Pour garantir qu’il n’y a aucune erreur d’état stationnaire, utilisez le contrôle intégral de la forme

     C(s) = K/s
     where K is to be determined.

Pour déterminer le gain K, vous pouvez utiliser la technique du lieu des racines appliquée à la boucle ouverte 1/s * transfert(Va->w) :

figure
rp = rlocusplot(tf(1,[1 0]) * dcm(1));
rp.FrequencyUnit = "rad/s";
xlim([-15 5]);
ylim([-15 15]);

Cliquez sur les courbes pour lire les valeurs de gain et les informations associées. Un choix raisonnable dans ce cas est K = 5. L’application Control System Designer est une UI interactive qui permet d’effectuer ces designs.

Comparez ce nouveau design au design feedforward initial sur le même cas 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');

Le design de lieu des racines est meilleur en matière de rejet des perturbations de charge.

Design de systèmes de contrôle de moteurs DC LQR

Pour améliorer davantage la performance, essayez de concevoir un régulateur linéaire quadratique (LQR) pour la structure en boucle fermée affichée ci-dessous.

En plus de l’intégrale d’erreur, le schéma LQR utilise également le vecteur d’état x=(i,w) pour synthétiser la tension de commande Va. La tension obtenue est de la forme

     Va = K1 * w + K2 * w/s + K3 * i
     where i is the armature current.

Pour un meilleur rejet des perturbations, utilisez une fonction de coût qui pénalise les grandes erreurs d’intégrale, p. ex. la fonction de coût

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

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

Le gain LQR optimal pour cette fonction de coût est calculé de la façon suivante :

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);

Ensuite, dérivez le modèle en boucle fermée à des fins de simulation :

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

Ce tracé compare les diagrammes Bode en boucle fermée pour les trois designs de systèmes de contrôle de moteurs DC.

figure
bodeplot(cl_ff,cl_rloc,cl_lqr);

Cliquez sur les courbes pour identifier les systèmes ou inspecter les données.

Comparaison de designs de systèmes de contrôle de moteurs DC

Enfin, nous comparons les trois designs de systèmes de contrôle de moteurs DC dans notre cas test de simulation :

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');

Grâce à ses degrés supplémentaires de liberté, le correcteur LQR réagit mieux lors du rejet des perturbations de charge (parmi les trois design de systèmes de contrôle de moteurs DC présentés ici).