Voltcraft 300K Thermometer seriell mit Matlab auslesen PDF Drucken E-Mail
Geschrieben von: Malte   
Sonntag, den 18. Januar 2015 um 14:32 Uhr

Hintergrund | Um die mögliche Temperaturabhängigkeit des Driftens meiner Waage untersuchen zu können, benötigte ich kürzlich ein Thermometer, dessen Daten sich auf einem PC mitloggen lassen. In der Uni haben wir im Labor u. a. ein einfaches Voltcraft Thermometer 300K rumliegen, das über eine Ausgabeschnittstelle verfügt, allerdings fehlt uns das zugehörige Datenkabel. Wie sich schnell rausfinden ließ, ist das Interface ein gewöhnlicher UART mit 5V Pegeln, die sich z. B. mit einem MAX232 leicht in RS232-Pegel umsetzen lassen. Der folgende kleine Artikel zeigt, wie man das Thermometer an einen PC anschließen und mit ein wenig MATLAB Code auslesen kann. Das Ganze ist nur eine auf-die-Schnelle Lösung, vielleicht ist sie ja mal jemandem nützlich.

 

 

Elektronik | An dem Thermometer befindet sich eine 3.5 mm Klinkenbuchse, die den UART zur Verfügung stellt. Bei einem entsprechendem Stecker liegt an seiner Spitze das TX Signal des Thermometers an, am mittleren Kontakt das RX Signal und am unteren Kontakt Masse. Um in Bezug auf die UART Pegel ganz sicher zu gehen, habe ich das Thermometer geöffnet und die Versorgungsspannung des Controllers (ein HT48R50) überprüft. Er wird in der Tat mit 5 V betrieben. Die UART Signale gehen direkt vom Controller auf die Klinkenbuchse, nur durch jeweils einen Reihenwiderstand von 1K geschützt.

Verwendet man einen MAX232 als Pegelwandler gemäß Standardbeschaltung aus dem Datenblatt, sieht eine einfache Adapterschaltung (als etwas eigenwilliges Schaltbild) folgendermaßen aus:

bild

 

Tatsächlich hatte ich noch eine vor Ewigkeiten mal aufgebaute MAX232 Schaltung in einer Kiste rumliegen, die ich hier verwendet habe. Der Nachteil bei diesem Aufbau ist,bildspacer dass man extern 5 V zur Versorgung des Adapters zur Verfügung stellen muss. Es gibt mehr oder weniger schmutzige Lösungen, bei denen man 5V aus den RS232 Steuerleitungen gewinnt. Das soll funktionieren, ich habe das bisher nicht ausprobiert. Möchte man den Adapter regelmäßig verwenden, wäre das sicherlich ein nützliches Feature. Grundsätzlich wäre auch eine USB Anbindung problemlos mit einer UART-USB Bridge wie z. B. dem FT232 möglich. Das hätte dann auch den Vorteil, dass am USB Port 5 V zur Versorgung des Adapters zur Verfügung stehen.

 

Übertragungsprotokoll | Man findet z. B. bei Conrad ein Dokument das das Datenprotokoll zur Kommunikation mit dem Thermometers beschreibt. Die RS232 am PC muß auf 9600 Baud, keine Parität, 8 Datenbits und 1 Stopbit konfiguriert werden, damit man mit dem Thermometer kommunizieren kann.

Sendet man ein A (ASCII 65) binary, d. h. ohne irgendwelchen weiteren Steuerzeichen an das Thermometer, antwortet es mit einem Datenpaket von 8 Bytes, das schematisch in der folgenden Abbildung dargestellt ist.bildspacer Dieses Datenpaket enthält alle relavanten Informationen für das Aufzeichnen einer Temperaturmessung über die Zeit. Die eigentlichen 6 Byte Nutzdaten des Pakets werden von zwei Bytes eingerahmt, das erste Byte des Pakets hat den Wert 2 und achte Byte den Wert 3. Bit 7 des zweiten Bytes zeigt die Einheit der Temperaturmessung an, ein gesetztes Bit bedeutet °C, ein gelöschtes Bit °F. Bit 1 in Byte 3 informiert über das Vorzeichen des Messergebnisses, ist es gesetzt, wurde eine negative Temperatur gemessen. Die Temperaturdaten sind in den Bytes 4 und 5 enthalten. Jede der vier Stellen eines Messwertes ist jeweils in einem Nibble (vier Bit) eines Bytes codiert. Das Nibble kann direkt dezimal interpretiert werden und ergibt somit eine Zahl zwischen 0 und 9 - mit einer kleinen Besonderheit. Führende Nullen werden nicht durch eine 0 repräsentiert, sondern durch eine 11. Sinn dessen dürfte sein, Nullen, die nicht dargestellt werden müssen/sollen, von solchen zu unterscheiden, die dargstellt werden müssen.

 

Einfaches MATLAB Tool zum Auslesen | Das Programm sendet mittels eines Timer-Objektes alle 400 ms das ASCII Zeichen 65 (A) um das o.g. Datenpaket als Antwort vom Thermometer auszulösen. Das Thermometer kann grundsätzlich nicht schneller als alle 400 ms, also mit 2.5 Hz antworten. bildspacer Die Daten von der seriellen Schnittstelle werden in einem Callback in Pakten von 8 Bytes entgegengenommnen. Die Temperaturdaten in Byte vier und fünf und die relevaten Bits für Vorzeichen und Einheit werden in dem Callback ausgewertet und der gewonnene Temperaturwert in der GUI des Programms als Zahlenwert dargestellt. Der Wert wird außerdem in einen Vektor übernommen, der als Diagramm der letzten 500 Werte in der GUI dargestellt wird. Zusammen mit einem Timestamp aus Jahr, Monat, Tag, Stunde, Minute und Sekunde (mit Nachkommaanteil) werden die Temperaturwerte außerdem kontinuierlich in einem Array gespeichert, das auf Knopfdruck in den MATLAB Workspace übernommen werden kann. Die Daten können mit Timestamp außerdem in ein Textfile geschrieben werden.

Zum Umschalten der Einheit zwischen °C und °F wird das ASCII Zeichen C (Dezimalwert 67) an das Thermometer geschickt. Das Diagramm in der GUI wird darauf hin neu aufgebaut, das Logging der Daten in ein Textfile oder in eine Workspace-Variable läuft kontinuierlich weiter.

MATLAB Quellcode: Ansicht (html) / Download

Zuletzt aktualisiert am Dienstag, den 03. Februar 2015 um 11:43 Uhr
 

Kommentare  

 
#2 Maynard 2016-01-20 21:18
I love your blog.. very nice colors & theme. Did you create this website yourself or did you hire someone to do it for you?
Plz answer back as I'm looking to create my own blog and would like to find out where u got this from.
thank you
Zitieren
 
 
#1 Bas van Dam 2015-10-21 13:19
Hello Malte! Worked first time! Now i can log my SMD IR oven.
Kind thanks for your clear desciption.
Bas
Zitieren
 

Kommentar schreiben

Sicherheitscode
Aktualisieren

 

Suche

Benutzer

Wir haben 25 Gäste online

unterstützt von

batronix logo

spacer

rotacaster logo

spacer

spacer

spacer

Meine Tweets

Extern

youtube logo twitter logo email logo

spacer

spacer

spacer

Reklame