Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MATLAB Discussion :

programmation d'un asservissement PID


Sujet :

MATLAB

  1. #1
    Invité
    Invité(e)
    programmation d'un asservissement PID
    Bonjour à tous,

    J'aimerai obtenir des informations sur la méthode générale de programmation d'un asservissement PID pour un moteur. Je souhaite programmer cela sur matlab sans l'aide de Simulink (faire le code complet moi même). Est ce que quelqu'un peut m'expliquer la démarche à suivre?

    Merci d'avance!

  2. #2
    Membre émérite
    Bonjour,
    Tu as deux solutions :
    - Utiliser pid :
    https://www.mathworks.com/help/control/ref/pid.html

    Ou:
    - programmer l’équation récurrente (ou aux différences)

  3. #3
    Invité
    Invité(e)
    Merci pour les informations. C'est bien la formule de récurrence qui m'intéresse.

  4. #4
    Membre émérite
    Bonjour,

    Un exemple simple avec uniquement Kp et moteur passe_bas d'ordre un

    .

    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
     
    clear
     
    p=tf('p');
    Te=0.01;% Période d'échantillonnage
    fc=1;
    omegac=2*pi*fc;
    tau=1/omegac;
    FTP=1/(1+tau*p);% Moteur <img src="images/smilies/icon_razz.gif" border="0" alt="" title=":P" class="inlineimg" />asse_bas d'ordre un
    FTZ=c2d(FTP,Te,'zoh');% transformation avec bloqueur d,ordre zero
    numz=FTZ.num{1}
    denz=FTZ.den{1}
    un=numz(2)-denz(2)
    %Equation récurrente
    n=1;Enm1=0;Enm2=0;Snm2=0;Snm1=0;S(1)=0;
    Kp=1;
    for t=0:Te:2
        n=n+1;
        E(n)=1;% Commande : Signal d'entree Echelon unité
        %E(n)=0.01*n;% Commande : Signal d'entree Rampe
        Ecart=E(n)-S(n-1);
        S(n)=Kp*(E(n)*numz(1)+numz(2)*Enm1)-denz(2)*Snm1;% Equation récurrente
        Snm1=S(n);Enm1=E(n);% Vieillissement
    end
    j=1:n;
    plot(j*Te,E,'b','LineWidth',2)
    hold on
    plot(j*Te,S(j),'r','LineWidth',2)
    xlabel('t (s)','FontSize',13)
    grid
    axis([0 2 0 2])

  5. #5
    Invité
    Invité(e)
    merci beaucoup phryte!!! J'essaie ça tout de suite pour adapter ensuite à mon cas

###raw>template_hook.ano_emploi###