Forum: Mikrocontroller und Digitale Elektronik Vorgehensweise Programmerstellung Motorsteuerung


von Sascha (Gast)


Lesenswert?

Ich möchte einen Schrittmotor an einer gekauften Endstufe (1/5 oder 1/10 
Mikroschritt) betreiben.
Die Taktsignale soll ein Atmega erzeugen.
Hierzu habe ich jetzt etliche Tage gebraucht, bis ich es hinbekommen 
habe, mit dem TIMER1 ein Rechtecksignal zu erzeugen.

Der Schrittmotor soll synchron mit einem Encoder Laufen (500 Striche, 
ca.100 1/min)
Ich frage alle Flanken mit Interrupt ab, macht 2000 Impulse / Umdrehung
Hierraus möchte ich die Geschwindigkeit errechnen und damit den Motor 
ansteuern.

Zusätzlich möchte ich mit einem Poti die Umdrehungen vorgeben können, 
die der Schrittmotor macht, wenn der Encoder sich um einen bestimmten 
Wert bewegt.

Meine Frage:
Gehe ich da überhaupt den richtigen Weg?
Ich suche kein fertiges Programm, sondern nur Ansätze zur sinnvollen 
Lösung meiner Aufgabe.

von geb (Gast)


Lesenswert?

Hmmm.. ein Schrittmotor benötigt normalerweise keinen Encoder, außer man 
will Ihn Überwachen. Pro Puls dreht sich der Motor immer um denselben 
Winkel, außer du Überlastest ihn mechanisch, dann tritt Schrittverlust 
auf.

>Zusätzlich möchte ich mit einem Poti die Umdrehungen vorgeben können,
>die der Schrittmotor macht, wenn der Encoder sich um einen bestimmten
>Wert bewegt.

versteh ich nicht,mußt du besser formulieren

Grüße Gebhard

von holger (Gast)


Lesenswert?

>Der Schrittmotor soll synchron mit einem Encoder Laufen (500 Striche,
>ca.100 1/min)
>Ich frage alle Flanken mit Interrupt ab, macht 2000 Impulse / Umdrehung
>Hierraus möchte ich die Geschwindigkeit errechnen und damit den Motor
>ansteuern.

Das brauchst du nicht. Die Geschwindigkeit ergibt sich aus
der Ansteuerung.

von Sascha (Gast)


Lesenswert?

Da hab ich mich wohl wirklich schlecht ausgedrückt :(

Das Prinzip ist wie bei einer Drehmaschine, der Encoder erfasst die 
Futterdrehzahl und der Motor positioniert das Werkzeug mit einstellbarem 
Verhältniss (Gewindeschneiden)

oder
Kabelaufwickler: Encoder an die Wickelspule, Schrittmotor positioniert 
das Wickelgut beim Aufwickeln.

von MaWin (Gast)


Lesenswert?

Also wenn dir schon der Timer Probleme macht,
und du alle Flanken mit Interrupt abfragst,
ist der Weg noch weit, verdammt weit.

Du hast einen Encoder, der uC muss den also auslesen
können und möglichst zeitnah wissen wo er steht.

Nehmen wir an, es gibt nun eine Speicherstelle im uC,
in dem die aktuell erfasste Encoderposition steht.

Dann gibt es einen Schrittmotor der auch eine intern
gezählte Position innehat.

Und du hast ein Poti, welches z.B. am einem Analogeingang
hängt, und der eingestellte Wert ist dem uC bekannt.

Wenn nun die Encoderposition kleiner oder grösser ist als
die Schrittmotorposition, muß sich der Schrittmotor bewegen.
Du hast aber richtig erkannt, daß er wohl nicht gleich mit
vollem Tempo laufen kann (das wäre dann ein eher niedriges
Tempo), sondern beschleunigen und abbremsen muß damit er mit
der bewegten Masse keine Schritte verliert weil seine Kraft
nicht zum so schnellen Beschleunigen oder Bremsen der Masse
reicht.

Mit dem Beschleunigen ist es nicht so ein Problem, man darf
halt nicht zu schnell die Taktrate ansteigen lassen, sondern
mit dem Bremsen, weil das bereits passieren muß bevor das
Ziel erreicht ist. Es gibt ungefähr so einen Zusammenhang:

Sollposition erreicht: Tempo 0
Motorposition noch 10 vor Sollposition: Tempo 100 Schritte/Sekunde
Motorposiiton noch 20 vor Sollposition: Tempo 1000 Schritte/Sekunde

Hast du diese Rampe
   _ _ _ 
 /         \
/           \

dann hast du die halbe Miete. Leider musst du jedesmal neu
messen und berechnen, weil sich wohl der Encoder verändern
kann während der Motor auf ihn zuläuft. Dabei kann der
Encoder dem Motor entgegen kommen und man kann nicht mehr
schnell genug bremsen sondern muß über's Ziel hinausschiessen
und danach umkehren. Damit muß dein Code klarkommen.

Berechne die GESCHWINDIGKEIT in Abhängigkeit von der
Sollposisiotn, nicht die ENTFERNUNG (in absoluten Schritten)
dann kann dein Code akzeptieren, daß Encoder und Schritte
nicht exakt übereinstimmen sondern mal Messfehler auftreten.

Besonders zickig wird die Sache, wenn der Encoder nicht die
aktuelle Position widergibt, sondern die Position vor 1/10
Sekunde. Es macht Sinn, diese Verzögerungszeit so klein wie
möglich zu halten.

Dein Potzi multipliziert einfach die Encoderposition damit
mehr oder weniger Schritte bei rauskommen.

Starker Tip: Vergiss Flanken, vergiss Interrupts, baue eine
einzige Schleife ins Programm mit einiges if's, die jeweils
reagieren: Ein if auf neue Encoderdaten, ein If auf Ablauf
der Zeit des letzten Schritts (also auslösen des nächsten),
jedes if macht nur minimale Sachen (z.B. es hat die
steigende Flanke erkannt, merke das Ereignis) und niemals
ganze Jobs (nach der Flanke im IF auf die nächste warten ist
bäh) manches geht ohne if, z.B. einlesen von A-B-Encodern und
neuberechnen der Position (oftmals +0, also unverändert,
aber ausführen kann man das jedesmal). Achte darauf, daß
die Impulse des Schrittmotors zum sauberen Bremsen und
Beschleunigen nicht im festen raster (z.B. 1kHz) erfolgen
sondern in reellzahligen Zeiteinheiten, also 'jetzt', 'in
737154 Maschinentakten', 'in 1097653 Maschinentakten' und
den Timer verwendest du nur 'free running' um die aktuelle
Zeit abfragen zu können.

von Sascha (Gast)


Lesenswert?

Danke für diese sehr ausführliche Antwort.
War doch gut vorher mal zu fragen :)
Versuche jetzt mal wenigstens einen Teli davon umzusetzen.

von Matthias (Gast)


Lesenswert?

Sascha schrieb:
> Ich möchte einen Schrittmotor an einer gekauften Endstufe (1/5 oder 1/10
> Mikroschritt) betreiben.

Das könnte schwierig werden. Bei Mikroschrittbetrieb werden die 
Vollschritte meist binär geteilt, d.h. 1/2, 1/4, 1/8 ...

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


Lesenswert?

Hallo Matthias!

Nur weil das meist so ist, ist es nicht immer so. Es gibt durchaus 
diverse Endstufen, die auch die Teilungen 1/5, 1/10 und 1/20 
beherrschen. Warum? Weil man damit die gleiche Anzahl an Schritten/U 
erreicht wie bei 5-phasigen Motoren.

Mit freundlichen Grüßen
Thorsten Ostermann

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.