Forum: Mikrocontroller und Digitale Elektronik BASCOM Schrittmotor Ansteuerung


von Christoph M. (Gast)


Angehängte Dateien:

Lesenswert?

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

von spess53 (Gast)


Lesenswert?

Hi

>Hat einer eine Idee dazu?

Erkläre erst mal welchen Schrittmotor du womit ansteuerst.

MfG Spess

von Christoph M. (Gast)


Lesenswert?

Sorry, hatte ich vergessen.

Habe das MK2 von MyAVR zusammen mit dem RN-Stepp297 Treiber.

Der Motor (zum experimentieren):Sanyo Denki 103-547-52500.

von Albert M. (Firma: Bastler aus Mönchengladbach) (albertm) Benutzerseite


Lesenswert?

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
von Christoph Maass (Gast)


Lesenswert?

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

von Albert M. (Firma: Bastler aus Mönchengladbach) (albertm) Benutzerseite


Lesenswert?

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
von wern_grün (Gast)


Lesenswert?

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.

von Albert M. (Firma: Bastler aus Mönchengladbach) (albertm) Benutzerseite


Lesenswert?

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
von Karl H. (kbuchegg)


Lesenswert?

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
von Christoph Maass (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.