Go Down

Topic: Stepper fährt zu weit oder zu kurz ? Endschalter Gabellichschranke ? (Read 685 times) previous topic - next topic

achimmcgyver

Muss ich dann nur

"for(Index = 0; Index <30000; Index++)"

entfernen ?

achimmcgyver


achimmcgyver

Ich habs.Motor läuft jetzt exakt nach rechts und nach links mit 5mm Abstand rechts und links am Ende.

Super vielen Dank.

Wie kann ich jetzt noch einen Zähler einbinden damit ich am Ende sehe wie oft ich geschliffen habe bzw
wie oft der Motor Nema nach rechts und nach links gefahren ist ?

postmaster-ino

Hi

uint32_t anzahl=0;   //gaaanz vorne noch vor setup(); - wird eine globale Variable
...
anzahl++;  // Da, wo Du mit der einen Fahrt fertig bist
...
Ausgabe von anzahl auf ein Display oder Ähnlichem - reicht auch, wenn sich die Zahl geändert hat.


MfG
Dein Problem, Dein Sketch, Deine Bilder.
Ob ich ohne Diese an Deinem Problem arbeiten will, entscheide aber immer noch ich.
Große Buchstaben? Immer wieder, neben Punkt und Komma, gerne gesehen.

MicroBahner

Wie kann ich jetzt noch einen Zähler einbinden damit ich am Ende sehe wie oft ich geschliffen habe bzw
wie oft der Motor Nema nach rechts und nach links gefahren ist ?
Dann zeig doch mal deinen Sketch, wie er jetzt aussieht.
Gruß, Franz-Peter

achimmcgyver

Danke postmaster-ino

Code: [Select]

int tasterPin = 11;
int long Index;                         
void setup()                             
{                                       
   pinMode(6, OUTPUT); //Enable                                                     
   pinMode(5, OUTPUT); //Puls           
   pinMode(4, OUTPUT); //Direction       
   pinMode(tasterPin,INPUT);

   digitalWrite(6,LOW);                   
}                                         
 void loop()                             
                                         
{
 if (digitalRead(tasterPin)==HIGH){       
    digitalWrite(4,HIGH);                 
   
 for(Index = 0; Index <325000; Index++)   
  {
    digitalWrite(5,HIGH);                 
    delayMicroseconds(30);                 
    digitalWrite(5,LOW);                 
    delayMicroseconds(30);                 
  }
    delay(10);                           
    digitalWrite(4,LOW);                 

  for(Index = 0; Index <325000; Index++) 
  {
     digitalWrite(5,HIGH);               
     delayMicroseconds(30);               
     digitalWrite(5,LOW);                 
     delayMicroseconds(30);               
  }
     delay(10);
}
}[code]

achimmcgyver

Könnte jemand zeigen wie das ganze am Arduino mit einem Lcd Display z.B. 2x16 Zeichen angeschlossen wird bzw wie der code dann aussehen muss ?
Glaube das das für mich nicht machbar ist da ich nicht wirklich viel Ahnung habe und das hier alles zum ersten mal mache.

postmaster-ino

Hi

Da kommt Es schon drauf an, was für ein Display mit was für einem Anschluss Du benutzen willst.
Wahrscheinlich ein LCD (das D steht schon für Display) mit einer 'Backplane' - ist eine Zusatz-Platine, Die das Display per I²C ansprechbar macht.

Dafür gäbe Es diverse Bibliotheken - 'Display I2C' als Suchwort im Bibliotheks-Verwalter (in der IDE) wird Dir Da Was finden.
Von dieser Lib ein Beispiel und geschaut, ob man das Display 'zum Leben erweckt' bekommt.
Vorher könnte ein I2C-Scanner die Adresse des Display herausfinden helfen.

Dann ist's 'nur noch' den Kursor auf die richtige Position setzen und den Kram per lcd.print(messwert,2); auf das Display zu bringen - wenn hier messwert ein float ist, erzeigt die 2 zwei Nachkommastellen.
Bei einem INT (... Alles Andere) erzeugt die 2 eine Ausgabe in Binär/Dual (0er und 1er).

... woher komme ich jetzt auf 'Kommazahlen'?? Macht doch beim Zählen von Durchgängen nicht wirklich viel Sinn ...

Egal - wenn Du Deinen Wert per Serial.print(wert); im Terminal passend ausgegeben bekommst, klappt Das auch zum LCD hin.
Ggf. musst Du die Ausgabe noch formatieren, da nicht überschriebene Zeichen 'da bleiben'.
Wenn von einer 2000 auf 0 gewechselt werden soll, wird nur die 2 überschrieben - also 0000 - Das können wir aber angehen, wenn die Ausgabe im Terminal bereits klappt.

MfG
Dein Problem, Dein Sketch, Deine Bilder.
Ob ich ohne Diese an Deinem Problem arbeiten will, entscheide aber immer noch ich.
Große Buchstaben? Immer wieder, neben Punkt und Komma, gerne gesehen.

MicroBahner

Von einem Endschalter ist da jetzt aber gar nichts mehr zu sehen. Wie machst Du das mit der Startposition? Schiebst Du da deinen Stepper manuell hin? Und deine Stepfrequenz ist jetzt auch deutlich höher - die ist jetzt schon sehr beachtlich. Hast Du Microstepping eingestellt?

Wie Postmaster schon schrieb, ist die Ausgabe per Serial.print aufs Terminal erstmal am einfachsten. Wenn das klappt, könnte man das LCD angehen.
Gruß, Franz-Peter

achimmcgyver

Ja der Endschalter ist ja jetzt durch "int long index" nicht mehr nötig.
Startposition ist ja der Taster an Pin 11.danach fährt er einmal rechts eimal links zurück an Startposition.
Ich kann ein Video machen kein Problem.
Fehlt mir nur noch ein Display oder Segmentanzeige würde auch reichen.Wenn ichs nicht hinbekomm dann reicht auch ein mechanischer Zähler.Was für eine Aufwand.Ist der Wahnsinn was ihr alles wißt Respekt und danke an die die das alles mögich machen.

Wegen der Steppfrequenz:
Wenn alles fertig ist läuft das Teil ja nicht Stundenlang sondern 2 /3 mal in der Woche,also kocht da nix ;)
will heissen das da nicht heiss läuft.

postmaster-ino

Hi

Hier geht Es nicht darum, ob der Kram heiß wird - ein Stepper kann im Betrieb heiß werden - Das ist normal und bis unter 80°C auch kein Problem (also schon blöd für die Finger, aber noch kein Problem für den Stepper).

Mit der anscheinend stark erhöhten Frequenz wurde angemerkt, daß Du Dir So auch schnell verlorene Schritte einfangen kannst - dann kreischt der Stepper nur noch vor sich hin, bis die Fahrt beendet ist, dann geht's den ganzen Weg wieder zurück - blöd, daß der Stepper Sich zuvor fast nicht bewegt hat ...
Wenn mit hohen Frequenzen getaktet werden soll, helfen Rampen, daß der Stepper dem Takt auch folgen kann.
Wenn Du hier keine Probleme hast - Alles gut!
Wenn Dir die ersten Probleme um die Ohren fliegen, hast Du zumindest schon von gehört.
Dann kann man auf eine Lib umsatteln, Die die Rampe integriert hat - User MicroBahner hätte dafür Seine MoBaTools im Angebot - gibt's auch in der IDE im Bibliotheks-Verwalter zum direkten Einbinden - mit Beispielen, wie man damit einen Stepper befeuern kann.

MfG
Dein Problem, Dein Sketch, Deine Bilder.
Ob ich ohne Diese an Deinem Problem arbeiten will, entscheide aber immer noch ich.
Große Buchstaben? Immer wieder, neben Punkt und Komma, gerne gesehen.

MicroBahner

Startposition ist ja der Taster an Pin 11.danach fährt er einmal rechts eimal links zurück an Startposition.
Wird denn der Taster vom Stepper betätigt? Woher weist Du sonst wo der Stepper beim Start steht? Normalerweise braucht ien Stepper immer einen 'Referenzpunkt' ab dem die Schritte zählen.

Zur Steprate: die ist schon sehr hoch, und ich kann mir nur schwer vorstellen, dass ein Stepper da ohne Rampe keine Schrittverluste hat. Das dürften über 10000 Steps/s sein. Das dürfte nur mit sehr feinen Microsteps gehen, dann ist die 'effektive' Steprate wieder gemäßigter. Ich kenne auch keine Lib, die es auf einem 'normalen' Arduino mit AtMega Prozessor schafft, da noch Rampen zu berechnen.
Gruß, Franz-Peter

postmaster-ino

Hi
<OT>
...
Ich kenne auch keine Lib, die es auf einem 'normalen' Arduino mit AtMega Prozessor schafft, da noch Rampen zu berechnen.
Da macht mir ja Wer Hoffnung - habe hier einen Stepper mit Planetengetriebe - verklickt und der 1:19 ist eher ein 1:51 geworden - ok, Kraft hat Er, der Kleine.
Nun wollte ich Mal schauen, ob ich einen Timer so manipulieren kann, daß ich in Dem die Steps generiere und in loop() je nach Abstand zum Ziel (aka Rampe) Dessen Compare-Wert anpasse.
So hoffte ich, selbst bei zig Steps bevor die loop() wieder prüfen kann, den Stepper 'bei Zeit' wieder langsamer zu bekommen, damit ich wirklich am Ziel anhalten kann.
Per 08/15 Takt-Generator ist bei knapp über 3000 Steps/Sekunde Ende - der Arduino-Code kommt Da schon höher (Laufgeräusch des Stepper).
Stepper wird über einen DRV8825 befeuert.

Gerne eine kurze Betrachtung, ob ich mich komplett auf dem Holzweg befinde.
</OT>

MfG
Dein Problem, Dein Sketch, Deine Bilder.
Ob ich ohne Diese an Deinem Problem arbeiten will, entscheide aber immer noch ich.
Große Buchstaben? Immer wieder, neben Punkt und Komma, gerne gesehen.

achimmcgyver

Also ich habe ja den Stepper ganz nach links montiert und von da startet der ja auch wenn ich den Taster betätige.Der Taster ist ja mein Einschalter für das ganze Projekt.Bis jetzt zumindest fährt er immer exakt zum Anfangspunkt.
Also wäre ein Enschalter doch sicherer ? Oder wie sage ich dem das er immer an den Startpunkt fahren muss ?
Im Ruhemodus zieht der Treiber tatsächlich 0,25/Ah und der Motor summt so vor sich hin.Im aktiven Modus 0,78/Ah.Wenn ich die Dippschalter so verändere das er im Ruhemodus 0/Ah zieht dann dreht er viel zu langsam.So wie die Dippschalter der Sketch sind ist die Laufzeit insgesamt 40sec und das würde passen.
Langsamer sollte es nicht werden.


Das heisst ich brauche Rampen ? Welche ?


Danke

MicroBahner

Also wäre ein Enschalter doch sicherer ?
Auf jeden Fall, damit Du beim Starten erkennst, ob der Stepper auch tatsächlich am Ausgangspunkt steht. Das solltest Du bereits im Setup überprüfen, und wenn nicht, in dort hinfahren lassen. Alles andere ist recht unsicher.

Im Ruhemodus zieht der Treiber tatsächlich 0,25/Ah und der Motor summt so vor sich hin.Im aktiven Modus 0,78/Ah.
Ich nehme mal an, Du meinst 0,25A bzw. 0,78A? Ah wären Amperestunden, und das ist ganz was anderes. Wie und wo hast Du diese Ströme gemessen? Du solltest uns vielleicht auch mal Links zu deinen Bauteilen ( Stepper und Treiber ) geben, und beschreiben, wie Du sie angeschlossen und eingestellt hast. Dass sich der Motor hin- und herbewegt, bedeutet noch nicht umbedingt, dass alles so ist wie es sein sollte.
Gruß, Franz-Peter

Go Up