PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Schrittmotoren mit L297/L298 ansteuern



amal
08.07.2011, 16:53
hallo,
mein Frage ist:
Ein Schrittmotor soll 50 Schritte fahren,danach soll er dir Richtung ändern dann wieder 50 Schritte machen.Wie kann man die frequenz rechnen, womit der Motor drehen soll?


ISR (INT0_vect) //recht fahren
{
PORTB|=(1<<PB0); // Enable
PORTB|=(1<<PB1); // Richtung
for(int i=0,i<50,i++)
{
PORTB|=(1<<PB2) //Clock
_delay_us(x) // wie berechnet man die x damit der Motor sauber sich dreht
PORTB&=~(1<<PB2)
}
PORTB&=~(1<<PB0); // Enable löschen
}
ISR (INT1_vect) //"Mache viele Schritte"
{
PORTB|=(1<<PB0); // Enable
PORTB&=~(1<<PB1); // Richtung
for(int i=0,i<50,i++)
{
PORTB|=(1<<PB2) //Clock
_delay_us(x) // wie berechnet man die x damit der Motor sauber sich dreht
PORTB&=~(1<<PB2)
}
PORTB&=~(1<<PB0); // Enable löschen
}


wird das so funktioniern und wenn ja wie kann man die genaue Wartezeit x für _delay_us berechnen.

Geistesblitz
08.07.2011, 19:09
Ganz einfach: Wartezeit=1/Frequenz
Wenn du also 500Hz erzeugen willst musst du bis zum Umschalten 1/500Hz=2ms=2000µs warten.
Mit C-Programmierung bei µC kenn ich mich allerdings nicht so gut aus.

amal
12.07.2011, 12:32
hi, ich habe ein Formel bei Nanotec gefunden:
Md= P * z / 6.28 * f; (P = Leistung in W, z = Schritte/ Umdrehung, f = Frequenz in Hz) kann man damit frequenz berechnen?
wenn ich zb den Motor vom Typ(SH4009M0806) mit einer Spg von 6V und 0,8 A betreibe, dann habe ich eine Leistung von 4,8W dann ist die Frequenz: f = Md*6,28/P/z, jetzt kommt die frage wie berechnet man Z(Schritte Pro Umdrehung), mein Motor macht 400 Schritte pro Umdrehung, und ich will das der Motor nur 50 Schritte drehen soll. wie macht man das?

Geistesblitz
12.07.2011, 16:10
Du gehst an die Sache etwas falsch heran. Der Schrittmotor verhält sich ähnlich wie eine Synchronmaschine, will heißen die Drehzahl ist völlig unabhängig von der Leistung, solange er keine Schritte verliert. Du gibst ihm ja die Schritte mit der Impulsfrequenz vor, an die er sich auch richtet. Je mehr Leistung du draufschaltest desto höher wird das Moment, welches er erzeugt, allerdings beschleunigt er dann nicht, sondern kann einfach nur mehr Kraft übertragen. Die Drehzahl wird von der Pulsfrequenz des Ansteuersignals vorgegeben. Wenn jetzt zB. am Takteingang des L297 im Wechsel je 100ms Low und 100ms High anliegen, dann bewegt sich der Motor alle 200ms um einen Schritt weiter. Mehr gibts da eigentlich nicht zu verstehen. Dann musst du es im µC nur noch so Programmieren, dass er genau 50 Impulse sendet und schon hat es sich erledigt. Die Frequenz und somit die Geschwindigkeit ergibt sich aus den Wartezeiten zwischen den Impulsen.
In Pseudocode:

Wiederhole 50 Mal:
setze Ausgang high
warte Wartezeit
setze Ausgang low

Die Drehzahl ist dann Schritte/Umdrehung geteilt durch die Wartezeit

amal
12.07.2011, 16:58
danke für die Erklärung