PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie sende ich Schrittimpulse? (Anfänger)



Hcds
13.06.2013, 18:49
Hi,
ich nenne 2 Schrittmotoren und 2 passende Treiber mein eigen (Daten siehe unten).
Außerdem verwende ich als Microcontroller einen BeagleBoard BeagleBone Black Mini-Pc mit Linux.
Die Motortreiber habe ich nach Schaltplan mit dem Treiber verbunden. Außerdem bekommt der Treiber 5V bzw. 12 V für die Motoren.
Dass alles richtig angeschlossen ist, sollte sich daraus ergeben, dass der Motor im jetzigen Zustand ca. 1.8 A zieht und auch hält (richtig konfiguiert sollte er also eigentlich sein).

Jetzt meine Frage:
An welchen Eingang meines Beagleboards verbinde ich mit dem Step-Kontakt am Stepper?
Kann ich hierzu einfach einen digital/analog Input wählen oder muss das ein PWM tauglicher sein?
Und wie sende ich Schrittimpulse an den Controller. Ist dazu ein spezieller Treiber nötig, oder kann ich über Linux z.B. mit einem einfachen Bash-Skript die Ausgänge ansteuern?
Das Prinzip ist mir noch nicht ganz klar, obwohl ich mich schon den ganzen Tag weiter in das Prinzip eingelesen habe - leider ist so gut wie alles auf englisch.

#################################
Schrittmotor:
Technische Daten
Haltemoment : 1,0 Nm bipolar - 4 Anschlusskabel
Phasen : 2
Phasenstrom : 2,0 A / 3,6 V
Schrittwinkel : 1,8°
Maße:B=56mm, H=56mm, L=56mm,
Welle d=6,35 /20mm
Gewicht 0,7 kg

A4988 Pololu Black Edition
http://www.pololu.com/file/0J450/a4988_DMOS_microstepping_driver_with_translator.pd f

Beagleboard BeagleBone Black:
http://www.produktinfo.conrad.com/datenblaetter/400000-424999/409907-an-01-en-Reference_Manual_Beaglebone_Black.pdf

Hubert.G
14.06.2013, 08:24
Es ist kein Treiber notwendig, die Schrittimpulse können direkt aus einem digitalen Ausgang kommen.

Hcds
14.06.2013, 09:40
Es ist kein Treiber notwendig, die Schrittimpulse können direkt aus einem digitalen Ausgang kommen.

Danke für deine Antwort. :)
Das hört sich gut an - nur habe ich momentan noch kein Vorstellung wie man so etwas realisiert.
Theoretisch sollte ein Bash Skript ja auch ersmal funktionieren, da man die Ausgänge über Linux einfach ansteuern kann -
mit C++ hätte ich aber auch kein Problem.

Gibt es irgendwo ein Beispiel (einen Programmcode in irgendeiner Sprache), wie man diese Impulse programmiertechnisch an einen digitalen Ausgang zum Step-Pin des Motorrtreibers senden kann?

Hubert.G
14.06.2013, 09:56
Da kann ich dir leider nicht helfen, bin nur bei den 8bit AVR Zuhause.
Aber an sich brauchst du ja nur den Ausgang zu toggeln.

Hcds
14.06.2013, 10:44
Schade, vielleicht meldet sich ja noch jemand...

Hcds
14.06.2013, 13:51
Falls es jemanden interessiert, ich habe jetzt das C++ Programm von Derek Molloy verwendet (bezieht sich eigentlich auf den EasyDriver Motortreiber aber das sollte ja nichts machen...) ich hab das Programm auch für 16-tel Schritte angepasst.
http://www.youtube.com/watch?v=gqrjtB2cmu8
Es ist wirklich so, dass dort einfach nur in einer Schleife einzelne Step-Signale gesendet werden und das je nachdem, wie weit sich der Motor drehen soll....

Aber jetzt hat sich ein neues Problem ergeben:
Leider erzielt das bei meinem Stepper kein schönes Ergebnis, er dreht sich zwar bei den einzelnen großen Schritten ganz leicht, aber es ist eher ein Zucken... Hatte jemand dieses Problem schon?
Kann es daran liegen, dass er mehr als 12 V braucht? Es ist ja leider ein ziemlich starker Motor (siehe oben)! Genug Ampere sollte er ziehen...
Oder kann es sein, dass die Spulen falsch angeschlossen worden sind?

indeas
14.06.2013, 14:31
Ich denke nicht, dass die Spannung das Problem ist, das macht sich erst bei höhren Drehzahlen bemerkbar.
Überprüfe mal ob die Spulen korrekt angeschlossen sind. Zwischen OUT1A und OUT1B sowie zwischen OUT2A und OUT2B solltest Du den Spulenwiderstand (= Fast Kurzschluss) messen. Beide Spulen dürfen untereinander keine Verbinung haben.
Kannst Du die Ströme durch beiden Spulen anschauen? Die sollten sinusförmig sein (so wie auf dem Datenblatt dargestellt). Hilfsweise kannst Du ja die Spannung an den Sense Eingängen anschauen.

Ostermann
14.06.2013, 15:26
Ich würde mal vermuten, dass die Referenzspannung (einstellbar über das Poti auf dem Pololu) viel zu niedrig eingestellt ist und damit der Motorstrom entsprechend klein ausfällt. Das damit erzeugte Moment reicht dann u.U. nicht, um das Rastmoment des Motors plus der externen Last zu überwinden.

Mit freundlichen Grüßen
Thorsten Ostermann

Hcds
14.06.2013, 22:21
Ich denke nicht, dass die Spannung das Problem ist, das macht sich erst bei höhren Drehzahlen bemerkbar.
Überprüfe mal ob die Spulen korrekt angeschlossen sind. Zwischen OUT1A und OUT1B sowie zwischen OUT2A und OUT2B solltest Du den Spulenwiderstand (= Fast Kurzschluss) messen. Beide Spulen dürfen untereinander keine Verbinung haben.
Kannst Du die Ströme durch beiden Spulen anschauen? Die sollten sinusförmig sein (so wie auf dem Datenblatt dargestellt). Hilfsweise kannst Du ja die Spannung an den Sense Eingängen anschauen.

Gibt es Erfahrungswerte, wie groß der Strom bei 1NM Steppmotoren sein muss?
Der Controller lässt leider nur maximal 2 Ampere zu.

avancel
15.06.2013, 10:10
Hallo,
hast du mal mit der Geschwindigkeit, also dem delay zwischen den Schritten herum gespielt?
Ist dieser zu niedrig gewählt kann es da auch dazu kommen, dass nur ein "zucken" entsteht.

Hcds
15.06.2013, 11:36
Hallo,
hast du mal mit der Geschwindigkeit, also dem delay zwischen den Schritten herum gespielt?
Ist dieser zu niedrig gewählt kann es da auch dazu kommen, dass nur ein "zucken" entsteht.

Ja ich habe den Wert gerade rauf & runter (z.B. sogar auf 1 Sekunde) verstellt.
Leider ohne Erfolg...:(
Mir ist aber noch etwas aufgefallen:

Der Motor bekommt ab und zu mal einen Step in eine Richtung hin, allerdings sind das maximal vielleicht 30°, dann auf einmal
aber wieder in die entgegensgesetzte Richtung, ohne dass ich den Richtungswert auf dem Output geändert habe...
Das ist wirklich mehr als merkwürdig und ich vermute deshalb, dass der Motor evlt. wirklich zu wenig Strom bekommt.

UPDATE:
Ich habe die Spulen jetzt auch nochmal an alle möglichen Kontakte angeschlossen, so wie sie jetzt dran sind hält der Motor und empfängt die Signale ja auch... mit der anderen Kombination läuft gar nichts. - Das sollte also okay sein.
Problem besteht leider weiterhin... :(

indeas
17.06.2013, 07:50
Hast Du den A4988 auf einem fertigen Board oder Dir selber etwas gebastelt?
Wie stellst Du den Strangstrom ein / wie groß ist Dein Vref?
Wenn der Stepper im Leerlauf ist, brauchst Du nur ein paar mA.
Der Hiinweis auf die Geschwindigkeit ist gut: zu schnell ist nichts - starte mal mit einem Wert von 50ms pro Schritt.
Hast Du ein Oszi?

Hcds
17.06.2013, 13:52
Der ist auf dem fertigen Board, d.h. da kann eigentlich nichts schief gegangen sein.
VRef liegt bei 5V, die bekommt der Controller auch über den Microcontroller bzw. den Beaglebone.

50ms habe ich versucht, hat leider nichts gebracht.
Leider kein Oszi da. :(

Was ist denn der Strangstrom?
Also ich hab den Poti auf dem Board so eingestellt, dass der Strom bei ca. 1.8 A liegt.

indeas
17.06.2013, 14:55
Strangstrom = Strom durch die Spule (es gibt beim bipolaren Stepper 2 Spulen); siehe mein erster Kommentar auf das Thema.
Mit der Spannung am Vref stellt man den Strangstrom ein. Stelle den Strom runter (z.B. auf 200mA), vielleicht geht Dein 12V Netzteil in die Knie?
Sind die anderen Pins wie DIR, MS1, MS2, MS3, SLEEP, /RESET, /ENABLE korrekt verbunden (entweder High oder Low, aber nicht offen)?
Es könnte ein offener Pin sein.

Hcds
08.07.2013, 23:04
Das Problem lag daran, dass der Beaglebone Black es durch einen neuen Kernel nicht mehr so einfach ermöglicht, dass einzelne Pin Modes so umgestellt werden, dass die Pins als Outputs Pins dienen. Ich bin mittlerweile auf den Rasbperry PI umgestiegen (das Geld gabs zurück :)).

Danke für eure Antworten.