Der vorige Artikel, der eine Kehrschleife für Wechselstrombahnen beschreibt, ist mittlerweile fast 2 Jahre alt und reichlich angestaubt. So richtig 'produktiv gegangen' ist die vorgestellte Schaltung bei mir auch nicht. Nichtsdestotrotz ist das Konzept einwandfrei verwendbar - und da inzwischen auch die Gleise meiner Gartenbahn entsprechend verlegt sind, kommt hier nun ein Update des Kehrschleifenprojekts. | ||
Die Hardware |
||
Wie schon beschrieben wird das Konzept der Kehrschleifen-Automatik beibehalten: ein vollständig
vom restlichen Gleissystem abgeteiltes Gleisstück wird von Lichtschranken an den Trennstellen
jeweils in die 'richtige' Polarität des Zuges geschaltet.
Die Hardware ist nun jedoch deutlich verändert aufgebaut.
Als Empfänger dienen kleine IR-Empfängermodule TSOP1836. Das sind fertig aufgebaute Empfangsmodule mit IR-Detektor, Tageslichtfilter, Verstärkerschaltung, Bandpass, Demodulator und TTL-kompatiblem Ausgang in einem winzigen Gehäuse von nur wenigen Millimetern Kantelänge. Üblicherweise werden diese Module für den Empfang von Infrarotfernbedienungen eingesetzt, lassen sich aber auch ausgezeichnet für Lichtschranken einsetzen. Detektiert werden Pulse mit einer Trägerfrequenz von 36 kHz, die sich sehr leicht von einem Timer des 2051 erzeugen läßt. Weil diese Module eigene frequenzkritische Logik besitzen, kann man sie jedoch nicht lose an einem langen Kabel betreiben, sondern sollte sie auf ein kleines Platinchen mit einem Pufferkondensator und einem Tiefpass unterbringen. Die Steuerplatine hat sich auch drastisch gewandelt. Zunächst ist zu bemerken, dass darauf Bauteile für zwei Kehrschleifen untergebracht sind. Nur eine Kehre müsste einmal vorwärts und einmal rückwärts durchfahren werden, um eine 360 Grad-Wende auszuführen - bei zwei 'spiegelverkehrten' Kehren besteht diese Problematik nicht. Daher sind also 4 IR-Dioden sowie 4 Empfangsmodule anschließbar und zwei 2fach Wechselrelais auf der Platine vorhanden. |
Sowohl die 4 IR-LED's als auch die beiden Relais werden mit einem einzigen L293D angesteuert.
Über diesen Chip habe ich schon an anderer Stelle geschrieben.
Auch hier ist er wieder praktisch einsetzbar, weil er auf kleinstem Raum zuverlässig
höhere Lasten bei höheren Spannungen schalten kann. Darum können sowohl die Relais als auch
die IR-LED's direkt mit nur gleichgerichteten und gepufferten, aber ungeregelten Eingangsspannung
betrieben werden, was den Spannungsregler entlastet und im Falle der LED's einen deutlichen
Leistungsschub bringt. Apropos Spannungsregler: dieser ist von unten an der Platine angebracht, damit
die kupferne Massefläche gleich zur Kühlung dient. Praktischerweise wurden die
Relais direkt auf der Platine vom Spannungseingang ab beschaltet, sodass nur noch Anschlüsse für
die Ausgänge der Relais vorhanden sind. Zu guter letzt befindet sich noch ein TL7705 Spannungswächter bzw. Resetgenerator auf der Platine, um die Zuverlässigkeit auch bei schwierigen Versorgungen sicherzustellen. |
|
Die Gehäusefrage |
||
Mit der Gehäuseproblematik habe ich mich eigentlich am längsten herumgeschlagen. |
Wie muss ein Gehäuse aussehen, dass leicht zu verbergen ist, massiv genug, um
nicht so leicht beschädigt zu werden, wasserdicht und gut zum Ausrichten der Optik geeignet ist? Ich habe mich dafür entschieden, die Gehäuse aus Kupferrohren aus dem Baumarkt - Installationsbedarf zu bauen. Diese Rohre sind unverwüstlich, lötbar und halbwegs preiswert. Wenn man diese Rohre tief senkrecht einbuddelt, besteht keine Gefahr, dass die Ausrichtung der Optik von durchstromernden Katzen oder Igeln verstellt wird. Und da nur ein kleiner Teil aus dem Boden schaut, sind sie recht unauffällig. Die IR-LED's kann man durch eine 5mm-Bohrung schieben und von hinten mit reichlich Dichtungsmasse wasserdicht verkleben. Schwieriger ist das mit den Empfängerplatinchen. Dafür wurden die Rohre mit einem ebenfalls im Baumarkt zu bekommenden Adaper von 15 auf 28mm Durchmesser erweitert und ein kurzes Rohrstück unten angelötet. In dieser Erweiterung wird nun die Empfängerplatine so angebracht, dass sie senkrecht nach oben blickt. Am oberen Ende lenkt ein angeklebter Spiegel aus der blanken Innenseite einer Cola-Dose den waagerechten Strahl der IR-LED zum Empfänger. Somit sieht auch für die Empfänger nur ein Stückchen Rohr mit 15mm Durchmesser und einigen Zentimetern Länge aus dem Boden. |
|
Der Aufbau |
||
Hier erkennt man den ersten Test, ob die Lichtschranken so arbeiten, wie es von ihnen erwartet wird. IR-Sender und Empfänger liegen noch lose nur von einigen Steinen eingeklemmt auf dem Boden, sodass sie die Trennstelle genau in der Mitte zwischen den beiden Klemmenpaaren diagonal überstreichen. Auf diese Weise wird eine darüberfahrende Lok oder ein geschobener Wagen rechtzeitig vor der Trennstelle erkannt, sodass diese noch rechtzeitig umgeschaltet werden kann. | ||
Software |
||
Die Software ist sehr einfach: Timer 0 erzeugt ein 36kHz-Signal.
Weil die Empfangsleistung besser ist, wenn das 36kHz-Signal nicht
permanent ausgesendet wird, so wird in der Hauptschleife das
Signal nur alle 20ms aktiviert.
Timer 1 ist für die Entprellung der Lichtschranke zuständig. Dazu wird bei der Abfrage des Signals jedes mal ein Zähler |
auf einen Startwert gesetzt, wenn die Lichtschranke durchbrochen
wurde. Heruntergezählt wird nun von Timer 1 mit einer Periode von einer Sekunde.
Erst wenn der Zähler wieder auf 0 steht, gilt die Lichtschranke als
frei. In der Hauptschleife des Programms werden die 4 Lichtschranken abgefragt und ggf. darauf mit dem Setzen der Relais reagiert. |
|
;Autor : Erik Buchmann ;Projekt : Wendeschleifen-Projekt ; Quarz : 24 MHz ; Generator: CodeGen Experimental Version 0.9, Erik Buchmann '99 ; Datum : 9.11.100 ;--------------------------------------------------------------- $NOMOD51 $INCLUDE (89C1051.MCU) org 0h ajmp start ; Ersatzvariablen ;--------------------------------------------------------------- LED0 BIT P3.0 LED1 BIT P3.1 LED2 BIT P3.2 LED3 BIT P3.3 IR_OUT BIT P1.3 ENABLE BIT P1.0 REL1 BIT P1.2 REL2 BIT P1.1 IR_IN0 BIT P1.7 IR_IN1 BIT P1.6 IR_IN2 BIT P1.5 IR_IN3 BIT P1.4 CNTDNPRE EQU 3 ; Ladewert für die Entprellung in Sekunden timer1_ext24 DATA 09h IR0CNT DATA 0Ah IR1CNT DATA 0Bh IR2CNT DATA 0Ch IR3CNT DATA 0Dh ; Interruptroutinen ;--------------------------------------------------------------- org 0Bh ; Timer0: 36kHz Signal erzeugen ; Interruptbehandlungsroutine Timer 0 cpl IR_OUT reti org 1Bh ; Timer1: Lichtschranken entprellen ; Interruptbehandlungsroutine Timer 1 mov TL1, #219 mov TH1, #11 djnz timer1_ext24,timer1_int_label mov timer1_ext24,#32 push Acc setb LED0 setb LED1 setb LED2 setb LED3 ; die Counter der Lichtschranken bis 0 herunterzählen mov a,IR0CNT jz timer1_int_label0 dec IR0CNT clr LED0 timer1_int_label0: mov a,IR1CNT jz timer1_int_label1 dec IR1CNT clr LED1 timer1_int_label1: mov a,IR2CNT jz timer1_int_label2 dec IR2CNT clr LED2 timer1_int_label2: mov a,IR3CNT jz timer1_int_label3 dec IR3CNT clr LED3 timer1_int_label3: pop Acc timer1_int_label: reti ; Funktionen ;--------------------------------------------------------------- $INCLUDE (TIME24.INC) ; Initialisierung ;--------------------------------------------------------------- start: setb ENABLE clr REL1 clr REL2 setb LED0 setb LED1 setb LED2 setb LED3 ; Timer 0 aktivieren ; Intervall: 0.0135 ms ; Software-Kontrolle mov TL0, #229 mov TH0, #229 ; Timer 1 aktivieren ; Intervall: 1000 ms ; Software-Kontrolle mov TL1, #219 mov TH1, #11 mov timer1_ext24,#32 mov SP, #60h mov TMOD,#18 mov IE, #138 mov TCON,#64 mov IR0CNT,#0 mov IR1CNT,#0 mov IR2CNT,#0 mov IR3CNT,#0 ; Hauptprogramm ;--------------------------------------------------------------- main: clr TR0 ; Sensoren regenerieren mov a,#20 clr IR_OUT call F_wait_m setb TR0 ; Puls einschalten mov a,#1 call F_wait_m ; Puls detektieren mov c,IR_IN0 jnc nicht_durchbrochen0 mov a,IR0CNT jnz relais_nicht_schalten0 clr REL1 relais_nicht_schalten0: mov IR0CNT,#CNTDNPRE clr LED0 nicht_durchbrochen0: mov c,IR_IN1 jnc nicht_durchbrochen1 mov a,IR1CNT jnz relais_nicht_schalten1 setb REL1 relais_nicht_schalten1: mov IR1CNT,#CNTDNPRE clr LED1 nicht_durchbrochen1: mov c,IR_IN2 jnc nicht_durchbrochen2 mov a,IR2CNT jnz relais_nicht_schalten2 clr REL2 relais_nicht_schalten2: mov IR2CNT,#CNTDNPRE clr LED2 nicht_durchbrochen2: mov c,IR_IN3 jnc nicht_durchbrochen3 mov a,IR3CNT jnz relais_nicht_schalten3 setb REL2 relais_nicht_schalten3: mov IR3CNT,#CNTDNPRE clr LED3 nicht_durchbrochen3: jmp main END |