Schrittmotor mit DRV8825 - welcher Takt?

Hallo zusammen,

habe ein kleines “verständnis” Problem mit Schrittmotortreiber welche Takt und Richtung verarbeiten.

Richtung ist klar - entweder HIGH oder LOW, links oder rechts …

Beim Takt habe ich Probleme!

Habe jetzt mehrere Tage die Foren durchsucht und allesmögliche gefunden nur nicht eine Erklärung.

Undzwar beim normalen Stepper.h gebe ich die Geschindikeit (RPM) ein diese würde ich gerne nun 1 zu 1 auf den Takt übertragen aber das verstehe ich nicht.

Wie muss das Pausenverhältnis aussehen, das ein Takt generiert wird welcher 60 RPM oder 15 RPM macht wie mit der Lib.

for(int i=0;i<200;i++)
{
digitalWrite(TAKT, HIGH);
digitalWrite/TAKT, LOW);
}

wo muss ich hier die Pause nun einbringen?

Gibts hierfür eine Formel?

Hoffe könnt mich aufklären

Gruß Fabian

Hallo Fabian,
schalte doch mal Deine Webcam ein, damit ich sehe, was Du auf dem Tisch liegen hast. :slight_smile:

Wieviel Schritte braucht Dein Motor für 360 Grad?

Hört sich für mich nach easy driver an. Wenn es so ist: "Each rising edge of this signal will cause one step (or microstep) to be taken." Das Verhältnis ist also egal, würde ich dann 1:1 machen.

Servus agmue,

naja stand ja eigentlich in der Überschrift :wink:

handelt sich um diesen Treiber:

Beschaltung:

Muss ja ein Taktsikgnal an den STEP anlegen, das der Motor sich dreht.

Gruß Fabian

Fabian_2560:
naja stand ja eigentlich in der Überschrift :wink:

Stimmt, ich fand aber nix, warum auch immer. :confused:

Steht auch irgendwo etwas zum Schrittmotor, den Du verwendest?

Sagen wir mal, er braucht 200 Schritte pro Umdrehung:

Umdrehungen/200 Schritte * Minuten/60 Umdrehungen = 5 Millisekunden

Also 5 mS von Flanke zu gleichartiger Flanke, 2500 µS LOW und 2500 µS HIGH. Ich hoffe mal, so stimmt es :slight_smile:

  unsigned long intervall = 2500;
  unsigned long prevMicros;
  unsigned long aktMicros;

  aktMicros = micros();
  if (aktMicros - prevMicros >=  intervall) {
    prevMicros = aktMicros;
    digitalWrite(TAKT, !digitalRead(TAKT));
  }

Antworten findest Du im Datenblatt http://www.ti.com/lit/ds/slvsa73f/slvsa73f.pdf Auf Seite 7 Timing Requirements.
Max Takt: 250kHz und der HIGH bzw der LOW Impuls muß mindestens 1,9µS lang sein.

Beim jedem Takt (L-H Übergang) schaltet der Driver den Motor um einen Schritt weiter.

Wie groß der Schritt ist bzw wieviele Schritte es braucht damit der Motor eine ganze Umdrehung macht hängt vom mechanische Aufbau des Motors ab (wieviele Schritte er braucht um 360 Grad zu machen) und der eingestellte Microschrittmode.
zB bei einem 400 Schritt Motor und 32 Microsteps braucht es 12800 Schritte für 360°. Um eine gewollte Rotationsgeschwindigkeit zu erhalten mußt Du den Treiber schneller einsteuern je mehr Schritte / eingestellte Microsteps er für eine Umdrehung braucht.

Grüße Uwe