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 : Sélectionner tout - Visualiser dans une fenêtre à part
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");
Nom : Capture.JPG
Affichages : 211
Taille : 91,9 Ko


Puis en BF avec le PID
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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");
Nom : Capture2.JPG
Affichages : 171
Taille : 96,3 Ko



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.