Skip to main content

Crate embassy_hall_analog

Crate embassy_hall_analog 

Source
Expand description

§embassy-hall-analog

Driver async no_std minimaliste pour le capteur à effet Hall linéaire analogique OPEN-SMART (compatible 49E / SS49E) sur microcontrôleur RP2040 et RP235x, basé sur le framework Embassy, ce n’est pas développé par l’équipe officielle attention!!.

§Description du composant

Ce module capteur repose sur un capteur à effet Hall linéaire (type 49E) qui délivre une tension analogique proportionnelle à l’intensité du champ magnétique environnant. En l’absence de champ magnétique, la sortie se stabilise autour de VCC / 2 (~1,65 V sous 3,3 V). Un pôle Sud rapproche la tension de VCC ; un pôle Nord la tire vers GND.

§Schéma de câblage

Module Hall OPEN-SMART        RP2040 / RP235x
─────────────────────────     ───────────────
       VCC  ────────────────── 3.3V
       GND  ────────────────── GND
       AO   ────────────────── GP26 (ADC0)

Note : La broche AO (Analog Output) est connectée directement à la broche ADC du microcontrôleur. Aucune résistance externe n’est nécessaire : le module embarque déjà la polarisation interne.

§Features disponibles

FeatureCibleDéfaut
rp2040Raspberry Pi Pico 1 (RP2040)
rp235xaPico 2 A-step (RP2350A)
rp235xbPico 2 B-step (RP2350B)

Ces features sont mutuellement exclusives. Le build échouera si zéro ou plusieurs sont activées simultanément.

§Exemple d’utilisation

#![no_std]
#![no_main]

use embassy_executor::Spawner;
use embassy_rp::adc::{Adc, Channel, Config as AdcConfig};
use embassy_rp::bind_interrupts;
use embassy_rp::adc::InterruptHandler;
use embassy_hall_analog::HallAnalog;

bind_interrupts!(struct Irqs {
    ADC_IRQ_FIFO => InterruptHandler;
});

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

    let adc = Adc::new(p.ADC, Irqs, AdcConfig::default());
    let channel = Channel::new_pin(p.PIN_26, embassy_rp::gpio::Pull::None);

    let mut sensor = HallAnalog::new(adc, channel);

    loop {
        let raw = sensor.read_raw().await;
        // ~2048 (RP2040) / ~8192 (RP235x) → pas de champ
        // > repos → pôle Sud  |  < repos → pôle Nord
        let _ = raw;
    }
}

§Calcul de tension et de champ magnétique

La valeur brute ADC peut être convertie en tension :

V = raw × 3.3 / MAX     (MAX = 4095 sur RP2040, 16383 sur RP235x)

La déviation par rapport à la tension de repos (~VCC/2) indique l’intensité et la polarité :

ΔV = V - 1.65          (positif → pôle Sud, négatif → pôle Nord)

Pour le capteur 49E, la sensibilité typique est de 1,4 mV/Gauss à 5 V (environ 0,92 mV/Gauss à 3,3 V) :

B (Gauss) = ΔV / 0.00092

§Caractéristiques

ParamètreValeur
Tension d’alimentation3,3 V (RP2040 / RP235x)
Résolution ADC12 bits (0–4095) / 14 bits sur RP235x
Sortie repos~VCC / 2 (~1,65 V sous 3,3 V)
Sortie pôle SudAugmente vers VCC
Sortie pôle NordDiminue vers GND
Sensibilité typique~0,92 mV/Gauss @ 3,3 V (capteur 49E)
InterfaceAnalogique (AO) — lecture ADC directe

§no_std

Cette crate ne dépend pas de la bibliothèque standard et est conçue pour tourner sur des microcontrôleurs bare-metal avec le runtime Embassy.

Structs§

HallAnalog
Driver pour le capteur à effet Hall linéaire analogique OPEN-SMART via l’ADC du RP2040 / RP235x.

Enums§

MagneticPolarity
Polarité du champ magnétique détecté.

Constants§

ZERO_FIELD_RAW_12BIT
Valeur ADC correspondant à l’absence de champ magnétique 12 bits, RP2040.
ZERO_FIELD_RAW_14BIT
Valeur ADC correspondant à l’absence de champ magnétique - 14 bits, RP235x.