PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bestimmte Anzahl von Schritten fahren/ansteuern?



N8Surfer
20.09.2006, 12:19
Hallo alle miteinander,

ich möchte mit meinem Controller eine bestimmte Anzahl von Schritten ausgeben, die mein Schrittmotor
drehen soll. Bisher sieht das ganze wie folgt aus:

AVR erzeugt PWM mit 16-Bit Timer (mega8535, PWM an OCR1A und OCR1B) die an den Clock von
zwei L297 gehen. Interessant wird das ganze, da ich bis zu 30000 Schritte kontrollieren muss, und dann auch
möglichst exakt abschalten will.

Hat da jemand eine Idee, wie ich das machen kann? Wie wird das ganze bei dem rn-motor realisiert?

vielen dank für eure antworten.

grüßle

Flo

PicNick
20.09.2006, 14:11
PWM scheint mir für Schrittmotoren (L297) nicht notwendig. Ich mach sowas immer mit irgendeinem Timer, der die Schritte auslöst und auf einen beliebig großen Zähler draufaddiert. Diesen Zähler kann man dann natürlich auch mit einem Sollwert vergleichen.

N8Surfer
20.09.2006, 14:48
also was anderes mach ich auch nicht, als mit einem timer ein clocksignal zu erzeugen, bei halt pwm,
mit dem klaren vorteil dass das pwm-modul im hintergrund läuft.

wenn ich nun nach jedem schritt das register vergleiche bekomm ich meiner ansicht nach das problem, dass ich nur noch in interrupts hänge
und während ich fahre dann nix mehr machen kann ausser fahren, oder? und wie sieht das dann aus,
wenn ich 2 motoren gleichzeitig fahren will?

grüßle

Flo

PicNick
20.09.2006, 14:56
Ich weiß nicht, welche Stepper du verwendest, bei meinen konnt ich maximal ~1000 Steps/sekunde machen. Da hab ich bei 8MHZ 8000 zyklen zeit von einem Step zum nächsten. da bleibt Zeit genug.

N8Surfer
20.09.2006, 20:08
hm, jo die rechnung mag stimmen, jedoch habe ich 2 motoren synchron laufen (1. interrupt konflikt) greife zwischendurch auf ein eeprom zu (sollte wohl besser net unterbrochen werden).
wenn ich da zwischendurch interrupt disable, verpass ich evtl. schritt.

also wenn jemand ncoh eine andere lösung weiss, wäre ich recht dankbar.


grüßle

Flo

N8Surfer
22.09.2006, 06:32
hat sich erledig.

ceekay
22.09.2006, 09:18
hallo,

mich würde interessieren wie du das jetzt gemacht hast?
Ich habe derzeit das gleiche Problem. Ich habe abhängig von der Schrittgeschwindigkeit einen Timer Interrupt auslösen lassen. In dieser Interrupt Routine habe ich dann den Schritt generiert, anschließend eine Variable hoch gezählt und mit dem Sollwert veglichen. Dadurch bin ich schonmal sicher dass ich keinen Schritt zu viel oder zu wenig mache.
Nur funktioniert das ganze nur bei kleineren Schrittfrequenzen. Bei einer Interruptfrequenz von 5 khz. hab ich Probleme bekommen.
Das Problem ist auch das der Controller auch noch andere Sachen zu tun hat.
Vielleicht sollte man für die Schrittmotoransteuerung einen weiteren Controller verwenden.

N8Surfer
22.09.2006, 09:34
hi ceekay,

also mein plan sieht etz so aus:

clock über 8bit timer pwm, frequenzbereich reicht mir. die impulse zähle ich über den t1 eingang,
vom 16bit timer (nötig bei mir, da bis zu 32000 schritte benötigt werden), und lasse das ganze mit der compare-unit vergleichen.

das heisst dann: nur noch 1 interrupt.


grüßle

Flo