Forum: Mikrocontroller und Digitale Elektronik Schrittmotor Ein- und Ausschalten


von Manfred L. (manni)


Angehängte Dateien:

Lesenswert?

Hallo,
ich arbeite mit dem 5V Schrittmotor 28BYJ-48 (siehe Bilder), der über 
ein ATmega32 und einem Treiber ULN2803 angesteuert wird. Das 
funktioniert alles hervorragend und läuft im Full Step Mode mit bis zu 
400 Hz Schrittfrequenz.

Den Schrittmotor verwende ich für eine hochgenaue Anzeige. Da die 
Anzeige sich nicht ständig verändert, schalte ich den Strom während 
dieser Perioden ab. Zuvor merke ich mir noch den aktuellen Schritt.

Wenn sich die Anzeige wieder verändern soll, schalte ich den Strom exakt 
mit dem gemerkten Schritt wieder ein. Dies ist notwendig, da der Motor 
ansonsten konstant ca. 350 mA ziehen würde, auch wenn er sich nicht 
drehen soll.

Frage an Euch: kann es sein, dass sich beim Einschalten des Stromes 
(auch mit genau dem gemerkten letzten Schritt) der Rotor verstellen 
kann, da ich den Strom für die beiden Spulen ja sequentiell einschalten 
muß, d.h. es vergehen ca. 20 us zwischen den Einschalten des Stomes der 
ersten und zweiten Spule des Motors.

von Wolfgang (Gast)


Lesenswert?

Manfred L. schrieb:
> Frage an Euch: kann es sein, dass sich beim Einschalten des Stromes
> (auch mit genau dem gemerkten letzten Schritt) der Rotor verstellen
> kann ...

Aus dem Stand springt der Motor beim Abschalten des Stromes auf die 
Energiemäßig nächste Rastposition. Wenn du wieder sauber Einschalten 
willst, musst du also nicht das letzte Strommuster von vor dem 
Abschalten drauf geben, sondern mit dem Bestromungsmuster der 
Rastposition weiter machen.

von Max M. (jens2001)


Lesenswert?

Manfred L. schrieb:
> da ich den Strom für die beiden Spulen ja sequentiell einschalten
> muß

Warum?

von Manfred L. (manni)


Lesenswert?

Danke Dir für die schnelle Antwort !!

Habe ich das richtig verstanden: "nächste Rastposition" heißt bei Dir 
die nächste Position, die "ich mir vorher gemerkt habe" ?

von Jakob (Gast)


Lesenswert?

Ausschalten ist OK, solange nix am Zeiger zerrt.

Wenn du dir die letzte Ansteuerungskombination gemerkt hast,
was hindert dich daran, mit genau der Ansteuerung einzuschalten,
die (je nach Richtung in die der Zeiger wandern soll) darauf folgt?
Spart auch schon mal Strom für mindestens 1/400 s.

Die 20 µs kommen nur daher, dass dein Programm nicht alle
Spulen gleichzeitig umschaltet, sondern jeden PortPin einzeln.
Das hat aber mit dem Motorlauf nur wenig zu tun:
400 Hz entspricht 2500 µs was sollen da 20 µs bewirken???

von Manfred L. (manni)


Lesenswert?

Max M. schrieb:
> Warum?

Mein Controller kann jedenfalls nur sequentiell arbeiten. Arbeitetst Du 
mit solchen, die parallel arbeiten ?

von Helmut S. (helmuts)


Lesenswert?

Manfred L. schrieb:
> Max M. schrieb:
>> Warum?
>
> Mein Controller kann jedenfalls nur sequentiell arbeiten. Arbeitetst Du
> mit solchen, die parallel arbeiten ?

Du kannst doch die neuen Pegel aller 4 Pins berechnen und dann auf 
einmal setzen (Byte-Zugriff), wenn die im gleichen Port sind.

: Bearbeitet durch User
von Manfred L. (manni)


Lesenswert?

Jakob schrieb:
> Wenn du dir die letzte Ansteuerungskombination gemerkt hast,
> was hindert dich daran, mit genau der Ansteuerung einzuschalten,
> die (je nach Richtung in die der Zeiger wandern soll) darauf folgt?
> Spart auch schon mal Strom für mindestens 1/400 s.

Genau so habe ich auch gedacht, aber nach einiger Zeit läuft mir der 
"Zeiger" aus dem Ruder. Deshalb habe ich die Vermutung, dass der Rotor 
unvohersehbare Sprünge macht, wenn er wieder bestromt wird.

von Manfred L. (manni)


Lesenswert?

Helmut S. schrieb:
> Du kannst doch die neuen Pegel aller 4 Pins berechnen und dann auf
> einmal setzen (Byte-Zugriff), wenn die im gleichen Port sind.

Jetzt sind wir wieder eins!

Da hast Du vollkommen Recht, aber mein Board ist voll mit Leiterbahnen 
und da konnte ich die Pins zum Treiber nicht alle an das selbe Port 
legen.

Trotzdem Danke für Deinen Tip.

von Maxe (Gast)


Lesenswert?

Manfred L. schrieb:
> Habe ich das richtig verstanden: "nächste Rastposition" heißt bei Dir
> die nächste Position, die "ich mir vorher gemerkt habe" ?
Nein, er meint das anders. Die Rastposition kannst du bei abgeschaltetem 
Motor beim Drehen erfühlen. Wenn du den Motor abschältst, "rutscht" der 
Motor vermutlich in solche Rastpositionen, evtl. sogar darüber hinaus. 
Du solltest also dafür sorgen, dass du vor dem Abschalten eine solche 
stablie Position einnimmst, also auf jeden Fall keine Halbschritte 
fahren.
Wie es beim Vollschritt ist, weiß ich jetzt aus dem Stegreif auch nicht, 
vielleicht ist da auch nur jeder zweite stabil.

von Thomas Z. (usbman)


Lesenswert?

Ich würde eher über eine Stromabsenkung im Stillstand nachdenken, so 
machen es jedenfalls professionelle Schrittmotor Endstufen.

Thomas

von Manfred L. (manni)


Lesenswert?

Maxe schrieb:
> Du solltest also dafür sorgen, dass du vor dem Abschalten eine solche
> stablie Position einnimmst, also auf jeden Fall keine Halbschritte
> fahren.

Aha, jetzt habe auch ich es kapiert.

Problem ist nur, dass der Motor ein internes Getriebe mit einer 
Übersetzung von 1:64 hat. Da wird es für mich schwer, herauszufinden, wo 
die "Rastpositionen" sind. Auch dachte ich, da ich im Full-Step Mode 
fahre, ist jede Position eine "Rastposition".

Danke Dir für den Tip.

von NichtWichtig (Gast)


Lesenswert?

Das sieht man doch ob der Motor beim Abschalten davon rastet oder brav 
seine Stellung hält.

von Manfred L. (manni)


Lesenswert?

NichtWichtig schrieb:
> Das sieht man doch ob der Motor beim Abschalten davon rastet oder brav
> seine Stellung hält.

Bei einem nachgeschalteten internen Getriebe mit einer Übersetzung von 
1:64 sieht man aber leider nix.

von m.n. (Gast)


Lesenswert?

Thomas Z. schrieb:
> Ich würde eher über eine Stromabsenkung im Stillstand nachdenken, so
> machen es jedenfalls professionelle Schrittmotor Endstufen.

Nachdenken ist zu wenig, man muß es auch machen ;-)
Ohne einen minimalen Ruhestrom ist die Sollposition weg. Die einfachste 
Möglichkeit wäre, die Bestromung zu takten. 10 % Tastverhältnis könnten 
reichen.

von Thorsten O. (Firma: mechapro GmbH) (ostermann) Benutzerseite


Lesenswert?

Wenn die Ansteuerung wie oben gezeigt erfolgt, reden wir ja über 
Vollschritt. Dann steht der Motor immer in einer Rastposition.
Stromabsenkung dürfte bei einer simplen Ansteuerung mit ULN mangels 
Stromregelung wohl ausfallen. Was spricht dagegen, den Treiber zu 
wechseln?

Mit freundlichen Grüßen
Thorsten Ostermann

von Manfred L. (manni)


Lesenswert?

m.n. schrieb:
> Ohne einen minimalen Ruhestrom ist die Sollposition weg. Die einfachste
> Möglichkeit wäre, die Bestromung zu takten. 10 % Tastverhältnis könnten
> reichen.

Jetzt wird es interessant !

Das mit dem Takten der Stromversorgung für einen gerade noch 
ausreichenden Haltestrom ist zumindest ein Gedanke wert.

Aber Frage: warum soll die Sollposition weg sein, wenn keine externen 
Kräfte an der Motorachse zerren (mal ganz abgesehen von dem 
nachgeschalteten 1:64 Getriebe) ?

von NichtWichtig (Gast)


Lesenswert?

Manfred L. schrieb:
> NichtWichtig schrieb:
>> Das sieht man doch ob der Motor beim Abschalten davon rastet oder brav
>> seine Stellung hält.
>
> Bei einem nachgeschalteten internen Getriebe mit einer Übersetzung von
> 1:64 sieht man aber leider nix.

Dann deutet das Wackeln beim erneuten Einschalten aber auf einen 
massiven Fehler hin, denn dort wirkt das Getriebe auch.

von m.n. (Gast)


Lesenswert?

Thorsten O. schrieb:
> Wenn die Ansteuerung wie oben gezeigt erfolgt, reden wir ja über
> Vollschritt. Dann steht der Motor immer in einer Rastposition.

Die Abbildung hat der TO doch nicht erstellt, sondern kopiert. Welche 
Sequenz abläuft, würde sein Programm zeigen. Jetzt braucht man nur den 
noch den Quelltext von der LIB ;-)

Wenn der Motor immer einrasten würde, würde die Position nicht verloren 
gehen.

von Manfred L. (manni)


Lesenswert?

NichtWichtig schrieb:
> Dann deutet das Wackeln beim erneuten Einschalten aber auf einen
> massiven Fehler hin, denn dort wirkt das Getriebe auch.

Wenn ich die Stromabschaltung nicht durchführe, ist der auf der 
Motor-Achse montierte Zeiger auch nach mehreren Hunderttausend Schritten 
(teilweise im Uhrzeigersinn, aber auch entgegengesetzt) immer exakt 
genau da, wo er stehen soll. Es wackelt also nix.

Nur mit dieser Stromabschaltung kommt es zu dem Problem, dass nach 
mehreren Hunderttausend Schritten der Zeiger so langsam aus dem "Ruder" 
läuft. Mit aus dem "Ruder" laufen meine ich so etwas wie 1 bis 2 Grad.

von Jakob (Gast)


Lesenswert?

Ich hab mir neulich genau diesen Stepper mit Driver zum
Experimentieren besorgt.
Bei Vollschrittsteuerung - die der TO nach Grafik macht - kommt die
Achse immer in eine Rastposition - Schlaumeier könnten ja mal
erklären, wo sie sonst gelandet sein sollte... ;-)

Dass die Parallelansteuerung, oder die sequentielle Ansteuerung der
Spulen im 20 µS Bereich für einen Motor, der im 2500 µs Takt (400 Hz)
arbeitet keinen Unterschied macht, sollte auch einleuchten.

Vorstellbar für deine Probleme (bei max 400 Hz) wären eigentlich nur
Software-Probleme. Mit den LEDs solltest du doch sehen, ob da
zwischenzeitlich "Schweinereien" passieren.

Ansonsten:
Woher weißt du, wo der Zeiger gerade ist? Oder genauer:
Wie stellst du den Zeiger beim Einschalten eigentlich auf Null???

von karadur (Gast)


Lesenswert?

Ich würde in die 5V Leitung einen Widerstand schalten der im Betrieb mit 
einem PNP-Transistor gebrückt wird.

Einfache Version der oben schon genannten Stromabsenkung.

von Jakob (Gast)


Lesenswert?

Wenn sich der Fehler so langsam (!) aufsummiert, käme noch eine
Frage auf: Schaltest du zu früh ab?

Die letzte Spulen-Ansteuerung muss natürlich auch deine bewährten
2,5 ms (1/400 Hz) lang anliegen.
Und die erste Ansteuerung nach Wiedereinschalten sollte auch nicht
kürzer ausfallen.

Schau mal, oder mess mal ... ob die Software das berücksichtigt!

von NichtWichtig (Gast)


Lesenswert?

Manfred L. schrieb:
>
> Nur mit dieser Stromabschaltung kommt es zu dem Problem, dass nach
> mehreren Hunderttausend Schritten der Zeiger so langsam aus dem "Ruder"
> läuft. Mit aus dem "Ruder" laufen meine ich so etwas wie 1 bis 2 Grad.

Eben, mehrere Hunderttausend kleine Fehler addierern sich zum dem was Du 
zu sehen bekommst.

Endweder man stellt sicher das der gemachte Step garantiert ist oder man 
implementiert eine IST-Wert-Meßung.

Schrittverlust beim Stepper ist meistens Schei**e und kostet Aufwand.

von Max M. (jens2001)


Lesenswert?

Manfred L. schrieb:
> konnte ich die Pins zum Treiber nicht alle an das selbe Port
> legen.

Designfehler!

von Manfred L. (manni)


Lesenswert?

Jakob schrieb:
> Die letzte Spulen-Ansteuerung muss natürlich auch deine bewährten
> 2,5 ms (1/400 Hz) lang anliegen.
> Und die erste Ansteuerung nach Wiedereinschalten sollte auch nicht
> kürzer ausfallen.

Au Mann, das ist richtig !

Vielleicht habe ich da einen Fehler im "System" eingebaut. Speziell der 
zweite Satz kann der Knackpunkt sein. Ich werde das morgen mal 
nachprüfen und mich dann wieder melden.

Ich danke Dir jedenfalls für diesen tollen Tip !!!!

P.S.: Übrigens, ich verwende keine LIBs oder sonstiges China-Zeug (mit 
der Ausnahme vom Motor selber), was ich nicht kenne, nicht verstehe und 
nicht verifizieren kann, alles handgestrickt und über Monate getestet.

von Manfred L. (manni)


Angehängte Dateien:

Lesenswert?

Max M. schrieb:
> Designfehler!

Bei einseitigen Platinen im DIY Verfahren hat man halt nicht immer die 
besten Voraussetzungen, siehe attached Layout. Das Wichtigste ist aber, 
dass die gesamte Schaltung ohne Stromabschaltung einwandfrei 
funktioniert !!

von Maxe (Gast)


Lesenswert?

Jakob schrieb:
> Bei Vollschrittsteuerung - die der TO nach Grafik macht - kommt die
> Achse immer in eine Rastposition - Schlaumeier könnten ja mal
> erklären, wo sie sonst gelandet sein sollte... ;-)
Gerne.

Ist es nicht so, dass gerade bei der der Vollschrittsteuerung die 
Schrittpositionen zwangsläufig außerhallb der Rastpositionen liegen?
Beide Spulen müssen ja 90° Phasenverschoben angeordnet sein, sonst 
könnte keine Richtung vorgegeben werden. Oder anders ausgedrückt, es 
können nicht beide Spulen gleichzeitig in einer Rastposition liegen, 
sonst käme der Motor dort nicht mehr weg.

Was ich mal probieren würde: Beim Abschalten tatsächlich bewusst zuerst 
die Eine Spule abschalten und die Andere noch eine kurze Zeit halten um 
sicher die zugehörige Rastposition anzufahren. Beim Wiedereinschalten 
genau die umgekehrte Reihenfolge fahren, also erst die Andere und dann 
nach gegebener Zeit die Eine bestromen.

von Manfred L. (manni)


Lesenswert?

Maxe schrieb:
> Was ich mal probieren würde: Beim Abschalten tatsächlich bewusst zuerst
> die Eine Spule abschalten und die Andere noch eine kurze Zeit halten um
> sicher die zugehörige Rastposition anzufahren. Beim Wiedereinschalten
> genau die umgekehrte Reihenfolge fahren, also erst die Andere und dann
> nach gegebener Zeit die Eine bestromen.

Dieser Vorschlag ist auch nicht von schlechtern Eltern. Macht irgendwie 
Sinn.
Ich werde das jedenfalls morgen genau so mal ausprobieren. Vielleicht 
hilft das weiter.

Ich danke Dir für den Hinweis !!

Grüße Manni

von Manfred L. (manni)


Angehängte Dateien:

Lesenswert?

Jakob schrieb:
> oher weißt du, wo der Zeiger gerade ist? Oder genauer:
> Wie stellst du den Zeiger beim Einschalten eigentlich auf Null???

Ganz einfach: auf der Motor-Achse ist ein schmaler Zeiger installiert, 
der durch eine IR Lichtschranke läuft. Ich glaubte anfangs auch nicht, 
dass das funktionieren kann. Aber damit kann ichdie Position des 
Schrittmotors bis auf ca. 0.05 Grad exakt feststellen, siehe attached 
Diagramm.

von Jakob (Gast)


Lesenswert?

> bis auf ca. 0.05 Grad

Das kann ich mir nicht vorstellen. Der übliche 28BYJ-48 macht eine
Umdrehung mit 2048 Full-Steps.

360° / 2048 ~= 0,18°

So genau kann man aber auch kein Zeigerinstrument mit Spiegelskala
ablesen.
Bei einem 270°-Tacho mit 0...270 km/h würde der Zeiger theoretisch
auf < 0,2 km/h auflösen.

von Manfred L. (manni)


Angehängte Dateien:

Lesenswert?

Hallo Jakob,

Jakob schrieb:
> Die letzte Spulen-Ansteuerung muss natürlich auch deine bewährten
> 2,5 ms (1/400 Hz) lang anliegen.
> Und die erste Ansteuerung nach Wiedereinschalten sollte auch nicht
> kürzer ausfallen.

Du hast ins Schwarze getroffen. Mein S/W Fehler lag einfach daran, dass 
ich beim Wiederanlegen der Spannung an die Spulen nicht den "alten" 
Schritt genommen habe, sondern gleich auf den nächsten gesprungen bin.

Bis gestern Abend war noch Tabelle 7-3 gültig, ab heute gilt Tabelle 
7-4, siehe attached Bild.

Somit wird Dir die Ehre zuteil, dass Dein Code-Vorschlag ab heute in dem 
im Bild dargestellten Instrument verankert ist. Dies ist ein Horizontal 
Situation Indicator, der in einem Flugsimulator verbaut ist. Besteht aus 
3 Schrittmotoren mit zusätzlichen Getrieben, zwei Micro-Servos und zwei 
15-LED Dotbar Graphs. Frag mich aber nicht, wieviel Stunden da drin 
stecken.

Nochmals vielen Dank für Deinen wertvollen Beitrag !!

Grüße
Manni

von Manfred L. (manni)


Lesenswert?

Jakob schrieb:
> 360° / 2048 ~= 0,18°

Wie üblich hast Du mal wieder Recht.
Da noch ein externes Getriebe mit 1:1.5 hinter dem Motor hängt, liegt 
die Genauigkeit also bei 360 / 3072 = 0.1171875
Da war ich wohl zu überheblich.

von Jakob (Gast)


Lesenswert?

Genau betrachtet hatte ich in meinem zweiten Beitrag aber
vorgeschlagen, ruhig mit der (je nach Drehrichtung) nächsten
Voll-Schrittkombination wiedereinzuschalten.

Also entweder zuviel der Ehre, oder das Problem war eher ein
Zählproblem, weil der erste Step nach Wiedereinschalten nicht
mitgezählt wurde. - Und mit Tabelle 7-4 kann der Fehler nun nicht
mehr wirksam werden.

???

von Manfred L. (manni)


Lesenswert?

Jakob schrieb:
> Also entweder zuviel der Ehre, oder das Problem war eher ein
> Zählproblem,

Also keine falsche Bescheidenheit.

Anscheinend mag der Schrittmotor es nicht, wenn man ihn aus dem Schlaf 
(0,0,0,0) aufweckt und ihn unmittelbar in eine Schrittposition versetzt, 
die er beim Ausschalten nicht inne hatte.

Wie auch immer, das Aus- und Einschalten funktioniert jetzt ordentlich 
und ich kann die Supply Power (W) erheblich reduzieren, denn ich habe 
bereits 11 Instrumente mit diversen Motoren laufen.

von Jakob (Gast)


Lesenswert?

Aber eine echte Herausforderung, so einen HSI realitätsnah
nachzuempfinden. Bestimmt auch viel mechanische Tüftelei.
Toll!

Ich war ja (in der Realität) auf der anderen Seite von
solchen Istrumenten: ILS- und VOR-Betrieb.

von Wolfgang (Gast)


Lesenswert?

Thomas Z. schrieb:
> Ich würde eher über eine Stromabsenkung im Stillstand nachdenken, so
> machen es jedenfalls professionelle Schrittmotor Endstufen.

Mit so einem Treiber wird das eher schwierig.
Da sollte man dann schon etwas moderneres nehmem, was wirklich in der 
Lage ist, den Strom zu regeln.

Manfred L. schrieb:
> ... und einem Treiber ULN2803

von Manfred L. (manni)


Lesenswert?

Jakob schrieb:
> Ich war ja (in der Realität)

Ah ja, bestimmt bei der Firma, die mit Sie anfängt und mit mens endet.
Ich war (in der Realität) etwas weiter oben angesiedelt, so in etwa bei 
500 - 384400 km. Da habe ich gelernt, nie etwas aus der Hand zu geben, 
was Du nicht auf Herz und Nieren verifiziert und getestet hast. Wenn das 
Ding einmal oben ist, ist's vobei mit Reparieren. Dann hilft nur noch 
Beten.

von m.n. (Gast)


Lesenswert?

Manfred L. schrieb:
> Wenn sich die Anzeige wieder verändern soll, schalte ich den Strom exakt
> mit dem gemerkten Schritt wieder ein.

Manfred L. schrieb:
> Mein S/W Fehler lag einfach daran, dass
> ich beim Wiederanlegen der Spannung an die Spulen nicht den "alten"
> Schritt genommen habe, sondern gleich auf den nächsten gesprungen bin.

Soviel zum Thema "exakt" und "geheimes" Programm.

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.