lecture-adc.py

RP2040 (carte / puce générique) · Fichier : lecture-adc.py · Langage : Python · Usage : Lire une entrée analogique et la température interne du circuit

Deux mesures analogiques 12 bits avec un seul script : une tension externe sur GP26 (ADC0) et le capteur thermique intégré au circuit, converti en degrés grâce aux paramètres de la fiche technique. Idéal pour surveiller la charge CPU.

Matériel requis

Une carte générique à microcontrôleur RP2040 (double Cortex-M0+) programmée en MicroPython. Pour la voie externe : potentiomètre 10 kΩ (curseur vers GP26, extrémités sur 3V3 et GND). Le capteur interne ne demande rien.

Câblage

Curseur du potentiomètre sur GP26, une extrémité sur 3V3, l'autre sur GND. Ne jamais dépasser 3,3 V sur une broche ADC.

Fonctionnement

ADC(Pin) ou ADC(4) ouvre un canal ; read_u16() renvoie 0-65535 ramené aux 3,3 V de référence. La température interne utilise l'étalonnage typique 0,706 V à 27 °C, pente -1,721 mV/K.

Exécution

Flasher MicroPython via BOOTSEL (fichier .uf2), puis copier le script sur le lecteur de la carte. Vérifier la broche de la LED utilisateur de votre carte (souvent GP25) et l'adapter si besoin.

Variantes

Moyennez plusieurs lectures pour réduire le bruit, ou changez l'adc.init(sample_bits=8) pour gagner en vitesse contre la précision.

lecture-adc.py

# ADC 12 bits : entree externe GP26 (ADC0) + capteur thermique interne.
from machine import ADC, Pin
import time

# CAN 0-3 = GP26..GP29 ; le canal 4 est le capteur de temperature.
adc_externe = ADC(Pin(26))
adc_temp = ADC(4)

REFERENCE = 3.3  # tension de reference de l'ADC

def tension(adc):
    # read_u16 renvoie 0..65535 ; l'ADC interne a 12 bits.
    return adc.read_u16() * REFERENCE / 65535.0

def temperature_interne():
    # Doc technique RP2040/RP2350 : 0,706 V a 27 degC, pente -1,721 mV/K.
    v = tension(adc_temp)
    return 27.0 - (v - 0.706) / 0.001721

print("Mesures toutes les secondes (Ctrl-C pour arreter)")
while True:
    u = tension(adc_externe)
    t = temperature_interne()
    print("GP26 = %.2f V | temperature interne = %.1f C" % (u, t))
    time.sleep(1)

← Retour à la fiche