Thomas Kortschack

Hobby- und Projekt-Website

In diesem Thema wird beschrieben, wie man eine auf Schrittmotor umgebaute Drehscheibe mit dem DCC-Drehscheibendecoder LocoTurn betreibt.

Dieses Thema baut auf dem Thema Drehscheibenumbau auf Schrittmotor auf. Bitte dort die Informationen beachten.

LocoTurn - Drehscheibensteuerung von Hardi & domapi

Diese Steuerung ist 2022 neu dazugekommen. Da sich einer der beiden Entwickler bei mir gemeldet hat, um meinen Motorhalter und den Direktantrieb zu testen, möchte ich gerne diese Drehscheibensteuerung vorstellen. Dies ist ein privates, nicht-kommerzielles Projekt. Es erfordert, dass man sich selbst etwas in die Materie einarbeitet und Platinen selbst zusammenlötet.

Bezugsquellen und Kontaktaufnahme

Wie der Name der Drehscheibensteuerung von Hardi & domapi schon vermuten lässt, stecken dahinter u.a. die zwei Entwickler Hardi (Hardi Stengelin) und domapi (Martin Pietsch) aus dem Stummiforum. Es gibt im Stummiforum mehrere Themen dazu, hier ein Link zum Forum Drehscheibenumbau auf Schrittmotor.

Technische Fragen bzgl. dieser Steuerung bitte im Stummiforum stellen. Aktuell gibt es zwei Platinenversionen für die Steuerung. Eine schwarze von Hardi Stengelin, die auch über das Stummiforum bestellt werden kann und eine rote von Martin Pietsch, die noch in der Testphase ist. Die hier bei mir in Bildern bzw. Videos gezeigten Platinen sind vom Entwickler Martin Pietsch, wobei ich diese selbst bestückt habe.

LocoTurn - Drehscheibensteuerung von Hardi & domapi

Funktionsprinzip

Bei der LocoTurn handelt es sich um einen DCC-Drehscheibendecoder auf Basis eines Arduino Nano. Für die Ansteuerung des Schrittmotors wird ein TMC2208-Steppertreiber verwendet. Des Weiteren enthält die Steuerung ein Relais zur Umpolung des Bühnengleises, ein separates Steuerpanel zur manuellen Bedienung mit Drehencoder, Poti und Tasten. Zusätzlich kann ein OLED-Display angeschlossen werden. Ein JQ6500 Soundmodul ist auf der Haupplatine steckbar. Zur Ansteuerung von Signalen, Warnleuchte und Hausbeleuchtung kann eine kleine Bühnenplatine mit WS2811-LED-Treibern verwendet werden. Für komplexere Beleuchtungsszenarien gibt es eine Schnittstelle zur sogenannten MobaLedLib (Infos zur MobaLedLib auf der MobaLedLib-Homepage bzw. in der Hauptthema des Stummiforums ).

Informationen zur Drehscheibensteuerung finden sich im o.g. Stummiforum, aber auch auf der MobaLedLib-Homepage bzgl. der Drehscheibe.

Der Source Code befindet sich auf GitHub, wobei es einige Code-Anpassungen/Erweiterungen von Martin Pietsch gibt, die noch veröffentlicht werden. Erläuterungen und Informationen zur Ansteuerung findet man im Source Code u.a. in den Kommentaren der Turntable.ino Datei.

Bei diesem Projekt werden diverse Arduino Bibliotheken eingesetzt, wie z.B. MobaTools, NmraDcc, u8g2, FastLED.

Die Drehscheibensteuerung kann sowohl Steppermotoren mit als auch ohne Getriebe ansteuern. Bei Getriebemotoren wird das Getriebespiel beim Anfahren der Gleisabgänge ausgeglichen. Bei Direktantrieb ohne Getriebe, wie bei den beiden unten gezeigten Videos, ist dies nicht erforderlich.

Videos

Diese Steuerung wurde zusammen mit verschiedenen Schrittmotoren getestet, wobei sich folgende Schrittmotoren bisher als gute Auswahl herausgestellt haben.

Bei den gezeigten Tests wurde ein 16V Schaltnetzteil verwendet. Neben dem Anfahren von Gleisabgängen im und gegen den Uhrzeigersinn, wird auch eine 180° Drehung gezeigt, sodass sich hier jeder ein Bild vom sanften und nahezu geräuschlosen Lauf der Bühne machen kann.

Wantai 42BYGHM809
Nema 17, 0.9°, 400 Schritte, 1.7A
Diesen Schrittmotor hatte ich schon länger im Einsatz und er ist relativ gut erprobt.

STEPPERONLINE 17HM15-0904S
Nema 17, 0.9°, 400 Schritte, 0.9A
Dieser Schrittmotor ist bei den Tests Ende 2022 neu dazugekommen und hat wie der Wantai ein gutes Drehverhalten, evt. sogar minimal besser.

Konfiguration

Als Beispiel möchte ich den folgenden Aufbau mit einer Fleischmann H0-Drehscheibe zeigen, die in 48 Segmente eingeteilt ist.

Beispiel H=-Drehscheibe

Das untere (Einfahr)Gleis ist mit 1 beschriftet. Zur Verständlichkeit habe ich von 1 bis 48 gezählt und allen befahrbaren Gleisanschlüssen die jeweilige Nummer gegeben (grün markiert). Beachten werden sollten auch die Gegenseiten, wobei diese teils nicht befahrbar sind und deshalb hier rot markiert werden.
Da es sich hier um eine gebrauchte Drehscheibe handelt, bitte ich um Verständnis, dass teils auch "Anschlussgleise" gesteckt sind, die eigentlich ohne Gleisprofile sein müssten, was zu Testzwecken keine Rolle spielt.

Zählt mal alle beschrifteten Anschlussgleise, so kommt man auf 14 Stück (ist immer eine gerade Zahl). Bei der Drehscheibensteuerung von Hardi & domapi werden diese als Ports bezeichnen, wir reden hier als von Port 1 bis Port 14.

In einer Konfigurationsdatei (Header-Datei: Turntable_Config.h) des Quellcodes muss die Drehscheibe entsprechend konfiguriert werden.
Bei meiner Drehscheibe habe ich eine bestehende Konfiguration kopiert und ein paar Einstellungen in meiner Turntable_Config.h angepasst. Ich gehe hier nicht auf alle Einstellungen ein, weil das den Rahmen sprengen würde.

  • #define USE_DCC 1

    Hiermit wird die DCC-Schnittstelle aktiviert.

  • #define PARTLY_USED_PORTS 1

    Damit sagen wir der Steuerung, dass wir nur die hier beschrifteten Ports definieren wollen.

  • #define PORT_CNT 14
    #define PARTLY_USED_PORTS_TAB { 1, 2, 3, 4, 5, 6, 8, 25, 26, 27, 28, 29, 30, 32 }

    Hiermit legen wir die Portanzahl 14 fest und in der darauffolgenden Zeile definieren wir, welche Anschlussgleise das sind (das sind genau die 14 Zahlen, die auf meinem Foto mit den Zahlen beschriftet sind).

  • #define ENCODER_LOGIC 1

    In einer älteren Logik war es bei der manuellen Bedienung per Drehencoder so, dass die Bühne direkt immer losgefahren ist, sobald man am Encoder gedreht und einen anderen Port gewählt hat. Mit der neuen Encoder Logik 1 wird das verhindert. Man kann in Ruhe den Port auswählen und dann mit der Encoder-Taste diese bestätigen. Erst dann dreht die Bühne los.

  • #define DIRECTION_CHANGE_POSSIBLE 1

    Mit dieser Einstellung erlauben wir einen Richtungswechsel während einer Drehung. D.h. wenn man per Encoder viel manuell bedient und nochmal den Port ändert, so dreht die Bühne auf dem kürzesten Weg zum zuletzt ausgewählten Port. Gegebenenfalls wird die vorherige Drehung sanft gestoppt, die Drehrichtung geändert und zum zuletzt gewählten Port gefahren.

  • #define FIXED_STEPS_PER_ROUND 6400
    #define FIXED_STEPS_HAS_CONTACT 0

    Hiermit werden die Schritte manuell festgelegt, die die Steuerung für eine Umdrehung benötigt (man kann die Anzahl der Steps auch automatisch ermitteln lassen, ist jedoch beim Direktantrieb nicht anzuraten). Die Steuerung arbeitet mit sogenannten Microsteps, die vom TMC2208 erzeugt werden. Pro Schritt ergeben sich 16 interpolierte Zwischen-Positionen. Bei 400 Motorschritten x 16 Mikroschritte ergibt dies insgesamt 6400 Schritte für eine Umdrehung.
    Mit der zweiten Zeile wird das Getriebespiel auf 0 gesetzt.

  • #define ALWAYS_CALIBRATE_AT_START 1
    #define ADVANCED_REFERENCE_DETECTION 1

    Zum einen wird hiermit festgelegt, dass beim Einschalten der Steuerung eine Referenzfahrt stattfinden soll, zum anderen legen wir mit der zweiten Zeile fest, dass bei der Referenzfahrt zunächst erstmal schnell bis zum Hallsensor gedreht werden soll, danach aber nochmal etwas langsamer, sodass die Nullpunktbestimmung genauer wird.

  • #define PORT_TYPE 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0

    Hiermit legt man fest welche Ports befahrbar sind. Dies wird für das automatische Schalten der Bühnensignale verwendet. Bei einem rot markierten Anschlussgleis ist hier jeweils eine 0 eingetragen, weil dieses nicht befahrbar ist.

  • #define DCC_PORT_ADDR_LIST  DCC_PORT_ADDR(1, (229 + DCC_OFFSET), RED), \
                                DCC_PORT_ADDR(2, (229 + DCC_OFFSET), GRN), \
                                DCC_PORT_ADDR(3, (230 + DCC_OFFSET), RED), \
                                DCC_PORT_ADDR(4, (230 + DCC_OFFSET), GRN), \
                                DCC_PORT_ADDR(5, (231 + DCC_OFFSET), RED), \
                                DCC_PORT_ADDR(6, (231 + DCC_OFFSET), GRN), \
                                DCC_PORT_ADDR(7, (232 + DCC_OFFSET), RED), \
                                DCC_PORT_ADDR(8, (232 + DCC_OFFSET), GRN), \
                                DCC_PORT_ADDR(9, (233 + DCC_OFFSET), RED), \
                                DCC_PORT_ADDR(10,(233 + DCC_OFFSET), GRN), \
                                DCC_PORT_ADDR(11,(234 + DCC_OFFSET), RED), \
                                DCC_PORT_ADDR(12,(234 + DCC_OFFSET), GRN), \
                                DCC_PORT_ADDR(13, (235 + DCC_OFFSET), RED), \
                                DCC_PORT_ADDR(14, (235 + DCC_OFFSET), GRN)

    Mit diesen Zeilen legt man die einzelnen DCC-Adressen für die 14 Ports fest, wobei hier pro Adresse zwei Ports angesteuert werden können, je nach Stellung rot/grün.

Wenn gewisse Funktionen nicht benötigt werden, am besten diese ausschalten, um Speicherplatz zu sparen, der leider etwas knapp ist. Z.B. kann man USE_SOUND, USE_SERIAL_INPUT, ENABLE_DPRINTF auf 0 setzen.
Der Arduino Sketch (Firmware) ist sehr speicherintensiv und nutzt den Speicher des Arduino Nano nahezu komplett aus. Es ist zwingend notwendig den Optiboot Bootloader aufzuspielen.

Der Optiboot Bootloader für den Arduino Nano verbraucht weniger Speicherplatz und somit bleibt mehr Platz für die eigentliche Firmware (Sketch). Deshalb kann man diesen Optiboot Bootloader verwenden. Verschiedene Anleitungen zum Einspielen findet man per Suchmaschine.

Nebeninfo: Allerdings muss ich gestehen, dass ich mich hier nicht an Anleitungen im Internet gehalten habe, was ich anraten würde. Leider beschreiben diese oft, wie man das mit zwei Arduinos über die Arduino IDE machen kann. Ich hatte zu Beginn keine zwei Arduinos und Versuche per ISP-Programmer (z.B. Atmel-ICE, Diamex ISP-Programmer) und Arduino IDE schlugen leider bei mir fehl. Ich hatte es deshalb per ISP-Programmer im Atmel/Microchip Studio durchgeführt, die original Fuses EXTENDED=0xFD, HIGH=0xDA, LOW=0xFF angepasst auf EXTENDED=0xFD, HIGH=0xDE, LOW=0xFF (siehe auch Screenshot) und im Anschluss die optiboot_atmega328.hex aufgespielt.

In der Arduino IDE sollten noch alle Bibliotheken eingebunden werden, die für das Projekt nötig sind und oben von mir teils genannt wurden (Sketch->Bibliothek einbinden->Bibliotheken verwalten...). Um Optiboot auch in der Arduino IDE zu nutzen, muss man unter Datei->Voreinstellungen->Zusätzliche Boardverwalter-URLs auf den rechten Button klicken und im Fenster in einer Zeile folgenden einfügen:

https://github.com/Optiboot/optiboot/releases/download/v8.0/package_optiboot_optiboot-additional_index.json

Unter Werkzeuge->Board->Boards Manager kann man Optiboot suchen und in der Arduino IDE installieren.

Wenn soweit alles korrekt konfiguriert ist und der Arduino Nano per USB am PC angeschlossen ist, sollte in der Arduino IDE folgendes eingestellt werden: (Port kann sich unterscheiden, siehe Geräte-Manager unter Anschlüsse "USB Serial Port". Falls es viele Ports gibt evt. Arduino nochmal ausstecken, wieder einstecken und dabei beobachten, welche serielle Schnittstelle neu dazu kommt.)

Arduino IDE Einstellungen

Wenn Sketch->Überprüfen/Kompilieren funktioniert, dann sollte sich auch per Sketch->Hochladen entsprechend der aktuelle Softwarestand auf dem Arduino Nano aufspielen lassen.

Inbetriebnahme

Schaltet man die Steuerung ein, so dreht sich die Bühne im Uhrzeigersinn (falls die Drehrichtung nicht stimmt, ist der Motor falsch angeschlossen).
Dabei wird die sogenannte Referenzfahrt durchgeführt. Die Bühne dreht solange, bis ein Hallsensor TLE4905 unter der Grube ein Signal liefert. Das ist der Fall, wenn sich der eingebaute Magnet unter der Bühne ca. über dem Hallsensor befindet (oben im Bild mit den zwei roten Punkten angedeutet). Diese Position ist der absolute Nullpunkt, ab dem letztendlich die Schritte gezählt werden.

Bei mir ist es so, dass der Hallsensor und der Magnet nicht exakt am Einfahrgleis liegen, sondern noch etwas gegen den Uhrzeigersinn versetzt sind. Man kann den Hallsensor auch komplett an einer anderen Stelle einbauen.
Ich habe es hier so umgesetzt, dass nach der Referenzfahrt mit relativ kurzem Weg das Einfahrgleis (Port 1) angefahren werden kann.

Bei der Erstinbetriebnahme bzw. nach einem Reset der Schaltung (Menü->Reset) muss zunächst ein Port im Uhrzeigersinn angelernt werden. Ich nehme dazu den Port 1 (Einfahrgleis). Dazu geht man ins Menü und wählt "Manuell/Speich.". Danach kann man mit dem Drehencoder (im Uhrzeigersinn) die Bühne (im Uhrzeigersinn) drehen. Dabei dreht man solange, bis man das Anschlussgleis erreicht. Man sollte darauf achten, dass man das Anlernen hier im Uhrzeigersinn macht. Also lieber nicht zu weit drehen und dann nochmal zurückdrehen! Bzw. wenn man zurückdrehen muss, dann erstmal weiter weg und nochmal langsam per Encoder im Uhrzeigersinn zum Anschlussgleis drehen. Wenn die Position stimmt, dann die Encoder-Taste drücken, Port 1 auswählen und nochmal bestätigen. Danach ist der Port 1 im Uhrzeigersinn angelernt und alle anderen Ports werden von der Steuerung automatisch berechnet.

Es gibt auch die Möglichkeit des Finetunings der Portpositionen. Man kann nachträglich jeden einzelnen Port im Uhrzeigersinn und gegen den Uhrzeigersinn anfahren und die Positionen nochmal speichern. Die Positionen, die bei einer 180°-Drehung angefahren werden, können ebenfalls finegetuned und abgespeichert werden. In meinen Tests war das bisher nicht nötig, da die Positionen im und gegen den Uhrzeigersinn derzeit bei mir relativ genau angefahren werden.

FAQ

An dieser Stelle möchte ich Anwenderfragen beantworten, die bei mir bzw. der Drehscheibensteuerung von Hardi & domapi eingetroffen sind.

  • Welche Steuerungssoftware unterstützt diese Lösung?

    Prinzipiell dreht es sich hierbei und einen DCC-Decoder, der somit über fast jede Digitalzentrale (DCC) und Steuerungssoftware angesteuert werden kann. Zudem lassen sich die DCC-Adressen im Arduino-Sketch konfigurieren.
    Persönlich habe ich bisher nur Tests mit meiner eigenen Steuerungssoftware gemacht, was schon gut funktioniert. An der LocoTurn wurden im Laufe der Zeit einige Anpassungen gemacht, sodass diese mit dem Befehlssatz 7687/TT-DEC per DCC angesteuert werden kann, welchen die allermeisten Steuerungsprogramme unterstützen. Der ein oder andere Test mit verschiedenen Programmen steht hier sicherlich noch aus, dazu am besten die Themen im Stummiforum verfolgen bzw. aktiv mit testen.

  • Meldet die Steuerung eine Drehscheibenbewegung an die Modellbahnsteuerungssoftware?

    Ja, ein Optokoppler kann einen Rückmelder (S88, RS, BiDiB, CAN, ...) o.ä. ansteuern. Sobald die Endposition erreicht ist, löst dieser aus (lässt sich invertieren, ob "frei" oder "belegt" gemeldet wird).

  • Gibt es ein Handbuch für die Steuerung?

    Nein, es werden dafür noch Freiwillige gesucht. Wer Lust hat, am besten im Stummiforum melden. Hinweise, kleine Anleitungen und Fotos sind im oben verlinkten Stummiforum zu finden.

  • Gibt es schon ein fertiges Soundprojekt?

    Nein, aktuell gibt es noch kein Soundprojekt. Es ist zwar möglich Soundausschnitte aus YouTube-Videos und anderweitigen Quellen privat zu nutzen, wäre dann aber rechtlich schwierig diese zu veröffentlichen. Wer die Möglichkeit und Beziehungen hat den Ton bei einer Drehscheibe aufzuzeichnen, der kann sich natürlich einbringen.

Wer zu diesem Thema nützliche Informationen hat, kann sich gerne bei mir melden, sodass ich diese hier online stellen kann.