Roco’s 50er ins digitale Zeitalter befördert

  • Hallo!

    Thomas S. und Lutz K.

    Die technisch unterschiedlichen Lösungen haben allesamt einen Nachteil; sie brauchen Platz im Triebfahrzeug.

    Nur minimierungen des Platzbedarfs durch normierte Steckschnittstellen, gedruckte Schaltungen und eine elek-

    tronische Lösung können erfolgreich sein.

    MfG

  • Hallo Modellbahner,


    der letzte Beitrag endete mit der Aufgabe das analoge Signal der Lichtschranke in ein für den Microcontroller verständliches Format zu bringen.


    Ich will versuchen, es auch für den Elektroniklaien so verständlich wie möglich zu erklären. Für die Stellen, die tiefer in die Problematik einsteigen, verwende ich wieder die Kennzeichnung "ELEKTRONIK". Wer mag kann das einfach überspringen ohne den Zusammenhang zu verlieren.


    Warum ist eine solche Anpasschaltung überhaupt notwendig? Dazu müssen wir wissen, dass der von mir verwendete Microcontroller an seinen Eingängen bestimmte Spannungen benötigt um Signale zu erkennen.

    Eine logische EINS (high) wird durch eine Spannung von 4Volt - 5Volt dargestellt. Eine logische NULL (low) durch eine Spannung von kleiner 2Volt.


    Das nächste Bild veranschaulicht, dass das Signal der Lichtschranke so nicht direkt auf den Microcontroller gegeben werden kann.


    signalverlauf_fotozelavjj7.jpg

    Bild: 1


    Das sinusförmige Signal der Lichtschranke hat als kleinste Spannung 3,8V (low) und als höchste Spannung etwa 5V (high). Gemäß den oben genannten Spezifikationen erkennt der Microcontroller bei diesem Signalverlauf immer eine logische EINS. Damit wäre keine Zählung der Impulse möglich.


    Was man braucht um die Spannungen und Siganle anzupassen ist ein sogenannter Komparator (Vergleicher). Dieser vergleicht die Spannung aus der Lichtschranke mit einer Referenzspannung. Wird die Referenzspannung überschritten, so schaltet der Ausgang auf EINS, wird sie unterschritten auf NULL. Damit ist unser Problem mit der Signalanpassung behoben.


    ELEKTRONIK

    Im folgenden werde ich versuchen die Funktionsweise eines Komparators zu erklären. Wie immer gibt es natürlich mehrere Möglichkeiten einen solchen Komparator zu realisieren. Ich verwende einen sogenannten "Nicht invertierenden Komparator" mit einem Operationsverstärker. (Operationsverstärker sind die eierlegende Wollmilchsau der Elektronik, kein Gerät der Unterhaltungselektronik kommt ohne aus.)


    Das nächste Bild zeigt den Aufbau und die Funktionsweise eines Komparators mit Operationsverstärker, so wie er in meiner Testschaltung eingesetzt wurde.

    komparator_prinzipn7kcu.jpg

    Bild: 2


    Schaltung:

    Im linken Teil ist der Operationsverstärker, kurz OP, durch das blaue liegende Dreieck mit dem "A" gekennzeichnet. +Vcc kennzeichnet die Versorgungsspannung, in unserem Fall 5V. Das Erdungssymbol unten im Bild 0V also GND (Ground).

    Die Referenzspannung Vref wird mit dem Spannungsteiler aus den beiden Widerständen (R) an den Minuseingang des OP geschaltet. Unser Lichtschrankensignal Vin wird an den Pluseingang des OP geschaltet.

    Der Ausgang Vout wird auf den Eingang des Microcontrollers geschaltet.


    Funktion:

    Im rechten Teil wird klar wie die Schaltung funktioniert. Die rote Linie zeigt die Referenzspannung der Schaltung an. Wählt man für die beiden Widerstände (R) gleich große Werte z.B. 10Kiloohm (10k), dann entspricht die Referenzspannung genau der Hälfte der Versorgungsspannung +Vcc. In unserem Fall also 2,5V.

    In dem Beispiel aus Bild 2 liegt am Eingang Vin eine Spannung mit Dreieckform (grüne Linie) an, die von 0V bis 5V linear ansteigt, um sofort danach wieder linear auf 0V abzufallen.

    Wenn wir uns jetzt noch die blaue Linie des Ausganges (Vout) anschauen, dann ist zu erkennen, das in dem Moment wo die Eingangsspannung (Vin) die Referenzspannung übersteigt, der Ausgang (Vout) auf die Höhe der Versorgungsspannung geht. Man sagt dazu: der OP geht in die Sättigung (saturation).

    Umgekehrt fällt die Ausgangsspannung (Vout) sofort wieder auf einen Wert nahe 0V, wenn die Referenzspannung (Vref) unterschritten wird.


    Wenn wir das jetzt auf unser Problem übertragen, dann müssen wir uns unser Signal aus Bild 1anschauen. Als niedrigste Signalspannung haben wir 3,8V und als höchste Spannung 5V. Unsere Referenzspannung sollte also in etwa der Mitte der Signalspannung liegen. 4,5Volt sind ein guter Wert. Dazu müssen wir die Werte für die beiden Widerstände entsprechend auswählen. Um die 4,5V zu erreichen, muss der obere Widerstand einen Wert von 1Kiloohm und der untere Widerstand einen Wert von 6,8Kiloohm haben. Der Eingang (Vin) wird direkt mit dem Ausgang der Lichtschranke verbunden.

    Bei der Auswahl der Widerstände ist der Gesamtwiderstand beider Widerstände ebenfalls zu betrachten. Er sollte entsprechend hoch gewählt werden, da durch beide Widerstände ein Strom fließt, der die Versorgungspannung (Netzteil) belastet. Werte um die 10Kiloohm bis 1MegaOhm sind gute Werte.


    Referenzspannung:

    Die Referenzspannung muss natürlich nicht zwangsläufig mit Widerständen realisiert werden. Ein Analogausgang eines Microcontrollers tut es auch. Damit kann man dann mit einem Stück Software eine selbstkalibrierende Schaltung aufbauen, indem der Controller langsam die Spannung erhöht, um dann über die Impulse vom Ausgang des OP die Signalqualität zu beurteilen. So werde ich es jedenfalls machen. Abgesehen davon das dies Bauteile und Platz spart führt es auch zu einem sicheren Betrieb, wenn die Lichtschranke einmal verschmutzt.


    ELEKTRONIK ENDE


    Also zuerst einmal das Ganze auf eine Testplatine gebrutzelt. Zum Einsatz kommt ein OPA2340 Operationsverstärker. Dieser beinhaltet gleich zwei der Dinger, was mir sehr entgegenkommt. Brauchen wir doch für jede Lichtschranke einen. Das Wunderwerk sieht erst einmal so aus.

    komparator9tk5k.jpg

    Bild: 3


    In den Testaufbau integriert dann in etwa so.

    aufbau_komparatorhujpw.jpg

    Bild: 4


    Normalerweise ist ein solcher Aufbau tödlich für jede Elektronik. Über die Kabel können Störimpulse vom Motor und allem möglichen eingestreut werden. Aber der Aufbau ist so unempfindlich, dass ich mich selbst wundere. Zu guter letzt noch ein Oszillogramm, auf dem man das erfolgreiche Ergebnis sehen kann.

    komparatorb2kan.jpeg

    Bild: 5


    Aus dem sinusförmigen Lichtschrankensignal ist ein sauberes Rechtecksignal geworden, was direkt auf den Zählereingang des Microcontrollers geführt und ausgewertet werden kann.

    Um das mit den Spannungen am Eingang uns am Ausgang des OP noch einmal deutlich werden zu lassen habe ich die Messwerte mit ausgeben lassen. In Bild 5, in der Anzeige unten, sind die Werte der Spannungen min/max für die beiden Signale aufgetragen. Gelb entspricht dabei Kanal 1, also die Lichtschranke. Blau entspricht Kanal 2, also dem Ausgang des OP.

    Wie oben beschrieben liegt die sinusförmige Spannung an der Fotozelle zwischen 3,36V (wenn die Lichtschranke auf ein weißes Feld des Decoderstreifens schaut und 4,88V, wenn die Fotozelle auf ein schwarzes Feld des Decoderstreifens schaut.)

    Das Rechtecksignal am Ausgang dagegen hat als kleinste Spannung 0,08V und als größte Spannung 5,12V. Damit sind die Bedingungen für die Beschaltung eines Microcontrollers erfüllt.


    ELEKTRONIK
    Wenn man sich jetzt vor dem geistigen Auge ein Lineal an die steigende oder fallende Flanke (Bild 5) des Ausgangssignals hält (blau), dann kann man erkennen, dass die Umschaltung tatsächlich bei etwa 4,5V geschieht. In dem Fall wird auch klar, warum ich eine Referenzspannung gewählt habe, die etwa in der Hälfte des Eingangssignals liegt. Mit der Referenzspannung kann ich das Tastverhältnis zwischen "Highzeit" und "Lowzeit" einstellen. Diese Methode wird genutzt um in einfachen PWM-Motoransteuerungen (PWM=Puls weiten Modulation) die Drehzahl eines Motors zu verändern. Am Eingang liegt dann ein Dreiecksignal mit so um die 20kHz. Mit einem Potentiometer, der ja nichts anderes als ein Spannungsteiler ist, kann ich dann die Drehzahl beliebig regeln. Dazu muss der Ausgang des OP nur auf einen "dicken" Endstufentransistor gegeben werden, der den Motorstrom aushält.

    Da uns die nur die Anzahl der Impulse pro Umdrehung interessiert kann die Schaltung fest verdrahtet werden.

    ELEKTRONIK ENDE



    Ich hoffe das trotz der Elektroniklastigkeit der eine oder andere Interesse an dem Artikel findet. Fragen und Kritik bitte wie immer hierher.


    In diesem Sinne mit freundichen Modellbahnergrüßen

    Thomas

    "Wer sich nicht an die Vergangenheit erinnern kann, ist dazu verdammt, sie zu wiederholen." Jorge Augustín Nicolás Ruiz de Santayana

    Einmal editiert, zuletzt von Thomas S () aus folgendem Grund: Nachtrag zu Bild 5. Spannungen am OP. PWM-Signal

  • Gude Wolfgang,


    :offtopic:

    die Frage ist, so wie von Dir gestellt, erst einmal schwierig zu beantworten und ich muss etwas ausholen.

    Der Decoder an sich liefert von Hause aus kein einzelnes Signal, welches die Fahrtrichtung definiert. (Wenn man die Lampenausgänge einmal nicht berücksichtigt.) Insofern auch grafisch nicht darstellbar. Aber schauen wir mal.


    Um die digitalen Befehle vom Handregler in meine Erweiterungsplatine zu bekommen verwende ich die in den meisten Decodern mit Plux-Schnittstelle eingebaute SUSI-Schnittstelle. SUSI steht für (Serielles User Standard Interface). Das Ganze ist so ähnlich wie das USB-Druckerkabel was die Daten seriell vom Computer an den Drucker weiterleitet.

    Das digitale Signal für Vorwärts oder Rückwärts, sowie alle anderen möglichen Signale, sind dabei in Datenpakete verpackt. Diese Datenpakete sind in zwei gleiche Teile aufgeteilt. Man sagt dazu, dass der erste Teil das Befehlsbyte und der zweite Teil das Datenbyte enthält. Damit der Sender (in unserem Fall der Decoder) und der Empfänger (in unserem Fall meine Platine) wissen, was die miteinander reden, sind die möglichen Befehle aus dem Befehlsbyte und die Bedeutung der dazugehörenden Daten im Datenbyte vorher zwischen den beiden fest vereinbart worden. (Funktioniert so wie beim verschlüsselten Funken mit Codebüchern.)

    Das heißt, der Decoder und meine Platine haben das selbe Codebuch fest eingebaut. Im ersten Teil (Befehlsbyte) steht dabei eine Nummer die dem Schlüssel aus dem Codebuch entspricht und mit dem die Daten aus dem zweiten Teil (Datenbyte) entschlüsselt werden können. Dieses Codebuch nennt man Datenprotokoll. In unserem Fall ist das Datenprotokoll in der Vorschrift RCN-600 vereinheitlicht und genormt worden.


    Jetzt können wir uns Deiner Frage nähern. In der Tat kann man das Signal grafisch darstellen und es gibt hier einen Faden wo ich unter #5 die grafische Darstellung der aktuellen Lokfahrstufe des SUSI-Protokolls gezeigt habe. (Im Bild, unter Daten, ganz links, die erste eins ist die Richtung der Lok). Wenn Du magst folge dem Faden von Anfang an, da habe ich das ganze Protokoll inklusive einem Grundkurs in Digitaltechnik dargelegt.


    Ich hoffe ich konnte Dir weiterhelfen. Wenn nicht, dann bitte einfach weiter Fragen. Ich werde weiter Antworten.


    Mit freundlichen Modellbahnergrüßen

    Thomas


    PS: Für Nichtelektroniker und Nichtinformatiker immer ein schweres Thema. Und für mich schwer, immer ein passendes Gleichnis zu finden. Ich hoffe es gelingt mir einigermaßen und meine Sprache ist verständlich. Wer mag kann mir diesbezüglich mal seine Meinung geigen. Am besten per PN um den Faden nicht zu sprengen.

    "Wer sich nicht an die Vergangenheit erinnern kann, ist dazu verdammt, sie zu wiederholen." Jorge Augustín Nicolás Ruiz de Santayana

  • Hallo Wolfgang K,


    wozu soll die Kennung vorwärts - rückwärts außer beim Licht helfen? Aus meiner Heizerzeit kann ich am Klang der Dampfmaschine keinen Unterschied finden. Und Licht mit Richtung bekommt Thomas direkt vom Decoder. Wenn Thomas jedoch anfangen sollte die Geräusche beim überfahren eines Schienenstoßes nach zu vertonen, dann könnte ich dem folgen und dann wäre das Signal wirklich relevant. Aber vielleicht habe ich auch deine Frage falsch verstanden und es ist eine generelle Frage an den Digitalguru gewesen. Dann bitte ich um Nachsicht für mein Nichtverstehen.


    @Thomas: Vielen Dank für die auch für nicht Elektroniker verständliche Erklärungen. Bitte davon mehr, da es meinen Horizont da deutlich erweitert.

  • Moin Modellbahner,


    Michael R : Zuerst einmal Danke für das Feedback. Ich hoffe es gelingt mir auch weiterhin.


    Nun, vielleicht sollte ich die noch einmal kurz zusammenfassen für was ich den Aufwand gerade betreibe. Die Idee überhaupt eine solche Abfrage mittels Codestreifen zu generieren, geht ja auf einen Wunsch, oder sagen wir Anregung, von Volker zurück. Es ging darum die Funktion einiger Sounddecoder zu nutzen. Diese verfügen über einen Eingang der einen Dampfschlag auslösen kann. Dabei ist vorgesehen ein radsynchrones Signal, welches durch einen Magneten an der Kuppelachse ausgelöst wird, an den Decoder zu geben.


    Jetzt ist das mit erheblichen Aufwand verbunden bei einem 50er Roco Rahmen einen Magneten und einen Sensor anzubringen. Wer den Faden so ab Seite 4 verfolgt, der kann die Überlegungen nachlesen. Vor allem die Bilder von Lutz zeigen die Problematik und die verschiedenen Lösungen sehr deutlich.


    Von Lutz stammt dann auch die Vorlage für das was ich da im Moment mit dem Strichcode auf der Schwungmasse vor habe. Das erste Problem ist dabei das Getriebe der Roco 50er. Der Motor macht 6,425 Umdrehungen bei einer Radumdrehung. Wie man jetzt leicht sehen kann muß man rechnen um einen ganzzahligen Wert an den Decoder zu geben, der einer Radumdrehung entspricht. Dummerweise kann man dem Decoder nicht sagen alle 64 Impulse einen Dampfschlag auszulösen und was noch gravierender ist, durch das krumme Verhältnis zwischen Getriebe und Motor würde das Auslöseereignis immer wandern. Spätestens nach drei Umdrehungen stimmt die Zylinderposition nicht mehr.


    Da wir aber einen Microcontroller auf der Tenderplatine haben lassen wir eben den rechnen, der kann das recht gut und schnell. Der Decoderstreifen löst eine Umdrehung am Motor in 10 Zählimpulse auf. Und so entsprechen, nicht ganz zufällig, 6,4 Motorumdrehungen 64 Impulsen auf dem Codestreifen. Das ist ausreichend genau und geschieht immer an der selben Position. Der Microcontroller gibt dann einfach einen Impuls an den Decoder und der veranlasst den Dampfschlag.


    Jetzt kommen wir aber dazu warum wir Vorwärts und Rückwärts wissen müssen und warum wir zwei Codestreifen, jeweils mit einem Impuls und mit zehn Impulsen pro Umdrehung, brauchen.


    Wenn ich den Motor in die Lok baue, dann steht der Codestreifen in einem unbekannten Verhältnis zur Zylinderposition. Das Verhältnis bleibt zwar immer gleich, jedoch ist unbekannt wann der Zylinder in Auslassstellung ist und der Dampfschlag kommen müsste.


    Der Abgleich erfolgt dann bei der Inbetriebnahme der Lok einmalig, indem ich das Fahrwerk so drehe, dass ein Zylinder in Auslassstellung steht. Per CV oder Konfigprogramm wird der Abgleich dann angestoßen. Einmal 5 cm vor oder zurück fahren, und fertig.


    Was passiert dabei im Microcontroller auf der Tenderplatine:

    Der Controller bekommt also den Achtungspfiff per CV oder dem Konfigurationsprogramm. Der Controller weiß, das der Lokbesitzer das Fahrwerk in die richtige Position gedreht hat. Jetzt wartet er bis die Lok losfährt. Zuerst schaut er im SUSI-Protokoll nach, welche Fahrtrichtung die Lok hat. (Wir gehen mal davon aus der Lokbesitzer fährt vorwärts.) und fängt an die Impulse auf dem Codestreifen mit der Zehnerteilung zu zählen. Und zwar so lange, bis er den Impuls vom Codestreifen mit der Einerteilung (Nullimpuls) erkennt. Damit hat der Controller die Offsets zum nächsten Nullimpuls gelesen. Angenommen er hat für Vorwärts 4 Impulse gelesen, dann ergibt sich für Rückwärts automatisch ein Offset von 6 Impulsen. Logisch, wir haben ja nur 10 Impulse auf dem Umfang.


    Dieser Offset ist fahrtrichtungsabhängig einfach auf die gezählten Impulse draufgerechnet oder abgezogen. Simple Mathematik und keine Raketentechnik. Sind dann 64 Impulse voll wird ein Impuls an den Sounddecoder gegeben. Danach geht das von vorne los.


    Was passiert jetzt, wenn ich die Lok von den Gleisen nehme und in die Schachtel packe? Der Controller hat einen bestimmten Speicherbereich in den er Werte kopiert, sobald die Spannung zusammenbricht. Der aktuelle Zählerstand und auch die letzte Fahrtrichtung werden dort abgelegt. Somit ist gewährleistet, das die Lok beim nächsten mal dort weiter macht wo sie aufgehört hat. Fatal wäre nur, wenn das Fahrwerk ohne Spannung weitergedreht wird. Damit würde ein erneuter Abgleich notwendig. Das Gleiche passiert, wenn man die Lok in vollem Galopp von den Schienen nimmt. Ich kann etwa 1s Stromlosigkeit überbrücken ohne Impulsverlust. Läuft der Motor länger aus, ist ein Abgleich notwendig.:(


    Vielleicht hat dazu noch jemand eine bessere Idee.


    Bis dahin mit freundlichen Modellbahnergrüßen

    Thomas

    "Wer sich nicht an die Vergangenheit erinnern kann, ist dazu verdammt, sie zu wiederholen." Jorge Augustín Nicolás Ruiz de Santayana