multi_motor_sequencer.py

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

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)

← Volver a la ficha