Schrittmotor-Rampen

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

Reply to
Thomas Finke
Loading thread data ...

Welchen Eingang hat deine Motorendstufe?

--
Mfg
Thomas Pototschnig
 Click to see the full signature
Reply to
Thomas Pototschnig

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.

--
Mfg
Thomas Pototschnig
 Click to see the full signature
Reply to
Thomas Pototschnig

"Thomas Finke" schrieb im Newsbeitrag news: snipped-for-privacy@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/
 Click to see the full signature
Reply to
MaWin

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

formatting link

Reply to
Joerg

Thomas Finke schrieb:

Das Internet hält dazu einiges an Informationen bereit, u.a. diese:

(incl. einige Links zu weiteren Seiten)

--
Dipl.-Ing. Tilmann Reh
http://www.autometer.de - Elektronik nach Maß.
Reply to
Tilmann Reh

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

Reply to
Michael Dreschmann

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

Gruss, Michael

Reply to
Michael Dreschmann

Hi!

formatting link

Gruß, Michael.

Reply to
Michael Eggert

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.

Reply to
Jürgen Veith

snipped-for-privacy@t-online.de (Jürgen Veith) am 31.01.06:

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
 Click to see the full signature
Reply to
Rainer Knaepper

Yup:

formatting link
formatting link

cu Michael

--
Some people have no repect of age unless it is bottled.
Reply to
Michael Schwingen

Am 3 Feb 2006 08:20:16 GMT schrieb Michael Schwingen :

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
Reply to
Martin

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.