Partage
  • Partager sur Facebook
  • Partager sur Twitter

Chute de tension L298N et NodeMCU

    15 mai 2020 à 13:57:07

    Bonjour à tous,

    Je possède un Nema 17 comme celui-ci. Pour le faire fonctionner, j'utilise un driver L298n, que j'alimente sur secteur grâce à un bloc d'alimentation délivrant 12V - 2A.

    De plus mon moteur est piloté par un ESP8266 NodeMCU, lui même relié à un mcp23017 avec un communication en I2C.

    Enfin, j'alimente ma carte par la même alimentation que celle du moteur, grâce à un régulateur de tension 12V - 5V comme celui-là.

    Les branchements sont donc les suivants :

     - "+" Alim -> 12V L298n

     - "+" Alim -> "+" régulateur

     - "-" Alim -> GND L298n

     - "-" Alim -> "-" régulateur

     - Régulateur -> Vin et Gnd ESP8266

     - 3,3V et GND ESP8266 -> mcp23017

     - Un bp sur broche 5 mcp23017

    Ce que je cherche à faire : A l'appui du Bp,je souhaite que pendant un temps donné le moteur fasse un tour dans un sens, et un quart de tour dans l'autre, et ce jusqu'à ce que le temps soit atteint.

    Voici donc le code que j'ai écrit :

    #include <Stepper.h>
    #include <Wire.h>
    #include "Adafruit_MCP23017.h"
    
    double TempoDistrib = millis();
    double tempsDistrib=10000;
    const int stepsPerRevolution = 32*64;
    const byte LEFT = 5;
    Stepper myStepper(stepsPerRevolution, 14,12,13,15);
    // Initialisation MCP
    Adafruit_MCP23017 mcp;
    
    void setup(){
      Serial.begin(115200);
       mcp.begin();
       mcp.pinMode(LEFT, INPUT);
       mcp.pullUp(LEFT, HIGH);
    }
    
    void loop(){
     if (mcp.digitalRead(LEFT)==LOW){
        Serial.println("Bouton enfoncé");
         distrib=50;
         Moteur();
         distrib=0;
     }
     
      if (mcp.digitalRead(LEFT)==HIGH){
        Serial.println("Bouton pas enfoncé");
        distrib=0;
        Moteur();
       }
    }
    
    void Moteur(){
    
      int motorSpeed=15;
      if (distrib==50){
        TempoDistrib=millis();
        while (millis() - TempoDistrib < tempsDistrib) {
          yield();
          myStepper.setSpeed(motorSpeed);
          for (int k=0;k<2048;k++) {
            myStepper.step(-1);
            Serial.println(k);
            yield();
            }
           for (int j=0;j<512 ;j++){
            myStepper.step(1);
            Serial.println(j);
            yield();
           }
        }
      }
    
    }
    
     

    Dans ce code, le moteur tourne par incrément de 1 pour contourner le watchdog de l'ESP.

    Lors de l'appui sur le bouton, le moteur se met en route, et les rotations s'effectuent correctement. Seulement lorsque le temps est atteint, une chute de tension se produit pendant quelques secondes aux bornes de l'alimentation passant de 12V à 2V, et causant ainsi le redémarrage de la carte (j'ai essayé avec plusieurs tempo...)

    D'après le moniteur série, il ne s'agit pas d'un reboot de la carte à cause du watchdog, mais bien d'une chute de tension de l'alimentation.

    J'ai réalisé plusieurs tests :

      - En débranchant le fil allant au 12V du L298n, plus de chute de tension.

      - En restant appuyé sur le bp, la chute de tension ne se produit pas non plus (en revanche le moteur tourne sans arrêt, évidemment).

      - En enlevant la boucle while de temporisation, le problème reste le même.

      - En ne conservant uniquement que la void loop, l'état des boutons est bien lu.

    Merci à vous ! :)

    • Partager sur Facebook
    • Partager sur Twitter

    Chute de tension L298N et NodeMCU

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    • Editeur
    • Markdown