ich habe hier einen Schrittmotor mit dazugehöriger Leistungsstufe.
Nun kommen die Steuersignale (Richtung, Takt,...) von einem AVR und
dieser soll nun auch die Beschleunigungs- / Bremsrampe liefern.
Hat mir hier jemand nützliche Infos dazu? Einmal zur Festlegung der
Rampen und zum anderen wie man diese Softwareroutinen am besten
realisiert (also wie man sie aufbaut)?
Danke,
Thomas
Ich würde das Ganze mit 2 Timern probieren.
Der eine Timer erzeugt die Frequenz für den Takt. Im
Output-Compare-Register für den Timer den Wert entsprechend eintragen,
dass du beim voreingestellten Prescaler die gewünschte Frequenz kriegst.
Eine gleichmäßige lineare Rampe könntest du erreichen, in dem du einen
zweiten Timer verwendest, der in einer bestimmten Frequenz einen
Interrupt auslöst, in dem dann das Output-Compare-Register bis zu einem
bestimmten Maximalwert/Minimalwert inkrementiert/dekrementiert wird.
Wenn die Rampe nicht linear sein darf, dann müsste man die Werte einer
nicht-linearen Rampe in einer Tabelle im Flash ablegen und die dann zum
erhöhen/erniedrigen des 1sten Zählers verwenden.
Ein Rechenbeispiel: Takt 8Mhz, Prescaler Timer1 :1024, Timerfrequenz:
7812,5Hz
Bsp: Wenn du von 1Hz (=7812) auf 1000Hz (=78) innerhalb von 250ms
beschleunigen willst, müsstest du z.B. den Timerinterrupt auf 32,3µs
einstellen, wenn du immer um 1 dekrementieren willst. (250ms/(7812-78))
Oder auf 323µs wenn du um 10 dekrementierst usw. 323µs*((7812-78)/10) =
250ms. Bei einem Prescaler von :64 beim zweiten Timer würde man dann
für die 323µs einen Compare-Wert von 40 einstellen. Man würde dann den
zum dekrementieren aufhören, wenn man entweder 773 Interrupts hatte,
oder einfach wenn man den gewünschten Wert erreicht hat.
Ich hoffe ich hab mich jetzt da nicht allzu sehr vertan und es ist
irgendwie verständlich.
Schon zu finden im Floppy-Disk-Controller-Code des alten APPLE ][
der konnte noch, was hinterher bei IBM in Vergessenheit geraten ist.
Einfache Physik: BESCHLEUNIGUNG glaich halten, Geschwindigkeit ergibt
sich dann, zum Abbremsen negative Beschleunigung.
--
Manfred Winterhoff, reply-to invalid, use mawin at gmx dot net
homepage: http://www.geocities.com/mwinterhoff/
de.sci.electronics FAQ: http://dse-faq.elektronik-kompendium.de/
Read 'Art of Electronics' Horowitz/Hill before you ask.
Lese 'Hohe Schule der Elektronik 1+2' bevor du fragst.
Bin kein Firmware Spezialist, aber habe schon mal Schrittmotoren mit uC
angesteuert (jemand anders codierte dann alles). Es kommt entscheidend
darauf an, was an der Welle des Motors haengt. Wenn man die Rampen zu
steil setzt, kommt der Motor aus dem Tritt (step skipping).
Ein wenig Drehmomentrechnung und danach die Steilheiten festlegen. Im
Prinzip ist es nichts anderes als eine in der Frequenz an- oder
abschwellende Pulsfolge. Das kann etnweder ueber Timer geschehen (war
bei uns wie so ueblich natuerlich keiner mehr frei) oder per Software Loop.
Gruesse, Joerg
Das Internet hält dazu einiges an Informationen bereit, u.a. diese:
<http://www.cs.uiowa.edu/~jones/step/>
(incl. einige Links zu weiteren Seiten)
--
Dipl.-Ing. Tilmann Reh
http://www.autometer.de - Elektronik nach Maß.
>Hat mir hier jemand nützliche Infos dazu? Einmal zur Festlegung der
>Rampen und zum anderen wie man diese Softwareroutinen am besten
>realisiert (also wie man sie aufbaut)?
Hallo,
ich hab sowas auch mal in nem AVR in Assembler implementiert und dafür
einen Algorithmus vorher in Pascal getestet der von einer aktuellen
Position auf eine Sollposition fährt, mit Beschl. bzw. Abbremsen.
Der (pascal) Algorithmus hatte aber glaub ich irgendwo noch nen
kleinen Fehler, so dass er am Ziel manchmal leich "überschwingt" und
dann wieder zwei Schritte oder so zurückkorrigiert. Die Art der
Beschleunigung (bzw. die Zeit bis zum nächsten Step bei aktueller
Geschwindigkeit kann man über eine Funktion definieren).
Gruss,
Michael
Ahso, wenn das nich rausgekommen sein sollte: Den Code würde ich dir
bei Interesse schicken ;)
Gruss,
Michael
Hi!
>Beschleunigungs- / Bremsrampe
http://embedded.com/showArticle.jhtml?articleID=56800129
Gruß,
Michael.
Die Tabelle selbst erzeuge ich mir mit einem kleinen C Programm als Include
File. Beim Beschleunigen und Bremsen schiebe ich den Zeiger dann halt
andersrum - oft reicht schon ein 8 bit Zeiger. Bei Fahrstrecken die länger
als 2 Rampen sind, wird die Endgeschwindigkeit nicht erreicht und die Rampe
entsprechend gekürzt. Bei Fahrstrecken die länger als 2 Rampen sind, wird
eine konstante Fahrt mit n Schritten dazwischen geschoben - fertig.
Vorteil: Wenig Rechenzeitbelastung, Nachteil: Die Beschleunigung kann zur
Laufzeit nicht verstellt werden, bzw. benötigt dann mehrere abgelegte
Kurven. Andererseits kann aber auch leicht eine Sinuskurve zur sanften
Beschleunigung oder 2D Interpolationen für mehrere Achsen abgelegt werden.
>Andererseits kann aber auch leicht eine Sinuskurve
>zur sanften Beschleunigung oder 2D Interpolationen für mehrere
>Achsen abgelegt werden.
So kann man mit dem Schrittmotor auch Musik machen.
Rainer (der mal einen Vorteiler falsch eingestellt hatte und so auf
/etwas/ hohe Frequenzen kam)
--
Bei guten (Tele-) Konvertern leert sich Deine Kasse stark. Bei
schlechten natürlich viel weniger, weil Du nie auf die Idee
kommen wirst, die Resultate auszudrucken.
(Uwe Ohse in de.alt.rec.digitalfotografie)
>So kann man mit dem Schrittmotor auch Musik machen.
Yup:
http://hardware.slashdot.org/article.pl?sid=06/01/09/1413257
http://www.unf-unf.de/show1008.html
cu
Michael
--
Some people have no repect of age unless it is bottled.
> In article <9n2jL...@smial.prima.de>,
> Rainer Knaepper <rai...@smial.prima.de> wrote:
>
>> So kann man mit dem Schrittmotor auch Musik machen.
>
> Yup:
> http://hardware.slashdot.org/article.pl?sid=06/01/09/1413257
> http://www.unf-unf.de/show1008.html
>
Das funktionierte doch schon mitte der 80er Jahre des vorigen Jahrhunderts
mit dem Kopfstepper der Commodore 1541 (für alle dies nicht (mehr) wissen:
Die Floppy zum C64).
--
Martin