Forum: Mikrocontroller und Digitale Elektronik Schritte bei Schrittmotor haben keine Wiederholgenauigkeit (Marlin)


von Sebastian L. (seppel588)


Lesenswert?

Hallo zusammen,

Ich habe ein altes Projekt von mir ausgegraben, dazu benötige Ich die 
Schritte (Steps) die der Extruder machen soll.

Ich habe mir die Step/ Dir Leitung (vom Extruder) von meinem SKR v1.3 
Board abgegriffen und einen Code (in Arduino) geschrieben um diese 
auszulesen (siehe unten).

Mein Problem ist, das Ich immer wieder andere Werte bekomme. Ich habe 
mehrfach hintereinander 1mm Filament Extrudiert, aber habe Schwankungen 
von 27 bis 47 Steps.

Mein Setup:
Mainboard 3D Drucker: SKR v1.3 mit einem 32 Bit Controller
Arduino Oberfläche: Arduino Uno

Mein Code:
1
int Direction;
2
long Step = 0;
3
4
int StepNew;
5
int StepOld;
6
7
int DirectionPin = 12;
8
int StepPin = 11;
9
10
void setup() {
11
  
12
pinMode (DirectionPin, INPUT);
13
pinMode (StepPin, INPUT);
14
15
StepOld = digitalRead(StepPin);
16
17
Serial.begin(9600);
18
}
19
20
void loop() {
21
22
  if (digitalRead(DirectionPin) == HIGH)
23
  { 
24
      StepNew = digitalRead(StepPin);
25
      if ((StepNew == HIGH) && (StepOld == LOW))
26
      {
27
        Step++;
28
        Serial.print ("Forward: ");
29
        Serial.print (Step);
30
        Serial.print ("\n");
31
      }
32
      StepOld = StepNew;
33
  }
34
35
  else //(digitalRead(DirectionPin) == LOW)
36
  {
37
     StepNew = digitalRead(StepPin);
38
     if ((StepNew == HIGH) && (StepOld == LOW))
39
      {
40
        Step--;
41
        Serial.print ("Reverse: ");
42
        Serial.print (Step);
43
        Serial.print ("\n");
44
      }
45
    StepOld = StepNew;
46
  }
47
}

Meine Frage:
- Liegt das an meinem Code? Wenn Ja, woran?
- Liegt das daran das der Arduino zu langsam ist?
- Woran kann es noch liegen?

Vielen Dank für eure Hilfe

Gruß
Seppel

von Johannes S. (Gast)


Lesenswert?

Zu langsam, am besten einen HW Counter  benutzen.

von Sebastian L. (seppel588)


Lesenswert?

Hallo,

vielen Dank für die schnelle Antwort.

Ich hatte überlegt einen Esp8266 anstelle des Arduino Uno zu nehmen.
Der hat ja auch 32 Bit und ein Systemtakt von min. 80MHz, der sollte 
dann aber reichen oder?

Edit:
Entschuldigung wie wird so ein HW Counter angewand, hab ich noch nie 
gehört? Nur google hat mir wenig geholfen

Gruß
Seppel

: Bearbeitet durch User
von MaWin (Gast)


Lesenswert?

Sebastian L. schrieb:
> - Liegt das an meinem Code? Wenn Ja, woran?

Was meinst du, wie lange das serial.print dauert ?

> - Liegt das daran das der Arduino zu langsam ist?

Nein, zu blind programmiert.

Warum man nicht erst step und dann dir abfragt, erschliesst sich mir 
nicht.

von Sebastian L. (seppel588)


Lesenswert?

Hallo MaWin,

Danke für deine Rückmeldung. Über das mit dem SerialPrint habe Ich
ehrlich gesagt nicht nachgedacht. Werde es erst zum schluss ausgeben, 
wenn alle steps durch sind.

Ich dachte das es so sinnvoller wäre, aber gut man lernt immer dazu.

Gruß
Seppel

von Johannes S. (Gast)


Lesenswert?

Die zweitbeste Möglichkeit ist einen Interrupt zu benutzen, müsste für 
den Extruder auch reichen, langsam laufen lassen.
https://arduino.stackexchange.com/questions/4451/counting-pulses-with-interrupt

Aber keinen digitalread oder Print in der ISR benutzen. Globale Variable 
hochzählen und auf Anforderung oder nach Timeout ausgeben lassen.

Aber der Test ist eigentlich unnötig, Marlin berechnet die Anzahl Steps 
für die Länge und gibt die Pulse Geschwindigkeitsabhängig mit 
Beschleunigungsrampen aus.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.