RFID Sensor mit Matlab/Simulink

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen

Sensor: NXT RFID Sensor
Autor: Andreas Dörksen
SVN Ordner: SVN

RFID Sensor für Lego Mindstorms


Einleitung

Im Rahmen der Lehrveranstaltung Signalverarbeitende Systeme, wird sich mit dem Radio Frequency Identification (RFID) auseinandergesetzt. Zu diesem Zweck wird der NXT RFID Sensor [1] des Unternehmens CODATEX [2] gewählt. Mithilfe eines RFID, welcher aus Sender und Empfänger besteht, lässt sich eine berührungslose Identifikation bewerkstelligen.
Dafür wird für die Lehrveranstaltung die Signalverarbeitungskette und Funktionsweise des Sensors untersucht. Zusätzlich soll der Sensor in MATLAB/Simulink in Betrieb genommen werden.

ACHTUNG! Der NXT RFID Sensor wurde von CODATEX abgekündigt. Aus diesem Grund gab es keinen Support zum Sensor. Die folgenden Informationen über den Sensor beziehen sich deswegen nur auf dem beigefügten Beipackzettel und Annahmen die erarbeitet wurden.

Die Aufgabenstellung lautet wie folgt:

  • Lesen Sie den Sensor mit MATLAB/Simulink aus
  • Beschreiben, untersuchen und verstehen Sie Ihre Signalverarbeitungskette


Schritte zur Signalberarbeitung

  1. Auswahl eines Primärsensors
    1. Wie funktioniert der Sensor?
    2. Welche Rohsignale liefert der Sensor?
  2. Signalvorverarbeitung
    1. Sollen Messwerte oder vorverarbeitete Daten übertragen werden?
    2. Wie lässt sich eine Vorverarbeitung umsetzen?
    3. Wird eine Kennlinie eingesetzt? Wenn ja, wie wird diese kalibriert?
  3. Analog-Digital-Umsetzer
    1. Wie werden die analogen Signale umgesetzt?
    2. Welcher ADU kommt zum Einsatz?
    3. Welche Gründe sprechen für diesen ADU? Alternativen?
  4. Bussystem
    1. Wird ein Bussystem zwischen Sensor und Mikrocontroller eingesetzt?
    2. Wenn ja, wie funktioniert dieses Bussystem?
  5. Digitale Signalverarbeitung
    1. Welche Verarbeitungsschritte sind notwendig?
    2. Welche Filter werden angewendet?
    3. Bestimmen Sie Auflösung, Empfindlichkeit und Messunsicherheit des Sensors.
  6. Darstellung der Ergebnisse
    1. Welche Fehler treten in welchem Verarbeitungsschritt auf?
    2. Stellen Sie die Messunsicherheit bzw. das Vertrauensintervall dar.


Auswahl eines Primärsensors

Funktion des Sensors

RFID Transponder

Der NXT RFID Sensor verfügt über drei Betriebsarten:

  • Single Read
  • Continuous Read
  • Stop


Single Read: Nach einem Single Read Block liest der Sensor einen verfügbaren Transponder exakt einmal. Danach geht der Sensor in den Sleep Mode, um Energie zu sparen. Bei wiederholter Ausführung dieses Befehls wird eine maximale Leserate von 2 bis 3 Lesungen pro Sekunde erreicht.

Continuous Read: Mit diesem Befehl liest der Sensor kontinuierlich. Bei wiederholter Nutzung dieses Blocks in einer Schleife erreichen Sie Leseraten von bis zu 10 Lesungen pro Sekunde.

Stop: Stoppt den RFID Sensor und versetzt ihn in den Sleep Mode.

Nach erfolgreichem Erkennen und Einlesen eines Transponders leuchtet die integrierte LED am Empfänger.
Der erreichbare Leseabstand eines Transponders hängt von der Größe und der Orientierung des Transponders zur Antenne ab. Der mitgelieferte Schlüsselanhänger wird bis zu einer Entfernung von ca. 30 mm erkannt.

Blockbild EM4102

Rohsignale des Sensors

Der Transponder wird mit einem elektromagnetischen Wechselfeld, das vom NXT RFID Sensor aufgegeben wird, ausgelesen. Durch das pulsierende Magnetfeld wird der Transponder aktiviert und erzeugt in der Spule eine kleine Spannung. Diese dient als Stromversorgung für den Transponder. Der Transponder verändert dabei das ausgehende Magnetfeld des Lesegerätes, woraus dieses einmodulierten Antwort im Wechselfeld spezifische Daten des Transponders ermitteln kann. Das bedeutet für den Sensor, dass das Rohsignal zwischen dem Transponder und dem Lesegerät aus einer Spannung besteht.

Für den NXT RFID Sensor wird der Transponder von Typ EM4102 [3] verwendet. Der Transponder besitzt eine Induktivität von 20.8 mH und arbeitet auf einer Frequenz von 125 kHz. Der Sender benötigt eine Versorgungsspannung von 1,5 V zum Senden.



Signalvorverarbeitung

Blockschaltbild vom Lesegerät und Transponder


Der NXT RFID Sensor überträgt vorverarbeitete Daten. Das bedeutet, über das elektromagnetische Wechselfeld erhält das Lesegerät Informationen vom Sender. Dabei übertragt der Transponder 64 Bits pro Zyklus an das Lesegerät. In den 64 Bits sind die Informationen zur Identifikation des Transponder enthalten. Durch eine Demodulation auf der Seite des Lesegerätes wird die Information des tragenden Signales, aus dem durch Modulation entstandene Gemisch von Träger und Signalfrequenz am Ende des Übertragungsweges, zurückgewonnen. Dieses Signal wird anschließend intern gefiltert und decodiert. Das decodierte Signal wird aus dem Lesegerät weitergeleitet und kann weiter verarbeitet werden. [3]



Analog-Digital-Umsetzer

Da der Aufbau des NXT RFID Sensor nicht bekannt ist, lässt sich vermuten, dass der Decodierer ein Analog-Digital-Umsetzer (ADU) ist. Vermutet wird hier ein Delta-Sigma-Umsetzer mit einer hohen Auflösung. Diese wird benötigt, da mit einer Frequenz von 125 kHz gearbeitet wird.

Bussystem

Mit dem NXT RFID Sensor lassen sich die Daten über einen I2C Bus übertragen. Der I2C Bus ist ein synchroner serieller zwei Draht Bus. Die zwei Leitungen, welche genutzt werden und den I2C Bus bilden, heißen SCL und SDA. Dabei steht SCL für Signal Clock und ist die Taktleitung für den Bus und SDA steht für Signal Data und bildet die Datenleitung. In einem I2C Bus gibt es mindestens einen Master sowie bis zu 127 Slaves, somit spricht man auch vom Multi Master/Slave Bus. Bei diesem Verfahren hat jeder Slave eine individuelle Adresse mit der der Master den Slave ansprechen kann. Der Slave darf nur Informationen versenden, wenn diese vom Master angefordert werden. Über eine positive Logik, das heißt ein High-Pegel auf der Datenleitung entspricht einer logischen „1“, der Low-Pegel einer „0“, wird beim I2C Bus kommuniziert. [4] [5]

Implementierung und Aufbau

Aufbau

Struktur der I2C Verbindung für Sensors und Arduino mit Pinbelegung über RJ12-Stecker

Für die Inbetriebnahme des NXT RFID Sensor wurde eine Arduino Uno verwendet. Der NXT RFID Sensor wird mit einem sechs poligen Leiter mit einer Art RJ12 [6]-Stecker mit einem Lego Mindstorm verbunden. Das Kabel wurde für den Arduino Uno aufgeschnitten und mit ihm verbunden. In der Abbildung rechts ist die Verbindung vom NXT RFID Sensorzum Arduino Uno dargestellt. Zusätzlich haben die SCL und SDA Leitungen einen 100 kΩ Pull-up Widerstand (R1 & R2). Diese sorgen dafür, dass die Signale eine definierte „0“, also einen Low-Pegel, haben. Anschließend wird der Arduino Uno über ein USB-Kabel an den PC angeschlossen.

Ermittlung der Slave Adresse

Da keinerlei Informationen zur Adressierung des Sensors vorhanden sind, wurde mithilfe einer i2c_scanner Funktion die Adresse des Slaves ermittelt. Dieser Code ist aus der Arduino-Bibliothek entnommen. Das Programm i2c_scanner ist hier einmal aufgeführt. [7]


// --------------------------------------
// i2c_scanner
//
// Version 1
//    This program (or code that looks like it)
//    can be found in many places.
//    For example on the Arduino.cc forum.
//    The original author is not know.
// Version 2, Juni 2012, Using Arduino 1.0.1
//     Adapted to be as simple as possible by Arduino.cc user Krodal
// Version 3, Feb 26  2013
//    V3 by louarnold
// Version 4, March 3, 2013, Using Arduino 1.0.3
//    by Arduino.cc user Krodal.
//    Changes by louarnold removed.
//    Scanning addresses changed from 0...127 to 1...119,
//    according to the i2c scanner by Nick Gammon
//    http://www.gammon.com.au/forum/?id=10896
// Version 5, March 28, 2013
//    As version 4, but address scans now to 127.
//    A sensor seems to use address 120.
// Version 6, November 27, 2015.
//    Added waiting for the Leonardo serial communication.
//
//
// This sketch tests the standard 7-bit addresses
// Devices with higher bit address might not be seen properly.
//
 
#include <Wire.h>
 
 
void setup()
{
  Wire.begin();
 
  Serial.begin(9600);
  while (!Serial);             // Leonardo: wait for serial monitor
  Serial.println("\nI2C Scanner");
}
 
 
void loop()
{
  byte error, address;
  int nDevices;
 
  Serial.println("Scanning...");
 
  nDevices = 0;
  for(address = 1; address < 127; address++ )
  {
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the address.
    Wire.beginTransmission(address);
    error = Wire.endTransmission();
 
    if (error == 0)
    {
      Serial.print("I2C device found at address 0x");
      if (address<16)
        Serial.print("0");
      Serial.print(address,HEX);
      Serial.println("  !");
 
      nDevices++;
    }
    else if (error==4)
    {
      Serial.print("Unknown error at address 0x");
      if (address<16)
        Serial.print("0");
      Serial.println(address,HEX);
    }    
  }
  if (nDevices == 0)
    Serial.println("No I2C devices found\n");
  else
    Serial.println("done\n");
 
  delay(5000);           // wait 5 seconds for next scan
}


Nach dem Durchlaufen des Programmes hat sich die Adresse 0x02 für den Slave herausgestellt.

Implementierung in Simulink/Matlab

Für die Implementierung in Simulink muss als erstes das MATLAB Support Package for Arduino Hardware [8] installiert werden. MitHilfe des Arduino I2C-Read Blocks lassen sich die Werte des Sensors ausgeben. Hierfür wird die Slave Adresse benötigt. Weitere Einstellungen sind in den Abbildungen zu finden.

Eine Verbindung über Simulink konnte erfolgreich mit dem Arduino aufgebaut werden. Jedoch kamen keine Werte vom Sensor an. Dies könnte damit zusammenhängen, dass erst ein Modus (Single Read oder Continuous Read) gewählt werden muss, um Daten zu erhalten. Um einen Modus wählen zu können, werden die Register Adressen, welche beschrieben werden müssen, benötigt. Da es keinen Support seitens CODATEX gab, das Produkt abgekündigt ist und weitere Recherchen im Internet nichts dazu ergaben, kann keine Aussage getroffen werden welche Register beschrieben bzw. ausgelesen werden müssen.

Theoretisches Vorgehen

Angenommen die Register Adressen sind bekannt, so kann über den Arduino I2C-Write Block ein Modus gewählt und über den Read Block die Transpondernummer ausgegeben werden. Über einen Display Block in Simulink könnte anschließend die Nummer des Transponders ausgegeben werden. Diese bedarf keiner Filterung, da ein definiertes digitales Signal, in diesem Fall die Nummer des Transponders, ausgegeben wird. Die Filterung der analogen Werte wurde im Sensor selbst realisiert.

Simulink Modell


Mögliche Fehler im Vewrarbeitungsschritten

Ein Fehler könnte beim Einlesen des Transponders auftreten. Da über ein elektrisches Magnetfeld Daten ausgetauscht werden, ist dieses durch elektrische Störsignale beeinflussbar. Mögliche Störsignale sind hierbei z.B., Bildschirme, Motoren, Schalter, etc.).

Literatur

  1. " NXT RFID Sensor" von CODATEX
  2. "Startseite" von CODATEX
  3. 3,0 3,1 " Datenblatt des Transponders EM4102" von SWATCH GROUP
  4. " I2C Bus Hintergrundwissen" von Computer:club²
  5. " I2C" von Wikipedia
  6. " RJ-Steckverbindung " von Wikipedia
  7. " I2C Scanner " von Arduino
  8. " MATLAB Support Package for Arduino Hardware " von MathWorks



→ zurück zum Hauptartikel: SigSys SoSe2018