Hallo zusammen Ich habe hier einen schrittmotor und würde diesen gerne mit einer Rampe anfahren lassen. Ich habe einen Timerinterrupt alle 50uS = 20KHz Eine Maximalgeschwindigkeit in diesem Beispiel von 100mm/s Pro mm benötigt der Motor 50steps Eine Beschleunigung von 20mm/s2 Nun weiss ich ja, dass ich in 5s von 0mm/s auf 100mm/s beschleunigen muss. Meine Rampe dauert also 5s In meinem Timerinterrupt zähle ich eine Variable hoch. Wenn diese einen bestimmten wert erreich hat, dann mache ich einen Step. Nun habe ich die AppNote von AVR gefunden AVR446 http://www.atmel.com/Images/doc8017.pdf Darin gibt es die notwendigen Formeln welche ich angehängt habe. Leider ist für mich nicht ganz klar, womit ich diese Gleichungen füllen soll. Die letzten beiden Gleichungen sind ja für mich relevant. n ist wohl die anzahl schritte die bereits gemacht wurden? Die frage ist jedoch noch, wass ist eta t? Ich wäre sehr froh, wenn mir jemand hierbei etwas weiterhelfen könnte und eventuell ein kurzes Beispiel mit den obigen Angaben machen könnte. Danke schonmal
Holger K. schrieb: > Die letzten beiden Gleichungen sind ja für mich relevant. > n ist wohl die anzahl schritte die bereits gemacht wurden? > Die frage ist jedoch noch, wass ist eta t? Ich sehe da kein eta t (AVR446, 5.2 Inter-step delay, S.14). Oder wo stehen bei dir die "letzten beiden Gleichungen"
Wolfgang A. schrieb: > Ich sehe da kein eta t Sorry das war ein delta t kein eta. Beim Bild Stepper2 in der rechten Geleichung steht delta t. Was soll ich hier einsetzen?
Holger K. schrieb: > Was soll ich hier einsetzen? Da die Gleichung die Winkelgeschwindigkeit beschreibt und alpha der Schrittwinkel ist, muss delta t die Zeit zwischen zwei Schritten sein.
Wolfgang A. schrieb: > Holger K. schrieb: >> Was soll ich hier einsetzen? > > Da die Gleichung die Winkelgeschwindigkeit beschreibt und alpha der > Schrittwinkel ist, muss delta t die Zeit zwischen zwei Schritten sein. Ist damit die Zeit zwischen meinen Interrupts gemeint also 50uS oder die zeit zwischen den STEP Pulsen? Wenn es die Zeit zwischen den Steppulsen ist, dann weiss ich diese ja garnicht, da ich diese ja berechnen muss.
Die Appnote bezieht sich auf eine rotatorische Bewegung, du möchtest aber offensichtlich eine lineare Bewegung erzeugen. Also musst du alle winkelspezifischen Größen durch die entsprechenden Weggrößen ersetzen: Winkelbeschleunigung ώ -> Beschleunigung a (= 20 mm/s²) Winkelschrittweite α -> Wegschrittweite s (= 1 / (50 mm¯¹) = 0.02 mm) tt ist das Timerintervall (= 1 / 20 kHz = 50 µs). n ist der Schrittzähler, der beim Start der Rampe auf 0 gesetzt und mit jedem Schritt um 1 erhöht wird. Wegen der Rundungsfehler darfst du aber nicht erwarten, dass die Beschleunigung perfekt konstant ist und die Endgeschwindigkeit nach genau nach 5 s erreicht wird. Diesem Ideal kommst du näher, wenn du nicht wie in der Appnote die Dauern der einzelnen Schritte berechnest und anschließend rundest, sondern indem du die absoluten Zeitpunkte für die Schritte berechnest und rundest und dann erst die Differenzen (d.h. die Dauern der einzelnen Schritte) bildest. Allerdings bilden dann die Schrittdauern keine monotone Folge mehr, was – zumindest theoretisch – zu einem unrunderen Lauf des Motors führt. In der Praxis wird dieser unrunde Lauf vermutlich durch die Massenträgheit weitgehend ausgeglichen, könnte aber evtl. zu seltsamen Geräusche führen.
Vielen Dank für deine Antwort Wenn ich das richtig verstehe, dann würde ich dies nun so einsetzen:
Wäre dies korrekt? Hab es mal berechnet. Ergibt 894 Delays. Also nach 894counts gibt es einen puls. Führt man zu beginn bereits einen Puls durch und dann nach 894Counts nochmals oder erst nach 894 Counts?
Anbei noch ein Excel welches die erste Formel für C0 anwendet und eine welche die weiteren Schritte berechnet. Ich nehmen mal an, dass ich im C-Programm selbst schauen muss, wann ich den topspeed erreicht habe? Also nach jedem schritt eine kontrolle ob istgeschwindigkeit >= sollgeschwindigkeit ist? Die berechneten Delays scheinen ziemlich plausibel zu sein.
Funktioniert perfekt! Vielen Dank euch allen! Anbei das neue Excel mit etwas mehr funktionen.
Holger K. schrieb: > Eine Maximalgeschwindigkeit in diesem Beispiel von 100mm/s > Pro mm benötigt der Motor 50steps Das entspräche einer Schrittfrequenz von 5kHz. Dafür brauchst du vor allem reichlich Spannung, damit noch Strom fliesst, denn die Gegen-EMK solcher Motore ist erheblich.
nachtmix schrieb: > Holger K. schrieb: >> Eine Maximalgeschwindigkeit in diesem Beispiel von 100mm/s >> Pro mm benötigt der Motor 50steps > > Das entspräche einer Schrittfrequenz von 5kHz. > Dafür brauchst du vor allem reichlich Spannung, damit noch Strom > fliesst, denn die Gegen-EMK solcher Motore ist erheblich. Mommentan versorge ich den Motor mit 12V ich könnte aber bis 30V gehen. Wäre vermutlich besser, damit der Strom in der Induktivität schneller ansteigt. Oder was meinst du?
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.

