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?
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
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
@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
> 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
> 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
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
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.
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
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
>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.
Ok, da muss ich mich erst einmal durcharbeiten. Danke an alle, Bernd
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
"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?
"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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.