Kennst du das auch?
Du möchtest eine Messung durchführen, aber das passende Messgerät fehlt oder ist zu teuer? Ein Oszilloskop bietet nicht genügend Kanäle, und die Datenaufzeichnung gestaltet sich kompliziert? Dann könnte das DaqOpen-Konzept die perfekte Lösung für dich sein! Es bietet eine kostengünstige Möglichkeit zur kontinuierlichen Datenerfassung mit Samplingraten von 10 kHz bis 1 000 kHz. Damit lassen sich zahlreiche Messungen elektrischer Größen durchführen. Alles, was du benötigst:
- Arduino DUE Board
- Grundverständnis für Signalkonditionierung
- Leidenschaft fürs Basteln
Und das Ganze für unter 40€!
Meine ersten Experimente habe ich bereits 2017 durchgeführt. Heute, acht Jahre später, hat das Thema nichts an Aktualität verloren. In dieser Zeit habe ich zahlreiche Messungen durchgeführt, darunter Spannungs- und Strommessungen sowie Vibrations- und Schallanalysen. Seit einem halben Jahr arbeite ich daran, diese Lösung zu generalisieren und für ein breiteres Publikum zugänglich zu machen. Dank der verstärkten Nutzung von Python in Forschung und Entwicklung habe ich eine umfassende Toolbox erstellt, die den Einsatz des Arduino DUE als leistungsfähiges Datenerfassungsmodul ermöglicht.
- daqopen-lib: Treiber für die Datenerfassung
- daqopen-apps: Beispielanwendungen zur Nutzung
- daqopen-oxygen-plugin: Plugin zur Live-Messung mittels DEWETRON OXYGEN Software
Das Board im Detail

Das Arduino DUE Board nutzt den Mikrocontroller SAM3X8E mit folgenden Eigenschaften:
- Onboard ADC mit bis zu 1 MS/s (kumuliert)
- 12 Single-Ended oder 6 Differenzielle Eingänge (0-3.3V)
- 12 Bit Auflösung
- DMA-Funktionalität für kontinuierliche Datenerfassung
- USB 2.0 Interface für schnelle Datenübertragung
Das Leben als DAQ-Gerät eingehaucht wird mittels Flashen der Firmware duedaq, anschließend kann das Board über die daqopen-lib als Datenerfassungsgerät genutzt werden. Die Verbindung erfolgt über den nativen USB-Anschluss mit dem PC oder Edge-Devices wie dem Raspberry Pi. Einfache Installation der daqopen-lib per PIP, und schon kann es losgehen. Für einen schnellen Einstieg lohnt ein Blick auf das Tutorial.
Damit haben wir den ersten wichtigen Baustein für die Versuche. Für die eigentlichen Endanwendungen muss das zu messende analoge Signal aufbereitet werden, damit es im Arbeitsbereich des ADC liegt. Der ADC kann nämlich nur Spannungen von 0 bis 3,3 V erfassen. Das heißt, höhere Spannungen müssen geteilt werden bzw. niedrigere mit Verstärkerschaltungen angepasst werden. Bipolare Signale sind eine kleine Herausforderung, Lösungen dafür stelle ich in einem künftigen Beitrag vor.
Performance
Wir schauen uns jetzt mal an, wie gut die Datenerfassung funktioniert und für wen und wofür man sie benutzen kann. Dafür habe ich ein paar Tests gemacht, die ich euch jetzt nach und nach zeigen werde.
Messaufbau
- Anschluss des Arduino Due an Raspberry Pi 3A+
- Nutzung einer isolierten Spannungsquelle (Akkupack) zur erdfreien Messung
- Nutzung der daq-zmq-app zur Datenübertragung über WIFI
- Messgerät zur Prüfung der Genauigkeit: Keysight 34461A
- Funktionsgenerator: Rigol DG1022Z
- Software: Eigenes Skript bzw. DEWETRON OXYGEN für FFT und Kurvenform
DC Genauigkeit & Linearität
Eine der wichtigsten Merkmale ist die Genauigkeit und Linearität, denn nichtlineares Verhalten würde viele weitere Parameter verschlechtern. Lineares Verhalten ermöglicht eine Fehlerkorrektur mittels einer Geradengleichung.
Zunächst betrachten wir die Grundgenauigkeit, auch wenn wir diese im Normalfall (gemeinsam mit einer Signalanpassung) feinjustieren werden.
Der ADC hat bei einer Single-Ended-Konfiguration bei Verstärkung 1 einen Messbereich von 0 bis 3,3 V. Die Referenzspannung ist vorgegeben und kann nicht verändert werden (auch wenn das Board einen REF Eingang hat, müsste dieser durch einen Eingriff am Board aktiviert werden).
Eingangsspannung | ADC-Wert |
---|---|
0 V | 0 |
3.3V | 4095 |
Mit diesen Werten kann man eine Geradengleichung aufstellen. Damit kann man dann beliebige ADC-Werte in Spannungen umrechnen:
y = k*x + d
Parameter | Ideal | Gemessen | Abweichung |
---|---|---|---|
k | 0.000805861 | 0.00079585 | 1.26 % |
d | 0 | 0.000139519 | 0.14 mV |
Wenn wir diese Werte in der Konfigurationsdatei für die Datenerfassung speichern, können wir eine erste Messung durchführen.
Linearität
Im Rahmen der Genauigkeitsmessung wird auch der Linearitätsfehler ermittelt. Die maximale Abweichung von der idealen Geraden wird typischerweise mit dem Messbereich verglichen.
- Messung in 100mV Schritten von -1.6V bis 1.6V
- Linearisierung mittels linearer Regression
- Berechnung der maximalen Abweichung der Messpunkte von dieser Gerade
- Ermittlung der Nichtlinearität: 0.00025/3.3*100% = 0.009%

Offset nach 72h
Interessant ist außerdem, wie es um die mittelfristige Stabilität steht. Dazu habe ich die Messung von vorhin nach 72h wiederholt:

Abtastrate & Genauigkeit
Die Erfassung von Frequenzen mit hoher Präzision erfordert eine stabile und genaue Zeitbasis, also einen präzisen Taktgeber des ADC. Zu diesem Zweck wird ein Referenzsignal mit einer Frequenz von 1 kHz angelegt und die Frequenz anschließend gemessen. Die Messung ergibt bei dem vorliegenden Beispiel
Vorgabewert | Abgelesener Wert | Abweichung |
---|---|---|
1000 Hz | 1000.025 Hz | 25ppm |
Die Korrektur des Takts kann durch die Anpassung des Parameters adc_clock_gain in der daqinfo.toml vorgenommen werden. Im Hintergrund erfolgt keine „echte“ Korrektur, sondern der Wert der Samplerate wird geändert, sodass die korrekte Periodendauer ermittelt werden kann.
Rauschen & SNR
Zur Bestimmung der dynamischen Eigenschaften werden häufig Rauschpegel und SNR herangezogen.
Als Quelle wurde eine 1,2-V-Batterie verwendet, um einen rauscharmen Offset zu generieren.
In der vorliegenden Messung wurde ein besonderer Fokus auf die Unterscheidung zwischen Single-Ended und Differentiellen Eingang gelegt, da die Resultate eine signifikante Variabilität demonstrieren. Der Messbereich wurde auf +-1,65 V festgelegt (3,3 V/2).
Rauschpegel RMS | SNR | |
---|---|---|
Single-Ended | 1.25 mV | 59 dB |
Differential | 0.35 mV | 70 dB |
Theoretisch 12 Bit * 6.02dB + 1.76dB | 74 dB |
Dynamikumfang
Im Allgemeinen hat der SFDR (Spurious Free Dynamic Range) eine höhere Aussagekraft als der SNR alleine, insbesondere im Hinblick auf die künftige Anwendung.
Single-Ended

Der unzureichende SNR-Wert manifestiert sich erwartungsgemäß im Spektrum. Die Ursache ist mutmaßlich auf Störungen am GND-Potenzial zurückzuführen. Da wir keinen Einfluss auf dieses Potenzial haben, werde ich die Betriebsart Single-Ended für weitere Versuche nicht in Betracht ziehen. Künftig liegt der Fokus daher auf dem Differential-Modus.
Differential
Vielversprechender sieht es im Differential-Modus aus:

Was bedeutet das nun?
Bei einem Messbereich von ca. 1Vrms bedeuten -83dB folgendes: Ein Signal mit >-83dB (=70µV = 70ppm) wird im Spektrum unabhängig von der Frequenz erkennbar. In den meisten Frequenzbereichen sinkt der Rauschpegel jedoch unter -90dB, sodass noch höhere Empfindlichkeiten erreicht werden können. Für viele Anwendungen sind diese Werte vollkommen ausreichend.
AC-Genauigkeit
In einem weiteren Test wird die AC-Genauigkeit überprüft. Die gute Linearität lässt keine Überraschungen erwarten.
Vorgabewert 1 kHz Sinus | Referenzwert Multimeter | Messwert | Abweichung | Abweichung % vom Messwert |
---|---|---|---|---|
1 V | 1.00085 V | 1.00109 V | 0.24mV | 0.024% |
0.1 V | 0.10008 V | 0.10016 V | 0.08mV | 0.08% |
0.01 V | 0.01003 V | 0.01007 V | 0.04 mV | 0.4% |



Frequenzgang
Die Bandbreite des Eingangs spielt bei der Dimensionierung der Signalkonditionierung eine wesentliche Rolle.

Phase missmatch
Sobald Samples auf Ebene der Abtastrate zwischen Kanälen in Verbindung gebracht werden, spielt auch der zeitliche Versatz, bedingt durch das Multiplexing der Eingänge, eine Rolle. Dieser Fehler kann für eine statische Konfiguration korrigiert werden, sofern er über der Größe einer Abtastperiode liegt.
Zu diesem Zweck wurde an allen Eingängen dasselbe Signal (1Vrms, 1 kHz) eingespeist und die Phasenverschiebung gegenüber des ersten Eingangs ermittelt.
Messkanal (A-Pin) | Zeitverzögerung | Anzahl Samples |
---|---|---|
A1 (A1-A0) | 0 µs | 0 |
A3 (A3-A2) | -3 µs | -0.33 |
A5 (A5-A4) | 1.5 µs | 0.167 |
A7 (A7-A6) | -1.5 µs | -0.167 |
A8 (A8-A9) | -4.5 µs | -0.5 |
A10 (A10-A11) | 3 µs | 0.33 |
Erkennbar ist die Systematik, dass die Werte -4.5, -3, -1.5, 0, 1.5 und 3 vorkommen. D.h. es wurde messtechnisch das Multiplexing-Muster erfasst.
Mit der Eigenschaft „delay“ eines Kanals in der daqinfo.toml kann die Information (ganze Anzahl Samples) hinterlegt werden, und bei der späteren Datenverarbeitung berücksichtigt werden. Das macht aber nur im Zusammenspiel mit einem Eingangsverstärker oder Sensor Sinn, der wo größere Verzögerungen erwartet werden.
Zusammenfassung
Parameter | Wert |
---|---|
Messbereich ADC | 0 bis 3.3 V |
Samplingrate (kumuliert) | 10 kHz bis 1000 kHz |
Linearitätsfehler | 0.008% |
SNR (Differential) | 70 dB |
SFDR | 83dB |
Clock Fehler | 25 ppm |
Zeitversatz Messeingänge | max. 1 / Samplerate |
Fazit
Auf der Grundlage der bereitgestellten Informationen sollte eine fundierte Entscheidung darüber getroffen werden können, ob das Arduino DUE Board für die spezifische Anwendung geeignet ist. Da in den meisten Fällen die Anpassung des Messsignals auf den Eingangspegel individuell erfolgen wird, lässt sich der Messbereich durch eine clevere Wahl von Verstärkung bzw. Abschwächung gut ausnutzen.
Das Board ist daher hervorragend für experimentelle Versuche, Forschungszwecke und andere besondere Aufgabenstellungen geeignet.
Die Möglichkeit, Samplerate, Gain, Offset und Phasenverschiebung zu korrigieren, ermöglicht einen produktiven Einsatz des Boards.
In einem der nächsten Beiträge werden wir einen Schritt weitergehen und die Anpassung von bipolaren Eingangssignalen behandeln. Damit wird es möglich, Signale von Sensoren und anderen Quellen mit hoher Güte zu digitalisieren.