Répondre à la discussion
Affichage des résultats 1 à 15 sur 15

Regulation PID avec des relais



  1. #1
    Emilien123

    Unhappy Regulation PID avec des relais


    ------

    Bonjour,

    Je vous écris pour vous demander de l'aide concernant le réglage d'un régulateur PID utilisant Arduino. Je suis en train de construire un système de contrôle de température pour un élément chauffant, et j'utilise un relais pour contrôler le niveau de puissance fourni à l'élément. Le relais effectue une commutation toutes les 60 secondes afin de maximiser la durée de vie de l'élément.

    Mon programme fonctionne, j'ai réglé la sortie du PID pour avoir une valeur entre 0 et 60 et je commute le relais en fonction de cette valeur.

    Je souhaite utiliser la méthode de Ziegler-Nichols pour régler le PID avec plus de théorie, mais je ne parviens pas à faire le lien entre le PID et la commutation des relais. En particulier, je n'arrive pas à trouver quelle est la dimension de la sortie du PID. D'après ce que j'ai lu, le PID ne sort pas une valeur entre 0 et 60 normalement.

    Si j'ai bien compris la méthode en boucle ouverte, il faut faire chauffer l'élément avec un fraction du max et regarder le temps et la température max. Mais cette méthode me donne un coefficient proportionnel de 0,05 alors que d'après mes tests, mon PID fonctionne bien avec 2,5.

    Si vous avez du temps disponible pour discuter de ce sujet et m'aider à trouver une solution, je vous serais très reconnaissant. Je peux vous fournir plus d'informations sur le système et sur les réglages actuels du PID si vous le souhaitez.

    Merci d'avance pour votre aide.

    Cordialement,

    -----

  2. #2
    JPL
    Responsable des forums

    Re : Regulation PID avec des relais

    Ce ne serait pas mieux en Électronique ?
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac

  3. #3
    Emilien123

    Re : Regulation PID avec des relais

    Bonne question,

    J'imagine que j'attend une réponse théorique sur le programme

  4. #4
    Henrix

    Re : Regulation PID avec des relais

    Dans l'Arduino, il faut mettre deux temporisations.
    Une pour le temps de marche et une pour le temps de pause.
    Quand à "la durée de vie de l'élément".
    Si tu prend un relais professionnel en surdimensionnant, avec une protection anti flash (condensateur), tu n'aura pas à t'inquiéter de la durée de vie.
    Note que pour actionner un relais de puissance (Contacteur) bobine > 20mA ), il faut interfacer avec un transistor.
    Dernière modification par Henrix ; 01/02/2023 à 15h58.

  5. A voir en vidéo sur Futura
  6. #5
    Emilien123

    Re : Regulation PID avec des relais

    Bonjour, j'ai simplifier mon sujet pour ce me focaliser sur le probleme. Mais oui, je pilote mes relais avec un transistor. Et la commutation toutes les 60sec est pas trop négociable pour la durée de vie et les perturbation IEM.

    Mon PID ressemble a ça.
    Code:
    double computePID(double setpoint, double feedback, PIDParameters params, double& integral, double& derivative) 
    {
    double error = setpoint - feedback;
    
    	feedbacks[feedbackIndex] = error;
    	feedbackIndex++;
    	if (feedbackIndex >= 30) feedbackIndex = 0;
        
        // Mise � jour de l'int�grale de l'erreur
        if (abs(error*100/setpoint) < 10)
            integral += error;
    
        // Calcul de la d�riv�e de l'erreur
        derivative = (error - feedbacks[feedbackIndexDeriv])/30;
    	feedbackIndexDeriv++;
    	if (feedbackIndexDeriv >= 30) feedbackIndexDeriv = 0;
       double output = params.kp * error + params.ki * integral - params.kd * derivative;
          
        output = max(0, min((int)output, 60));
        if(setpoint <60)
        output = setpoint;    
        Serial.print(";sortiePID;");
        Serial.println(output);
        
        return output;
    }
    et la commande :
    Code:
        // Si la sortie de la r�gulation PID est sup�rieure � 0, allumage des relais de chauffage
        if (millis() - last_switching_time < output*1000  && !relaisBClosed)
        {
            if(!elSelected)
            {
    
            digitalWrite(relaisBas, HIGH);
            relayState1 = 1; 
            }
            else
            {
    
            digitalWrite(relaisHaut, HIGH);
            relayState2 = 1; 
            }
    
            relaisBClosed = 1;
        }else if (millis() - last_switching_time > output*1000 && millis() - last_switching_time < (60 * 1000)  && relaisBClosed)
        {
    
            if(!elSelected)
            {
    
            digitalWrite(relaisBas, LOW);
            relayState1 = 0; 
            }
            else
            {
    
            digitalWrite(relaisHaut, LOW);
            relayState2 = 0; 
            }
            relaisBClosed = 0;
        }
        else if (millis() - last_switching_time > (60 * 1000) )
    	{
    
            relayState1 = 0;
            relayState2 = 0;
    		relaisBClosed = 0;
            last_switching_time = millis();
            
    	}
        else if (millis() - last_switching_time > (60 * 1000) && !relaisBClosed)
        {
    		digitalWrite(relaisBas, LOW);
    		digitalWrite(relaisHaut, LOW);
    		relaisBClosed = 0;
            Serial.println("erroor;");
        }
    Ma question porte avant sur le fait de mettre en place la méthode de Zeigler Nichols dans le cas d'un pid sortant de 0 a 60.

  7. #6
    umfred

    Re : Regulation PID avec des relais

    est-ce que ton système accepte des dépassements forts de température en sortie ?
    La boucle ouverte de mémoire, tu appliques un pallier en commande et tu observes la sortie (avec un gain de 1) jusqu'à stabilisation (tu pars à 25°C, tu appliques une consigne de 50°C, tu observes la courbe de stabilisation de la température mesurée du système)
    Ensuite, tu appliques les formules selon le type de réponses que tu veux (rapide avec dépassement, normal avec dépassement, ou lente sans dépassement) à partir des mesures de la constante de temps du système et du temps mort (de démarrage)
    https://scientificsentence.net/Regulation/ZN.html

  8. #7
    Henrix

    Re : Regulation PID avec des relais

    A première vue, tu chauffe autant que tu pause (60s).
    C'est pas un peu archaïque ?
    On devrait pouvoir régler séparément la chauffe et la pause.
    Concernant les IEM, avec un condensateur bien dimensionné pour pomper la surtension à l'ouverture, il ne doit pas y avoir de perturbation.
    Au pire: Blindage à la terre.
    Une seule fois j'ai eu un problème D'IEM avec un automate à base de TTL qui était dans la même armoire que les contacteurs (sans condensateurs).

  9. #8
    umfred

    Re : Regulation PID avec des relais

    il faudra prendre ce délai de 60s pour ne pas remettre la chauffe trop tôt selon la performance de la chauffe.

  10. #9
    Emilien123

    Re : Regulation PID avec des relais

    Je fait une commande par rapport cyclique. Si la sortie du PID est 40, je chauffe pendant 40 sec et je ne chauffe plus pendant 20 sec.
    Mon PID fonctionne, ça n'est pas le probleme.

    J'ai du mal a comprendre quel valeur je doit prendre. Quel valeur prend Delta Y sachant que je fait une commande en PWM à 25% de la puissance max. Comment trouver le point d'inflexion sur une courbe sachant que c'est un nuage de point et que la dérivé ne me donne rien d'exploitable.

    Et dernière question, comment connaitre le maximum de la courbe alors qu'elle tend visiblement vers +l'infini.


    Nom : testBoucleOuverte.png
Affichages : 39
Taille : 6,3 Ko

  11. #10
    Henrix

    Re : Regulation PID avec des relais

    Pour réguler un système (courbe plate), il faut apporter autant d'énergie qu'il s"en dissipe.

  12. #11
    Emilien123

    Re : Regulation PID avec des relais

    Oui et ? Comment ça peut m'aider à définir mon pid ?

  13. #12
    Henrix

    Re : Regulation PID avec des relais

    Si la courbe ne s'aplatit pas, c'est qu'il doit manquer le paramètre "Dissipation" (pertes).
    Sans dissipation, on est "en théorique".
    Quand la Th° de service est atteinte; réguler consiste à compenser les pertes (dissipation).

  14. #13
    umfred

    Re : Regulation PID avec des relais

    si c'est ta courbe régulée, ça sert à rien de chercher à calculer quelque chose, la méthode de la boucle ouverte, il n'y a pas de contre-réaction.

    Sur ta courbe, on devine une 1ère pente forte de 25°C à 55°C (environ) et une seconde pente plus douce de 55°C à 125°C.
    J'aurai tendance à prendre la tangente à la 1ère pente pour le décalage au démarrage et une tangente à la 2nde partie en partant du point entre les 2 pour le temps de réponse (à la louche, 2000s).

    sinon quand tu parles de la commande de 0 à 60s, tu veux dire que tu règles le rapport cyclique de 0 à 100% sur 60s. Donc la boucle ouverte consisterait, à passer d'un rapport cyclique X0 (avec température stabiliséeT0) à un rapport cyclique X1 et observer simplement la température qui devrait se stabiliser à une température T1 au bout d'un moment, sans rien toucher d'autre.
    donc une variation X1-X0 donnera une variation (T1-T0) (si on prend le principe de 95%, il faut regarder le temps quand la température atteint T0+(T1-T0)*0.95 (ici ça donne 120°C, soit un temps de 3500s environ d'après la courbe, auquel il faut enlever le temps de démarrage, qui doit être d'environ 150 ou 200s d'après la courbe)
    DOnc tu auras

  15. #14
    Emilien123

    Re : Regulation PID avec des relais

    J'ai tracé la dérivé et trouvé le point d'inflexion à 323 seconde.

    Comment faire pour trouver dY ? sachant que mon relais pilote le 230V et qu'en boucle ouverte je l'ai réglé sur un rapport cyclique à 25%.

    Nom : testBoucleOuverte2.png
Affichages : 41
Taille : 18,8 Ko

  16. #15
    Emilien123

    Re : Regulation PID avec des relais

    Tout fonctionne merci beaucoup !

Discussions similaires

  1. [Thermique] Probleme de bagotement de relais dans la regulation SV-Matic (III)
    Par baronvisi dans le forum Dépannage
    Réponses: 6
    Dernier message: 21/09/2020, 14h20
  2. [Energie] Fabrication alim de labo avec ATX psu - Problème avec le relais?
    Par LEOD88 dans le forum Électronique
    Réponses: 2
    Dernier message: 22/12/2019, 15h43
  3. Réponses: 1
    Dernier message: 09/12/2016, 18h23
  4. [Thermique] Probleme de bagotement de relais dans la regulation SV-Matic [résolu]
    Par Angous68 dans le forum Dépannage
    Réponses: 25
    Dernier message: 19/09/2013, 21h03
  5. Réponses: 2
    Dernier message: 28/09/2009, 18h21