Arduino 1-Achsen-Steuerung

  • Hallo,


    heute stelle ich auch mal ein kleines Projekt vor. Der Grund für dieses Projekt ist zum einen der Wunsch sich mit dem Arduino zu beschäftigen und zum anderen eine defekte Steuerung von einem Lidlscope. Die hat mal eine zu hohe Spannung abbekommen. :( ) Eine kommerzielle Steuerung wäre hier ein wenig viel des Guten.


    Ende letzten Jahren kam dann noch eine Montierung auf der Sternwarte dazu, die auch in einer Achse motorisiert werden sollte.


    Ziel war also eine Steuerung, die an verschiedene Montierungen anpassbar ist und am Ende auch noch günstiger sein soll, als vergleichbare kommerzielle Lösungen.


    Mikrocontroller-Programmierung war kein Neuland für mich, aber mächtig eingerostet (war Teil des Studiums). Es bot sich daher an, sich mit dem Arduino vertraut zu machen. In meinem Fall ein Arduino-Nano. Zur leichteren Bedienung kommt ein 16x2 LC-Display zum Einsatz und als Treiber für den Schrittmotor dient eine Doppel-H Brücke mit einem L298. Soweit die technische Basis.


    Der Prototyp sah dann so aus:


    Also "Motor" dienten hier noch LED's zur Überprüfung der Ansteuerung. Die Programmierung hat mich deutlich länger beschäftigt, als geplant. Die Motorsteuerung war hierbei noch eins der einfacheren Probleme. Die Menüsteuerung hatte mich viel mehr geärgert.


    Letzte Woche war dann die Programmierung soweit abgeschlossen und ist über's Display konfigurierbar. Die Funktionen im Überblick:


    - Schneller Vor- und Rücklauf (Geschwindigkeit einstellbar)
    - Siderisch/Lunar/Solar-Geschwindigkeit
    - Begrenzung des Schnellaufes einstellbar 2...255fache Nachführgeschwindigkeit
    - Beschleunigung beim Schnellaufes einstellbar 1...9 (extrem gemächliche Beschleunigung - sehr schnelle Beschleunigung)
    - einstellbare Schrittfrequenz in Hz (der wohl wichtigste Parameter)
    - Schrittmodus: Vollschritt/Halbschritt


    (Weitere Bilder folgen in den nächsten Tagen)


    Das ist am Ende schon deutlich mehr, als die günstigen kommerziellen Nachführungen bieten. Ich hab's noch nicht die komplette Teileliste zusammengestellt, aber auch preislich dürfte ich drunter oder nur knapp über den kommerziellen 1-Achsen-Schrittmotor-Steuerungen sein.


    Aktuell kämpfe ich ein wenig mit den Schrittmotoren. Zum Test habe ich mir verschiedene Motoren bestellt (Nema 17). Alle versagen bei etwa im gleichen Frequenzbereich den Dienst (bei 30V etwa bei einer Schrittfrequenz von 1,3-1,5 kHz. - ca. 420 rpm). Höher als 35V wollte ich nicht gehen, damit das über ein kleines Steckernetzteil betreibbar bleibt.


    Beim Lidlscope ist mir der Schnellauf relativ egal, hier kann ich die Klemmen lösen und manuell Grobeinstellung vornehmen. Für die geplante Motorisierung der Sternwarten-Montierung ist das aber ein dickes Problem. Die RA-Achse ist fest mit dem Schneckenrad verbunden, kann also nur über den Motor bewegt werden. Bei der aktuellen Frequenz komme ich so auf ca. 40fache Nachführgeschwindigkeit - beim Umschwenken um 180° kommt da richtig Freude auf....dürften 18 Minuten sein.


    Hat jemand Erfahrungen mit Schrittmotoren und kann mir hier hilfreiche Tips geben?
    (Gibt es "Highspeed-Stepper" - die ins Budget passen?)
    Funktionieren andere Treiber (z.B. A4988, DRV8825) besser?
    Wie sieht es mit Alternativen und deren Ansteuerung aus (Servo, Gleichstrommotor)?
    Optimal wäre einen Bereich von 6-3000rpm.


    Gruß Stefan

  • Hallo Stefan,


    Es hat ja schon mehrere Anläufe auf verschiedenen Ebenen gegeben, eine Selbstbau-Steuerung zu verwirklichen. Einige davon sind durchaus praktisch einsetzbar.
    Nachdem der größte Aufwand heutzutage die Programmierung der Ansteuerung ist, macht das umso mehr Sinn, je größer die Anzahl der damit betriebenen Teleskope ist.


    Zu deinen Fragen:
    Ein Experte bin ich zwar auf dem Gebiet nicht, habe aber ein paar rudimentäre Erfahrungen mit Schrittmotoren.


    Hast Du die Tests mit dem "nackten" Schrittmotor ohne Last gemacht?
    Falls ja, könnten Schwingungstendenzen ein Problem sein. Dagegen hilft z.B. eine rotierende Masse an der Schrittmotorwelle. Das machen auch die Profis teils so.


    Für feine Auflösung und trotzdem hohe Maximalgeschwindigkeit benötigst Du wohl Mikroschrittbetrieb. Dazu ist aber komplexere Hardware erforderlich, die es allerdings auch schon fertig integriert auf IC-Ebene zu kaufen gibt. Womit aber der Kostenvorteil dahinschmilzt...


    Für Servobetrieb brauchst Du einen DC-Motor mit gutem Laufverhalten, einen Positionsgeber an der Achse, eine steuerbare Brückenstufe mit feiner Regelung per PWM, und einen richtig dimensionierten Regelkreis per Prozessor. Die Hardware ist da auch nicht das große Problem. Aber Du solltest von Steuerungs- und Regelungstechnik nicht nur schon mal was gehört haben, sonst kann ich mir vorstellen, dass das schnell eine frustrierende Probiererei wird.


    Ich persönlich lasse bisher trotz einschlägiger Ausbildung (FH-Ing E-Technik, Diplomarbeit für eine Antriebstechnik-Firma)die Finger vom Bau eines Montierungsantriebs, weil das schnell in ein eigenständiges Hobby ausarten kann. Nur im Geld zu sparen mach ich das ganz bestimmt nicht...


    Gruß,
    Martin

  • <blockquote id="quote"><font size="1" face="Verdana, Arial, Helvetica" id="quote">Zitat:<hr height="1" noshade id="quote">Funktionieren andere Treiber (z.B. A4988, DRV8825) besser?<hr height="1" noshade id="quote"></blockquote id="quote"></font id="quote">
    Hallo Stefan,


    nein, die Begrenzung der Geschwindigkeit dürfte mehr an der Schrittmotor-Induktivität liegen und weniger an den Treibern.
    Mit einem A4988 hatte ich je nach Motor und Last etwa 1-4 kHz erreicht.
    In manchen Schrittmotor-Datenblättern gibt es Angaben zur maximalen Geschwindigkeit.
    3000rpm sind für einen Schrittmotor sehr viel und wahrscheinlich kaum bezahlbar.


    Gruß, Ronny

  • Hallo Stefan,


    verwendest Du die Motoren ohne Untersetzungsgetriebe? Das dürfte in Bezug auf das Drehmoment eh kritisch werden und im Voll-/Halbschrittmodus auch zu deutlich sichtabren Schritten führen.


    Zum Treiben der Motoren würde ich einen Treiber wie den
    RAPS128 nehmen, der kann bis zu 1/128 Mikroschritt und die Ansteuerung vom Arduino aus ist recht einfach:


    http://max3dshop.org/index.php…-schrittmotortreiber.html


    Gruß
    Andreas

  • Hallo Stefan,


    im Rahmen der Auseinandersetzung mit einem Antrieb für eine EQ Plattform und durch Unterstützung eines Sternfreundes bei der Arduino-Motorisierung seiner Montierung habe ich auch ein wenig Erfahrung sammeln können, die Dir eventuell weiter helfen kann:


    Schrittmotore sind in der Regel gut geeignet für geringe Drehzahlen bei für die Motor-Baugröße (sehr) hohen Drehmomenten.


    Die praktische Drehzahlgrenze hängt direkt von der Speisespannung ab. Die Kennlinien zum Drehmomentverlauf über der Drehzahl geben hier eine gute Basis zur Abschätzung bei gegebener Versorgungsspannung. Wenn zum deinem Motor kein Datenblatt vorliegt, tut es auch eines von einem den Anschluss- und Leistungsdaten nach änlichen Motor eines anderen Herstellers.


    Für möglichst hohe Dynamik sollten Wicklungswiderstand und Induktivität möglichst gering sein. Der Treiber muss natürlich ausreichend stromstabil sein. Für hohe Drehzahlen muss die Spannung grob 10x höher als die Motor-Nennspannung sein. Das setzt natürlich eine stromgeregelte Endstufe voraus.


    Der Motor sollte außerdem nur so groß wie nötig dimensioniert sein. Gerade für hohe Drehzahlen sind größere Motoren meist nicht die bessere Wahl, da die Drehmomente hier mit steigender Drehzahl schneller einbrechen.



    Zu Deinem Setup:


    Die Getriebeübersetzung liegt bei ca
    400/min : 40/(24h * 60min/h)
    400/min : 40/1440min:
    1440 * 400 : 40
    14400 : 1


    Die Antriebs-Nenndrehzahl liegt also bei ca 10/min. Mit 32x Mikroschritt-Betrieb liegt der Nachführ-Schrittwinkel unter 0,015" und die typische 5% Vollschritt-Toleranz bei rund 0,02".


    Da, wie angesprochen, Drehzahlen &gt; 1000/min nicht ohne weiteres zu erreichen sind, kann bei geeigneter Motorauswahl ggf. ein Getriebe zur Erhöhung der Drehzahl vor dem Montierungsgetriebe helfen. Bei 1:5 kommt der gewünschte Drehzahlbereich in Reichweite und die Toleranzen (rechnerisch) sollten mit etwa 0,1" auch fotografisch akzeptabel sein.


    (Vermutlich wird ein NEMA17 für eine Sternwartenmontierung zu klein sein. Die stärksten mir bisher bekannten Versionen besitzen ein Halte-Drehmoment von etwa 0,5 Nm, das Bei Drehzahlen um 500x auf weniger als 0,2 Nm zurückgeht. Ggf. kann/sollte das erforderliche Drehmoment an der Montierung gemessen werden. Reserven für wechselndes Ungleichgewicht und zur Beschleunigung der System-Masse müssen ausreichend vorhanden sein - andernfalls kann der Motor "hängen bleiben".)


    CS
    Harold

  • Hallo,


    erst mal danke für die Links, werde ich mir am Wochenende anschauen.


    (==&gt;)Harold: Gut geschätzt. Empirisch ermittelt haben wir die Übersetzung mit 12840:1.


    Die Montierung wird nur visuell genutzt, bzw. fotografisch höchstens für Mond/Planeten. Da kommt dann unsere Neuerwerbung drauf (Klick hier). Die Montierung läuft absolut butterweich. Die Welle läßt sich mit dem kleinen Finger drehen. Wie sich das verhält, wenn das Teleskop drauf sitzt, bleibt natürlich abzuwarten. Ob der Motor dann reicht, muß die Praxis zeigen.


    Ich bin jetzt schon ein Stück weiter. Statt dem L298 habe ich mir ein DRV8825 zugelegt. Der kann bis zu 1/32 Schritt - vorher ging nur Voll oder Halbschritt. Den Code vom L298 auf den neuen Treiber umzuschreiben war nicht schwer. Jetzt schaffe ich im Vollschritt schon 57fach, bevor man hört, daß der Schritte verliert (bei 14 V - Lipo-Akku).
    Beim Halbschrittbetrieb komme ich auf 55fach. Darüber hinaus überfordere ich den Mikrocontroller, also Code optimieren und so viel wie möglich aus der Interrupt-Routine raus werfen. Ansatzpunkt habe ich, aber das bedeutet noch mal einen größeren Umbau im Programm - könnte sich aber lohnen.


    An Getriebe habe ich auch schon gedacht, läßt sich ggf. über ein Zahnriemen umsetzen - wobei dann der Motor auch entsprechend mehr Last hat.


    Gruß Stefan

  • Hallo Stefan,


    in meine Augen ist dein 16x2 LC-Display eine Bremse im Code.
    Bis du da etwas geschrieben hast vergehen wertvolle Millisekunden die du von der eigentliche Aufgabe (Schritte zählen) weg nimmst.


    Nur so neben bei, meine erste Arduino Steuerung war hier mehr oder weniger beschrieben.
    Schau dir dass mal an.


    http://www.astrotreff.de/topic…HIVE=true&TOPIC_ID=107031


    Die Treiberplatine für 2 Achsen L293D -&gt; 600mA 1000mA peek (2 Stck Piggyback Per Motor = 1200 mA)
    liegt bei mir noch herum.




    Meine neue Arduino Steuerung ist schon deutlich komplizierter, hat aber goto.



    Grüße
    Igor

  • Hallo,


    hier mal wieder ein Update.


    (==&gt;)Igor: Die Schrittsteuerung geschieht in einer timergesteuerten Interrupt-Routine, das Display wird im Main-Loop aktualisiert. Soll heißen, das Display bremst die Schrittmotorsteuerung nicht.


    Ich bin jetzt auf einen DRV8825 Treiber für den Schrittmotor gewechselt. Der erlaubt mir auch Mikroschritt-Betrieb, bis 1/32-Schritt (und ist auch einfacher anzusteuern). Der neue Treiber bringt einen mächtigen Gewinn! Beim Vollschritt ist bei ähnlichen (aber schon etwas höheren) Geschwindigkeiten Schluß. Im Halbschritt kommt er aber auf ca. die doppelte Geschwindigkeit (immer relativ zur Nachführgeschwindigkeit gerechnet).


    Jetzt war der Arduino wieder das Problem, daß die Schrittsteuerung nicht mehr hinterherkam. Ich hab da noch einiges optimiert. Den größten Gewinn hat der Verzicht von Float-Operationen gebracht. Durch den Wechsel auf Integer-Operationen (unter Inkaufnahme von Genauigkeitsverlust) erhielt ich schon alleine mehr als die doppelte (theoretische) Geschwindigkeit.


    Aktuell ist beim Halbschritt bei 110x Schluß (Motor setzt aus). Beim Viertelschritt komme ich auf 75x, bevor der Arduino wieder der limitierende Faktor wird.
    Durch Erhöhung der Spannung erreiche ich vielleicht noch 150x im Halbschrittbetrieb. Danach noch eine 1:2 oder 1:3 Übersetzung und ich erreiche angenehme Schwenkgeschwindigkeiten :)


    Hier mal ein kleines Video vom Prototypen


    Gruß Stefan

  • Hallo Stefan,


    du musst dein Motor belasten, sonst kommt er in eine Resonanz wo er dann schneller die Schritte verliert.
    Wenn du dein Motor belastest, dann ist dass doppelte an der Geschwindigkeit drin.


    Ich habe bei meine aktuelle Arduino Steuerung 128 Mikroschrittbetrieb.
    Dabei wechseln die Schritte ab bestimmte Geschwindigkeit automatisch auf vollschritt.
    Auf dem Tisch ohne Belastung habe ich die mit bis zu 500 x siderisch drehen können.
    Nach der einbau wo auch die Belastung von Harmonic Drive Getriebe gekommen ist, kann ich in DEC wo die kleinere Getriebe ist bis zu 1700 x siderisch drehen, und in RA wo die große Getriebe sitzt bis zu 1400 x siderisch.


    Ich habe die Harmonic Drive Getriebe mit 1:160 sowie noch ein Riemen mit 1:6 drin.
    Der Motor habe ich parallel angeschlossen um mehr Kraft zu haben.
    Die Float's benutze ich fast durchgängig.


    Grüße
    Igor


    Grüße
    Igor

  • Hallo Igor,


    an die dynamische Anpassung des Schrittmodus je nach Geschwindigkeit hatte ich auch schon gedacht. Damit läßt sich bei gegebener Frequenz eine höhere Geschwindigkeit erreichen, ohne den Rundlauf im Nachführbetrieb einzuschränken.


    Wenn ich das richtig gerechnet habe, hast du eine Untersetzung von 960:1 ...das gibt sehr moderate Schrittgeschwindigkeiten. Schau dir mal die Untersetzung unserer Montierung an - 12840:1.


    Wenn ich mich nicht verrechnet habe und ich annehme, daß die 1700x bei dir im Vollschrittbetrieb laufen, hast du eine Schrittfrequenz von etwa 3,8kHz - etwa in dem Bereich lagt ich mit Float Operationen auch (ca. 3,4kHz).


    Mit dem optimierten Code schaffe ich jetzt eine Schrittfrequenz von fast 10kHz....und heute früh unter der Dusche hatte ich noch eine Idee, wie sich das noch weiter optimieren läßt. Damit müßte ich 10kHz knacken können. Die hohe Frequenz brauche ich auch, da ich gegenüber deiner Montierung die 12fache Schrittfrequenz benötige.



    Wenn er mit Last schneller drehen kann, bin ich mal gespannt, wie weit ich dann noch komme. Jetzt wird das Ganze aber erst mal in ein schickes Gehäuse gepackt und dann an der Montierung getestet.


    Gruß Stefan

  • <blockquote id="quote"><font size="1" face="Verdana, Arial, Helvetica" id="quote">Zitat:<hr height="1" noshade id="quote"><i>Original erstellt von: MartinB</i>
    <br />Hallo Stefan,


    Es hat ja schon mehrere Anläufe auf verschiedenen Ebenen gegeben, eine Selbstbau-Steuerung zu verwirklichen. Einige davon sind durchaus praktisch einsetzbar.
    Nachdem der größte Aufwand heutzutage die Programmierung der Ansteuerung ist, macht das umso mehr Sinn, je größer die Anzahl der damit betriebenen Teleskope ist.


    Zu deinen Fragen:
    Ein Experte bin ich zwar auf dem Gebiet nicht, habe aber ein paar rudimentäre Erfahrungen mit Schrittmotoren.


    Hast Du die Tests mit dem "nackten" Schrittmotor ohne Last gemacht?
    Falls ja, könnten Schwingungstendenzen ein Problem sein. Dagegen hilft z.B. eine rotierende Masse an der Schrittmotorwelle. Das machen auch die Profis teils so.


    Für feine Auflösung und trotzdem hohe Maximalgeschwindigkeit benötigst Du wohl Mikroschrittbetrieb. Dazu ist aber komplexere Hardware erforderlich, die es allerdings auch schon fertig integriert auf IC-Ebene zu kaufen gibt. Womit aber der Kostenvorteil dahinschmilzt...


    Für Servobetrieb brauchst Du einen DC-Motor mit gutem Laufverhalten, einen Positionsgeber an der Achse, eine steuerbare Brückenstufe mit feiner Regelung per PWM, und einen richtig dimensionierten Regelkreis per Prozessor. Die Hardware ist da auch nicht das große Problem. Aber Du solltest von Steuerungs- und Regelungstechnik nicht nur schon mal was gehört haben, sonst kann ich mir vorstellen, dass das schnell eine frustrierende Probiererei wird.


    Ich persönlich lasse bisher trotz einschlägiger Ausbildung (FH-Ing E-Technik, Diplomarbeit für eine Antriebstechnik-Firma)die Finger vom Bau eines Montierungsantriebs, weil das schnell in ein eigenständiges Hobby ausarten kann. Nur im Geld zu sparen mach ich das ganz bestimmt nicht...


    Gruß,
    Martin




    <hr height="1" noshade id="quote"></blockquote id="quote"></font id="quote">


    Hi Martin,


    Deine Empfehlung mit einer "rotierenden" Masse auf der Achse eines Schrittmotors geht bereits in die richtige Richtung. Es genügt jedoch bereits eine auf der Achse dieses Motors <b>ELASTISCH </b>befestigte Masse, welche die überschüssige Rotationsenergie des Schrittmotors (Überschwingen) aufnimmt, mit 180° Phasenverschiebung wieder abgibt und somit neutralisiert.
    Habe dies bereits in den 80ern bei der Ansteuerung von Schrittmotoren samt Reflexionsgitter für die zeitlich schnelle spektrale Stabilisierung von CO2 Lasern besten einsetzen können. Nach Einfügen einer solchen parasitären Masse mit <b>HARTEM </b>Silikonschlauch zwischen Masse und Motorwelle gab es dort keinerlei Überschwinger mehr.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!