PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Schrittmotor Rampen für Rn Stepp 297



Jake2010
05.03.2010, 09:38
Hallo zusammen,

nachdem ich mich nach diesem Thread (https://www.roboternetz.de/phpBB2/viewtopic.php?t=52076) für einen Schrittmotor für meine Regelung entschieden habe, bin ich jetzt dabei, dem Motor das Drehen beizubringen.

Ich möchte jetzt zunächst für die Ansteuerung des Motors Beschleunigungs- und Bremsrampen programmieren (GCC). RN Control gibt das Taktsignal an RN Stepp 297 weiter. Durch diese beiden Quellen habe ich mir erstmal ein Grundverständnis für die Rampenprogrammierung angelesen:

1. http://www.embedded.com/columns/technicalinsights/56800129?_requestid=56271
2. http://www.atmel.com/dyn/resources/prod_documents/doc8017.pdf

Die Application Note 446 von Atmel ist schon recht gut. In der gezeigten Anwendung wird jedoch nur beschrieben, wie Beschleunigungs- und Bremsprofile mit vorher festgelegten Schrittzahlen gefahren werden können. In meiner Anwendung ist die absolute Schrittzahl vorher aber nicht bekannt. Ich möchte also nur die Änderung der Geschwindigkeit in den Rampen angeben, die erreichte Geschwindigkeit soll danach einfach beibehalten werden.

Zur Zeit habe ich nur einfache Rampen programmiert, wobei der Timerwert mit einem festen Wert in- bzw. dekrementiert wird.


ISR (TIMER1_COMPA_vect)
{
if (OCR1A != Sollwert)
{
if (OCR1A > Sollwert)
{
TIM16_AddOCR1A(-10);
}

if (OCR1A < Sollwert)
{
TIM16_AddOCR1A(10);
}
}
}

Ich würde allerdings gerne lineare Beschleunigungsrampen benutzen. Der Motor soll gegenwärtig bis max. 150 Steps/s machen können (Halbschritte).

Mir ist leider noch nicht klar, wie ich die Taktsignale als Rampen berechnen kann, ohne die Schrittzahlen angeben zu müssen. Ich würde gerne so schnell wie möglich beschleunigen/bremsen auf einen variablen Sollwert.

Hat jemand vielleicht schon Erfahrungen bei dieser Problematik?

Schönen Gruß,
Jake

Peter1060
05.03.2010, 11:20
moin moin,

bei meiner Fräse fahre ich mit einer sin^2 Rampe, linear hat Sprünge in der Beschleunigungskurve. Anbei mal eine Exceltabelle zur Verdeutlichung.

Mit Gruß
Peter

Besserwessi
05.03.2010, 12:08
So wie das Programm ist, kreigt man etwa ein Quadratische Beschleunigung. Wenn der Motor schon langsam ist, wird auch nur langsam erhöht.

Für eine lineare Rampe müßte man die Schrittweite um die die OCR Werte geändert werden von der Zeit abhängig machen die seit dem letzten Aufrzf vergangen ist - das ist gerade der Wert im OCR register. Also die Schrittweite proportional zum Wert im OCR register:
Man muß dann nur noch etwas am Ende aufpassen, da kann ein kleinerer Schritt nötig sein.

Peter1060
05.03.2010, 12:31
wie soll bei einer linearen Rampe der Übergang von der Rampe zum linearen teil der Bewegung erfolgen? Einfach von Rampe auf linear umschalten ist ein Sprung in der Beschleunigungskurve.

>>da kann ein kleinerer Schritt nötig sein
das Problem habe ich nicht.

Besserwessi
05.03.2010, 15:03
Wenn man den Wert fürs OCR Register schrittweise (nach Schritt) erniedreigt, bzw. erhöht, kann es halt passieren das man am Ende einen Etwas kleineren Schritt machen muß weil man sonst nicht auf die dann vorgegeben Geschwindigkeit kommt. Durch die ungleichen intervalle kann man sich nicht darauf verlassen immer in einem Festen Raster zu bleiben.
Für die Funktion ist das keinerlei Problem, man muß nur beim programmieren dran denken.

Wenn man eine Lineare Beschleunigung haben will, gibts einen harten Übergang von konstanter Beschleunugung auf konstante Geschwindigkeit.
Einen besonders weichen lauf kreigt man damit nicht, vor allem wenn es in Mechnik Umkehrspiel gibt.

Peter1060
05.03.2010, 15:17
>>einen Etwas kleineren Schritt

wie bitte ist der kleine Schritt definiert???

Wenn man mit solchen unscharfen Hilfsmitteln arbeiten muss, taugt der Algorithmus nichts.