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équentielle:
01.jpgCode: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");
Puis en BF avec le PID
02.jpgCode: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");
Mon but est alors d’utiliser une des méthodes Ziegler et Nichols pour calculer les Kp, Ki, Kd.
Méthode du point critique
Il me semble que, comme mon système en BF (avec Kp=1, Ki=Kd=0) n’arrive pas à -180°, je ne peux utiliser cette méthode. Car mon système en BF ne pourra arrivé à une oscillation entretenue ?
Méthode indicielle
Cette méthode est basée sur l’analyse de la « courbe en S ».
6G8ma.jpg
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 système 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.
-----