m5stack-encoder-motor-closed-loop.ino
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);
}