m5stack-encoder-motor-closed-loop.ino

Unité de pilotage moteur à encodeur M5Stack (DRV8837DSGR) · Fichier : m5stack-encoder-motor-closed-loop.ino · Langage : C++ (Arduino) · Usage : Mettre en œuvre un contrôle en boucle fermée pour maintenir une vitesse cible constante malgré les charges.

Configuration du mode PID/boucle fermée et lecture de la vitesse réelle.

Cet exemple active le mode de contrôle en boucle fermée en écrivant dans le registre de mode. Il définit ensuite une vitesse cible et lit la vitesse actuelle via l'encodeur intégré. Les adresses de registres sont indicatives ; la bibliothèque officielle M5Stack gère les paramètres PID complexes. L'encodeur AB de l'unité fournit les données de rétroaction au STM32G031.

m5stack-encoder-motor-closed-loop.ino

#include <Wire.h>

#define I2C_ADDRESS 0x2F
#define REG_TARGET_SPEED 0x0B // Exemple registre cible
#define REG_CURRENT_SPEED 0x0C // Exemple registre lecture

void setup() {
  Serial.begin(115200);
  Wire.begin();
  
  // Configurer le mode boucle fermée
  // Note: Utiliser les fonctions de la bibliothèque M5Stack-Encoder-Motor-Driver si disponible
  // Sinon, écriture manuelle aux registres de configuration
  Wire.beginTransmission(I2C_ADDRESS);
  Wire.write(0x00); // Registre de mode
  Wire.write(0x01); // Activer boucle fermée
  Wire.endTransmission();
}

void loop() {
  uint8_t targetSpeed = 100;
  uint8_t currentSpeed = 0;
  
  // Définir la vitesse cible
  Wire.beginTransmission(I2C_ADDRESS);
  Wire.write(REG_TARGET_SPEED);
  Wire.write(targetSpeed);
  Wire.endTransmission();
  
  // Lecture de la vitesse actuelle (pour debug)
  Wire.beginTransmission(I2C_ADDRESS);
  Wire.write(REG_CURRENT_SPEED);
  Wire.endTransmission(false);
  Wire.requestFrom(I2C_ADDRESS, 1);
  if(Wire.available()) {
    currentSpeed = Wire.read();
    Serial.print("Target: "); Serial.print(targetSpeed);
    Serial.print(" Current: "); Serial.println(currentSpeed);
  }
  delay(500);
}

← Retour à la fiche