Forum: Mikrocontroller und Digitale Elektronik Schrittmotor, Softstart und Timer?


von Be M. (bemi)


Lesenswert?

Hallo,

mal wieder das Thema Schrittmotor. Ich muss dazu sagen, dass mir hier 
die Erfahrung fehlt.

In verschiedenen Artikeln zum Thema Softstart ließt man immer wieder, 
dass man das Weiterschalten des Schrittmotors langsam beschleunigen 
soll, zum Beispiel, in dem man die Zeit, die ein Timer braucht, langsam 
absenkt, was in der Folge zu einem Anstieg der Schrittfrequenz führt.

Nun habe ich 2 Fragen an die Erfahrenen von euch.

Mikrokontroller haben ja in der Regel nur eine begrenzte Anzahl von 
Timern und ich möchte 3 Schrittmotoren mit einem einzelnen Controller 
steuern. OK, es gibt auch Controller mit mehr als 3 Timern, aber da wird 
die Auswahl schon geringer, zumal bei den Controllern häufig 
8/16/32-Bit-Timer gemischt anzutreffen sind. Darüber hinaus sollten die 
Schrittmotore sich möglichst sanft bewegen (kein Ruckeln).
Wenn ich mehrere Timer zur Verfügung hätte, könnte ich die Zeit, die 
zwischen den einzelnen Schritten vergeht quasi in Schritten von einem 
Taktzyklus verringern. So dass prinzipiel sehr feine Abstufungen der 
Geschwindigkeit möglich wären. Wenn aber 3 Motore unterschiedlich 
gesteuert werden (z.B. einer beschleunigt, während der andere abbremst) 
und ich alles mit einem Timer erschlagen will wird klar, dass man wohl 
einen Timer von möglichst geringer Dauer wählen muss, um von diesem alle 
weiteren Takte durch Herunterteilen der Timerfrequenz abzuleiten.

Wenn ich aber einen Timer wähle, der alle 10µs auslößt und die 
Schrittfrequenz 1 kHz (1000 ms) ist, könte ich die Frequenz in 10µs 
Schritten steigern. Bei 1kHz ist das ungefähr 1 %. Wenn der Motor 
allerdings bereits mit 5kHz Angesteuert wird (200 ms) sind 10ms 
allerdings schon 5 % Änderung. Eine höhere Timerfrequenz würde zu einem 
starken Anstieg der Prozessorauslastung führen, wodurch dann kaum noch 
Zeit für andere Aufgaben bliebe.

Die Frage ist nun: Wieviel Prozent Änderung der Ansteuergeschwindigkeit 
ist ok, ohne dass der Motor Schritte verliert und ohne dass der Motor 
ruckelt?

Die 2. Frage bezieht sich auf den Zeitpunkt, wenn der Motor aus dem 
Stand heraus Beschleunigt wird. Wie langsam kann ein Moter angesteuert 
werden, ohne dass er ruckelt. Und wie schnell darf die Schrittfolge 
beschleunigt werden, ohne dass er Schritte verliert?

von Axel D. (axel_jeromin) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hallo Bernd,
auf Deine Fragen antworte ich mit einem klaren: kommt ganz darauf an...

Bei meinen Versuchen mit Schrittmotoren war bei 300 Schritten/Sec 
Schluss, weil dann das Drehmoment schon so schwach war, dass der Motor 
bei der kleinsten Last stehen blieb. Und das, obwohl ich schon eine 
Stromregelung hatte. Im unteren Drehzahlbereich hatte der Motor mächtig 
Drehmoment.

Ein zu großer Phasenstrom hat den Motor stark erwärmt.


Bei der Beschleunigung von 0 auf 300 Schritten/s hatte ich eine 
Hochlauframpe von 10 Sec.

anbei mein Programm, welches Fahrbefehle von einer seriellen 
Schnittstelle empfangen hat. Vieleich kanns Du Teile davon brauchen



Axel

von Ralf (Gast)


Lesenswert?

Du könntest einen Hardware- und drei Software-Timer verwenden. Der 
Hardware-Timer hat immer einen festen Wert, und zwar die kleinste 
gewünschte Zeiteinheit. In der Timer-ISR zählst du drei Variablen (eine 
für jeden Motor) runter, wenn die 0 sind, lädst du sie neu, und das 
Spiel geht von vorne los.

Ralf

von Be M. (bemi)


Lesenswert?

@Ralf:
Hardwaretimer/Softwaretimer: Genau das meinte ich mit den 10µs Raster 
und darauf bezog sich auch meine Frage

@Axel:
Du schreibst, dass unter 300 Schritten nicht mehr richtig läuft 
(Drehmoment schwach). Ich hätte jetzt erwartet, dass der Moter bei sehr 
langsammer Ansteuerung von Schritt zu Schritt springt, anstatt sich 
gleichmäßig zu bewegen.

Was ist denn mit Microstepping?

Bernd

von Ralf (Gast)


Lesenswert?

> Hardwaretimer/Softwaretimer: Genau das meinte ich mit den 10µs Raster
> und darauf bezog sich auch meine Frage
Ja, richtig, ich hatte das ursprünglich etwas anders aufgefasst, sorry. 
Du müsstest dir dann erstmal ausrechnen, wieviel Umdrehungen du pro 
Minute maximal haben willst, und das mit der Schrittzahl pro Umdrehung 
multiplizieren, dann weisst du schonmal, wie schnell du ungefähr im 
Zeitraster sein musst und hast dann echte Werte, nicht irgendwelche 
angenommenen Werte, mit denen du weiterrechnen kannst.

Ralf

von Ralf (Gast)


Lesenswert?

> Du schreibst, dass unter 300 Schritten nicht mehr richtig läuft
Nein, er meinte, dass 300 das Maximum war. Mit steigender 
Geschwindigkeit können die Spulen/Magnete nicht mehr richtig einrasten, 
weil die Zeit einfach nicht reicht, um überhaupt ein Haltemoment zu 
erzeugen.

Ralf

von Uwe (Gast)


Lesenswert?

Hi!
Bis 100 U/min konnte ich einen 3A/1,8° Schrittmotor ohne Schrittverlust 
ansteuern. Bei anderen Motoren kann das ganz anders ausschauen, einfach 
testen.
Beschleunigen/Bremsen: Meine Ansteuerung lief über Timer1 mit 16Bit in 
CTC.
Für Gasgeben: OCR1A_neu = Highbyte OCR1A*Highbyte OCR1A(MUL)- Highbyte 
vom MUL in jeder OCR-ISR. Das Highbyte vom MUL muss min 1 sein.
Bremsen geht genauso nur statt "-" eben "+". Wenn immernoch zu schnell 
Higbyte vom MUL einfach /2....
Bei mir ging/geht das recht ordentlich obwohl es nicht ganz linear ist.
Einfach mal versuchen.

Viel Erfolg, Uwe

von Be M. (bemi)


Lesenswert?

Habt Ihr vielleicht noch ein paar Tips, wie man am besten das 
Microstepping realisieren kann. Denn ich würde es gerne von vornherein 
in das Konzept einarbeiten.

von Ralf (Gast)


Lesenswert?

Wenn du mit MicroStepping den Halbschrittbetrieb meinst, dann guck mal 
hier:

http://www.roboternetz.de/wissen/index.php/Schrittmotoren
Relativ weit unten steht eine Tabelle für Voll- und Halbschrittbetrieb, 
da siehst du dann den Unterschied.

Und hier noch n bisschen Literatur:

http://www-users.rwth-aachen.de/thorsten.ostermann/i_schritt.htm
Musst halt die einzelnen Seiten durchgehen...

HTH

Ralf

von Michael Wilhelm (Gast)


Lesenswert?

Mikrostepping ist eine Sache des Motortreibers. Wenn du es extrem 
brauchst, dann schau dir die Teile von Ericcsen oder NJR an und zwar den 
PBM3960 und den PBL3771. Mit der Kombination, oder auch nur mit dem 
3771, wenn du die Analogspannung selber baust, bin ich auf ca. 90 
Zwischenschritte pro Vollschritt gekommen.

Wenn es nicht so extrem sein muss, Allegro, Trinamic,STM,... haben schon 
Treiber mit 1/8, 1/16 und Trinamic auch mit 1/64 Modus.

MW

von STK500-Besitzer (Gast)


Lesenswert?

>Habt Ihr vielleicht noch ein paar Tips, wie man am besten das
>Microstepping realisieren kann. Denn ich würde es gerne von vornherein
>in das Konzept einarbeiten.

Guck mal bei Microhip (ja, die mit dem PIC).Die haben eine Application 
Note, die das ziemlich gut beschreibt.

>Mikrostepping ist eine Sache des Motortreibers.
Dazu braucht es nicht unbedingt spezielle Motortreiber-ICs. Sowas kann 
man auch in Software machen, wenn der Controller sich nicht mit 
weiteren, anstrengenden Aktivitäten belasten muß.

>Bis 100 U/min konnte ich einen 3A/1,8° Schrittmotor ohne Schrittverlust
>ansteuern.
Kommt ganz auf die zu bewegende Masse an.

>Bei anderen Motoren kann das ganz anders ausschauen, einfach
>testen.
s.o.
Einen "nackten" Motor kann man ziemlich schnell drehen lassen; sobald er 
belastet wird, hat man (i.d.R. lösbare) Probleme mit der Massenträgheit.

von Be M. (bemi)


Lesenswert?

Ok, da muss ich mich erst einmal durcharbeiten.

Danke an alle,
Bernd

von Martin (Gast)


Lesenswert?

Hallo Bernd,

mit einen festen Takt von 10 kHz kann man auch mehrere Motoren steuern, 
dabei muss man nur mit kleinen Bruchteilen von Schritten rechnen. Meine 
Teleskopsteuerung verwendet 64 Mikroschritte pro Vollschritt, diese 
wiederum unterteilt in je 65536 'Nanoschritte'. Dann kann die Software 
in jedem Interrupt (8 kHz) den Schrittzähler fein genug weiterzählen:

Schrittzähler = Schrittzähler + Geschwindigkeit

Ein Start mit null Geschwindigkeit ist möglich.
Beschleuging wird mit:

Geschwindigkeit = Geschwindigkeit + Beschleunigung

Bedingt durch die feine Schrittauflösung in der Software sind die 
Variablen allerdings etwas länger, der Schrittzähler hat z.B. incl. 
Nanoschritte 6 Byte.

Ist die Position ermittelt, wird das Byte 2 des Schrittzählers, welches 
in Mikroschritten zählt, als Index in eine Sinus/Cosinus-Tabelle 
verwendet, um die Stromwerte der beiden Motorspulen zu ermitteln.
256 Positionen beschreiben einen vollen Umlauf mit vier Vollschritten, 
unterteilt in je 64 Mikroschritte.

Für das Mikrostepping benutze ich Allegro 3973 - Treiber, die können 63 
Stromsollwerte vorgeben und regeln.

Gruß,
Martin

http://www.martin-cibulski.de/atm/mount_controller_4/index_de.htm

von eProfi (Gast)


Lesenswert?

"Einen "nackten" Motor kann man ziemlich schnell drehen lassen; sobald 
er belastet wird, hat man (i.d.R. lösbare) Probleme mit der 
Massenträgheit."

Nicht nur das, es treten oft mechanische und elektrische Resonanzen auf, 
die das nutzbare Drehmoment empfindlich verringern können.

100 U/min ?
meine aktuelle Schaltung macht von -1800 auf 1800 U/min (entspricht 12 
kHz Halbschritt) in 0,6 Sekunden (ohne Last) und in 3 Sekunden mit Last.

Habe ich genauso gelöst wie Martin, das ist das selbe Prinzip wie 
"mehrstimmige" DDS  oder  Geraden-Bresenham.
Allerdings nicht mit Nanoschritt, bei mir ist ein Großschritt (= 8 
Halbschritte = 1 Zyklus) in 64k Microschritte geteilt.

Diskret aufgebaute Doppel-H-Brücke, DSP-gesteuert, ohne Schrittmotor-IC, 
CAN-Bus, frei progr. Profilsteuerung
Versorgung 72V Imax 12A


Habe zum Spaß mal einen Alphastep (direkt netzversorgt mit 325V) mit 
50kHz (6000 U/min bei 500steps/Umdr.) laufen lassen, quietscht wie ein 
Turbo, wird wg. Eddy Wirbelstrom auch ganz schön warm.


Zu Deinen Fragen: kommt ganz auf den Anwendungsfall an, generell kann 
man sagen, dass prinzipbedingt Schrittmotoren bei hohen Drehzahlen 
weniger Drehmoment haben. Das bedeutet, Du kannst unten zügig 
beschleunigen (Startfrequenz 400 - 1000 Hz Halbschritt), oben muss Die 
Kurve flacher werden.

Lese Dir mal in der Artikelsammlung "Schrittmotoren" durch:
http://www.mikrocontroller.net/articles/Schrittmotoren
http://www.mikrocontroller.net/articles/Schrittmotor-Controller_%28Stepper%29
Beitrag "Frage zu Schrittmotor und Microstepping"


Welche Drehzahlen hast Du denn geplant?
Was soll getrieben werden?

von Be M. (bemi)


Lesenswert?

"Was soll getrieben werden?"
Ich möchte mal einen x-y-Tisch ansteuern, welcher sich allerdings 
möglichst langsam und ruckelfrei bewegen soll. Also eher ein recht 
niedriges Tempo. Viellicht eine Umdrehung in mehreren Sekunden, 
allerdings ruckelfrei.

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.