27. Lektion: ADC: Unterschied zwischen den VersionenAus Attraktor Wiki
Version vom 17. Dezember 2023, 18:48 Uhr
InhaltsverzeichnisDer DAC des PicoDer Pico verfügt über einen 12-bit ADC der durch einen Multiplexer (MUX) auf 5 Eingänge umgeschaltet werden kann.
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. Eine Instanz von ADC erstellenEine Instanz von ADS zu erstellen ist ganz einfach. Außer der ID oder des GPIO muss und kann nichts weter angegeben werden: from machine import ADC adc_0 = ADC(0) # mit ID adc_1 = ADC(27) # mit GPIO Die Methoden von ADCDie Methoden von ADC sind sehr übersichtlich. Es ist nur eine implementiert. wert = adc.read_u16() Der ADC misst nur mit 12-bit Auflösung, also werten von 0 ... 4095. Der Rückgabewert ist aber 16-bit groß. Demnach wird der Wert des ADC mit 16 multipliziert zurück gegeben.
Ein simples ScriptHier ein kleines Script, das die Spannung am Poti misst und den binären Wert (x16) zurück gibt: 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.
Messwert in Spannung umrechnenUm den Messwert (0 ... 65535) in Volt umzurechnen benötigen wir einen Umrechnungsfaktor. Ich habe ihn zu_volt genannt. zu_volt = 3.3 / 65535 messwert = 32578 spannung = messwert * zu_volt 1.640458 Vbus messenHäufig findet man in Internet die Angabe, dass ADC(3) mit Vsys verbunden wäre. Das ist nicht richtig. Gemäß Datenblatt und Schaltplan ist er über einen Spannungsteiler mit Vbus verbunden. Wie der Ausschnitt aus dem Schaltplan des Pico zeigt wird Vbus durch einen Spannungsteiler auf einen für den ADC brauchbaren Wert geteilt.
Temperatur messenDer 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(1) Die Informationen hierzu habe von https://www.elektronik-kompendium.de/sites/raspberry-pi/2612121.htm. Probleme beim ADCDie Spannungsmessung mit dem ADC ist generell nicht unproblematisch. Die digitalen Signale im MC lassen sich nicht ganz vom ADC fernhalten, so das es immer zu springen messwerten kommt. Beim Pico kommt noch hinzu, das er einen Schaltwandler auf der Platine hat. Um die Störungen zu reduzieren, kann man diesen in einen anderen Modus schalten. Aber auch dann bleibt noch ein nicht unerhebliches Rauschen übrig.
Alternative zum internen ADCWenn genauere Werte erforderlich sind bietet sich Breakout Board mit dem ADS1115 an. Dieses wird über den I2C-Bus mit dem Microcontroller verbunden.
ADC untersuchenHierzu habe ich eine eigene Seite gemacht: Pico ADC untersuchen
Zurück zur "Micropython Kurs 2023 Teil 2" Startseite |