so, ich komme nicht mehr weiter. hoffentlich kann mir jemand helfen: ich bewege mit einem schrittmotor eine kleine mechanik. Diese soll in mm (und 0.1mm) Schritten bewegt werden. Jetzt ist leider die Anzahl der Schritte des Schrittmotors für einen mm nicht ganzzahlig durch 10 teilbar. in meinem fall sind es 214.4xxxxx schritte. Der Schrittmotot wird hierbei schon im 1/8 Schritt angesteuert (per IMT 901), was für das bewegen auch tadellos funktioniert. Jetzt kann ich dem IMT nur ganze Takte anbieten und die Mechanik würde sich nicht ganz 1 mm bewegen. Ähnlich sieht es für 0.1mm aus, das wären dann 21.44xxxx Schritte. Es gehen halt nur ganzzahlige Takte als Schrittimpulse und somit geht Information verloren. Ich habe folgendes asuprobiert: Den Fehler, bei 1.0mm = 0.4, aufzuaddieren und wenn er größer 1 wird zu den Schrittimpulsen einer zuaddiert. Dies funktioniert nur bedingt, denn es handelt sich bei der Berechnung der Position wieder um Kommazahlen und irgendwann springt die Stelle einen Wert weiter und es steht im Display nicht mehr x.10 sondern x.11 (oder x.99). Da ja schrittmotoren des öfteren hier behandelt werden und wurden muß dies doch auch schon mal jemanden beschäftigt haben. danke fürs antowrten. tino
Rein mechanisches "Problem". Ein 1.8° Motor, mit 1/8 Schritten angesteuert, ergibt an einer Welle mit 1mm Steigung eine (theoretische) Positionierauflösung von 625nm. Für 0.1mm sind es exakt 160 Schritte. Jede CNC Maschine arbeitet nach diesem Prinzip, warum nicht auch Deine "kleine Mechanik"?
genau, bei einer Steigung von 1600 Schritten / mm stimmt das. Ich habe aber durch eine etwas andere Mechanik (drehbewegung wírd in linearbewegung umgewandelt) 214.4xxx Schritte / mm. Das ist leider nur durch einen Mechanikumbau zu ändern, der aber nicht möglich ist. Ich habe ab er immer noch keine zündende Idee...
Kannst du da mit den Microsteps nichts machen? Das is wirklich blöd mit der Linearführung/Steigung bei dir.
Um eine Anpassung der Mechanik wirst Du wohl nicht herumkommen. Selbst die 0.225°, bei Achtelschrittsteuerung, sind rein akademisch. Nur ein paar µm mehr Abstand, Luft oder Metall im Motor und der Schritt bei 45° ist doppelt so groß wie bei 30°. Die mechanische Auflösung sollte mindestens 1/10 der geforderten Toleranz betragen (mal etwas platt formuliert). Differentielle Nichtlinearitäten gibts nicht nur bei ADCs oder DACs, nein, auch bei Schrittmotoren. Aber, reichen denn Deine ~21 Schritte pro ~0.1mm nicht? Sind doch nur ~4.8% Fehler... ;-))
Erst muss die Mechanik die Aufloesung dann auch bringen... In einer idealen Welt, mit reibungsfreier Mechanik mit belibig genauen Oberflaechen koennte man auch noch eine Schnecke an den Schrittmotor bauen. In der realen Welt ist man mit einer Umlaufspindel und einem Schrittmotor zufrieden. Sonst gibt es dann noch Piezoantriebe..
ja, da habe ich dann wohl mit der auslegung der mechanik geschlampert. ist es denn immer so, daß die steigung 1 mm beträgt oder so ausgelegt wird? dann ist das alles ziemlich einfach zu rechnen! die Toleranzen des Systems lass ich hier in der rechnung einfach mal weg, ist in diesem Anwendungsfall nicht ganz so wichtig und auch mein erstes Projekt dahingehend. der fehler von 4,8% ist an sich nicht hoch, aber er tritt ja bei allen 0,1 schritten aus. Also wenn ich dem System sage mache 10 x 0.1mm, sind das knapp 40 schritte die fehlen. In summe dann knapp 0.2mm Fehler. Wenn ich dagegen mit einem mal 1mm bewege ist der fehler nur die 0.4 Schritte. Bewege ich mit 0.05, verdoppelt sich der Fehler da er ja aufsummiert wird... Alles ziemlich kompliziert... Trotzdem jemand eine Idee???
Wenn ich Dich richtig verstehe ist das hier kein Problem mangelnder Auflösung sondern des Algorythmus. Du kannst z.B. für jede Position die Anzahl Schritte ab einem definierten Ursprung berechnen. Wenn Du nun in Deinem Programm noch die Schritte vom Ursprung bis zu aktuellen Position speicherst muss Du nun nur noch eine Differenz bilden.....
Rechnet man mit 214 Schritten pro mm statt 214,4 ... so liegt der Fehler unter 0,2%. Die ist bei jeder Strecke der gleiche prozentuale Fehler und nicht 4.8%. Nach 5mm addiert man zwei Schritte und erhält somit im Schnitt 214,4 Schritte. u.s.w. Der Fehler liegt unter den Bauteilabweichungen, als kannst du ihn vergessen. B.
>>> Ich habe folgendes asuprobiert: Den Fehler, bei >>> 1.0mm = 0.4, aufzuaddieren und wenn er größer 1 wird zu den >>> Schrittimpulsen einer zuaddiert. Diese Denkweise kommt von einem Herrn Bresenham: http://de.wikipedia.org/wiki/Bresenham-Algorithmus >>> Dies funktioniert nur bedingt, denn es handelt sich bei der Berechnung >>> der Position wieder um Kommazahlen Ich würde hier meine Koordinaten in µm in Long-Werten rechnen. Dann braucht es dazu keinerlei Fließkommazahlen, die übrigens auch nur 6-7 signifikante Stellen haben... >>> und irgendwann springt die Stelle einen Wert weiter und es steht >>> im Display nicht mehr x.10 sondern x.11 (oder x.99). Du könntest mit 21 Schritten pro 100um auf 4,7 µm auflösen. Da sollte eine solche Falschanzeige eigentlich nicht passieren...
1 | #define PM_PER_STEP 4664179UL // Ausreichend genau: Picometer?
|
2 | unsigned long akt_pos; // in um |
3 | long fehler; // in pm |
4 | |
5 | if (Step) { |
6 | if (Richtung==HOCH) { |
7 | akt_pos += 5; |
8 | fehler += PM_PER_STEP-5000000UL; |
9 | }
|
10 | else { |
11 | akt_pos -= 5; |
12 | fehler -= PM_PER_STEP-5000000UL; |
13 | }
|
14 | }
|
15 | if (fehler>500000) { |
16 | akt_pos += 1; |
17 | fehler -= 1000000; |
18 | }
|
19 | if (fehler<-500000) { |
20 | akt_pos -= 1; |
21 | fehler += 1000000; |
22 | }
|
Danke vielmals an alle. Das ich hier den Herrn Bresenham nachahmen wollte ist ja toll. Jetzt habe ich auch gleich noch was gelernt. Zum Problem selber habe ich den Lösungsvorschlag von Sebel De Tutti umgesetzt. Das funktioniert echt super! Einfach die Schritte für die auktuelle Koordinate in mm berechnen und dann von den letzten Schritten abziehen. Damit ist der Fehler immer nur max. 1 Schritt auf die aktuelle Position gesehen. Perfekt! Der Sinn des ganzen ist die Fokussteuerung von meinem neuen Teleskop. Dieser muß im 0.1 mm Bereich eingestellt werden. Mal sehen wie gut es klappt wenn ich hier fertig bin... Danke, Tino
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.