Raspberry Pi Pico und ADC

Elektronik-Labor  Projekte  Mikrocontroller  Raspberry     




Der ADC im Raspberry Pi Pico hat eine Auflösung von  12 Bit und drei externe Eingänge. Ein vierter Eingang misst die interne Temperatur des Controllers. Der AD-Wandler liefert Werte zwischen 0 und 4095, die aber vom System mit 16 multipliziert werden, um als 16-Bit-Zahl bis rund 65000 weitergegeben zu werden.

Zur Überprüfung der Genauigkeit habe ich ein geglättetes PWM-Signal langsam hochgefahren. Am Eingang liegt ein Elko mit 100 µF. Ein zweiter Elko glättet die Referenzspannung.



#ADC und PWM
import time
from machine import Pin, PWM
ad_in = Pin(28, Pin.IN)
u = machine.ADC(2)
pwm0 = PWM(Pin(0))
pwm0.freq(20000)
pwm0.duty_u16(0)
time.sleep(1)  

da=0
while (True):
    pwm0.duty_u16(da)
    time.sleep(0.5)
    print(u.read_u16()//16)
    da = da + 16
   
Bei der Messung teile ich den AD-Wert durch 16, um die gewohnte 12-Bit-Darstellung zu bekommen. Der PWM-Ausgang wird ebenfalls über eine 16-Bit-Zahl gesteuert, Weil ich ihn in Schritten zu 16 erhöhe, entspricht das genau einer Bit-Stufe des AD-Wandlers.




Das Ergebnis habe ich mit bis knapp unter 200 (das entspricht 165 mV) angesehen und mit Excel dargestellt. Die grüne Kurve entspricht dem erwarteten Verlauf, die rote wird tatsächlich gemessen. Die blaue Kurve stammt aus einer zweiten Messung, bei der einfach die exponentielle Entladung von 100 µF über 100 k gemessen wurde. Beide Messungen zeugen, dass die Messung nicht ganz bis Null reicht. Dadurch entsteht eine Unlinearität am unteren Ende. Außerdem gibt es immer wieder Ausreißer um rund 10 Stufen. Die effektive Genauigkeit entspricht nur ungefähr einem 8-Bit-Wandler. Das Datenblatt sagt dazu: Effective Number of Bits: 9




Um zu überprüfen, ob die Ungenauigkeiten etwas mit dem Schaltregler auf der Platine zu tun haben, wurde in einem zweiten Versuch der Port 23 hochgesetzt.

#Spannungswandler im PWM Mode sauberer:
p23 = Pin(23, Pin.OUT)
p23.value(1)

Das Ergebnis blieb aber im Wesentlichen gleich.









Elektronik-Labor  Projekte  Mikrocontroller  Raspberry