Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Schrittmotor-Rampen

40 views
Skip to first unread message

Thomas Finke

unread,
Jan 29, 2006, 2:35:47 PM1/29/06
to
Hallo,

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

Thomas Pototschnig

unread,
Jan 29, 2006, 2:48:12 PM1/29/06
to

Welchen Eingang hat deine Motorendstufe?

--
Mfg
Thomas Pototschnig
www.oxed.de

Message has been deleted

Thomas Pototschnig

unread,
Jan 29, 2006, 3:27:14 PM1/29/06
to

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.

MaWin

unread,
Jan 29, 2006, 3:49:20 PM1/29/06
to
"Thomas Finke" <finke....@gmx.de> schrieb im Newsbeitrag
news:f36qt1tarj208b5of...@4ax.com...

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.


Joerg

unread,
Jan 29, 2006, 4:33:27 PM1/29/06
to
Hallo Thomas,

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

http://www.analogconsultants.com

Tilmann Reh

unread,
Jan 30, 2006, 2:08:20 AM1/30/06
to
Thomas Finke schrieb:

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ß.

Michael Dreschmann

unread,
Jan 30, 2006, 10:22:09 AM1/30/06
to
On Sun, 29 Jan 2006 20:35:47 +0100, Thomas Finke <finke....@gmx.de>
wrote:

>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

Michael Dreschmann

unread,
Jan 30, 2006, 12:10:13 PM1/30/06
to
On Mon, 30 Jan 2006 15:22:09 GMT, micha...@gmx.de (Michael
Dreschmann) wrote:

Ahso, wenn das nich rausgekommen sein sollte: Den Code würde ich dir
bei Interesse schicken ;)

Gruss,
Michael

Michael Eggert

unread,
Jan 30, 2006, 6:29:18 PM1/30/06
to
Thomas Finke <finke....@gmx.de> wrote:

Hi!

>Beschleunigungs- / Bremsrampe

http://embedded.com/showArticle.jhtml?articleID=56800129

Gruß,
Michael.

Jürgen Veith

unread,
Jan 31, 2006, 3:25:05 PM1/31/06
to
habe sowas schon in verschiedenen Assemblern (aber nicht PIC und nicht AVR)
geschrieben. Ein Timer zählt rückwärts und löst bei Null einen Interrupt
aus. In der ISR wird dann das Motor Taktsignal ausgegeben und der Timer mit
einem neuen Wert geladen. Dieser kommt aus einer Tabelle mit fixer Länge wo
ein Zeiger drüber geschoben wird.

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.

Rainer Knaepper

unread,
Jan 31, 2006, 6:49:00 PM1/31/06
to
ja...@t-online.de (Jürgen Veith) am 31.01.06:

>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)

Michael Schwingen

unread,
Feb 3, 2006, 3:20:16 AM2/3/06
to
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

cu
Michael
--
Some people have no repect of age unless it is bottled.

Martin

unread,
Feb 7, 2006, 5:55:36 PM2/7/06
to
Am 3 Feb 2006 08:20:16 GMT schrieb Michael Schwingen
<news-11...@discworld.dascon.de>:

> 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

0 new messages