Multimeter PDM-300-C2 Analyse

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche

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.

Auf dem Board befinden sich mindestens zwei undokumentierte Schnittstellen:

  • TX/RX Lötpunkte
  • Schnittstelle J2

Sowie die unbestückte Display-Hintergrundbeleuchtung BL1.

Display

PDM-300-C2-Display.svg

  • 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 drei Softwareprojekte, die das Protokoll des Multimeters implementieren.

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/

PSV12_DE.PNG

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.

vier.jpg

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 Bitnummern 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
  • 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: Nicht verwendet
  • 0000 0010: Nicht verwendet
  • 0000 0100: Ohm [000.0] E-1
  • 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: Always 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:

Verbindungen.jpg

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: 20200311_134010.jpg

Platine

20200311_131321.jpg

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:

Lidl MuMe 10k0 Frame Wort.jpg


Zwei Worte mit Pause

Lidl MuMe 10k0 Frame 2Worte.jpg


Fünf Worte:

Lidl MuMe 10k0 Frame 5Worte.jpg


Übersicht der Pakete:

PDM-300-C2-Paket-Uebersicht.png


Timing eines Pakets:

PDM-300-C2-Signal-Uebersicht.PNG


QuickView eines Pakets:

PDM-300-C2-Signal-Uebersicht-2.PNG


Decode eines Pakets:

PDM-300-C2-Bus.PNG


Weitere Dateien sind in der Cloud von @bmuessig verfügbar: https://c.gmx.net/@702592736817053755/3NGFJB-JS-6ipji13eCrXA