Temperatursensor mit Matlab/Simulink
Autor: Sergej Vogel
Betreuer: Prof. Schneider
Sensor: Lego Temperatursensor 9749
Aufgabenstellung
In dem Fach "Signalverarbeitende Systeme" aus dem Studiengang "Business and Systemsengineering" wurde jeder Student damit beauftragt, sich Semesterbegleitend mit einem Sensor auseinander zu setzen. Genauer gesagt, soll der Sensor mittels MATLAB/Simulink ausgelesen werden. Um die Signale Verwertbar zu machen, sollen folgende Schritte abgearbeitet werden:
Schritte zur Signalbearbeitung:
- Auswahl eines Primärsensors
- Wie funktioniert der Sensor?
- Welche Rohsignale liefert der Sensor?
- Signalvorverarbeitung
- Sollen Messwerte oder vorverarbeitete Daten übertragen werden?
- Wie lässt sich eine Vorverarbeitung umsetzen?
- Wird eine Kennlinie eingesetzt? Wenn ja, wie wird diese kalibriert?
- Analog-Digital-Umsetzer
- Wie werden die analogen Signale umgesetzt?
- Welcher ADU kommt zum Einsatz?
- Welche Gründe sprechen für diesen ADU? Alternativen?
- Bussystem
- Wird ein Bussystem zwischen Sensor und Mikrocontroller eingesetzt?
- Wenn ja, wie funktioniert dieses Bussystem?
- Digitale Signalverarbeitung
- Welche Verarbeitungsschritte sind notwendig?
- Welche Filter werden angewendet?
- Bestimmen Sie Auflösung, Empfindlichkeit und Messunsicherheit des Sensors.
- Darstellung der Ergebnisse
- Welche Fehler treten in welchem Verarbeitungsschritt auf?
- Stellen Sie die Messunsicherheit bzw. das Vertrauensintervall dar.
Primärsensor
In diesem Kapitel soll der LEGO® MINDSTORMS® Temperatursensor (Artikel 9749) vorgestellt und erläutert werden (siehe Abb. 1).
Leider gibt es sehr wenige Informationen zu dem Sensor. Aus diesem Grund habe ich den Kundenservice von Lego Mindstorms kontaktiert und um ein Datenblatt des Sensors gebeten. Nach Aussage des Kundenservice besitzen sie kein Datenblatt zu diesem Sensor (siehe Abb.2). Dennoch war es möglich einige Daten herauszufinden.
Es handelt es sich um einen digitalen Sensor, der durch einen LEGO® MINDSTORMS® Education NXT (Software v.2.1) oder LEGO MINDSTORMS Education EV3 (EV3 Software) angesteuert und ausgelesen werden kann. Dabei findet die Kommunikation, zwischen dem Mikrocontroller und dem Sensor, über die I²C Schnittstelle statt. Der Einsatz des Sensors liegt in dem Temperaturbereich: -20°C bis 120°C bzw. -4°F - 248°F, wobei dieser erst kalibriert werden muss.
Laut inoffiziellen Angaben, ist in dem NXT Gehäuse der Sensor von Typ TMP275 mit einem 12 Bit Analog-Digital-Umsetzer (ADU) oder engl. (analog-digital-converter (ADC)) integriert. Die Temperaturaufnahme erfolgt hierbei mittels einer in dem TMP275 Sensor verbauten Diode und dem Fühlerrohr. Die Art der eingebauten Diode ist nicht bekannt.
I²C Schnittstelle
Der I²C Bus (Inter Integrated Circuit) wurde von Philips konzipiert und stellt heute den Standard für die Systemsteuerung dar. Der Bus basiert auf einem Master-Slave-Prinzip und hat zwei Leitungen zur Verfügung. Die beiden Leitungen heißen Signal Data (SDA) und Signal Clock (SCL). Wie die Namen schon sagen, wird die SDA Leitung für Datenübertragung genutzt, während die SCL Leitung für den Takt zuständig ist. Der Takt wird durch den Master erzeugt, kann aber vom Slave solange auf 0 gehalten werden, bis der Slave wieder bereit ist. Die Daten können in beide Richtungen byteweise übermittelt werden. In diesem Fall stellt der Temperatursensor den Slave dar. Dieser hat eine eindeutige 7-Bit-Adresse, die der Master anspricht.
START-Bedingung
Zu Anfang befinden sich die beiden Leitungen im Leerlauf und werden durch Pullupwiderstände auf hohem Pegel gehalten. Zu diesem Zeitpunkt können keine Daten übertragen werden. Um eine Kommunikation zwischen Master und Slave herzustellen, muss eine Startbedingung erzeugt werden. Diese kommt Zustande, indem die SDA Leitung von HIGH auf LOW wechselt, während die SCL Leitung weiterhin auf HIGH bleibt. Erst dann beginnt die Datenübertragung.
Adressierung und Read/Write (R/W)
Nach der Startbedingung beginnt die von dem Master ausgehende Kommunikation. Übertragen werden die Informationen byteweise (8-Bit). Damit sich ein Slave angesprochen fühlt, muss der Master die eindeutige Adresse des Slave ansprechen. Somit sendet der Master auf der SDA Leitung eine 7-Bit Adresse, um den Slave anzusprechen, gefolgt vom einem weiteren Bit mit der Information, ob der Master an den Slave eine Information senden (LOW), oder vom Slave Informationen erhalten möchte (HIGH). Dieses wird als Datenrichtungsbit bezeichnet.
Aknowledge und Not Aknowledge
asffsd
STOP-Bedingung
Das Gegenstück zu der Start-Bedingung ist die Stop-Bedingung. Diese wird erzeugt, indem die SDA Leitung von LOW auf HIGH wechselt, während sich die SCL Leitung in der HIGH Phase befindet.
Herstellung der Kommunikation
In diesem Projekt wird der Temperatursensor zunächst durch einen Arduino angesteuert und ausgelesen. Die vorverarbeiteten Daten werden im nächsten Schritt über eine serielle Schnittstelle an Matlab weitergeleitet und dort verarbeitet.
Anschluss an Arduino
Da der Sensor eine I²C Schnittstelle besitzt und der Sensor nicht beschädigt werden soll, wird ein Connector Kit for NXT or EV3 genutzt.
Sensor-Arduino-Kommunikation
%........................................................................%
% Code zur Kollisionserkennung eines Lego EV3 mit einem URG-Lidar %
% %
% Das Lidar hat eine Winkelauflösung von 1024 Abstufungen auf 360°. Der %
% Abstand wird von Schritt 44 bis 725 gemessen (-120° bis 120°). Da für %
% dieses Projekt lediglich der Abstand zu einem Hindernis direkt vor %
% dem Lidar entscheidend ist, wird der Abstand nur für 0° bzw. Schritt %
% 384 benötigt. %
% %
% Autor von 'Scan_EV3.m': Nora Werner %
%........................................................................%
function main_EV3
global A lidar
%........................................................................%
%Lego Mindstorm konfigurieren
mylego = legoev3('usb') % Verbindung auf USB festlegen
beep(mylego) % kurzes akustisches Signal
mymotor = motor(mylego,'A') % Motor an Port A des EV3
mymotor.Speed = -50 % Motorgeschwindigkeit auf 50% des Maximums
%........................................................................%
% Code für die Kollisionserkennung des Lego EV3 mit einem URG-Lidar
while (1)
[A] = LidarScan(lidar); % Abstandswerte in Array/1D-Matrix schreiben
abstand = A(384) % Abfrage der Distanz zum Hindernis bei 0°
if abstand > 250 % Vergleich Abstandsgrenze zum Objekt (in mm)
start(mymotor) % Motor starten
else
stop(mymotor) % Motor stoppen
end
%........................................................................%
% Code zur Erkennung des Tastendrucks in der Mitte des EV3 zum Beenden des
% Programms
button = readButton(mylego,'center');
if button == 1
% Motoren stoppen und Verbindung zum EV3 beenden
beep(mylego)
stop(mymotor)
clear mylego
% serielle Verbindung zum Lidar trennen und Lidar ausschalten
fprintf(lidar,'QT');
fclose(lidar);
close all;
end
end
end
Matlab
→ zurück zum Hauptartikel: Signalverarbeitende Systeme