Kehrschleife für Wechselstrombahnen - der zweite Aufguss

  Hardware   die Gehäusefrage   der Aufbau   Software
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. Empfängermodul
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.

Steuerplatine

Die Gehäusefrage

Gehäuse

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

Der erste Test 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


zurück zum Anfang
Seite zurück Startseite Seite vor
Erik Buchmann
EMail an: Owner@ErikBuchmann.de