Jetzt möchte ich aber im LOOP die Schrittweite umstellen können.
Kann ich also im Loop, wenn die Motoren gerade nicht laufen die Schrittweite mit den selben Zeilen wie oben umstellen?
Also es scheint nicht möglich zu sein. Beim erstenmal umstellen ändert sich nichts an der Schrittweite. Beim zweiten mal umstellen macht das Programm nichs mehr.
Hier unten habe ich die Änderung.
Taster7 gedrückt ändert den Merker "schrittweiteHigh"
Taster7 loslassen macht die Änderung abhängig von schrittweiteHigh == 1 oder 0
Ich habe zwar keine Ahnung von den Mobatools aber so kann es nicht klappen,
weil Du mit der Zeile
ein neues Objekt myStepper vom Typ MoToStepper anlegst und die übergebenen Argumente zum initialisieren des Objektes verwendet werden.
Beim wiederholten Aufrufen legst Du jedes mal ein neues Objekt an. Es müsste dafür schon eine Setter-Methode wie myStepper.setStepsPerRevolution() oder so etwas geben.
Nicht zur Laufzeit. Immer nur wenn alle Motoren stehen. Aber ich möchte die Schrittweite ändern können weil der Motor mit 1600 Schritte doppelt so schnell läuft, wie mit 800 Und wenn ich den Kreuztisch mit dem Joystick schnell mal auf eine andere Position fahren möchte, wäre es schön, wenn ich dafür diese Einstellung auf 1600 ändern könnte. Wenn der Tisch dann wieder Arbeiten soll, soll er wieder die 800 je Umdrehung fahren.
wenn ich auf 800 Schritte einstelle und die Treiber auch auf 800 Schritte, dann ist der Tisch bei Vollgas sehr langsamm. Auch wenn das Tempo auf Vollgas steht. Wenn ich da mit 1600 Initialisiere, dann ist das eine Geschwindigkeit mit der man besser zurecht kommt, beim Tisch mit Joystick auf Position gewünschte fahren.
Der Wert STEPS_REVOLUTION ändert absolut nichts an der Schrittweite des Motors. Die wird allein von der Hardware (Motor und Treiber) bestimmt. Der Wert sollte immer den tatsächlichen Verhältnisse der HW entsprechen. Wichtig is der Wert letztendlich nur, wenn man die Geschwindigkeit in U/min und/oder die Positon in Umdrehungen vorgeben will. Wenn man rein in 'Steps' arbeitet ist er irrelevant. Die maximal erreichbare Geschwindigkeit kann man damit auch nicht beeinflussen.
Wenn Du schneller fahren willst, erhöhe dafür einfach die Geschwindgkeit - wie @noiasca schon geschrieben hat.
Sicher ist, dass der Motor wesentlich schneller fährt, wenn ich die Schrittweite hochstelle und am Treiber nicht ändere. Mir ist klar, dass ich eigentlich auch die Schrittweite am Treiber anpassen muss. Aber dann ändert sich die Geschwindigkeit nicht. Ich habe das ganze zufällig festgestellt, weil ich mal die Schritte im Programm verändert habe und vergessen habe, auch den Treiber daran anzupassen. Aber es ist jedenfalls so, dass bei Treiber auf 800 und Progamm auf 1600 der Motor dann etwa doppelt so schnell rennt. Und sogar trotzdem offenbar die Schritte auf 800 pro Umdrehung bleiben, mur schneller. Und komischerweise auch noch sehr genau. Also ich kann den Tisch damit automatisch hin und her rennen lassen, so oft ich will, er hat am Ende trotzdem keine Schritte verloren.
Das ist mir auch klar, deshalb bin ich nur durch einen Fehler bei mir drauf gekommen, dass ich damit wesentlich schneller werden kann. Dass trotzdem keine Schrittfehler kommen, ist verwunderlich, aber gut. Bei der Fahrt mit dem Joystick geht es eigentlich gar nicht um Genauigkeit. Nur um schnell auf Pos. zu kommen. Wenn der Tisch dann arbeiten soll, gehe ich wieder zurück auf die 800 Schritte.
Sorry, aber das ist Unsinn. Dann machst Du noch was anderes falsch. Die maximal erreichbare Geschwindigkeit hat absolut nichts mit diesem Wert zu tun. Glaub's mir - ich kenne die Lib recht gut
Die Möglichkeit das in setZero umstellen zu können ist einer Anforderung geschuldet, bei der auch die HW-Microsteps per Software geändert werden konnten.
Speed ist glaube ich 2 bis 180, einzugeben x10, also 20 bis 1800. Und Vollspeed ist daher 1800.
Und ich haben ein Poti dran, mit dem ich den Speed beim Fahren mit den Joystick einstelle.
Wenn ich Automatisch fahre, wird der Speed von der Speicherkarten mit übergeben.
Der Arduino ist der Mega.
Ja, dann kann man wohl die Pins mit übergeben über die Hardwaremässig die Schritte am Treiber eingestellt werden. Ist gut, aber brauche ich nicht.
Es ist def. so, dass ich 800 Schritte je Umdrehung am Treiber eingestellt habe, 800 Schritte im Programm, dann ist es durch das 10:1 Plantengetriebe zu langsamm. Wenn ich dann das Programm mit 1600 Schritte aktiviere, läuft der Motor wesentlich schneller, ich denke 2x so schnell. Das könnte ich mal überprüfen, indem ich die Zeit für eine bestimmte Strecke mit 800 und mit 1600 vergleiche. Die gefahrene Strecke bleibt exakt gleich.
Aus Sicht der Lib ist das noch nicht Vollspeed, allerdings fast. Vermutlich hast Du die CYCLETIME in der MobaTools.h verändert? Nur dann könntest Du noch deutlich mehr Geschwindigkeit erreichen. Dann brauchst Du aber nur den speed-Wert erhöhen, wie es @noiasca schon schrieb. Bei CYCLETIME = 100 kannst Du da bis 375 U/min gehen, also bis zum Wert 3750.
Die Lib rechnet aus den Umdrehungswerten die Steps/10sec aus und arbeitet dann intern nur noch mit den Step-Werten. Die Formel für das Umrechnen ist: rpm10 * STEPS_REVOLUTION / 60
Daraus kannst Du erkennnen. das es vollkommen egal ist, ob Du den Wert STEPS_REVOLUTION
oder rpm10 verdoppelst. Das Ergebnis ist immer das Gleiche und wird gegebenenfalls noch auf dem Maximalwert begrenzt.
Hööö, Danke. Teste ich morgen. Ich habe hier nur eine zweite Steuerung liegen, mit 2 Motoren am Tisch im Büro. Den eigetlichen kompletten Kreuztisch habe ich in der Werkstatt. da bin ich morgen wieder.