27. Lektion: ADC

Aus Attraktor Wiki

Wechseln zu: Navigation, Suche


Der DAC des Pico

Der Pico verfügt über einen 12-bit ADC der durch einen Multiplexer (MUX) auf 5 Eingänge umgeschaltet werden kann.

  • ADC0 - GPIO26
  • ADC1 - GPIO27
  • ADC2 - GPIO28
  • ADC3 - Vbus - auf dem Pico-Board
  • ADC4 - interner Temperatur Sensor

Der ADC hat eine Auflösung von 12-bit. Allerdings ist die Kennline des ADC recht unlinear. Im Datenblatt wird eine nutzbare Genauigkeit von 8,7 bit angegeben.
Die maximale Messrate liegt bei 500kHz. Im Micropython für den Pico ist die Einstellung der Messrate nicht vorgesehen.

Eine Instanz von ADC erstellen

Die Methoden von ADC

Ein simples Script

Der Klasse ADC kann der gewünschte ADC-Kanal mit der Kanalnummer (0 ...4) oder der GPIO-Nummer (26, 27, 28) mitgeteilt werden.

import machine
import utime
potentiometer = machine.ADC(26)
while True:
    print(potentiometer.read_u16())
    utime.sleep(1)

Ausgabe:

65535     # oberer Anschlag
53501
41050
4193
320       # unterer Anschlag
320
336

Der ADC hat eine Auflösung von 12-bit, der Rückgabewert wird aber als 16-bit Wert ausgegeben. Also um 4-bit nach links verschoben.
Hier ist zu sehen, das beim Poti am oberen Anschlag auch der maximale Wert auf 16-bit umgerechnet (65535) gemessen wird.
Am unteren Anschlag wird ein Wert von 320/336 gemessen. Das entspricht auf 12-bit umgerechnet 20/21.
Das entspricht 0.01611328 Volt. Bezogen auf die maximale Spannung von 3,3 Volt ist das ist ein Verhältnis von 208,4:1.

Messwert in Spannung umrechnen

Um den Messwert (0 ... 65535) in Volt umzurechnen benötigen wir einen Umrechnungsfaktor. Ich habe zu_volt genannt.

zu_volt = 3.3 / 65535

messwert = 32578
spannung = messwert * zu_volt

1.640458

Vbus messen

Wie der Ausschnitt aus dem Schaltplan des Pico zeigt wird Vbus durch einen Spannungsteiler auf einen für den ADC brauchbaren Wert geteilt.
Vbus Messung
Der Spannungsteiler erzeugt ein Teilverhältnis von Messspannung = Vbus / (5,6 + 10) * 10 => 0.641. aus den 5 Volt werden demnach 3.20 Volt.
Daraud errechnet sich
Vbus = Messwert[V] / 0,641 mit dem Messwert in Volt
oder
Vbus = Messwert / 0,641 * 5.035476e-05 mit dem Messwert als binäre Zahl und dem Umrechnungsfaktor zu_volt
Leider wurde diese Option nicht realisiert. Der Messwert war nur 528. Das entspricht 0,044 Volt.

Temperatur messen

Der 5. ADC-Kanal misst die Chiptemperatur. Hier ein Beispiel zur Messung der Chiptemperatur:

from machine import ADC
from time import sleep

temp = ADC(4)
zu_volt = 3.3 / (65535)

while True:
    messwert =  temp.read_u16()
    spannung = messwert * zu_volt
    temperatur = 27 - (spannung - 0.706) / 0.001721
    print("Temperatur (°C): ", temperatur)
    sleep(2)

Die Informationen hierzu habe von https://www.elektronik-kompendium.de/sites/raspberry-pi/2612121.htm.

Probleme beim ADC

ADC untersuchen

Hierzu habe ich eine eigene Seite gemacht: Pico ADC untersuchen



  • Rauschen des Schaltreglers
  • schlechte Kontaktgabe beim Breadboard