4. Extrait de Code & Intégration (Commande Vitesse CAN-Bus Python (python-can))
import can
# Bus CAN à 500 kbps pour asservissement moteur en boucle fermée
bus = can.interface.Bus(channel='can0', bustype='socketcan', bitrate=500000)
def set_motor_speed(node_id: int, speed_rpm: int):
"""Commande de vitesse asservie en boucle fermée (CAN 2.0B)."""
raw_spd = int(speed_rpm * 100)
data = [0xF6, (raw_spd >> 24) & 0xFF, (raw_spd >> 16) & 0xFF,
(raw_spd >> 8) & 0xFF, raw_spd & 0xFF, 0x00, 0x00, 0x00]
msg = can.Message(arbitration_id=(node_id << 5) | 0x01, data=data, is_extended_id=False)
bus.send(msg)
if __name__ == '__main__':
print("Démarrage NEMA 17 Closed-Loop à 120 RPM...")
set_motor_speed(node_id=1, speed_rpm=120)
bus.shutdown()