www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Schrittmotor-Rampen in C berechnen??


Autor: CS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich steuere einen Schrittmotor mit einem Timerinterrupt an. Ich gebe die 
Schrittzahl und eine 8Bit Zahl für die Geschwindigkeit an die Routine.

Nun möchte ich aber den Schrittmotor mit Rampen anfahren und bremsen 
lassen. Wie kann ich die Rampen berechnen??

Es könnte ja z.B. sein, dass ich nur ein paar wenige Schritte habe wo 
die max. Geschwindigkeit gar nicht erreicht wird, und vorher schon 
wieder gebremst werden soll.

Hat jemand Tipps, wie ich da rangehe??

Gruss

Autor: Flip B. (frickelfreak)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
der rampenrutine wird ein sollwert übergeben, auf den die 
schrittgeschwindigkeit langsam zuläft. soll  doch früher gebremst werde, 
muss das auch signalisiert werden

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

AVR446: Linear speed control of stepper motor on tinyAVR and megaAVR 
devices

http://www.atmel.com/dyn/resources/prod_documents/...

http://www.atmel.com/dyn/resources/prod_documents/AVR446.zip

MfG Spess

Autor: Hein G. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das hat mir geholfen:

http://www.eetimes.com/design/embedded/4006438/Gen...

Hier kannste ein Demo-Codeschnipsel runterladen:
http://www.eetimes.com/design/embedded/source-code...


Mit einem Mega2560@14.7456 MHz steuere ich 4x IMT901 an, mit 
Rampenberechnung zur Laufzeit also keine Tabelle. Befehle kommen über 
UART-IRQ rein. Funzt für langsame bis mittlere Geschwindigkeit mit 4 
Motoren gleichzeitig ganz gut. Für schnelle Bewegungen habe ich die 
Berechnung durch eine Tabelle ersetzt. Die Bewegung ist nicht ganz so 
"smooth" aber erfüllt ihren Zweck.

Autor: eProfi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei linearer Beschleunigung steigt die Geschwindigkeit=Frequenz 
proportional mit der vergangenen Zeit. D.h. proportional zu der Summe 
aller bisherigen Timer-Werte, die eine Step-IRQ ausgelöst haben.

Die Zeit bis zum nächsten Timerinterrupt berechnet sich zu:
newtimer=konst1/(timersumme+=oldtimer);oldtimer=newtimer;

Man startet aber i.d.R. nicht mit 0 Hz, sondern mit einer Startfrequenz 
im Bereich von 400 - 2000 Hz, je nach Qualität von Motor und Treiber, 
Höhe der Vcc und der mechanischen Last (Trägheitsmoment).


Andere Vorgehensweise:
In meiner aktuellen DDS-Version erzeuge ich die beiden Phasenstromwerte 
aus einer sin- und aus einer cos-Lookup-Table:
Phase1=sinTab[index=highword(istpos+=speed+=accel)&127};
Phase2=cosTab[index];

Wenn ich an einem bestimmten Punkt halten will, begrenze ich speed auf 
einen zum Abstand proportionalen Wert.

if(abs(speed)>abs(sollpos-istpos)){speed=konst2*(sollpos-istpos);}

Damit wird speed genau 0, wenn ich am Ziel angekommen bin.
Die Drehrichtung ist das Vorzeichen von speed, Beschleunigung / 
Verzögerung ergibt sich aus dem Vorzeichen von accel.

Hört sich einfach toll an, wenn der Motor innerhalb von wenigen 
Umdrehungen absolut linear von der max. neg. Geschwindigkeit auf max. 
pos. Geschwindkeit (bei mir 3000 rpm) beschleunigt.

Autor: Wissender (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Hört sich einfach toll an, ...

Also ich höre nichts.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich beschäftige mich auch gerade mit der Erstellung eines 
Schrittmotorcontrollers. Daher würde mich interessieren, ob schon jemand 
den Code von David 
Austin(http://www.eetimes.com/design/embedded/source-code...) 
für einen AVR portiert hat.

Wenn ja würde ich mich über Ansätze freuen.

Grüße Peter

Autor: Klis Tier (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Peter

Simen Svale Skogsrud hat ein C-Project realisiert, in dem er mit einem 
ATmega168 / ATmega 328 (16MHz) die drei Vektoren einer CNC-Fräse 
steuert(Arduino).
Es interpretiert ein paar Grundbefehle der G-Code Steuersprache, so wie 
sie z.B. auch von Eagle oder SPrint(Isolationsfräsen) exportiert werden 
können.
Das Video ist hier zu finden:
http://dank.bengler.no/-/page/show/5470_grbl?ref=mst
Es ist ein Open Source Projekt, der Sourcecode ist hier zu finden:
https://github.com/simen/grbl
Hieraus kann man viel über das Ansteuern von Schrittmotoren lernen - 
Timer, Rampen etc.
Habe das mal nachgebaut mit dem pollin Evaluation Board und 
Stepper(end)stufen mit dem L297 und L298 - mehr braucht man nicht.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.