Rampenlänge für Stepper mit Mobatools in EEPROM schreiben

#1 von Matthias W. , 17.02.2024 18:11

Hallo zusammen,
ich habe ein Problem mit einem Sketch, bei dem mir hoffentlich jemand weiterhelfen kann.

Der Aufbau - eine kleine Seilbahn:

Eine Gondel ist in der Bergstation, die andere in der Talstation. Wenn nun der Auslösetaster gedrückt wird, dreht sich ein Unipolarer Stepper und bewegt die Gondeln mittels Zugseils.
Wenn nun die bergauf fahrende Gondel eine Lichtschranke vor der Bergstation überfährt,
wird der Motor mit der eingestellten Rampenlänge langsam abgebremst und die Gondel kommt in der Bergstation zu stehen.
In der Bergstation ist eine zweite Lichtschanke und gibt an, dass beim erneuten Tastendruck diese Gondel wieder "abwärts" fahren muss - dann bremst die andere Gondel mit ihrer Lichtschranke die Bewegung wieder ab und alles beginnt wieder von vorne. Die Rampenlänge habe ich im Setup so eingestellt, dass die Gondeln ganz in die Stationen einfahren - das klappt bestens.

Jetzt würde ich diese Rampenlänge gerne mit einem Justagetaster "variabel" machen, dass im Nachhinein diese korrigiert werden kann.
Es reicht, wenn das z.B. die rechte Gondel das erledigt, da ja beide genau die gleiche Strecke fahren müssen.
Ich habe mir das so vorgestellt:
Wenn also die rechte Gondel unten ist und der Justage-Taster gedrückt wird, soll sich der Stepper langsam bergauf drehen.
Beim Überfahren der Lichtschranke VOR der Bergstation (diese Lichtschranke wird auch zum abbremsen genutzt), soll der der set.Zero(); gesetzt werden und der Motor dreht sich langsam weiter.
Sobald ich nun den Justagetaster loslasse, soll die Strecke (bzw. Stepperanzahl) vom set.Zero bis zum Loslassen die neue Rampenlänge = Abbremsen sein.

Ich habe nun schon mehrere Versuche gemacht, die Gondel fährt jedoch immer über das Ziel hinaus .....

Wäre super, wenn mir hier jemand helfen könnte!
Hier der Teil vom Sketch, in dem ich die Justage geschrieben habe:


if (digitalRead(Justage) == LOW) { // wenn der Justagetaster gedrückt ist
while (digitalRead(Justage) == LOW) {
Stepper.setSpeed(StepperTempo); // Antriebsgeschwindigkeit wir herunter gesetzt
Stepper.setRampLen(10); // Abbremsgeschwindigkeit ist kleiner
Stepper.doSteps(5);
}
Abbremsen = Stepper.readSteps(); // Speichern der neuen Position in der Variablen
EEPROM.put(0, Abbremsen); // Speichern der neuen Position im EEPROM Nummer "0"
Status_Justage = 0;
}
if (digitalRead(LS_rechts) == LOW); // Warten bis erste Lichtschranke überfahren wird
Status_Justage++;
if (Status_Justage == 1) {
Stepper.stop(); // anhalten
delay(500);
Stepper.setZero(); // Momentane Position als Nullpunkt einrichten
Status_Justage++;
}


Was mache ich falsch bzw. kann so nicht gemacht werden?

Vorab besten Dank für eure Rückmeldungen!
Gruß Matthias


Matthias W.  
Matthias W.
Regionalbahn (RB)
Beiträge: 26
Registriert am: 20.06.2023
Ort: Westösterreich
Spurweite H0
Stromart DC


RE: Rampenlänge für Stepper mit Mobatools in EEPROM schreiben

#2 von volkerS , 17.02.2024 20:26

Hallo Mathias,
mit Lichtschranke Vor Bergstation = low bis Justagetaster = high definierst du keine Rampe sondern die Anzahl der erforderlichen Schritte des Steppers bis Stopp in Bergstation.
Eine Rampe definiert sich aus Zeit für Weg. Du müsstest eigentlich die Frequenz der Schritte ab Lichtschranke Vor Bergstation = low reduzieren also die Pause zwischen jedem Schritt durch Incrementieren erhöhen während gleichzeitig der Zähler in dem die Schrittzahl ab Lichtschranke Vor Bergstation = low bis Stopp abgelegt ist reduziert wird bis Null. Sobald also dieser Zähler Null ist bleibt der Motor stehen.
Volker


volkerS  
volkerS
ICE-Sprinter
Beiträge: 5.993
Registriert am: 14.10.2014


RE: Rampenlänge für Stepper mit Mobatools in EEPROM schreiben

#3 von Matthias W. , 17.02.2024 21:47

Hallo Volker,

dann habe ich das in der Beschreibung der MobaTools falsch verstanden - Rampenlänge in Steps .....

Zitat von volkerS im Beitrag #2
Du müsstest eigentlich die Frequenz der Schritte ab Lichtschranke Vor Bergstation = low reduzieren also die Pause zwischen jedem Schritt durch Incrementieren erhöhen während gleichzeitig der Zähler in dem die Schrittzahl ab Lichtschranke Vor Bergstation = low bis Stopp abgelegt ist reduziert wird bis Null. Sobald also dieser Zähler Null ist bleibt der Motor stehen.


Wie wäre das zu machen? Wäre dann dieser Zähler nur für die Justage oder auch im Betrieb bei jeder Abbremsung durch die Rampe?
Oder ist hier der Aufwand einfach zu groß, um eventuell einmal diese "Abbremsstrecke" neu zu justieren?
Im Probebetrieb mit einem Testaufbau hat es ohne Justage-Möglichkeit gut funktioniert - diese wäre halt von Vorteil, wenn die Seilbahn auf die Anlalge gebaut wird - dann könnte mit diesem Taster die Rampenlänge schnell eingerichtet werden ohne den Arduino an einen PC anzuschließen ...

Schöne Grüße
Matthias


Matthias W.  
Matthias W.
Regionalbahn (RB)
Beiträge: 26
Registriert am: 20.06.2023
Ort: Westösterreich
Spurweite H0
Stromart DC


   

Welcher Decoder für M-Gleisweiche oder weiterhin analog schalten?
Pufferkondesatoren H0

  • Ähnliche Themen
    Antworten
    Zugriffe
    Letzter Beitrag
Xobor Einfach ein eigenes Forum erstellen
Datenschutz