embassy-l9110-motor 0.1.0

Driver asynchrone no_std pour le pont en H L9110, permettant le contrôle de vitesse et de direction de moteurs DC avec Embassy.
docs.rs failed to build embassy-l9110-motor-0.1.0
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.

embassy-l9110-motor

Crates.io Documentation License

Driver asynchrone no_std pour le contrôle de moteurs DC via le pont en H L9110.

Conçu spécifiquement pour l'écosystème Embassy, ce driver permet de contrôler finement la vitesse et le sens de rotation de petits moteurs ou ventilateurs, de manière sécurisée et sans surcharge processeur sur puces RP2040 et RP2350.


⚡ Caractéristiques

  • Contrôle Matériel Précis : Exploitation directe des périphériques PWM natifs pour un ajustement linéaire de la vitesse.
  • Direction Bidirectionnelle : Gestion transparente de la marche avant, de la marche arrière et du freinage d'urgence.
  • Zéro Allocation & Zéro Unsafe : Idéal pour les systèmes embarqués critiques à haute performance.
  • Agnostique : Totalement compatible avec n'importe quel microcontrôleur supporté par la HAL embassy-rp.

📦 Configuration matérielle (Exemple RP2350 / Pico 2)

Le module L9110 nécessite deux broches de contrôle PWM. Pour une stabilité maximale, utilisez deux sorties configurées de façon à éviter les conflits de tranches PWM.

Broche L9110 Broche Pico 2 Fonction
IA GP20 (Slice 2, canal A) Contrôle vitesse / Sens A
IB GP21 (Slice 2, canal B) Contrôle vitesse / Sens B
VCC VBUS (5V) ou 3.3V Alimentation de puissance du moteur
GND GND Masse commune obligatoirement reliée au Pico

🚀 Exemple d'Utilisation

Ajoutez ceci à votre application :

use embassy_l9110_motor::{L9110Motor, Direction};
use embassy_rp::pwm::{Config as PwmConfig, Pwm};

#[embassy_executor::main]
async fn main(spawner: Spawner) {
    let p = embassy_rp::init(Default::default());

    // 1. Initialisation de la configuration PWM
    let mut pwm_config = PwmConfig::default();
    pwm_config.top = 0xFFFF; // Résolution maximale (16-bits)

    // 2. Initialisation des deux canaux PWM du RP2350
    let pwm_ia = Pwm::new_output_a(p.PWM_SLICE2, p.PIN_20, pwm_config.clone());
    let pwm_ib = Pwm::new_output_b(p.PWM_SLICE2, p.PIN_21, pwm_config);

    // 3. Instanciation du driver
    let mut motor = L9110Motor::new(pwm_ia, pwm_ib, 0xFFFF);

    loop {
        // Avancer à 75% de la vitesse maximale pendant 2 secondes
        motor.set_speed(0.75, Direction::Forward).unwrap();
        embassy_time::Timer::after_secs(2).await;

        // Arrêt d'urgence (frein) pendant 1 seconde
        motor.stop();
        embassy_time::Timer::after_secs(1).await;

        // Reculer à 50% de la vitesse pendant 2 secondes
        motor.set_speed(0.50, Direction::Reverse).unwrap();
        embassy_time::Timer::after_secs(2).await;
    }
}

🚀 Quick Start (Configuration de votre Cargo.toml)

Pour intégrer ce driver dans votre propre application de robotique, configurez votre fichier Cargo.toml comme suit.

1. Ajoutez les dépendances

Dans la section [dependencies], importez la HAL Embassy et ce driver (ici configuré pour pointer directement vers votre dépôt GitHub) :

[dependencies]
# HAL Embassy pour la gestion des périphériques PWM et GPIO
embassy-rp = { version = "0.10" }

# Le driver L9110 de l'écosystème Eagle
embassy-l9110-motor = "0.1.0"

# Framework de logging moderne v1.0
defmt      = { version = "1.0", optional = true }


📜 Licence

GPL-2.0-or-later — Copyright (C) 2026 Jorge Andre Castro.