multi_motor_sequencer.py
Gestión de arranques suaves para los 4 canales para proteger la fuente de alimentación DC-DC y los puentes H contra las corrientes de arranque.
Importante para sistemas alimentados por batería o USB. El código utiliza un bucle de rampa. Ajuste los registros de escritura según la especificación exacta del firmware M5Stack para los bits de dirección y habilitación.
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)