Multimeter PDM-300-C2 Analyse
In diesem Artikel wird das preiswert bei LIDL erhältliche Multimeter PDM 300 C2 analysiert und auf Erweiterungsmöglichkeiten untersucht. Die 'Begleit-Diskussion' und der Infoaustausch finden im Thread https://www.mikrocontroller.net/topic/491973 statt.
Einleitung
Angang 2020 bot der Lebensmitteldiscounter LIDL ein Multimeter mit Autorange-Funktion für 12,99€ an. Im Forum Markt wurde darauf hingewiesen: https://www.mikrocontroller.net/topic/491426. Die Nachfolgeversion PDM-300-C3 ist mit den Modifikationen uneingeschränkt kompatibel.
Auf dem Board befinden sich mindestens zwei undokumentierte Schnittstellen:
- TX/RX Lötpunkte
- Schnittstelle J2
Sowie die unbestückte Display-Hintergrundbeleuchtung BL1.
Display
- 3.5-stellige Siebensegmentanzeige
- Erste Stelle unvollständig, daher immer entweder 1 oder ausgeblendet
- Eigene Segmente für Micro (µ), Milli (m), Kilo (k), sowie für Mega (M), Ampere (A), Volt (V) und Ohm (Ω)
- Anzeige für 'AC' und 'DC'
- Betriebsartanzeige: 'Ausschaltautomatik', 'AUTO'-Range, 'Diode', 'Kontinuität', 'Hold' und 'Batterie'
Tipps und Tricks
Wenn man verhindern möchte, dass der Multimeter automatisch abgeschalten wird (z.B. bei der Verwendung als Datenlogger am PC), kann man im ausgeschalteten Zustand die rote Taste gedrückt halten und währenddessen den Multimeter einschalten. Es ertönen vier Töne und das erste Statussymbol im Display (Auto-Aus) erlischt.
Schnittstellen
TX/RX
Am Lötpunkt TX wird alle 500ms ein asynchrones, binäres Signal übertragen (siehe Screenshot im Anhang). Es handelt sich hierbei um ein UART Signal mit einer Amplitude von 3V bei einer Baudrate von 2400 8N1. Ist der Multimeter ausgeschaltet, so werden keine Daten übertragen. Im Hold-Modus wird der letzte Messwert kontinuierlich übertragen. Dass sich der Multimeter im Hold-Modus befindet, ist in den Paketdaten nicht ersichtlich.
Pro Paket werden 10 Bytes vom Multimeter gesendet (hier wird 12.34VDC angezeigt):
Byte# | Offset (s) | Datenbits |
---|---|---|
1 | 1.32E-06 | 0b11011100 |
2 | 5.87E-03 | 0b10111010 |
3 | 1.22E-02 | 0b00000001 |
4 | 1.93E-02 | 0b00010110 |
5 | 2.56E-02 | 0b00001000 |
6 | 3.23E-02 | 0b00000000 |
7 | 3.85E-02 | 0b00000100 |
8 | 4.48E-02 | 0b11010010 |
9 | 5.19E-02 | 0b00000000 |
10 | 5.82E-02 | 0b11110101 |
Die Funktion des RX-Lötpunktes ist aktuell noch unbekannt.
J2
Bei J2 handelt es sich höchstwahrscheinlich um die Programmierschnittstelle für den COB-Mikrocontroller. Ob sich dieser neu programmieren lässt, oder um welches Modell es sich bei diesem handelt, ist nicht bekannt.
Software
Inzwischen gibt es vier Softwareprojekte, die das Protokoll des Multimeters implementieren.
ParksideWeb von bmuessig
ParksideWeb ersetzt das untenstehende ParksideView durch ein Kommandozeilentool mit eingebauter Web-GUI, mit der u.A. kabellose Live-Displays und die Integration in eigene Anwendungen realisierbar sind: https://github.com/bmuessig/ParksideWeb
ParksideView(GTK) von bmuessig
Forumnutzer bmuessig hat ParksideView für Windows und Linux, sowie ParksideViewGTK für Windows, Linux und Mac veröffentlicht. Die Software ist in C# geschrieben und kann den Multimeter direkt auslesen und die empfangenen Daten aufzeichnen. Der Quellcode, sowie das kompillierte Program sind auf GitHub verfügbar: https://github.com/benedikts-workshop/ParksideView/
pdm von Asser's Lab
Eine in Python geschriebene und auf dem Raspberry Pi lauffähige Kommandozeilensoftware hat Asser's Lab entwickelt: https://github.com/AsserHic/alab/tree/master/src/pdm Dazu gibt es auch ein Video auf YouTube: https://www.youtube.com/watch?v=2YlhSKf9n0c
Multimeter von topsoft
Forumnutzer topsoft hat eine Implementation der Multimetersoftware in PureBasic veröffentlicht. Das Programm lässt sich im Analyse-Topic herunterladen.
Protokoll
Das Protokoll der Pakete, die alle 500ms vom Multimeter über die serielle Schnittstelle übertragen werden, soll hier soweit verstanden, erläutert werden. Pro Paket werden immer 10 Bytes übertragen. Unterteilt ist das Paket in eine Präambel (zwei Bytes), die Nutzdaten (sechs Bytes), sowie eine Prüfsumme (zwei Bytes).
Paketaufbau
Hier ein erläutertes Beispielpaket des Multimeters (die Bytenummern gelten für das restliche Dokument):
- 0: 0b1101 1100: Präambel
- 1: 0b1011 1010: Präambel
- 2: 0b0000 0001: Immer 1, aber Teil der Nutzdaten; Version 1?
- 3: 0b0001 0110: Modus
- 4: 0b0000 0100: Exponent (modusbezogen)
- 5: 0b0000 0000: Unbekannt (Entweder 24-Bit High-Byte des Wertes, oder nur für den OL Indikator/negative Zahlen?)
- 6: 0b0000 0000: Wert (High-Byte, 16-Bit, vorzeichenbehaftet)
- 7: 0b0000 0000: Wert (Low-Byte)
- 8: 0b0000 0000: Prüfsumme 2 bis 7 (High Byte)
- 9: 0b0001 1011: Prüfsumme 2 bis 7 (Low Byte)
Präambel
Die Präambel besteht immer aus den beiden Bytes 0xdc, 0xba. Auf diese Präambel kann der eingehende Datenstrom synchronisiert werden. Zudem kann so der Multimeter an einem seriellen Anschluss erkannt werden.
Modus
Der aktuelle Modus steht in b[3]:
- 0001 0110: DC V
- 0001 0101: AC V
- 0001 1010: uA (Gleich bei AC/DC uA)
- 0001 1001: mA (Gleich bei AC/DC mA)
- 0001 1000: A (Gleich bei AC/DC A)
- 0001 1100: Diode
- 0001 1011: Continuity
- 0000 0011: Squarewave
- 0001 1101: Resistance
Exponent
Der Exponent stammt aus b[4] (Wert-Exponenten relativ zur Basis-SI-Einheit):
Volt DC:
- 0000 0001: Nicht verwendet
- 0000 0010: mV DC [000.0] E-1
- 0000 0100: V DC [0.000] E-3
- 0000 1000: V DC [00.00] E-2
- 0001 0000: V DC [000.0] E-1
- 0010 0000: V DC [0000.] E-0
- 0100 0000: Nicht verwendet
- 1000 0000: Nicht verwendet
Volt AC:
- 0000 0001: Nicht verwendet
- 0000 0010: Nicht verwendet
- 0000 0100: V AC [0.000] E-3
- 0000 1000: V AC [00.00] E-2
- 0001 0000: V AC [000.0] E-1
- 0010 0000: V AC [0000.] E-0
- 0100 0000: Nicht verwendet
- 1000 0000: Nicht verwendet
Widerstand:
- 0000 0001: Ohm [000.0] E-1
- 0000 0010: kOhm [0.000] E-3
- 0000 0100: kOhm [00.00] E-2
- 0000 1000: kOhm [000.0] E-1
- 0001 0000: MOhm [0.000] E-3
- 0010 0000: MOhm [00.00] E-2
- 0100 0000: Nicht verwendet
- 1000 0000: Nicht verwendet
Durchgangsprüfung:
- 0000 0001: Ohm [000.0] E-1
- 0000 0010: Nicht verwendet
- 0000 0100: Nur für OL
- 0000 1000: Nicht verwendet
- 0001 0000: Nicht verwendet
- 0010 0000: Nicht verwendet
- 0100 0000: Nicht verwendet
- 1000 0000: Nicht verwendet
Diodentest:
- 0000 0001: Nicht verwendet
- 0000 0010: Nicht verwendet
- 0000 0100: V [0.000] E-3
- 0000 1000: Nicht verwendet
- 0001 0000: Nicht verwendet
- 0010 0000: Nicht verwendet
- 0100 0000: Nicht verwendet
- 1000 0000: Nicht verwendet
Microampere:
- 0000 0001: Nicht verwendet
- 0000 0010: uA [000.0] E-1
- 0000 0100: uA [0000.] E0
- 0000 1000: Nicht verwendet
- 0001 0000: Nicht verwendet
- 0010 0000: Nicht verwendet
- 0100 0000: Nicht verwendet
- 1000 0000: Nicht verwendet
Milliampere:
- 0000 0001: Nicht verwendet
- 0000 0010: Nicht verwendet
- 0000 0100: Nicht verwendet
- 0000 1000: mA [00.00] E-2
- 0001 0000: mA [000.0] E-1
- 0010 0000: mA [0.000] E-3
- 0100 0000: Nicht verwendet
- 1000 0000: Nicht verwendet
Ampere:
- 0000 0001: Nicht verwendet
- 0000 0010: Nicht verwendet
- 0000 0100: Nicht verwendet
- 0000 1000: Nicht verwendet
- 0001 0000: Nicht verwendet
- 0010 0000: A [0.000] E-3
- 0100 0000: A [00.00] E-2
- 1000 0000: Nicht verwendet
Squarewave:
- 0000 0001: Immer OL
- 0000 0010: Nicht verwendet
- 0000 0100: Nicht verwendet
- 0000 1000: Nicht verwendet
- 0001 0000: Nicht verwendet
- 0010 0000: Nicht verwendet
- 0100 0000: Nicht verwendet
- 1000 0000: Nicht verwendet
Displaywert
Byte 6 und 7 bilden zusammen den angezeigten vorzeichenbehafteten 16-Bit Displaywert in rohen Counts:
Counts = (b[6] << 8) | b[7]
Prüfsumme
Bei der Prüfsumme handelt es sich um die 16-Bit Summe der Nutzdaten-Bytes (2 bis 7):
Prüfsumme = b[2] + b[3] + b[4] + b[5] + b[6] + b[7]
Unbekannte Bytes
Die Funktion der beiden Bytes 2 und 5 sind aktuell unbekannt. Byte 2 ist immer 1 und kann praktisch als Teil der Präambel angesehen werden, ist jedoch Teil der Nutzdaten, da er in der Prüfsumme enthalten ist. Byte 5 ist möglicherweise Teil des Wertes (für einen 24-Bit Wert), oder dient zur Overload-Erkennung. Er wird jedoch nicht für die Auswertung benötigt, da der vorzeichenbehaftete 16-Bit Wert bereits alle 1999 Counts mit Vorzeichen abbilden kann. Ein Overload liegt vor, wenn der maximale Counts-Wert für eine Modus-Exponenten-Kombination überschritten wird.
Hardwareeingriff zum Datenloggen am PC
Um den Multimeter als Datenlogger nutzen zu können, muss ein kleiner, einfacher Hardwareeingriff am Multimeter durchgeführt werden. Zwei Litzen müssen an Testpunkten der Multimeterplatine angelötet und nach außen geführt werden. Diese Litzen können dann z.B. über ein kleines Loch auf der Rückseite des Gehäuses nach draußen geführt werden.
Vorraussetzungen
- Lötkolben und Lötzinn
- Zange zum Abisolieren und Schneiden
- 28+ AWG / < 0,08mm² Litze (~ 1m)
- USB-Seriell-Wandler (5V mit dem empfohlenen Optokoppler / 3.3V direkt - nicht empfohlen!)
- Optokoppler (https://www.sparkfun.com/products/9118 - NICHT für Spannungen > 60V verwenden!)
Testpunkte
Im folgenden Bild sind die zwei Testpunkte auf der Multimeterplatine erkennbar, mit denen der Optokoppler verbunden wird:
Löten
Um den Multimeter mit dem PC zu verbinden, muss eine Litze vom TX-Testpunkt des Multimters zum IN1-Pad des Optokopplers verbunden werden. Dann muss eine weitere Litze vom GND-Testpunkt des Multimeters zum GND-Pad des Optokopplers geführt werden. Eine weitere Verbindung führt vom HV-Pad des Optokopplers zum 5V Kontakt des USB-Seriell-Wandlers. Ebenso muss eine Verbindung vom HVG-Pad des Optokopplers zum GND-Pad des USB-Seriell-Wandlers geführt werden. Letztlich muss das OUT1-Pad des Optokopplers mit dem *RX*-Pad (nicht TX!) des USB-Seriell-Wandlers verbunden werden.
Verwendung des Multimeters
Nach den Hardware-Modifikationen lässt sich der Multimeter weiterhin normal und ohne PC verwenden. Jedoch darf der Multimeter nicht mehr zum Messen von Spannungen über 60V über PE verwendet werden. Um den Multimeter am PC zu verwenden, muss nur der USB-Seriell-Wandler eingesteckt werden. Im Geräte-Manager unter Windows, oder mittels dmesg auf Linux kann der korrekte Port ermittelt werden. Auf Linux lautet dieser meist /dev/ttyUSB0.
Ansicht des Gerätes
Das Gerät links (grünes Gehäuse) ist das Gemeinte:
Platine
Signale
Das was an TX messbar ist, leider ohne weitere Angaben (i.e. korrespondierende Display-Anzeige des Gerätes) https://www.mikrocontroller.net/attachment/448850/NewFile0.bmp
Messbereich Widerstand, angeschlossen 10k Metallwiderstand mit 0.1% Tol. Anzeige 10.0 kOhm
Einzelnes Wort:
Zwei Worte mit Pause
Fünf Worte:
Übersicht der Pakete:
Timing eines Pakets:
QuickView eines Pakets:
Decode eines Pakets:
Weitere Dateien sind in der Cloud von @bmuessig verfügbar:
https://c.gmx.net/@702592736817053755/3NGFJB-JS-6ipji13eCrXA