PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Schrittmotor verliert Schritte



bcs
07.08.2010, 16:23
Ich steuere mit einem ATMega16 und dem RN-STEP297 den größeren Schrittmotor von robotikhardware.de an.

Pulsfolge für Schrittmotorsteuerung wird per Timer Overflow Interrupt ausgelöst.

Problem: Bei langsamer Fahrt, wird eine Zielposition (ohne mech. Last) nicht so genau erreicht, wie bei schnellerer Fahrt.

Die Geschwindigkeit wird geändert, indem der Vorteiler des Timers TCCR0 zwischen 5 (langsam) und 1 (schnell) geändert wird.

TheDarkRose
07.08.2010, 16:47
Fährst du Halbschritt oder Vollschritt?

bcs
07.08.2010, 17:45
Beides. Die Drehgeschwindigkeit ist ja eine Funktion von Halbschritt / Vollschritt und dem Takt. Ich kombiniere beides zu unterschiedlichen Geschwindigkeiten. Mein Eindruck: Halbschritt funktioniert besser.

Ich hatte einige Kombinationen aus obigen zwei Größen (recht langsam), wo der Zähler ganz vergißt, hochzuzählen und sich der Motor infolgedessen permanent dreht.

So zähle ich (GROSSGESCHRIEBENE Wörter sind define Aliase der Ports etc.):


// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{

M1DIRECTION=m1_direction; // Drehrichtung

// Einen Schritt gehen
M1STEP=0;
delay_us(1);
M1STEP=1;
delay_us(1);

// Schritt jetzt zählen
if (m1_direction == ENGINE_RIGHT)
M1_stepcounter=M1_stepcounter+1;
if (m1_direction == ENGINE_LEFT)
M1_stepcounter=M1_stepcounter-1;

}