Forum: Mikrocontroller und Digitale Elektronik Schrittmotor mit Encoder steuern


von Tobias A. (tobias_a)


Lesenswert?

Hallo,
ich möchte einen Schrittmotor mit Getriebe(27:1) mit einem 
Drehimpulsgeber steuern. Ich suche einen fertigen Sketch da ich selber 
das programmieren nicht beherrsche. Ich habe jetzt einige Sketche 
durchprobiert die ich gefunden habe, jedoch hat keins mein Problem 
gelöst.
Ich möchte in dem Sketch einstellen können z.B. 1 Encoder Schritt = 100 
Motor Schritte. Das ganze noch mit definierbarer Geschwindigkeit.
Ich habe ein Youtube Video gesehen wo glaube ich jemand es so hat wie 
ich es möchte: https://www.youtube.com/watch?v=aCBEXe7H-J0 jedoch ist 
seine Webseite wohl down.

von Roboman (Gast)


Lesenswert?

Schau dir die TIC Schrittmotorcontroller an die können das von Haus aus

von W.A. (Gast)


Lesenswert?

Tobias A. schrieb:
> Ich suche einen fertigen Sketch da ich selber das programmieren
> nicht beherrsche.

Das Leben ist kein Wunschkonzert

> Ich habe ein Youtube Video gesehen wo glaube ich jemand es so hat wie
> ich es möchte: https://www.youtube.com/watch?v=aCBEXe7H-J0 jedoch ist
> seine Webseite wohl down.

Dann musst du den im Video gezeigten Code vielleicht selber eintippen 
und verstehen lernen. Das Einbinden der Encoder Library von Paul 
Stoffregen in deine Arduino IDE kann dir sowieso keiner abnehmen. Ohne 
die läuft da gar nichts.

von max123 (Gast)


Lesenswert?

Den Strom über den ENCODER zum Schrittmotor leiten. Du brauchst weder
programmieren und auch keine Elektronik.

von Christian (Gast)


Lesenswert?

max123 schrieb:
> Den Strom über den ENCODER zum Schrittmotor leiten. Du brauchst
> weder
> programmieren und auch keine Elektronik.

WIRKLICH zum Schrittmotor?? Oder doch eher zum Stepper-Driver?!?!

Wenn es von Max nur ungeschickt ausgedrückt war, und er tatsächlich den 
Driver meinte, dann hat er vollkommen recht - ABER:

Da geht allerdings nur 1:1 oder im Mikroschrittbetrieb entsprechend 
höher untersetzt.

Bei einem Stepper mit Getriebe 27:1, einem Drehimpulsgeber mit sagen wir 
mal 20 Impulsen pro Umdrehung, einem Stepper mit dem üblichen 1,8° 
Schrittwinkel und das ganze im Vollschritt-Modus würde das bedeuten, 
dass Tobias genau 270 Runden am Drehgber drehen muss, damit seine 
Motor-Getriebe-Kombination einmal ein Kreis fährt.

^^ Das klingt nach dem Beginn einer langwierigen 
Sehnenscheidenentzündung.

von Wolfgang (Gast)


Lesenswert?

Christian schrieb:
> Wenn es von Max nur ungeschickt ausgedrückt war, und er tatsächlich den
> Driver meinte, dann hat er vollkommen recht - ABER:
>
> Da geht allerdings nur 1:1 oder im Mikroschrittbetrieb entsprechend
> höher untersetzt.

Wenn auch nur ungeschickt ausgedrückt: Ein Treiber, der über Step/Dir 
gesteuert wird, und dann eventuell auch Mikroschrittbetrieb beherrscht, 
funktioniert für so eine Synchronsteuerung natürlich NICHT.
Die vom Inkrementalgeber erzeugten Phasensignale müssen dafür direkt mit 
H-Brücken verstärkt werden und dann die Wicklungen eines bipolaren 
Schrittmotors bestromen.

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


Lesenswert?

Wolfgang schrieb:
> Wenn auch nur ungeschickt ausgedrückt: Ein Treiber, der über Step/Dir
> gesteuert wird, und dann eventuell auch Mikroschrittbetrieb beherrscht,
> funktioniert für so eine Synchronsteuerung natürlich NICHT.
Eigentlich bringt ein Quadraturencoder auf seinen beiden Spuren genau 
das, was ein Impuls/Richtungs-Interface braucht: je nach Drehrichtung 
ist genau bei einer Flanke am Step-Eingang der Dir-Eingang definiert 
entweder high oder low.

Christian schrieb:
> Bei einem Stepper mit Getriebe 27:1, einem Drehimpulsgeber mit sagen wir
> mal 20 Impulsen pro Umdrehung, einem Stepper mit dem üblichen 1,8°
> Schrittwinkel und das ganze im Vollschritt-Modus würde das bedeuten,
> dass Tobias genau 270 Runden am Drehgber drehen muss, damit seine
> Motor-Getriebe-Kombination einmal ein Kreis fährt.
Tja, falsches Bauteil. Ich nehme einen Drehgeber mit 4096 (oder  8192 
oder gar 16384) Impulsen pro Umdrehung, dann relativiert sich das ganz 
schnell. Die Frage ist nur, ob der Motor dann noch hinterher kommt.


Insofern würde ich hier auch den entkoppelten Ansatz wählen und mit 
einem Drehencoder (am besten samt "Beschleunigung") einlesen, und dann 
einen "Imuplsfolger" bauen, der die vorgewählte Position auf dem 
Schrittmotor nachfährt.

Tobias A. schrieb:
> Ich habe jetzt einige Sketche durchprobiert die ich gefunden habe,
> jedoch hat keins mein Problem gelöst.
An dieser Stelle wird dann selbständiges Denken notwendig.

> Ich möchte in dem Sketch einstellen können z.B. 1 Encoder Schritt = 100
> Motor Schritte.
Also such einen Code für das Einlesen eines Encoders. Lies dessen 
Position in einen "endlosen" Zähler ein. Multipliziere den Zähler mit 
deinem gewünschten Faktor. Und dann fahre mit dem Motor diese "Position" 
an. Du musst also um die Differenz zur letzten Motorposition 
weiterfahren.

> Das ganze noch mit definierbarer Geschwindigkeit.
Im Grunde musst du dann den Motor auch noch mit passenden Rampen 
anfahren, damit der keine Schritte verliert. Dann wird es aber schon 
eher sportlich. Im Besonderen, wenn der Motor gerade positioniert, am 
Bremsen ist und du weiterdrehst. Oder wenn du mitten unterm Verfahren 
den Encoderknopf in die andere Richtung drehst.

: Bearbeitet durch Moderator
von christian.thomasser@styriatronic.at (Gast)


Lesenswert?

Lothar M. schrieb:
> Tja, falsches Bauteil. Ich nehme einen Drehgeber mit 4096 (oder  8192
> oder gar 16384) Impulsen pro Umdrehung, dann relativiert sich das ganz
> schnell. Die Frage ist nur, ob der Motor dann noch hinterher kommt.

Stimmt, da relativiert es sich natürlich.

In dem Video welches Tobis verlinkt hat, wird allerdings ein Drehgeber 
gezeigt, bei dem man zurecht anzweifeln darf, dass der überhaupt über 
100 Impulse pro Umdrehung kommt.

Die Inkrementalgeber, die Du meinst, sind wahrscheinlich solche, die man 
auf Antriebswellen schraubt, um ein Positionsfeedback zu erhalten.

Solange man das alles vernünftig dimensioniert, kommt der Motor schon 
noch hinterher. Ein Stepper (mit 27:1 Getriebe) schafft im Leerlauf 
mühelos 400 RPM (natürlich geht das Moment ordentlich in die Knie) Im 
Vollschrittmodus wären dass für den Treiber 80.000 Impulse pro Minute - 
1.333..... pro Sekunde. bei 16.384 Impulsen pro Umdrehung muss man 
tatsächlich schon behutsam drehen. (Im Mikroschrittbetrieb geht's aber 
wieder)

Lieber Tobias, es wäre interessant, welchen Encoder Du konkret 
verwendest. Ist es ein von Hand bedienbarer, oder ein hochauflösender 
Winkelencoder??

Ist er hochauflösend würde ich es ganz gleich machen, wie es Lothar 
schon sehr gut beschrieben hat. Damit das ganze zuverlässig 
funktioniert, würde ich auch die Positionen des Drehgebers buffern. Das 
Programm soll dann den Motor der Reihe nach alle gebufferten Positionen 
mit definierten Rampen und einer definierten Geschwindigkeit anfahren 
lassen. Die Samplerate mit welcher die Encoderpositionen gebuffert 
werden, muss dann natürlich mit den Rampen und der Geschwindigkeit des 
Steppers zusammenpassen (resultierende Abarbeitungszeit), nicht dass der 
"Variablenspeicher" überläuft.

Lothar M. schrieb:
> Im Besonderen, wenn der Motor gerade positioniert, am
> Bremsen ist und du weiterdrehst. Oder wenn du mitten unterm Verfahren
> den Encoderknopf in die andere Richtung drehst.

Spätestens da, wenn nicht eh schon lange vorher wirst du mit aneinander 
gestöpselten Sketches ohne die Logik der Programmierung zu verstehen 
leider nicht mehr weiter kommen.

Am leichtesten wird es daher wohl sein, wenn Du Deine Bauteile so 
dimensionierst, dass der Stepper selbst dann wenn Du wie ein Irrer am 
Encoder drehst, dem unmittelbar noch gut folgen kann. Dann halten sich 
der Programmieraufwand und die Probleme selbst beim "plötzlichen" 
Richtungswechsel in Grenzen, vor allem dann, wenn ein paar verlustige 
Schritte egal sind. In dem Fall könnte es tatsächlich auch ohne µC mit 
einem pulse/dir Treiber klappen. Einfach mal testen!!

Wofür soll das Konstrukt eigentlich verwendet werden?


Gutes Gelingen!!
LG, Christian

von Wolfgang (Gast)


Lesenswert?

Lothar M. schrieb:
> Eigentlich bringt ein Quadraturencoder auf seinen beiden Spuren genau
> das, was ein Impuls/Richtungs-Interface braucht: je nach Drehrichtung
> ist genau bei einer Flanke am Step-Eingang der Dir-Eingang definiert
> entweder high oder low.

Dann hast du aber schon wieder eine Umsetzlogik dazwischen.

Vergleiche einfach mal das Ausgangssignals eines Inkrementalgebers mit 
dem Bestromungsmuster eines bipolaren Schrittmotors im 
Vollschrittbetrieb. Da geht es nicht um Flanken, sondern einfach 1:1 
Phasensignal Inkrementalgeber auf Motorbestromung.

von Christian (Gast)


Lesenswert?

Nachdem es sich bei Schrittmotortreibern mittlerweile um 
Ein-paar-Euroartikel handelt stellt sich die Frage, ob man selbst die 
Notwenigen Vollbrücken aufbauen soll normalerweise nicht. Nachdem 
Inkrementalgeber keinen Strom können und auch das „Bürstenfeuer“ im 
Geber selbst bei kleinen Strömen dafür sorgen wird, dass diese nach nur 
kurzer Zeit ihren Dienst quittieren, kommt man um einen Treiber nicht 
herum.

Mit Pulse und Direction kann man dann schon gut arbeiten.

von Tobias A. (tobias_a)


Lesenswert?

christian.thomasser@styriatronic.at schrieb:
> Lieber Tobias, es wäre interessant, welchen Encoder Du konkret
> verwendest. Ist es ein von Hand bedienbarer, oder ein hochauflösender
> Winkelencoder??

Es ist der Standard Encoder der bei jedem Arduino Experimentiersatz 
dabei ist, hat glaube 20 Schritte pro Umdrehung.

Der Treiber ist ein TB660 nutze ihn glaube mit 16 Microsteps aber das 
ist ja Einstellungssache.

Lothar M. schrieb:
>> Das ganze noch mit definierbarer Geschwindigkeit.
> Im Grunde musst du dann den Motor auch noch mit passenden Rampen
> anfahren, damit der keine Schritte verliert. Dann wird es aber schon
> eher sportlich. Im Besonderen, wenn der Motor gerade positioniert, am
> Bremsen ist und du weiterdrehst. Oder wenn du mitten unterm Verfahren
> den Encoderknopf in die andere Richtung drehst.

Sollte simpel gehalten werden und muss kein Präzisionswerkzeug sein.

christian.thomasser@styriatronic.at schrieb:
> Wofür soll das Konstrukt eigentlich verwendet werden?

Ich dachte den Motor für ein Rolladenantrieb. Aber erstmal mal zum 
rumspielen mit dem Motor und austesten was er so an Kraft hat. Weil ich 
habe jetzt keine Möglichkeit den Motor mehr oder weniger Kontrolliert 
drehen zulassen.

von Christian (Gast)


Lesenswert?

Tobias A. schrieb:
> Es ist der Standard Encoder der bei jedem Arduino Experimentiersatz
> dabei ist, hat glaube 20 Schritte pro Umdrehung.

Damit hatte ich dann schon mal Recht :)

Und wie ich schon angemerkt habe, wirst Du in dem Fall nicht um eine 
entsprechende Logik herumkommen. Alleine schon, weil Du anstatt zu 
Schlafen, die Ganze Nacht am Encoder drehen müsstest, damit bis zum 
nächsten morgen die Rollläden offen sind.

Halte Dich an die ausführliche Beschreibung von Lothar, potenziere deine 
Encoder-Impulse um einen beliebigen Faktor, buffere diese und lass dann 
den Motor die zwischengespeicherten Positionen mit einer definierten 
Rampe und Geschwindigkeit anfahren. Für eine Automatisierung solltest Du 
dann aber unbedingt Endschalter verwenden, damit Dein Antrieb bei 
Schrittverlusten nicht über die Endlagen hinausfährt. Ein entsprechender 
Stepper mit 27:1 Übersetzung und niedriger Drehzahl hat schon ordentlich 
Schmalz und kann so einiges kaputt machen.

LG und gutes Gelingen!!

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.