Forum: Mikrocontroller und Digitale Elektronik Hilfe bei Mathe für Berechnung von Delays


von Holger K. (holgerkraehe)


Angehängte Dateien:

Lesenswert?

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

von Wolfgang A. (Gast)


Lesenswert?

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"

von Holger K. (holgerkraehe)


Lesenswert?

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?

von Wolfgang A. (Gast)


Lesenswert?

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.

von Holger K. (holgerkraehe)


Lesenswert?

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.

von Yalu X. (yalu) (Moderator)


Lesenswert?

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.

von Holger K. (holgerkraehe)


Lesenswert?

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?

von Holger K. (holgerkraehe)


Angehängte Dateien:

Lesenswert?

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.

von Holger K. (holgerkraehe)


Angehängte Dateien:

Lesenswert?

Funktioniert perfekt! Vielen Dank euch allen!

Anbei das neue Excel mit etwas mehr funktionen.

von nachtmix (Gast)


Lesenswert?

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.

von Holger K. (holgerkraehe)


Lesenswert?

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
Noch kein Account? Hier anmelden.