multi_motor_sequencer.py

Unit 4-Encoder Motor Driver (DRV8837DSGR) · Fichier : multi_motor_sequencer.py · Langage : Python · Usage : Séquenceur de démarrage progressif pour quatre moteurs afin d'éviter les pics de courant.

Gestion des démarrages en douceur pour les 4 canaux afin de protéger l'alimentation DC-DC et les ponts H contre les appels de courant.

Important pour les systèmes alimentés par batterie ou USB. Le code utilise une boucle de rampe. Ajustez les registres d'écriture selon la spécification exacte du firmware M5Stack pour les bits de direction et d'activation.

multi_motor_sequencer.py

import smbus
import time

ADDR = 0x24
bus = smbus.SMBus(1)

# Registre de base pour les 4 moteurs (Exemple)
# Supposons une structure : Registre Moteur = Base + (Index * 1)
BASE_REG = 0x01

# Fonction de rampe de vitesse
def ramp_motor(motor_idx, target_speed, duration_sec, steps=50):
    step_time = duration_sec / steps
    current_speed = 0
    increment = target_speed / steps
    
    for _ in range(steps):
        current_speed += increment
        # Écriture de la vitesse (0-255)
        # On suppose ici que le registre accepte une valeur absolue avec bit de direction
        val = int(current_speed)
        if val > 255: val = 255
        if val < -255: val = -255
        
        # Écriture (Adapté au format réel du registre)
        # Exemple : Bit 7 En, Bits 0-6 PWM
        reg_val = 0x80 | abs(val)
        if val < 0: reg_val |= 0x40 # Bit direction inversée (exemple)
        
        bus.write_byte_data(ADDR, BASE_REG + motor_idx, reg_val)
        time.sleep(step_time)

# Séquence : Démarrer M1, puis M2, etc.
print("Démarrage séquentiel des moteurs")
ramp_motor(0, 150, 2) # Moteur 1
ramp_motor(1, 150, 2) # Moteur 2
ramp_motor(2, 150, 2) # Moteur 3
ramp_motor(3, 150, 2) # Moteur 4

print("Tous les moteurs actifs")
time.sleep(5)

# Arrêt progressif
ramp_motor(0, 0, 1)
ramp_motor(1, 0, 1)
ramp_motor(2, 0, 1)
ramp_motor(3, 0, 1)

← Retour à la fiche