| 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
|
||