multi_motor_sequencer.py

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

Smooth start management for the 4 channels to protect the DC-DC power supply and H-bridges from current inrush.

Important for battery or USB powered systems. The code uses a ramp loop. Adjust write registers according to the exact M5Stack firmware specification for direction and enable bits.

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)

← Back to the board