Forum: Mikrocontroller und Digitale Elektronik Schrittmotor dreht sich nicht - DRV8825


von Kolja L. (kolja82)



Lesenswert?

Hallo,

der Schrittmotor ist ein kleiner Nema17 und darf etwas mehr als 1A pro 
Wicklung an Strom ziehen. Angeschlossen ist er an 12V aus einem 
Labornetzteil. Der Treiber ist ein DRV8825, alles angeschlossen, wie im 
Bild zu sehen.

Wenn jetzt der STEP Pin zwischen high und low wechselt, ruckt der Motor 
nur ganz kurz, dreht sich aber nicht.

Ich hoffe, das ist ein bekanntes Phänomen für einen einfach zu 
behebenden Fehler :-)


edit: Nur für mein Verständnis:
Mit so einem Schrittmotortreiber, der als Input DIR (direction) und STEP 
hat, sollte sich der Motor ja auch nur mit einem Taster drehen lassen, 
oder?

: Bearbeitet durch User
von oh je (Gast)


Lesenswert?

it's not a bug, it's a feature.

von Flo (Gast)


Lesenswert?

Enable vielleicht auf Low legen? Was sagt die Doku der Platine?

von leo (Gast)


Lesenswert?

Kolja L. schrieb:
> edit: Nur für mein Verständnis:
> Mit so einem Schrittmotortreiber, der als Input DIR (direction) und STEP
> hat, sollte sich der Motor ja auch nur mit einem Taster drehen lassen,
> oder?

Bei jedem STEP dreht der Motor ein Stück.

von tg (Gast)


Lesenswert?

Vielleicht prellt der Taster, so dass der Stepper gar nicht schnell 
genug mitkommt. Ansonsten
- die Wicklungen mal auf Durchgang prüfen, ob die tatsächlich richtig 
angeschlossen sind
- Reset, sleep usw. fest auf das Potential legen, dass für den 
Betriebszustand erforderlich ist - s. Datenblatt
- die beiden GND sollten verbunden sein

von Kolja L. (kolja82)


Lesenswert?

Haha, okay ich erkenne etwas unglückliche Beschreibung.

Der µC gibt schon ein ständiges high-low Signal auf den STEP-Pin, aber 
der Motor reagiert nur auf das erste Mal, nachdem er angeschlossen ist.

Das Skript ist hier zu finden: 
https://github.com/Axel-Germany/Micropython_Pico_DRV8825/blob/main/Pico-DRV8825.py

Beitrag #7033534 wurde vom Autor gelöscht.
von Thomas K. (thomas2021)


Lesenswert?

Fehlt R42

von W.S. (Gast)


Lesenswert?

Kolja L. schrieb:
> Wenn jetzt der STEP Pin zwischen high und low wechselt, ruckt der Motor
> nur ganz kurz, dreht sich aber nicht.

Erwartes du jetzt, daß die Leser nachschauen im Manual, wie M0..3 
verschaltet werden müssen?

W.S.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Kolja L. schrieb:
> Der µC gibt schon ein ständiges high-low Signal auf den STEP-Pin
Vermutest du das oder hast du das gemessen? Wie sieht dieses Signal aus? 
Passt es zu dem, was der Treiber erwartet?

> der Motor reagiert nur auf das erste Mal, nachdem er angeschlossen ist.
Wie meinst du das?

von Kolja L. (kolja82)


Lesenswert?

tg schrieb:
> die Wicklungen mal auf Durchgang prüfen, ob die tatsächlich richtig
> angeschlossen sind

Ja, zwei voneinander unabhängige Kreise.

tg schrieb:
> Reset, sleep usw. fest auf das Potential legen, dass für den Betriebszustand 
erforderlich ist - s. Datenblatt

Sind sie:
Aus dem DB:
https://www.ti.com/lit/ds/symlink/drv8825.pdf
RESET: Active-low reset input initializes the indexer logic and disables 
the H-bridge outputs. Internal pulldown.
SLEEP: Logic high to enable device, logic low to enter low-power sleep 
mode input mode. Internal pulldown.

tg schrieb:
> die beiden GND sollten verbunden sein

Sind verbunden.

W.S. schrieb:
> Erwartes du jetzt, daß die Leser nachschauen im Manual, wie M0..3 verschaltet 
werden müssen?

Alle auf LOW ist Vollschritt, von daher nein.

Ich hoffe,:

Kolja L. schrieb:
> ... das ist ein bekanntes Phänomen für einen einfach zu behebenden Fehler

Eben genau so etwas, wie tg geschrieben hat, ich aber nicht gewusst 
habe.

von Gerald M. (gerald_m17)


Lesenswert?

aus dem Stand von 0 auf 2,5 U/s macht der Schrittmotor nicht. Wenn du an 
M0-M2 nichts angeschlossen hast, macht der Treiber Fullsteps.
Du toggelst jetzt mit 1kHz den Step Pin, was bei 200Steps/U zu schnell 
ist. Entweder du musst eine Rampe fahren, du musst auf Mikrosteps 
umschalten, oder die Pause verlängern.

von Kolja L. (kolja82)


Lesenswert?

Lothar M. schrieb:
> Vermutest du das oder hast du das gemessen? Wie sieht dieses Signal aus? Passt 
es zu dem, was der Treiber erwartet?

Nein, messen kann ich es nicht. Aber dabei:
1
        pSTEP.on()                 # set pin to high level
2
        sleep(uS * usDelay)
3
        pSTEP.off()                # set pin to lowlevel
4
        sleep(uS * usDelay)

sollte nicht so viel schief gehen.

Du hast aber Recht, ich versuche das nochmal zu verifizieren.

Lothar M. schrieb:
> Wie meinst du das?

Irgendwann bekommt der Motor ja zum ersten mal mit der Spannung in 
Kontakt.
Entweder weil das ganze System versorgt wird, oder ich den Motor an den 
schon im Betrieb befindlichen Controller anschließe. Und dann ruckt er. 
Ist kaum zu sehen, aber zur fühlen und über die Schreibtischplatte zu 
hören.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Kolja L. schrieb:
> tg schrieb:
>> Reset, sleep usw. fest auf das Potential legen
> Sind sie: Aus dem DB: ... Internal pulldown.
Für später, wenn das Ding dann unerwartet herumzickt: ein "internal 
pulldown" mit irgendwas um 50kOhm ist ewig weit weg von "fest auf Masse 
gelegt". Frag beim Burst-Test mal deinen EMV-Spezi...

Kolja L. schrieb:
> sollte nicht so viel schief gehen.
So kannst du argumentieren, wenn du kein Problem hast. Du hast aber 
offenbar eins, genau an dieser Stelle.

> Irgendwann bekommt der Motor ja zum ersten mal mit der Spannung in Kontakt.
Und das ist jetzt der geeignete Zeitpunkt für das Oszilloskop. Hast du 
eines?

: Bearbeitet durch Moderator
von Kolja L. (kolja82)


Lesenswert?

Lothar M. schrieb:
> Hast du eines?
Nein, hab zu Uni-Zeiten verpasst mir eins zu besorgen - schon öfter 
bereut...

Lothar M. schrieb:
> So kannst du argumentieren, wenn du kein Problem hast. Du hast aber offenbar 
eins, genau an dieser Stelle.

Ja, daher suche ich gerade ne LED und schaue ob ich die dimmen kann. 
Dann stimmt zumindest der Pin und das Skript arbeitet.

: Bearbeitet durch User
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Kolja L. schrieb:
> Ja, daher suche ich gerade ne LED und schaue ob ich die dimmen kann.
Wenn du ein Multimeter hast, dann kannst du einfach den Pin für 1s aus 
und für 1s einschalten und mit dem Multimeter messen.
Bei der Gelegenheit kannst du dann auch noch messen, ob die Spannung 
halbwegs zu dem passt, was sein sollte.

BTW: du merkst, dass ich laufend was von "messen" schreibe?

von Gerald M. (gerald_m17)


Lesenswert?

Den Pin muss man doch nicht unbedingt messen. Einfach mit einem Stück 
Draht von dem Step Pin abwechseln Ground und VCC berühren. Vollschritte 
sieht und hört man.
Edit: Natürlich ohne den Pin am Mikrocontroller verbunden zu haben. 
Ansonsten noch meinen letzten Beitrag beachten.

: Bearbeitet durch User
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Gerald M. schrieb:
> Einfach mit einem Stück Draht von dem Step Pin abwechseln Ground und
> VCC berühren. Vollschritte sieht und hört man.
Es reicht sogar, wenn mit dem Stück Draht Vcc berührt wird, weil auch 
der STEP Pin  einen "internal pulldown" hat.

von Gerald M. (gerald_m17)


Lesenswert?

Noch besser :)

von Kolja L. (kolja82)


Lesenswert?

Gerald M. schrieb:
> Den Pin muss man doch nicht unbedingt messen. Einfach mit einem Stück
> Draht von dem Step Pin abwechseln Ground und VCC berühren. Vollschritte
> sieht und hört man.

Danke, das war meine Frage :-)

von Kolja L. (kolja82)


Lesenswert?

So, da haben wir es: der Motor dreht sich nicht, sondern ruckt nur etwas 
mehr.
Kann ich jetzt davon ausgehen, dass der Motortreiber defekt ist?

von Gerald M. (gerald_m17)


Lesenswert?

Wenn du das 200 mal machst, hat er sich dann einmal im Kreis 
durchgeruckt? Ist die Pinbelegung der Spulen korrekt?
Ansonsten, wie ist die Ref-Spannung am Modul eingestellt? (Ja, die muss 
man jetzt wirklich messen.)

von MaWin (Gast)


Lesenswert?

Kolja L. schrieb:
> Mit so einem Schrittmotortreiber, der als Input DIR (direction) und STEP
> hat, sollte sich der Motor ja auch nur mit einem Taster drehen lassen,
> oder?

Nö, Taster prellen, so schnell macht der Motor nicht mit.
Man muss schon entprellen.

von Kolja L. (kolja82)


Lesenswert?

Nein, er dreh sich nicht, kein Stück.
Ref-Spannung ist auf 450mV, der Motor kann etwas mehr als 1A.
Und ja, Pinbelegung des Motors habe ich auch nachgemessen :-P

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Kolja L. schrieb:
> So, da haben wir es: der Motor dreht sich nicht, sondern ruckt nur etwas
> mehr.
Jedes Mal wenn du Vcc berührst? Oder wie bisher nur 1x beim Einschalten?

Kolja L. schrieb:
> Und ja, Pinbelegung des Motors habe ich auch nachgemessen :-P
Dann miss doch mal mit dem Multimeter, ob überhaupt durch beide Spulen 
ein Strom fließt. Besser wären natürlich 2 Multimeter...

> Kann ich jetzt davon ausgehen, dass der Motortreiber defekt ist?
Ab Werk sind die Dinger normalerweise nicht kaputt. Was hast du schon 
alles damit angestellt? Mit angelegter Spannung irgendwelche Leitungen 
umgesteckt?

von Wolfgang (Gast)


Lesenswert?

Kolja L. schrieb:
> der Schrittmotor ist ein kleiner Nema17 und darf etwas mehr als 1A pro
> Wicklung an Strom ziehen. ... Der Treiber ist ein DRV8825, ...

Das ist der falsche Ansatz. Bei einem DRV8825 als Treiber bekommt der 
Motor den Wicklungsstrom zugeteilt, d.h. nicht der Motor zieht ihn, 
sondern der Treiber zwingt ihn ihm auf.

von Timo N. (tnn85)


Lesenswert?

Hab oft genug mit den Dingern gearbeitet.

GRÖßter Fehler ist, dass man die Verbindung zwischen Treiber und Motor 
einfach trennt, bevor man die Versorgungsspannung ausgeschaltet hat und 
"Enable" noch aktiv ist.

Motor verhält sich wie Spule -> Induktion hoher Spannung -> Treiber 
schrott.

Wenn ENABLE bei dir noch nicht auf GND gezogen worden ist, das noch 
probieren.
Ich glaube aber, Treiber ist hinüber.

von Waldemar Rennbootlenker (Gast)


Lesenswert?

Timo N. schrieb:
> Wenn ENABLE bei dir noch nicht auf GND gezogen worden ist, das noch
> probieren.
> Ich glaube aber, Treiber ist hinüber.

Dann hat man es zu weit getrieben...

von Kolja L. (kolja82)


Lesenswert?

Waldemar Rennbootlenker schrieb:
> Dann hat man es zu weit getrieben...

Ja, wobei auch immer :-)

Hab jetzt einen anderen, baugleichen Treiber genommen und damit macht 
der Motor schon mal überhaupt so etwas wie eine Drehung.
Allerdings sehr ruckelig, und nicht immer freiwillig, d.h. ich muss ihn 
etwas anschubsen.

Zum Testen nutze ich den simpelsten Sketch den es dafür wohl gibt:
1
while True:
2
    pSTEP.on() 
3
    sleep(Delay)
4
    pSTEP.off() 
5
    sleep(Delay)

Mit einem Delay von 0.001 Sekunden funktioniert es am "Wenigsten 
schlecht".

Das Wechseln der Richtung funktioniert auch nicht.

DIR, SLP und RST liegen auf den 3.3V des µC, M0,M1,M2 und EN auf GND.

Was kann die Ursache sein, dass der Motor so zögerhaft und ruckelig 
läuft?

von tom (Gast)


Lesenswert?

Das hört sich alles sehr nach Kontaktproblemen an, beim Steckbrett oder 
bei den Verbinungskabeln. Ein Wackelkontakt in einem der Kabel wäre auch 
eine gute Erklärung für den defekten Treiber...

Am Besten steckst du noch einen Elko (>=100µF) auf dein Steckbrett, nahe 
an den Versorgungspins des Motorshields.

Gruß
Tom

von Wolfgang (Gast)


Lesenswert?

Kolja L. schrieb:
> Zum Testen nutze ich den simpelsten Sketch den es dafür wohl gibt:
> ...

Nachteil ist, dass der so einfach ist, dass ein Schrittmotor damit kaum 
vernünftig zu betreiben ist, da damit keine Beschleunigungs- und 
Bremsrampen gefahren werden und eventuell zusätzlich das Timing noch 
instabil ist.

von Cyblord -. (cyblord)


Lesenswert?

Klingt nach Problemen mit der Motorstromversorgung. Mache mal deine 9V 
Block-Batterie weg und ein ordentliches Netzteil mit Bumms ran.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Kolja L. schrieb:
> der Schrittmotor ist ein kleiner Nema17

Schon wieder? Nema17 ist keine Bezeichnung für einen Motor!

Kannst du mir bei einem SCHUKO Staubsauger helfen? Oder bei einem VESA 
Monitor?

von Klaus S. (kseege)


Lesenswert?

Wolfgang schrieb:
> Nachteil ist, dass der so einfach ist, dass ein Schrittmotor damit kaum
> vernünftig zu betreiben ist, da damit keine Beschleunigungs- und
> Bremsrampen gefahren werden und eventuell zusätzlich das Timing noch
> instabil ist.

Jeder Schrittmotor hat eine Startgeschwindigkeit, bei der er auf Anhieb 
läuft. Die gilt es zu unterbieten, dann kann das Timing wackeln wie es 
will.
Das liegt nur eher bei 50Hz als bei 500Hz.

Gruß Klaus (der soundsovielte)

von Kolja L. (kolja82)


Lesenswert?

Guten morgen zusammen,

tom schrieb:
> Am Besten steckst du noch einen Elko (>=100µF) auf dein Steckbrett, nahe
> an den Versorgungspins des Motorshields.

Gute Idee, danke.

Cyblord -. schrieb:
> Mache mal deine 9V Block-Batterie weg und ein ordentliches Netzteil mit
> Bumms ran.

Das NT kann bis 5A.

Klaus S. schrieb:
> Jeder Schrittmotor hat eine Startgeschwindigkeit, bei der er auf Anhieb
> läuft

Danke, d.h. um auf die volle Geschwindigkeit zu kommen muss ich eine 
Rampe fahren?

Wo finde ich solche grundlegenden infos?

von Kolja L. (kolja82)


Lesenswert?

Kolja L. schrieb:
> Wo finde ich solche grundlegenden infos?

https://ww1.microchip.com/downloads/en/Appnotes/doc8017.pdf

Solch ein Dokument, gerne auf deutsch.

von Hugo H. (hugo_hu)


Lesenswert?

Kolja L. schrieb:
> Solch ein Dokument, gerne auf deutsch.

In welchem Textformat darf es denn sein?

von Klaus S. (kseege)


Lesenswert?

Kolja L. schrieb:
> Solch ein Dokument, gerne auf deutsch.

In Google nach "Schrittmotor Tutorial" suchen bringt z.B.
https://www.heise.de/developer/artikel/Schritt-fuer-Schritt-3227165.html
und viele weitere, alles auf deutsch.

Thorsten Ostermann, der sich hier auch ab und an meldet, hat viel Info 
ins Netz gestellt:
http://www.ostermann-net.de/electronic/i_schritt.htm

von Klaus S. (kseege)


Lesenswert?

Kolja L. schrieb:
> Danke, d.h. um auf die volle Geschwindigkeit zu kommen muss ich eine
> Rampe fahren?

Ja. Die einfachste Rampe ist dabei das "Trapez", die Geschwindigkeit 
steigt linear vom Startwert zum Endwert. Dabei ist die Beschleunigung 
konstant.

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.