mat-spur1
                      
   NAVIGATION
Home
Spur 1
BR55 / G8.1 Umbau
BR80 Umbau
BR89 / T3 Umbau
T3 Schlepptender
E91 Umbau
V36 Umbau
V60 Umbau
V100 Umbau
Köf2 Umbau
Schweineschnauze
Wagenabstand
Servoansteuerung
SUSI Interface
TELEX-Schutz
Maxi-Decoder-Recycling
Bassanhebung
Gleisplan
Weichentuning
Weichenantrieb
Weitere Umbauten
Spur 1 Links
Kontakt
Impressum

Die Fernbedienung von Kupplungen war für mich schon früher bei H0 ein Highlight, jetzt bei Spur 1 ist das auch aufgrund der Baugröße einfacher zu realisieren. Magnetische Antriebe haben manchmal das Problem, unter Belastung nicht sicher zu öffnen. Außerdem hat mich das ruckartige öffnen gestört. Daher sollten langsam laufende Stellmotoren eingesetzt werden. Hierzu bieten sich handelsübliche Servos an, die leider ein besonderes Stellsignal (Pulsbreitenmodulation) sowie 5V Spannungsversorgung benötigen.

Daher habe ich mir eine kleine Schaltung entwickelt, die das Decoder-Schaltsignal in ein Servosignal umsetzt. Dazu habe ich den PICAXE 08M Mikrocontroller verwendet, der nicht teuer ist, einfach in BASIC programmiert werden kann und die Aufgabe problemlos erfüllt. Die ansonsten benötigten Bauteile sind Standardteile, ein 7805 Spannungsregler und ein Optokoppler zur galvanischen Entkopplung des Steuereingangs.

Zur Programmierung des PICAXE benötigt man nur wenig Hardware (Anschluß an USB, 2 Widerstände, 1 Klinkenbuchse, 5V Versorgung), die Software und die Handbücher gibt's zum Download. Die Chips kann man im Internet kaufen.

Die Schaltung erlaubt das Einstellen der beiden Servoendpositionen sowie der Stellgeschwindigkeit jeweils per Potentiometer (ohne weiteres programmieren!). Die Ansteuerung erfolgt über einen Funktionsausgang des Decoders.





Das letzte Foto zeigt den Bauzustand vor Einbau des Spannungsreglers.

Und hier ist das Programm:

main:
input 1
input 2
input 3
input 4
readadc 2,b8 'Startposition pin3=0
b8=b8*200/255+25
pause 500
servo 0,b8
pause 500
b13=pin3
Schleife:
low 0 'Verzichtbar, wenn das Servo nicht zum Zucken neigt
do
 b3=pin3 ' pin 4 = In 3 Steuersignal vom Decoder
loop until b3<>b13
b13=b3
servo 0,b8
' pause nicht verwenden, erzeugt gelegentliches stottern des servos
Leseschleife:
readadc 1,b1 'pin 6 = In 1 Position pin3=1
readadc 2,b2 'pin 5 = In 2 Position pin3=0 (active=low)
readadc 4,b4 'pin 3 = In 4 Stellverzögerung
' Unterdrueckung von Fehlmessungen
readadc 1,b11
readadc 2,b12
if b11<>b1 then
 goto Leseschleife
endif
if b12 <>b2 then
 goto Leseschleife
endif
b1=b1*200/255+25 'Stellweg
b2=b2*200/255+25 'Stellweg
b4=b4/8 'Verzögerungsbereich
b7=b2
if b3=0 then
b7 = b1 'Richtungsumkehr
endif
if b7<b8 then
 for b6 = b8 to b7 step -1
  pause b4
  servopos 0,b6
 next b6
else
 for b6 = b8 to b7 step 1
  pause b4
  servopos 0,b6
 next b6
endif
b8 = b7 'Speicherung Zielposition
pause 500 ' Warteposition, um das Anlaufen der Endposition sicherzustellen
goto Schleife



Ein Wort zur Nutzung von Servos:
Viele Nutzer berichten in einschlägigen Foren über Probleme beim Betrieb von Servos.
Störend machen sich erratische Bewegungen beim Einschalten sowie unregelmäßiges Zucken bemerkbar.
Neben den nervenden Geräuschen sind Fehlfunktionen bis hin zu Schäden am Modell (zB an einer Weiche) möglich.

Ich habe diese Probleme auch gehabt und mich anfangs ziemlich geärgert.
Für mich bestand die Lösung des Problems aus insgesamt drei Maßnahmen, die auch im vorliegenden Konzept realisiert sind.
(a) Sorgfältige Entstörung der Stromversorgung und kurze Leitungen
(b) Abschaltung des Impulssignals an das Servo, wenn keine Bewegung ausgeführt werden soll ("low"-Befehle im Quellcode)
(c) Nach Möglichkeit volle Ausnutzung einer 180°-Drehung für die Stellaufgabe in Verbindung mit einer Biegung im Stelldraht als Überlastfeder. Damit kann das Servo keinen mechanischen Schaden anrichten.

Mit der 180°-Drehbewegung verläuft außerdem der Stellprozeß angenehmer: er beginnt langsam, wird dann schneller und bremst wieder gleichmäßig ab.
Verwendet man ein Servo zur Ansteuerung von Federzungenweichen, so bewirkt ein 180°-Stellweg außerdem, daß die Kraft des Servos an beiden Stellwegenden stark zunimmt - also genau dann, wenn auch die meiste Kraft zum Weichenstellen benötigt wird.



Und weil das so gut funktioniert, habe ich das dann mit dem PICAXE18M2 auf eine Vierfachsteuerung erweitert, um umgebaute Flügelsignale anzusteuern. Die Mannheimer Kollegen haben nämlich eine sehr gute Anleitung zum Umbau der Märklin Flügelsignale veröffentlicht (siehe Linkliste), die ich mehrfach nachgebaut habe (mit Servoantrieb und LED Beleuchtung).

Über die PICAXE Eingänge B.0-B.3 wird ein Schaltsignal (0V oder +5V) abgefragt und entsprechend das zugeordnete Servo (an B.7-B.4) in eine von zwei gespeicherten Positionen gefahren.
Die Stellgeschwindigkeit kann gemeinsam für alle Servos per Poti (an C.2) eingestellt werden.

Die individuellen Servopositionen werden über die beiden anderen Potis (an C.0 und C.1) eingestellt, über die beiden Steckbrücken (an C.6 und C.7) das jeweilige Servo ausgewählt (Binärzahl 00, 01, 10, 11 für 0-3) und durch Drücken des Tasters (an C.5) die Positionen im PICAXE permanent gespeichert. Durch Aufleuchten der LED (an C.4) wird die Speicherung quittiert.

Am Ende des Stellwegs schaltet der PICAXE das Steuersignal ab, dabei geht der Ausgang je nach Servoposition entweder nach Masse oder nach +5V. Damit könnte man eine Rückmeldeabfrage realisieren.

Hier ist der Bauplan für Streifenrasterplatine (Leiterbahnen horizontal):

... und so sieht's aus:

Die beiden schwarzen Blöcke links und rechts neben dem PICAXE sind Widerstandsarrays 9x100K mit gemeinsamem Pin 1. Damit sind alle Pins des PICAXE auf definiertem Potential.

Auch hier das Programm:

intro:
input B.0    ;toggle input for servo at B.7
input B.1    ;toggle input for servo at B.6
input B.2    ;toggle input for servo at B.5
input B.3    ;toggle input for servo at B.4
output B.4    ;servo signal 3
output B.5    ;servo signal 2
output B.6    ;servo signal 1
output B.7    ;servo signal 0
low B.4    ;silence servo
low B.5    ;silence servo
low B.6    ;silence servo
low B.7    ;silence servo
input C.0    ;analog input for untoggled servo position
input C.1    ;analog input for toggled servo position
input C.2    ;analog input for servo speed
output C.3    ;feedback output for LED when programming
input C.5    ;binary input for programming
input C.6    ;binary input LSB for servo address
input C.7    ;binary input MSB for servo address
;avoid power-on jump
let b25=pinsB    ;read all B inputs
b10 = b25 AND %00000001
b11 = b25 AND %00000010
b12 = b25 AND %00000100
b13 = b25 AND %00001000
main:
do
let b27=pinsC    ;read all C inputs
let b25=pinsB    ;read all B inputs
b26 = b27 AND %00100000
if b26 <>0 then     ; check C.5 for programming action
 high C.3        ; LED on
 readadc C.0,b20    ; read 'low' servo position
 readadc C.1,b21    ; read 'high' servo position
 b26 = b27 AND %11000000
 b26=b26/64        ; generate address 0-3
 write b26,b20    ; write 'low' servo position
 b26=b26+4        ; generate address 4-7
 write b26,b21    ; write 'high' servo position
 pause 250        ; keep LED on for 1/4 sec
 low C.3        ; LED off
endif
readadc C.2, b22  ;Speed
b22=b22/8
read 0,b0   
read 4,b4
b24 = b25 AND %00000001
if b24 <>0 then    ; check for "high", then revert direction
 swap b0, b4
endif
if b24<>b10 then    ; check for change
 b8=b4
 servo B.7, b8    ;initiate servo
 do
  if b4 > b0 then
    dec b8
   else
    inc b8
   endif
  servopos B.7, b8
  pause b22
 loop until b8=b0
 pause 500        ; wait for servo to complete
 if b24 <>0 then    ; check for "high"
  high B.7
 else
  low B.7        ; switch servo off
 endif
endif
b10 = b24        ; remember last action
read 1,b1
read 5,b5
b24 = b25 AND %00000010
if b24 <>0 then
 swap b1,b5
endif
if b24<>b11 then
 b8 = b5
 servo B.6, b8
 do
  if b5 > b1 then : dec b8 : else : inc b8 : endif
  servopos B.6, b8
  pause b22
 loop until b8=b1
 pause 500
 if b24 <>0 then    ; check for "high"
  high B.6
 else
  low B.6        ; switch servo off
 endif
endif
b11=b24
read 2,b2
read 6,b6
b24 = b25 AND %00000100
if b24 <>0 then
 swap b2,b6
endif
if b24<>b12 then
 b8 = b6
 servo B.5, b8
 do
  if b6 > b2 then : dec b8 : else : inc b8 : endif
  servopos B.5, b8
 pause b22
 loop until b8=b2
 pause 500
 if b24 <>0 then    ; check for "high"
  high B.5
 else
  low B.5        ; switch servo off
 endif
endif
b12=b24
read 3,b3
read 7,b7
b24 = b25 AND %00001000
if b24 <>0 then
 swap b3,b7
else
endif
if b24<>b13 then
 b8 = b7
 servo B.4, b8
 do
  if b7 > b3 then : dec b8 : else : inc b8 :endif
  servopos B.4, b8
 pause b22
 loop until b8=b3
 pause 500
 if b24 <>0 then    ; check for "high"
  high B.4
 else
  low B.4        ; switch servo off
 endif
endif
b13=b24
pause 50
loop

























Verantwortlich für den Inhalt ist der Autor der Homepage. Kontakt

Kostenlose Homepage von rePage.de


Anzeige:    Freunde finden leicht gemacht

 
mat-spur1