2 pièce(s) jointe(s)
PID, Moteur Brushless et Zeigler/Nichols
Bonjour à tous,
Je souhaite, simuler via matlab ( ou Octave ) le comportement d’un moteur brushless, avec son asservissement en PID. Je pense y être arriver, mais je n’arrive pas à en extrapoler les Kp,Kd,Ki via les méthodes de Ziegler et Nichols.
Voici la définition du moteur, et de sa fonction de transfert G(s)=w(s)/u(s) ( vitesse angulaire / tension de commande )
ainsi que sa réponse indicielle et fréquencielle:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
R=1.2; % Terminal Resistance phase to phase [R]
L=0.560e-3; % Terminal Inductance phase to phase [L]
Kt=25.5e-3; % Torque constant [Nm/A]
%Ke=0.65/1e3; % Back_EFM constant [V/rpm]
Ks=37.4; % Speed Constant [rpm/V]
tm=17.1e-3; % Mechanical Time constant [s]
J=92.5e-7; % Roto inertia [kg.m^2]
p=3; % number of phase
% Caluated parameters
te=L/(p*R); % Electrical time constant [s]
Ke=(p*R*J)/(tm*Kt); % Back emf constant
% Transfer Function
G=tf(1/Ke,[tm*te tm 1]) % <=> (1/ke)/(s^2*tm*te + s*tm + 1)
figure();
step(G);
grid on;
title("Open loop Step Response");
xlabel("Time [s]");
ylabel("[rpm/V]");
% Bode
figure();
bode(G);
grid on;
title("Open loop Bode Diagram"); |
Pièce jointe 502438
Puis en BF avec le PID
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
Kp_A=1; % Proportional gain
Ki_A=0; % Integral gain
Kd_A=0; % Derivative gain
Kp_B=10;
Ki_B=0;
Kd_B=0;
% Transfer Function
PID_A=tf([Kd_A Kp_A Ki_A],[1 0]); % <=> (Kd.s²+Kp.s+Ki)/(1.s+0)
PID_B=tf([Kd_B Kp_B Ki_B],[1 0]);
Cloop_A=G*PID_A/(1+G*PID_A); % =feedback(G*PID_A,1);
Cloop_B=G*PID_B/(1+G*PID_B);
% Step Response
figure();
hold on
step(Cloop_A);
step(Cloop_B);
hold off
%xlim([0 0.01]);
grid on;
legend("Cloop_A","Cloop_B");
title("Close loop Step Response");
xlabel("Time [s]");
ylabel("Angle speed [rpm]");
% Bode
figure();
hold on
bode(Cloop_A);
bode(Cloop_B);
hold off
grid on;
legend("Cloop_A","Cloop_B");
title("Close loop Bode Diagram"); |
Pièce jointe 502444
Mon but est alors d’obtenir d’utiliser une des méthodes Ziegler et Nichols pour calculer les Kp, Ki, Kd.
Méthode du point critique
Il me semble que, mon système en BF (avec Kp=1, Ki=Kd=0) n’arrivant pas à -180°, je ne peux utiliser cette méthode. Car mon système en BF ne pourra avoir une oscillation entretenue ?
Méthode indicielle
Cette méthode est basée sur l’analyse de la « courbe en S ».
Sur le net, on trouve:
- « The Ziegler Nichols method used was done based on obtaining the open loop transfer function and thereafter obtaining the necessary parameter values »
Mais la fonction de transfère en BO c’est step(G) ? qui n’est pas une courbe en S ? - On trouve aussi « réponse indicielle du processus seul ». c.a.d le system en BF sans PID ? step(G/(1+G)) ?
Il y a un truc que je ne comprends pas,...
Pouvez-vous me corriger, ou m’expliquer,…
Merci d’avance.