Hallo, die Frage ist mir etwas peinlich, aber ich weiß nicht mehr weiter. Im Anhang ein kleines Progtramm, welches über eine Timer-Routine den Schrittmotor mit 1Umdr./sek. dreht. Ich benutze einen AVR ATMEGA8A mit int. 8MHz Takt. Ich möchte nun den Motor in Teilschritten 1/8, 1/4, 1/2....2 Umdrehungen drehen lassen, danach das Ganze zurück. Hat einer eine Idee dazu? Vielen dank für eine Hilfe ! Christoph
Hi
>Hat einer eine Idee dazu?
Erkläre erst mal welchen Schrittmotor du womit ansteuerst.
MfG Spess
Sorry, hatte ich vergessen. Habe das MK2 von MyAVR zusammen mit dem RN-Stepp297 Treiber. Der Motor (zum experimentieren):Sanyo Denki 103-547-52500.
Christoph M. schrieb: > Ich möchte nun den Motor in Teilschritten 1/8, 1/4, 1/2....2 Umdrehungen > drehen lassen Haste Du auch mal die Beschreibung RN-Stepp297 gelesen? "Pin 5 H/F (Halb- oder Vollschritt, Pullup vorhanden)" Ausser Voll und Halbschritt geht da nichts. Da kann jeder 5 Euro China Stepper Driver mehr.
:
Bearbeitet durch User
Hatte mich wohl falsch ausgedrückt. Ich möchte den Motor nicht in Teilschritten, sondern in Teilumdrehungen drehen lassen. Also 1/2 Umdrehung vor und danach 1/2 Umdrehung zurück. Mir geht es hier mehr um die Art der programmierung in Bascon. Besten Dank schon mal für die Hinweise ! MfG Christoph
Christoph Maass schrieb: > Ich möchte den Motor nicht in > Teilschritten, sondern in Teilumdrehungen drehen lassen. > Also 1/2 Umdrehung vor und danach 1/2 Umdrehung zurück. Schau ins Datenblatt wieviel Schritte der Stepper-Motor für eine Umdrehung braucht, bei den meisten sind es 200 Vollschritte. Also für eine halbe Umdrehung 100 Pulse an den Driver schicken. Für halbe Umdrehung zurück das selbe, aber am CW/CCW Pin des Drivers den Pegel ändern (High/Low). Bei Halbschrittbetrieb entsprechend jeweils 200 Pulse. Die Frequenz der Pulse (oder zeitlicher Abstand der Pulse) bestimmt die Geschwindigkeit mit der sich der Stepper dreht. Für die ersten Versuche würde ich es bei max. 500 Steps pro Sekunde belassen (Timer passend konfigurieren), das machen die meisten Stepper Motore ohne Schrittverlust mit. Wenn Du mal irgendwann weiter im Erkentnisstand fortgeschritten bist, kannst Du Dich ja mal über Beschleunigungsrampen schlau machen. Du benutzt als Pulsdauer 1 us was für viele Driver Boards schon etwas knapp ist. So 5 bis 10 us wären besser. Über die Erzeugung des Puls-Delay mittels wait lass ich mich jetzt nicht weiter aus, ist für den Anfang schon OK :)
:
Bearbeitet durch User
Albert M. schrieb: > Über die Erzeugung des > Puls-Delay mittels wait lass ich mich jetzt nicht weiter aus, ist für > den Anfang schon OK :) Solange kein Interrupt verwendet wird, sollte es gehen.
wern_grün schrieb: > Solange kein Interrupt verwendet wird, sollte es gehen. Hättest Du seinen Code angeschaut, wäre Dir aufgefallen dass er Timer0 Interrupt benutzt. Ist aber egal, da bei ihm ja nichts anderes dazwischen funken kann und die wenigen us in seinem wait nichts behindern.
:
Bearbeitet durch User
Christoph Maass schrieb: > Mir geht es hier mehr um die Art der programmierung in Bascon. Was Albert dir mitteilen will, das ist, dass du da wohl eine Variable brauchen wirst, in der du mitzählst wieviele Schritte du an den Motor ausgegeben hast. Und wenn diese Schrittzahl erreicht ist, dann kannst du zb die Drehrichtung umschalten oder ganz einfach nichts weiter tun oder .... was immer du in deinem Programm benötigst. Im Moment generierst du einen Schritt, wann immer der Timer mitteilt, dass es wieder mal Zeit wäre. Du generierst den Schritt immer. Das musst du eben ändern. Zum Beispiel indem du mitzählst (in einer Variablen) wieviele Schritte schon generiert wurden oder indem du eine Variable von einer gewissen Anzahl bis auf 0 herunterzählst. Wie auch immer, ist die gesuchte Anzahl an Schritten erreicht, dann unterbindest du in der Timer Routine zum Beispiel ganz einfach die Schrittgenerierung.
1 | DIM Schritte As Byte |
2 | |
3 | |
4 | .... |
5 | |
6 | |
7 | Timer_irq: |
8 | Timer0 = Timervorgabe 'Interrupt-Routine |
9 | |
10 | Schritte = Schritte + 1 |
11 | |
12 | if Schritte < 200 then |
13 | |
14 | Stepper_takt = 0 : Waitus 1 : Stepper_takt = 1 'Taktsignal für Motor |
15 | |
16 | endif |
17 | |
18 | Return |
Das ist jetzt nur ein Beispiel. Du baust das natürlich so aus, wie du das brauchst.
:
Bearbeitet durch User
Klasse ! Das hat mir wirklich weitergeholfen !!! Ich wollte auch nix über irgendwelche Rampen usw. wissen, sondern eine Anregung zum programmieren erhalten. Vielen Dank für die Anregung ! MfG Christoph
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.