multi_motor_sequencer.py
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)