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


von CS (Gast)


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

von Flip B. (frickelfreak)


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

von Spess53 (Gast)


Lesenswert?

Hi

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

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

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

MfG Spess

von Hein G. (Gast)


Lesenswert?

Das hat mir geholfen:

http://www.eetimes.com/design/embedded/4006438/Generate-stepper-motor-speed-profiles-in-real-time

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


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.

von eProfi (Gast)


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.

von Wissender (Gast)


Lesenswert?

>Hört sich einfach toll an, ...

Also ich höre nichts.

von Peter (Gast)


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/4210291/Motor-c) 
für einen AVR portiert hat.

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

Grüße Peter

von Klis Tier (Gast)


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.

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.