Nachdem ich in einem Post das ESP32 AD-DA-Sbsystem analysiert hatte, wollte ich das PyBoard diesbezüglich untersuchen.
Der im PyBoard v1.1 eingesetzte STM32F405RGT6 besitzt drei 12-bit ADCs. 16 analoge Eingänge stehen am PyBoard v1.1 an den Header-Leisten zur Verfügung.
Außerdem stehen zwei 12-bit DACs zur Verfügung, die hier aber vorerst nur als 8-bit-DAC eingesetzt werden.
Für einen ersten Test des DAC-ADC-Subsystems ist es am einfachsten, den DAC an Pin X5 mit dem ADC-Eingang an Pin X19 zu verbinden.
Das MicroPython Testprogramm weist keine Besonderheiten auf und zeigt vor allem, wie DAC und ADC angesprochen werden können. Auf Github steht es zum Download zur Verfügung.
# PYB_adda_test.pyb
# PyBoard Test of DAC & ADC
# (c) Claus Kuehnel 2019-02-17 info@ckuehnel.ch
# PyBoard v1.1 has two DAC channels, connected to X5 and X6
# There are 16 ADC channels. The ADC channel connected to X19 is used here.
# Connect X5 & X19 for this test.
import time
from pyb import Pin,DAC, ADC
dac = DAC(Pin('X5'))
adc = ADC(Pin('X19'))
print('\nTesting ADDA subsystem of PyBoard\n')
print('DAC\t ADC\t Diff')
print('-----------------------')
for i in range(256):
dac.write(i)
time.sleep_ms(100)
adcvalue = adc.read()
time.sleep_ms(50)
diff = 16 * i
diff = adcvalue - diff
print('{0:3d}\t{1:4d}\t{2:4d}'.format(i, adcvalue, diff))
Die seriellen Ausgaben habe ich geloggt, um diese für die folgenden Grafiken aufzubereiten.
Aus der dargestellten DAC-ADC-Charakteristik kann man deutlich erkennen, dass sich das analoge Subsystem erwartungsgemäss verhält. Fehler, wie beim ESP32 sind hier nicht zu erkennen.
Erst im zweiten Plot kann man Abweichungen von maximal +9 und -7 LSB erkennen. Ausserdem ist ein Gain-Error von 5 LSB zu erkennen.
Bei der Bewertung dieser Eigenschaften muss man sich davon vergewissern, dass 1 LSB einer Spannung von 3300 mV/4096 = 0.806 mV und die max. 9 LSB somit 7.25 mV entsprechen. Für den hier gezeigten Messaufbau sind das respektable Werte, die durchaus denen im Datenblatt veröffentlichten entsprechen.
Wird der DAC mit seiner vollen Auflösung als 12-bit DAC betrieben (PYB_adda_test_1.py), ergeben sich praktisch kaum Änderungen.