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.