Diese Seite beschreibt die Konfiguration des
SAnD-4 Dekoders
über ein spezielles PC-Programm,
den Hex_Manipulator.
Um diese Möglichkeiten zu nutzen muss das erzeugte HEX-File in den
PIC übertragen ("gebrannt") werden.
Ein Servo hat naturgemäss eine ganze Menge Einstell-Möglichkeiten. Für die verschiedenen
Ansteuerungen möchte der professionelle Anwender (und wer Servos einsetzen will, den kann
man wohl zu dieser Gruppe zählen..) z.B. die Kurvenform anpassen.
Das Einstellen einer Kurve über CVs oder ähnliches möchte ich mir lieber gar nicht
erst vorstellen (müssen), dies ist einfach nicht praktikabel. Da bei meinen Projekten
ja alles ein bischen anders ist, habe ich an dieser Stelle auch eine ganz spezielle
Möglichkeit: die Manipulation des HEX-Files, welches dann in den Dekoder-PIC
gebrannt wird. Das geht natürlich nur, wenn man das HEX-File dann auch in den PIC
übertragen werden (sprich "brennen") kann, aber diese Fähigkeit haben wohl
inzwischen die meisten Anwender meiner Projekte.
Nun denn, hier geht es zum PC-Tool (mit dem man übrigens alle meine HEXen anpassen kann):
Der Dekoder hat (bis zu) 8 Adressen. Die Adressen können hier eingestellt werden, aber auch später
"am Gleis" über die normale Adress-Lern Routine geändert werden.
Jetzt wird es schon ein bischen komplizierter: das sogenannte "Mapping" definiert,
durch welche Adresse bei bestimmter Servo mit einer bestimmten Kurve gefahren wird.
Es wird zunächst definiert, welcher Servo zu berwenden ist:
Anschließend kann bestimmt werden, was mit diesem Servo zu tun ist, also ob eine Kurve einmalig oder
zyklisch (START LOOP) zu starten ist. Laufende Loops können mit der ABBRUCH-Funktion sofort gestoppt werden,
während ein BEENDEN die Kurve noch beendet und dann die LOOP nicht wieder startet.
Jetzt wird noch definiert, welche der 4 Kurven denn nun verwenden ist:
Und nun noch, welcher Relais-Ausgang geschaltet werden soll:
Ich erkläre das am besten mal an ein paar Beispielen: Mal angenommen, Sie wollen
Form-Signale (2-begriffig) stellen, und zwar an allen 4 Servos. Dann brauchen Sie ja im Prinzip
2 Kurven-Formen, nämlich je eine für "Hoch" und für "Runter". Dadurch kann man
dann in der "Hoch"-Kurve auch das "Umfassen" realisieren.
Nun würde sich dann das folgende Mapping ergeben:
Adresse 1 fährt Signal 1 hoch, also Kurve 1 an Servo 1
Adresse 2 fährt Signal 1 runter, also Kurve 2 an Servo 1
Adresse 3 fährt Signal 2 hoch, also Kurve 1 an Servo 2
Adresse 4 fährt Signal 2 runter, also Kurve 2 an Servo 2
Adresse 5 fährt Signal 3 hoch, also Kurve 1 an Servo 3
Adresse 6 fährt Signal 3 runter, also Kurve 2 an Servo 3
Adresse 7 fährt Signal 4 hoch, also Kurve 1 an Servo 4
Adresse 8 fährt Signal 4 runter, also Kurve 2 an Servo 4
könnse folgen? Gut! Dieses Mapping würde dann hier so aussehen,
wobei wir die Einstellungen für die Relais ersteinmal ignorieren können:
Es gibt noch ein paar Parameter, die Servo-Spezifisch sind:
"Impuls-Zeit (MIN)" und "Impuls-Zeit (MAX)" stellen die End-Anschläge des Servos da. Hier können Werte eingetragen werden,
wenn man diese schon kennt. Ansonsten würde man diese Parameter eher durch die Justage-Funktion (Endpositionen einstellen)
ermitteln.
"keine Unterbrechung" führt dazu, eine der Servo während einer Bewegung nicht durch einen neuen Befehl unterbrochen werden
kann. Dies ist eigentlich meistens sinnvoll, da ansonsten ziemlich wilde Servo-Bewegungen entstehen können.
"keine Wiederholung" führt dazu, die selbe Kurve nicht 2x hintereinander gefahren werden darf. Dies ist z.B. bei Weichen
sinnig, denn wenn diese zuletzt von LINKS nach RECHTS gefahren wurde, dann muss sie ja erst wieder von RECHTS nach LINKS gefahren werden.
Eine Wiederholung der Bewegung sähe ziemlich blöd aus.
"Spannung aus" führt dazu, dass nach Ablauf der Kurve die Versorgungs-Spannung
des Servos abgeschaltet wird.
"Impulse aus" führt dazu, dass nach Ablauf der Kurve die Ansteuer-Impulse
des Servos abgeschaltet werden.
Die letzten beiden Einstellungen haben folgenden Hintergrund: Wird ein Servo mit
Impulsen versorgt, so versucht er, die Stellung zu halten. Dies kann dazu führen,
dass der Servo ständig brummt, obwohl er eigentlich kar nichts zu tun hat. Also kann
man die Ansteuer-Impulse abschalten. Dies wiederum mag nicht jeder Servo. Es gibt
sog. "Fail-Save"-Servos, die gehen in einen sicheren Grund-Zustand, wenn die
Ansteuerung weggenommen wird. Auch bei digitalen Servos kann das Abschalten der Impulse
nicht helfen, weil diese sich die Soll-Stellung einfach merken und trotzdem nachregeln.
Also hilft hier das Abschalten der Versorgungs-Spannung. Dies jedoch kann bei den Analogen
Servos wiederum problematisch sein, weil diese beim Wieder-Einschalten der Spannung
teilweise wilde Zuck-Bewegungen ausführen.
Fazit: Hier muss jeder je nach Anwendung und Servo die richtige Abschalt-Taktik
rausfinden!
Kurvenform einstellen
Beim Mapping haben wir ja schon davon gesprochen das man
bestimmte "Kurven fahren". Nun wollen wir mal zeigen, wie man so eine
Kurve nun definiert. Zunächst einmal gibt es bis zu 4 Kurven, die man definieren
kann. Die Auswahl, welche dieser Kurven gerade angezeigt und bearbeitet wird,
erfolgt hier:
Dann gibt es noch 2 allgemeine Angaben je Kurve, nämlich die Anzahl der Punkte sowie
ein "Stretch-Faktor", mit dem man den Ablauf einer Kurve langsamer machen kann.
Diese werden hier eingestellt und die daraus resultierenden Zeiten angezeigt:
So, nun aber endlich zur eigentlichen Kurve! Die Kurve wird angezeigt und kann via Maus
(Klick und Ziehen) angepasst werden. Ich denke dass mit dieser Darstellung jeder
klarkommen sollte (wenn nicht: unten und oben in der Grafik entsprechen
den beiden End-Positionen des Servos. Die Kurve wird von links nach rechts abgefahren,
d.h. die einzelnen Punkte werden dem Servo nacheinander als Soll-Position übergeben).
Was gibt es sonst noch? Es können Kurve über einige mathematische Funktionen
vorgegeben werden:
.. es gibt horizontale und vertikale Spiegel-Möglichleiten:
Eine Kurve kann in eine andere kopiert werden:
Eine Kurve und ein komplettes Setup kann geladen und gespeichert werden. Bei einer
Kurve handelt es sich hier nur um die einzelne Kurve, bei einem Setup werden alle
4 Kurven und auch die dazugehörigen Parameter wie der Stretch-Faktor, das Mapping usw. geladen:
Durch den Druck auf den Programmier-Taster können die Adressen auch über den
Lern-Mode angelernt werden. Zunächst fängt die LED 5 (Grün) im 1er Rhythmus an zu blinken, wodurch
signalisiert wird, dass Adresse 1 gerade gelernt werden kann. Wird jetzt ein
Schalt-Befehl (Weichen-Befehl) auf das Gleis gelegt, so wird diese Adresse
abgespeichert. Automatisch geht es gleich weiter mit Adresse 2 (signalisiert durch
2er-Blinken). Dito dann für Adresse 3 bis 8.
Sollen Adressen beim Lernen übersprungen werden, kann man dies durch erneutes Drücken der
Programmier-Taste erreichen. Der Lern-Vorgang kann jederzeit durch Wegnehmen der Versorgungs-Spannung
beendet werden, bereits gelernte Adressen sind dann bereits gespeichert.
Ein Abklemmen der Digital-Spannung hat diese Wirkung hingegen nicht.
Da die End-Positionen der Servos bei einigen Konstruktionen nach dem Einbau
justiert werden muss, habe ich eine entsprechende Routine eingebaut.
Hierfür muss am Programmier-Stecker eine Justage-Schaltung aus ein paar Tastern
und Dioden angeschlossen werden, mit der die Justage durchgeführt wird:
Die Routine wird durch Drücken des Programmier-Tasters während des Startens
(also beim Anlegen der Versorgungsspannung für die Platine) aufgerufen.
Hier der Ablauf, um die Endpositionen zu justieren:
während des Startens der Platine (=Anlegen der Versorgungs-Spannung) wird der Programmier-Taster oder der Taster
SW3 auf der Justage-Platine gedrückt
Jetzt wird der Servo 1 an die End-Position Nr. 1 gefahren (dies ist die Position, die der Servo
mit dem 1 ms-Impuls anfährt. Ob dies der rechte oder der Linke Anschlag ist, ist Servo-Abhängig).
Die LED 1 des Relais 1 ist jetzt an, die LED 5 blinkt langsam
Jetzt kann man mit den Tasten SW1 und SW2 auf der Justage-Platine die Position verstellen, während Servo 1
entsprechend reagiert. Die Schrittweite beträgt hier 8 us.
Durch Druck auf SW3 der Justage-Platine kommt man in die Einstellung der 2. End-Position (Vorgabe 2 ms).
LED 5 blinkt jetzt deutlich schneller
wie Punkt 3
Nach erneutem Tastendruck geht das ganzs Spiel wieder von vorne los, aber diesmal für Servo 2, 3 und 4
nach der Justage aller Servos (LED5 blinkt nicht mehr, LED1-4 idR. aus) befindet sich die Platine wieder
im normalen Betriebs-Modus.
Zu beachten ist hierbei, dass ein Verstellen der End-Position 1 auch die End-Position 2 entsprechend verschiebt.
Also wird die 1 ms-Grenze um +200 us vergrössert, so wird auch die 2 ms-Grenze um +200 us vergrössert.
Dadurch ist es möglich, dass man im Arbeitsschritt 2 den kompletten Arbeitsbereich des Servos verschieben kann,
ohne dass man auch die End-Position 2 ebenfalls neu justieren muss.
Man sieht: auch wer keine Relais verwendet, ist in dieser Situation gut beraten, die LEDs durch
Bestückung von R40..R43 betriebsbereit zu halten.
Verwenden der Relais zur Rückmeldung der Weichenstellung
Der SanD besitzt 4 Relais. Wer diese nicht zur Polarisierung von Weichen benötigt (also z.B. die
Märklin-Fahrer), kann damit eine Rückmeldung z.B. via S88 (oder andere Bus-Systeme) realisieren.
Zunächst definiert man hierfür die Relais-Stellung bei Kurve 1 (diese stellt z.B. die Bewegung nach RECHTS dar).
Zu beachten: Es sind alle Relais-Balken gesetzt, bis auf den letzten. Dadurch wird das Relais
ausgeschaltet, wenn die Kurve abgelaufen ist.
Und jetzt zu Kurve 2 (diese stellt z.B. die Bewegung nach LINKS dar).
Zu beachten: Es sind keine Relais-Balken gesetzt, bis auf den letzten. Dadurch wird das Relais
eingeschaltet und gehalten, wenn die Kurve abgelaufen ist.
Jetzt hat man folgendes realisiert:
Das Relais schaltet am Ende der Bewegung nach RECHTS aus und nach Ende der Bewegung nach LINKS ein.
Allerdings gibt es keinen Kontakt für IN_BEWEGUNG oder ähnliches, den es ist immer entweder
der Rückmeldekontakt LINKS (= Relais angezogen) oder aber RECHTS (= Relais abgefallen) aktiv.
Ein "3. Zustand" (also RECHTS / LINKS / Ich-bin-in-Bewegung-und-weder-Links-noch-Rechts) ist nun mal nicht mit einem Relais zu realisieren, da müsste man dann
schon 2 dafür opfern.
Allerdings müsste PC-Steuerung ja wissen können: Wenn ich RECHTS sende und der Rückmelde-Kontakt
noch nicht RECHTS anzeigt, dann ist der Servo auch nicht rechts. Entweder bewegt der sich noch,
oder er hat den Befehl verpennt, oder....
Verwenden der Taster-Eingänge für die Servo-Bewegung
Auf der Justage-Platine sind ja 3 Taster vorhanden. Hier könnte man 2 davon zur Servo-Aktivierung
verwenden (der 3. Taster SW3 auf der Justage-Platine stellt lediglich den Zustand "beide Taster gedrückt"
dar und kann uns hier leider nicht dienen). Hier noch mal der Schaltplan der Justage-Platine:
Die Taster SW1 und SW2 können also wie hier gezeigt an den SAND angeschlossen und zur
Servo-Bedienung verwendet werden. Allerdings gibt es mit SW1 noch einen Haken: dieser Taster
entspricht dem SW1 auf der Haupt-Platine SAnD und ist demnach eigentlich für die Adress-Lern Funktion
reserviert.
OK. Jetzt genug der Vorrede, goto Praxis. Der Manipulator bietet (ab V0.43) diese Eingabe:
Hier kann ausgewählt werden, ob der SW1 für Servo-Bedienung oder für die "normalen"
Aufgaben (Adressen Lernen und Starten des Justage-Modes während der Bootens) verwendet wird
oder ob er für die Servo-Steuerung verwendet werden soll.
In diesem Beispiel nun soll SW1 für den Servo verwendet werden.
Für jeden Taster gibt es nun 2 Auslöse-Punkte: öffnen und schließen.
Tritt nun ein solches Ereignis ein, so reagiert der SanD einfach so, als
wenn er die hier definierte Digital-Adresse empfangen hätte.
Dadurch kann man z.B. beim Öffnen des Taster die Kurve 1 (= Weiche LINKS),
beim Schließen die Kurve 2 (= Weiche RECHTS) abfahren. Somit sind dann
z.B. 2 Weichen komplett via Taster
(oder eigentlich wären es hier dann eher Schalter) steuerbar.