m5stack-encoder-motor-position-control.ino

Unité de pilotage moteur à encodeur M5Stack (DRV8837DSGR) · Fichier : m5stack-encoder-motor-position-control.ino · Langage : C++ (Arduino) · Usage : Déplacer le moteur vers une position absolue précise en utilisant le mode position de l'unité.

Commande de positionnement absolu pour des applications robotiques ou de précision.

Le code configure l'unité en mode positionnement absolu. Il envoie une valeur cible (ici 1000) au registre de position. Le STM32G031 utilise les impulsions de l'encodeur pour arrêter le moteur à la position exacte. Les bits de la position sont envoyés en little-endian. Assurez-vous de calibrer la position zéro avant utilisation.

m5stack-encoder-motor-position-control.ino

#include <Wire.h>

#define I2C_ADDRESS 0x2F
#define REG_TARGET_POSITION 0x0D // Registre position cible (32-bit split usually)
#define REG_MODE 0x00

void setup() {
  Serial.begin(115200);
  Wire.begin();
  
  // Activer mode position
  Wire.beginTransmission(I2C_ADDRESS);
  Wire.write(REG_MODE);
  Wire.write(0x02); // Mode Position
  Wire.endTransmission();
}

void loop() {
  // Déplacer vers position 1000
  movePosition(1000);
  delay(2000);
  
  // Déplacer vers position 0
  movePosition(0);
  delay(2000);
}

void movePosition(int32_t pos) {
  // Écriture de la position cible (exemple simplifié, vérifier format datasheet)
  Wire.beginTransmission(I2C_ADDRESS);
  Wire.write(REG_TARGET_POSITION);
  Wire.write(pos & 0xFF);
  Wire.write((pos >> 8) & 0xFF);
  Wire.write((pos >> 16) & 0xFF);
  Wire.write((pos >> 24) & 0xFF);
  Wire.endTransmission();
  
  // Attendre que le moteur arrive à position (nécessite lecture registre status)
  delay(1000); 
}

← Retour à la fiche