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