RFID Türmodul

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche
Aufgebautes RFID Türmodul mit verschiedenen Tags

Das RFID Türmodul eignet sich aufgrund seiner Abmessung (Durchmesser 52mm) für den direkten Einbau in eine Unterputzdose. Die Unterputzdose sollte am besten an der inneren Seite der Tür angebracht werden. An der Außenseite kann z. B. eine Acrylplatte, welche die Antenne und optional eine (Duo-) LED beherbergt, befestigt werden. Das Modul kann z. B. direkt an einem Klingeltrafo 8 V~ betrieben werden, welcher auch gleich einen elektrischen Türöffner versorgen kann. Ein Relais um den elektrischen Türöffner zu steuern befindet sich mit auf der Platine. Optional kann die Platine mit einem RS485 IC bestückt werden, um z. B. eine Vernetzung oder erweiterte Steuerung zu ermöglichen. Weiterhin ist auf der Platine Platz für ein I2C EEPROM, sollte das interne EEPROM des Mega8 nicht ausreichen.

Ausstattung im Überblick

RFID Türmodul Oberseite
  • µC ATMega8
  • Brückengleichrichter und Spannungsregler 78M05 on board
  • RFID Reader IC EM4095
  • Wagoklemme für den Anschluss von Stromversorgung, RFID Antenne, (Duo-) LED und] Datenleitung (RS485)
  • Wagoklemme für den Relaiskontakt, um z. B. einen Türöffner zu schalten (Relais on board)
  • Kurzhubtaster on board, z. B. um in den Lernmodus für neue Tags zu gelangen (nur sinnvoll wenn das Modul abgesetzt von der Antenne auf der Innenseite der Tür angebracht wird)
  • 2 Pins des µC (PD3, PD4) mit Stiftleiste abgreifbar, um z. B. zusammen mit dem ISP Steckverbinder ein RFM12 Funkmodul anbinden zu können
  • Firmware ließt EM4100- und FDX-B Transponder

Funktionsbeschreibung

RFID Türmodul Unterseite

Wird ein gültiger Tag erkannt (im Eeprom hinterlegt), zieht das Relais für die konfigurierte Zeit (z.B. 2 s) an bevor es wieder abfällt, um z. B. einen elektrischen Türöffner anzusteuern. Wird der Kurzhubtaster auf der Platine länger als 2 Sekunden gedrückt, werden alle gespeicherten Tags gelöscht. Über die RS485 Schnittstelle können mehrere Module an einem Host z.B. einem Raspberry PI angeschlossen werden, und von dort aus überwacht und programmiert werden.

Die Firmware kann auf 3 verschiedene Modi eingestellt werden:

Adminmode

Mit dem Programmiertaster kann ein Admintransponder angelernt werden, mit diesem lassen sich neue Transponder hinzufügen.

Buttonmode

Mit dem Programmiertaster lässt sich an neuer Tag anlernen

Busmode

Tags lassen sich über den Bus anlernen

Schaltungsbeschreibung

Schaltplan

Der RFID IC EM4095 gibt kontinuierlich ein 125 kHz Signal auf die Spulenantenne aus. Wird ein Tag in das Feld der Antenne gebracht, versorgt sich der auszulesende Tag darüber mit Energie. Gleichzeitig sendet der Tag seine Daten, in dem er dem Leser unterschiedlich stark Energie entzieht, so dass eine Amplitudenmodulation entsteht. Das RFID IC EM4095 gibt das demodulierte und gefilterte Signal auf einen interruptfähigen Eingang des Mega8. Bei diesem Signal handelt es sich um ein Manchester-codiertes Signal mit einer Bitrate von einem 64tel der Trägerfrequenz. Ausgehend von 125 kHz Trägerfrequenz sind das knapp 2000 bit/s. Bei jedem Wechsel des manchester-codierten Signals wird nun eine Interruptroutine im µC aufgerufen.

Softwarebeschreibung

Manchester.png Trotz des kleinen µC wurde als Programmiersprache C++ verwendet, da sich damit eine sehr kompakte Struktur erreichen lässt. Kernstück der Firmware bildet die Klasse "Rfid". Bei jedem Aufruf der INT0-Interruptroutine durch das Signal des RFID-ICs wird die vergangene Zeit zum vorherigen Flankenwechsel überprüft; ist die Zeit kürzer als 3/4 der Bitzeit, wird die Flanke ausgeblendet und die Routine verlassen (wegge-x-te Flanken in der Grafik). Andernfalls wird eine statische 16-bit Variable um ein Bit nach links geschoben und, falls der Pegel auf 0 liegt, mit 1 verodert. Nach jedem eingelesenen Bit wird nun dieses FIFO-Register auf das Vorhandensein eines Tagheaders (9x 1-Bits) überprüft, und gegebenfalls ein Bitzähler auf 0 gesetzt. Ist ein ganzes Byte voll, wird dieses der RFID Klasse übergeben. Nachdem 64 Bit eingelesen wurden, werden zunächst die Spalten- und Zeilenparitätsbits überprüft. Sind alle Paritätsbits korrekt werden selbige ausgeblendet, so dass 40 "Nettodatenbits" verbleiben. Diese Transponderdaten werden nun der Klasse "Tagmanager" übergeben. Dort werden aus dem EEPROM immer 5 Byte große Stücke ausgelesen und mit dem dekodierten Daten verglichen, solange bis die Daten übereinstimmen, oder das Speicherende (0xFFFFFFFFFF) erreicht wurde. Handelt es sich beim dekodierten Transponder um den ersten Speicherplatz im EEPROM, wird noch ein Administratorflag gesetzt, so dass weitere Transponder hinzugefügt werden können.

Datenaufbau EM4100 Tags

Ein Tag mit den Nettodaten 0x1234567890 ist wie folgend aufgebaut:

9 Header Bits (1) 4 Datenbits + Paritätsbit 4 Datenbits + Paritätsbit 4 Datenbits + Paritätsbit 4 Datenbits + Paritätsbit 4 Datenbits + Paritätsbit 4 Datenbits + Paritätsbit 4 Datenbits + Paritätsbit 4 Datenbits + Paritätsbit 4 Datenbits + Paritätsbit 4 Datenbits + Paritätsbit 4 Spaltenparitäten + Stopbit
Bit 0-8 Bit 9-13 Bit 14-18 Bit 19-23 Bit 24-28 Bit 29-33 Bit 34-38 Bit 39-43 Bit 44-48 Bit 49-53 Bit 54-58 Bit 59-63
111111111 0001 1 0010 1 0011 0 0100 1 0101 0 0110 0 0111 1 1000 1 1001 0 0000 0 0001 0

Die Antenne

Eine passende Leseantenne für das Modul kann recht einfach selbst hergestellt werden. Man nehme z. B. 0,2 mm Kupferlackdraht, von dem ca. 100 Windungen auf einen runden Körper mit ca. 45 mm Durchmesser gewickelt wird. Die Induktivität der Spule lässt sich dann mit Hilfe eines L-Meters oder alternativ mit einem Funktionsgenerator und einem Oszilloskop herausfinden. Wer keine Antenne selber wickeln möchte kann natürlich auch auf fertige Spulen zurückgreifen (siehe Links). In jedem Fall müssen in der Schaltung C1-C4 und R9 an die Antenne angepasst werden. C3 und C4 bilden zusammen mit der Antennenspule einen Serienschwingkreis, so dass sich eine Resonanzfrequenz von ca. 125 kHz ergibt. C1 und C2 dienen als kapazitiver Spannungsteiler, um das relativ große Antennensignal auf ein für das IC verträgliches Mass zu verkleinern. R9 dient dazu um bei sehr niederohmigen Antennen die Güte künstlich zu verkleinern. Auf der Herstellerseite des RFID ICs findet sich eine Excel-Tabelle, die die Berechnung der Bauteile etwas vereinfacht. Die Antenne kann in gewissen Grenzen mit einem Kabel vom Modul abgesetzt werden, ohne dass sich die Resonanzfrequenz dramatisch ändert. In einem Versuch mit 70 cm 0,5 mm² Doppellitze zwischen Antenne und Modul ging die Resonanzfrequenz um ca. 1 kHz nach unten.

Quellcode Dateiübersicht

Bestückungsplan oben
Datei Beschreibung
bus.cpp / bus.h Klasse "Bus", RS485 Kommunikation
button.cpp / button.h Klasse "Button", fragt Kurzhubtaster ab
global.h Hardware Defines & Makros
global.cpp Diverse Hilfen für C++
i2ceeprom.h / i2ceeprom.cpp Klasse "I2CEEprom", spricht das externe EEPROM an
main.cpp Das Hauptprogramm
makefile Beispiel_Makefile
rfid.h / rfid.cpp Klasse "Rfid", prüft und dekodiert die Tagrohdaten
tagmanager.h / tagmanager.cpp Klasse "Tagmanager", prüft und speichert Daten im EEPROM
task.h / task.cpp Basisklasse für alle Tasks (Taskscheduling)
timer.h / timer.cpp Klasse "Timer", wird in diversen anderen Klassen verwendet

Bauteileliste

QTY Position Bauteil Wert Reichelt Best. Nr. IT-WNS Best. Nr.
1 IC4 78MXXD
1 SV1 Stiftleiste PINHD-1X2_2.54-SMD
1 JP1 Stiftleiste SMD
1 B1 Brückengleichrichter B80C800RUND B50C1500 o. B80C800
1 C1* SMD Kondensator 0805 1,5 nF X7R-G0805 1,5N
1 D1 Diode 1N4148 SMD 1N 4148 D-1N4148-0805
1 C4* SMD Kondensator 0805 1 nF NPO-G0805 1,0N
1 Q1 Quarz HC49 7,3728 MHz 7,3728-HC49U-S Q-7.3728M-HC49US
1 R9* SMD Widerstand 0805 10Ω SMD-0805 10 R-10-0805-1
1 R1, R2, R4, R5 SMD Widerstand 0805 10 k SMD-0805 10,0K R-10000-0805
2 C7, C8 SMD Kondensator 0805 10 nF X7R-G0805 10N
1 C2* SMD Kondensator 0805 10 pF NPO-G0805 10P
2 C9, C10 SMD Kondensator 0805 22 pF NPO-G0805 22P C-22P-0805
1 IC5 ST24C64 ST 24C64 MN6
10 C5, C6, C12, C13, C14, C15, C16, C17, C18, C19 SMD Kondensator 0805 100 nF X7R-G0805 100N C-100-0805
2 R3, R10 SMD Widerstand 0805 270Ω SMD-0805 270 R-270-0805-1
1 C11 Elko 330 µ RAD 330/35
1 C3* SMD Kondensator 0805 330 pF NPO-G0805 330P
1 X3 Wago Klemme 8-polig WAGO 733-338, WAGO 733-108
1 X2 Wago Klemme 2-polig WAGO 734-132, WAGO 734-102
1 IC2 ATMega8-16A ATMEGA 8-16 TQ ATMEGA8-16AU
1 T1 NPN Transistor BC847 BC 847C SMD TR-BC847B
1 IC1 EM4095 RFID IC EM4095
1 K1 Relais 5V 1xUM FIN 36.11 5V
1 S2 Kurzhubtaster TASTER 9315 T-Mini-6X6-4.3
1 IC3 RS485 IC MAX485 MAX 485 CSA MAX485CSA+
1 LED2 SMD LED 0805 rot SMD-LED 0805 RT LED-0805-rt-2

C1, C2, C3, C4 und R9 sind abhängig von der verwendeten Antenne. Werte für diese Antenne:

C1 1,5 nF
C2 10 pF
C3 entfällt
C4 1,5 nF
R9 33Ω


IC3 (MAX485) und IC5 (I2C EEPROM) sind optional.

Als EEPROM kann auch ein 24LC32 verwendet werden...

Downloads

Bestückungsplan unten

FAQ

  • Wieviele Transponder können im Speicher abgelegt werden ?

In der aktuellen Firmware wird, wenn bestückt, das externe EEPROM verwendet (auf der Leiterplatte integriert). Darauf lassen sich mit einem 64 kBit EEPROM 1170 Transponder abspeichern. Wird das Eeprom nicht bestückt und so das interne Eepom des µC verwendet, ist Platz für 70 Transponder

  • Wo bekomme ich passende Transponder her ?

Siehe Links

  • Wieviel Strom kann das Relais schalten

Das Relais an sich kann 10 A schalten, jedoch sind Stecker und Leiterbahnen für einen Strom von ca. 3 A dimensioniert.

FUSES für den Prozessor

  • Highbyte: 0xD9 (ggv. auch 0xC9)
  • Lowbyte: 0XFF (ggv. auch 0xBF)

Links