🛠 Lire l'ADC 12 bits sans griller le SoC : la règle des 1,8 V
Objetivos
Utilizar el ADC de 8 canales y 12 bits del AM335x a través del subsistema IIO de mainline, y sobre todo integrar la trampa n.º 1 de la BeagleBone Black en el lado analógico: las entradas AIN aceptan 1,8 V COMO MÁXIMO (alimentación analógica VDD_ADC = 1,8 V en P9_32), mientras que el resto de la placa funciona a 3,3 V. Por encima de 1,8 V, se daña el SoC.
Material
- 1 BeagleBone Black
- Canales disponibles en P9: AIN0=P9_39, AIN1=P9_40, AIN2=P9_37, AIN3=P9_38, AIN4=P9_33, AIN5=P9_36, AIN6=P9_35 ; VDD_ADC (1,8 V) = P9_32 ; AGND = P9_34
- Para medir una señal de 0-3,3 V: divisor de tensión (p. ej., R1=10 kΩ en serie, R2=4,7 kΩ hacia GND → factor 0,32, es decir, máx. ~1,05 V)
- 1 potenciómetro alimentado a 1,8 V (P9_32) para la prueba sin riesgo
Código completo
# Repérer le device IIO et les canaux activés
ls /sys/bus/iio/devices/iio:device0/
cat /sys/bus/iio/devices/iio:device0/in_voltage0_label # vérifier quel AIN
#!/usr/bin/env python3
"""Lit AIN4 (P9_33) sur une BBB mainline. Entrée MAX : 1,8 V !"""
import glob, time
dev = glob.glob("/sys/bus/iio/devices/iio:device*")[0] # "ti_am335x_adc"
# L'index N dépend des canaux activés dans le DT : vérifier les labels !
CHAN = "in_voltage0_raw"
while True:
raw = int(open(f"{dev}/{CHAN}").read) # code 12 bits : 0..4095
mv = raw * 1800 / 4095 # référence pleine échelle 1,8 V
print(f"raw={raw} {mv:.0f} mV (entrée directe ; diviseur ?)")
time.sleep(0.2)
Verificación esperada
Con el cursor del potenciómetro entre P9_32 (1,8 V) y P9_34 (AGND) hacia AIN4, el valor bruto sigue de 0 a 4095 y los milivoltios calculados siguen de 0 a 1800. Al tocar el pin con el dedo: el valor deriva (entrada flotante) — prueba de que la medición está activa.
Errores frecuentes
- Inyectar 3,3 V (o incluso 5 V) directamente en un AIN: es la avería clásica documentada por el SRM (« AIN (1.8V MAX) »); por encima de 1,8 V, daños en el SoC. Pasar siempre por un divisor de tensión.
- Olvidar conectar AGND (P9_34) a la masa de su circuito: mediciones que fluctúan varios cientos de códigos.
- Índice in_voltageN_raw incorrecto: el índice depende de los canales activados en el device tree; verificar los in_voltageN_label antes de cablear una señal real.
- Creer que es un ADC de 3,3 V como en otras placas: aquí el riel analógico es de 1,8 V, la resolución utilizable es de 12 bits en este rango.
- Esperar una precisión metrológica: ruido de unos pocos códigos, se necesita un promediador para obtener estabilidad (promedio de 16 lecturas).
Otros tutoriales para esta placa
- Premier boot de la BeagleBone Black avec un seul câble mini-USB
- Comprendre les triggers en pilotant les 4 LED utilisateur
- Bouton et LED avec Adafruit_BBIO, la bibliothèque historique
- Ajouter une horloge temps réel sur le bus I2C des capes
- Micro-HDMI : exploiter les limites d'affichage de la BBB
- Capes historiques : capemanager, EEPROM d'identification et pièges des broches
Ejemplos de código para esta placa
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash