PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Schrittmotorsteuerung mit L297/l298 und Raspberry Pi



PeterPro
27.01.2014, 18:07
Moin,

ersteinmal muss ich sagen, dass mir diese Community sehr gut gefällt und wirklich hilfreich ist!!!!
Ich bin neu hier und habe auch schon gleich ein paar Fragen.
Um erstmal in die Materie der Computersteuerung reinzukommen und da mir gerade ein Raspberry Pi zur Verfügung steht, plane ich derzeit einen einfachen Stiftplotter mit 3 Achsen.
Die Schrittmotorsteuerung und die Steuerung mit dem Raspberry Pi stellen mich aber vor einige Probleme.
Ich habe mich schon näher damit befasst und auch die Seiten hier im Forum dazu gelesen, aber mir mangelt es ein wenig an Elektronikwissen.

Also Ziel soll es sein einen Schrittmotortreiber selbst zusammenzulöten und diesen dann mit dem Raspberry Pi zu verbinden.
Zum vereinfachen meiner Probleme habe ich mal eine Skizze angefertigt und die Anschlüsse soweit ergänzt, wie ich es verstanden habe (oder auch nich :) ) :

27337

Die Schaltung der Steuerung an sich ist eigentlich erstmal halbwegs nachvollziebar aber dazu einige Fragen:
-In der Schaltung sind eine ganze Menge GND Anschlüsse, die wie ich vermute entweder an den Minus-Pol des Netzteils oder an die Ground_Pins des Raspberry Pi angeschlossen werden. Nur welche woran?

-Kann man die Anschlüsse auch alle parallel schalten, wie in der Skizze Rechts unten?

-Ist es egal welchen GPIO ich mit z.B. CW/CCW (Pin 17) verbinde solange er richtig Programmiert ist oder haben die GPIO Pins auch spezifischere Funktionen?
-Was passiert physikalisch gesehen, wenn ich durch entsprechende Programmierung ein GPIO Pin in den High- bzw. Low-Zustand versetze?

-Und schlussendlich: Ist es hardwaretechnisch überhaupt möglich drei Schrittmotortreiber mit dem Raspberry Pi zu betreiben oder benötige ich dazu mehr GPIO Anschlüsse?

Schön wäre es noch, wenn ich mit euere Hilfe meine Skizze soweit ergänzen könnte, dass zumindest die theoretische Verkabelung von allen Komponenten wie der Raspberry Pi, der schrittmotortreiber, das netzteil und der Motor vollständig und korrekt wäre.

Es tut mir leid, wenn ich meinen Thread falsch plaziert haben sollte, aber ich wusste nicht so recht ob alle Fragen im Raspberry Pi Forum so gut aufgehoben wären. Und Elektronik is ja numal alles ;)

Danke schonmal im Vorraus

Mfg
PeterPro

Thegon
27.01.2014, 19:55
Hallo Peter,

zu deinen Fragen:

-In der Schaltung sind eine ganze Menge GND Anschlüsse, die wie ich vermute entweder an den Minus-Pol des Netzteils oder an die Ground_Pins des Raspberry Pi (http://www.rn-wissen.de/index.php/Embedded_Linux_Einstieg_leicht_gemacht) angeschlossen werden. Nur welche woran?

-Kann man die Anschlüsse auch alle parallel schalten, wie in der Skizze Rechts unten?
Ja, die Masseanschlüsse muss man alle zusammenschalten auf einen gemeinsamen Massepunkt, wie in deiner Skizze.


-Ist es egal welchen GPIO ich mit z.B. CW/CCW (Pin 17) verbinde solange er richtig Programmiert ist oder haben die GPIO Pins auch spezifischere Funktionen?
Soweit ich weiß sind gewisse GPIO´s schon mit Funktionen vorbelegt, z.B. Pin 8 u. 10 mit UART. Andere sind frei davon (z.B. 17, 27...) Man kann die Funktionen aber glaub ich auch ausschalten, und die Pins dann anderweitig nutzen.
Aber das wissen viele andere hier besser als ich.


-Was passiert physikalisch gesehen, wenn ich durch entsprechende Programmierung ein GPIO Pin in den High- bzw. Low-Zustand versetze?
Wenn der Pin im High - Zustand ist, dann liegen an ihm (gemessen gegenüber Masse des RPi) 3,3V an. Man darf einen Strom von glaub ich 20mA oder so nicht überschreiten, sonst geht der Pin kaputt!
Im Low - Zustand liegen dann 0V an.


-Und schlussendlich: Ist es hardwaretechnisch überhaupt möglich drei Schrittmotortreiber mit dem Raspberry Pi (http://www.rn-wissen.de/index.php/Embedded_Linux_Einstieg_leicht_gemacht) zu betreiben oder benötige ich dazu mehr GPIO Anschlüsse?
Im Prinzip braucht man zur Ansteuerung eines Motors ja nur zwei Pins (Takt und Richtung), also bei drei Motoren 6 Pins, und die hast du ja allemal, also ist es hardwaretechnisch wohl möglich.

Sachen wie ob z.B. Halbschritt oder Vollschritt gemacht werden soll (klar was das ist?), kannst du gleich direkt (per Draht) einstellen (Pin 19 am L297), oder einen Schalter einbauen, das muss ja der Pi nicht machen.

Laut Datenblatt kannst du die GPIOs vom Raspberry direkt mit dem L297 verbinden, weil der RPi macht bei einem High 3,3V, und der L297 wertet alle Spannungen größer 2V als High.
Es schadet denke ich nicht, wenn du in die Leitungen noch einen Widerstand (z.b. 1kOhm) einschleifst, weil wenn du versehentlich einen Kurzschluss baust, dann sind die Pins nicht gleich tot.

Welche Pins du jetzt am besten verbindest weiß ich nicht, vielleicht gibt es welche die sich aufgrund der Programmierung besonders gut eignen?

Hoffentlich hilft das ein bisschen ;-)

Grüße
Thegon

Geistesblitz
27.01.2014, 20:50
Ich würde für die Ansteuerung von 3 Motoren 7 Pins vorsehen: 3x Richtung (CW/CCW), 3x Taktsignal (CLOCK) und 1x Enable, um die Motoren zwischendurch auch stromlos schalten zu können, das spart Energie und die Motoren haben Zeit sich wieder abzukühlen (Schrittmotoren werden gerne mal heiß).

Pins wie Reset und Control müsstest du enteder auf Low oder High festlöten (im Zweifelsfall mit Schalter), welches genau musst du im Datenblatt nachschlagen. Mit der Sync-Leitung kannst du alle L297 miteinander verbinden, nur einer braucht dann den Oszillator am Osc-Pin. Bei mir hatte das allerdings nicht funktioniert, daher musst du es wohl einfach ausprobieren. Home kannst du unverbunden lassen.

Warum willst du einen Ploter eigentlich mit 3 vollständigen Achsen bauen? Der Stift braucht doch nur zwei positionen anfahren können (oben, unten), da würde schon etwas einfacheres reichen wie zB. ein Servo oder ein Elektromagnet.

Wichtig: alle Gnd-Leitungen müssen miteinander verbunden sein, sowohl auch mit dem Gnd vom Pi als auch mit dem Gnd von der Versorgungsspannung des L298 (dein Minuspol vom Netzteil). Achte bitte darauf, dass dein Netzteil die auftretenden Ströme verträgt und die L298 am besten mit einem Kühlkörper ausgestattet werden, bei mir wurden die immer ganz schön heiß.

PeterPro
27.01.2014, 21:24
Danke für die guten Antworten :)

Der Plotter bekommt 3 Achsen, da er nachher evtl. umgerüstet werden soll auf eine Fräse, Laser oder ähnliches. Der Stift ist für den Anfang nur schön unkompliziert da er keine Stromversorgung etc. benötigt.

Okay, also alle GND's an einen Ground Pin vom Raspberry und an das Netzteil oder an alle Ground Pins vom PI? Masse hab ich noch nie wirklich verstanden..
Sind denn meine Aufzeichnungen auf der Skizze erstmal korrekt so? Also die 5V für die Stromversorgung durch den PI usw.?

Was meinst du, Geistesblitz, mit " auf High oder Low festlöten bzw. was wie geht das ohne den Raspberry, Thegon?

Was Machen denn der Sync Pins? Kann ich nicht drei separate Schrittmotortreiber benutzen die unabhägig voneinander laufen?

Achja, warum brauche ich von dem Enable nur einen? Schließlich laufen die Motoren ja nicht immer gleichzeitg sondern versetzt und haben andere "Pausenzeiten".

Mfg
PeterPro

Geistesblitz
27.01.2014, 22:23
5V Spannungsversorgung vom Pi für die Logik ist völlig in Ordnung.

Masse ist ganz einfach: alles, was Masse ist, wird zusammengelötet. Mehr gibts da nicht zu verstehen, das ist das Potential, zu dem jedes Bauteil seine Spannung in Bezug setzt. Wird das mal vergessen, schwebt die Spannung irgendwo unkontrollierbar herum und die Schaltung verhält sich recht unberechenbar. Es ist quasi sowas wie der feste, gerade Boden, von dem aus man zuverlässig messen kann.

Lies mal das Datenblatt (http://www.farnell.com/datasheets/1696835.pdf), da steht drin, was die Pins bei einem High- oder Low-Signal machen. Je nachdem, welche Funktion die erfüllen sollen, lötest du den Pin an die 5V-Leitung (5V) oder an Gnd. Beispielsweise würde man den Reset-Pin auf High (5V) löten, damit der nicht die Schrittfolge zurücksetzen kann, das wäre im Betrieb fatal. Den Pin braucht man eh nur für die wenigsten Anwendungen. Control sollte man glaub ich auch auf High setzen, da guck ich aber lieber vorher nochmal genauer nach, bevor ich mich verzettel.

Die Sync-Pins synchronisieren nur die Taktung der Stromregler, damit die sich nicht gegenseitig beeinflussen. Steht auch im Datenblatt. Hast du da eigentlich schonmal reingeguckt?

Ich hatte bei mir der Einfachheit halber Enable für alle Motoren auf eine Leitung gesetzt. Das hat aber noch einen anderen Grund: wenn du einen Antrieb hast, der nicht selbsthemmend ist (zB. Kugelumlaufspindeln oder Zahnriemen), würden die abgeschalteten Motoren die Achse nicht festhalten köennen, sodass diese sich bei Belastung verschieben kann. Daher fnde ich es einfach sicherer, wenn immer alle Motoren an sind, wenn sich was bewegt. Wenn du möchtest (und genug Pins frei hast), kannst du die aber gerne vereinzeln.

Thegon
27.01.2014, 23:15
Was meinst du, Geistesblitz, mit " auf High oder Low festlöten bzw. was wie geht das ohne den Raspberry, Thegon?



Ich habe hier mal den Pin HALF/FULL mit High (=5V) verbunden:
27338
Ist garnicht so kompliziert wie du dir womöglich gedacht hast, nicht ;-)

Grüße
Thegon

PeterPro
28.01.2014, 16:26
Moin,

ich habe jetzt noch ein bisschen recherchiert und mit euerer Hilfe, dem Datenblat und dem Rn-Wissen mal meine Skizze ergänzt :)
Der Control Pin wurde hier in dem einen Thread ( https://www.roboternetz.de/community/threads/773-Schrittmotor-ansteuern-mit-L298-und-L297 ) ganz gut erläutert. Ich hab es zwar nicht ganz verstanden, aber den sollte man wohl auf high setzen.

Ich hoffe die Skizze ist übersichtlich genug, das war ein bisschen fummelig, weil ich gleich drei Schrittmotorentreiber eingezeichnet habe..

27354

rot: 5V
pink: 5V mit Poti runtergeregelt auf die entsprechende Spannung für Vref
lila: 20V- 30V
blau: GND
hellgrün: Signal für CW/CCW, Clock und CONTROL
dunkelgrün: Signal für Enable, nur einmal (erschien mir sinnvoll) ;)

Reset und Half/Full habe ich vergessen in der Skizze, Reset wird dann mit 5V verbunden und Half/Full muss ich mir noch überlegen .
-Reicht die Leistung am 5V Pin aus um die drei Schaltungen parallel zu betreiben?
-Ist das sonst ersteinmal alles richtig?

Das mit dem SYNC Pins habe ich noch nicht eingezeichnet. So wie ich das aus dem Datenblatt verstanden habe besitzt jede der drei Schaltungen in meiner Skizze schon ein RC_Network (der Widerstand und Kondensator am OSC), welches ich dann bei einem beibehalten soll und bei den anderen zwei streichen und erden soll.
Die SYNC Pins an sich werden einfach alle verbunden.
-Ist das so korrekt?


MfG

Peter

Thegon
28.01.2014, 17:13
Reset und Half/Full habe ich vergessen in der Skizze, Reset wird dann mit 5V verbunden und Half/Full muss ich mir noch überlegen .
-Reicht die Leistung am 5V Pin aus um die drei Schaltungen parallel zu betreiben?
-Ist das sonst ersteinmal alles richtig?

Das mit dem SYNC Pins habe ich noch nicht eingezeichnet. So wie ich das aus dem Datenblatt verstanden habe besitzt jede der drei Schaltungen in meiner Skizze schon ein RC_Network (der Widerstand und Kondensator am OSC), welches ich dann bei einem beibehalten soll und bei den anderen zwei streichen und erden soll.
Die SYNC Pins an sich werden einfach alle verbunden.
-Ist das so korrekt?


Ja Reset und Half/Full unbedint beschalten und nicht frei in der Luft hängen lassen, sonst könnte etwas verrückt spielen.

Die Leistung auf der 5V Schiene vom Pi reicht (hat glaub ich schon mal wer vor mir geschrieben) leicht aus, weil im Prinzip hast du da direkt Zugriff auf die 5V vom Netzteil, kannst also über diesen Pin so viel Strom ziehen wie das Netzteil hergibt, abzüglich des Eigenstrombedarfs des PI natürlich. Und die Treiber brauchen nicht wirklich viel Strom auf der 5V - Schiene, alles im Milliamperebereich.

Die Synch Pins NICHT alle verbinden, weil das sind alles Ausgänge! Damit kann ein Schrittmotortreiber den Takt an zwei (oder mehrere) andere weitergeben. Ich würde diese Pins aber unbeschaltet lassen und stattdessen 3 unabhängige RC-Oszillatoren machen, wie bei dir in deiner Skizze eingezeichnet.

Wie du das mit dem Poti meinst, ist an der Skizze nicht wirklich ersichtlich, das Poti muss als Spannungsteiler beschaltet werden und nicht in Serie mit 5V (weil so bringt es nichts, es kommen immer 5V raus).

Dazu habe ich mal ein Bild gezeichnet:
27358

Den Wiederstand R1 brauchst du nicht umbedingt, er ist allerdings nützlich, damit kannst du ein maximales Vref festlegen, dass du auch (versehentlich) durch drehen des Potis nicht überschreiten kannst.
Wie groß der Strom dann wirklich ist, hängt natürlich auch noch von den Shunts ab.

Grüße
Thegon

PeterPro
28.01.2014, 20:32
Okay Danke,

ich hab mir ehrlich gesagt noch gar nicht angeguckt wie man ein poti beschaltet, dein schaltplan wird dann übernommen :)
Die SYNC Pins lasse ich dann ersteinmal unbeschaltet, wenn es propleme geben sollte mit "Ground Noise" kann ich dass ja immer noch machen :)
Damit wäre die Schaltung soweit klar :)

Einige Fragen habe ich aber noch:

-Wie berechnet sich Vref?
Auf der Rn-Wissen Seite steht die Formel Vref= I motorstrom*R und in dem vorher oben genannten Thread und in dem Robotertutorial ( https://www.roboternetz.de/robotertutorial2.html (gelber Kasten) ) steht die Formel Vref=I motorstrom*R*1.44.

-Kann man als Shunt einen ganz normalen Kohle/Metall Widerstand mit 1 Ohm benutzen?

-Wie berechne ich den Widerstand den ich vor das Poti schalte, um die Spannung von 5 auf max 3V zu begrenzen?

MfG

Peter

Geistesblitz
28.01.2014, 21:34
Zur Berechnung von V-ref schreib ich lieber nix, weil das bei mir irgendwie auch noch nicht so richtig funktioniert hat.

Einen einfachen 1 Ohm Widerstand in 1/4 Watt-Ausführung kannst vergessen, denn durch ihn werden 2A^2*1 Ohm=4 Watt maximal verballert, also sollten es schon 5 Watt-Widerstände sein.

Das ist ganz einfach. Nehmen wir mal an, du hast ein 100k-Poti, dann errechnet sich der Vorwiderstand mit folgender Formel:
Uref/Uv=Rpoti/Rges mit Rges=Rpoti+Rvor
umstellen:
Rvor=(Uv/Uref-1)*Rpoti
einsetzen:
Rvor=(5V/3V -1)*100 kOhm=66,667 kOhm

Nun muss man gucken, welcher nächstgrößere Widerstand in den üblichen Widerstandsreihen (http://www.elektronik-kompendium.de/sites/bau/1109071.htm) liegt. Da würde mir 68 kOhm ins Auge fallen.

PeterPro
28.01.2014, 22:35
Danke :)
Die Rechnung zum Berechnen des Widerstandes ist an sich nachvollziebar.
Aber wie immer noch Fragen ;)
-Von welchem physik. Gesetz lässt sich denn ableiten das man Uref/Uv und Rpoti/Rges gleichsetzen kann?
-Wir haben jetzt angenommen, dass wir ein 100kOhm Poti haben. Wie kann ich denn berechnen, welchen Widerstand das poti haben muss, damit ohne Vorwiderstand eine Spannung von z. B. 0.72V an Vref Pin anliegt?

Zu den Shunts: Also im Prinzip muss ich einen normalen Widerstand nehmen, allerdings vertragen die mit 1/4 Watt die hohen Ströme nicht, oder wie meinst du das?
Ich verstehe die Rechnung leider auch nicht wirklich

MfG

Peter

Geistesblitz
29.01.2014, 00:08
Ganz normale Spannungsteilerregel (http://de.wikipedia.org/wiki/Spannungsteiler).
Der Wert des Potis und des Vorwiderstands ist nicht so besonders wichtig, die beeinflusst nur den Strom, der durch diesen Zweig fließt. Bei 100 kOhm und 68 kOhm Vorwiderstand wären das 5V/168000 Ohm=30µA, also so gut wie nix. Die Widerstände sollten nur nicht zu groß oder zu klein sein, sonst sind entweder die Störungen zu groß (zu geringer Strom) oder oder du hast ziemlich viele Verluste (zu hoher Strom). Nur das Verhältnis der Widerstände Rvor/Rpoti sollte möglichst gut stimmen.
Wenn du dieses Regel verstanden hast, bekommst du das mit deiner Spannung sicher auch alleine ausgerechnet. Allerdings brauchst du nicht zwingend ein anderes Poti, um eine andere Spannung einzustellen, denn dafür sind die ja eben verstellbar.

Zu den Shunts: genau, die vertragen die hohen Ströme nicht. Die werden dann warm und zersetzen sich dann langsam, wobei dann der Widerstandswert nachhaltig verändert werden kann. Was das an deiner Stromregelung macht, kannst du dir vielleicht schon denken. Die geht ja von einem konstanten Widerstand aus, sollte dieser aber in Wirklichkeit kleiner werden, denkt die Regelung dass alles in Ordnung ist, obwohl eigentlich viel höhere Ströme fließen.

PeterPro
29.01.2014, 16:27
Danke für den tipp mit der Spannungsteilerregel :)
Ich hab mich damit jetzt eine ganze Zeit mit beschäftig und hoffe es verstanden zu haben.

Also gut ich habe ein 10kOhm poti und weiß das dort max 3V abfallen sollen.
Die Stromstärke I=Upoti/Rpoti beträgt also I = 3V/10000Ohm = 0.0003A.
Am Vorwiderstand sollen also 2V abfallen, somit beträgt Rvor = Uvor/I = 2V/0.0003A = 6.67kOhm-> ich muss also ein 6.8kOhm Widerstand vorschalten. Is das so richtig?

Wenn ich jetzt die Formel für Vref=Imotorstrom*Rs1*1.44 nehme komme ich, bei einem Motor mit bsw. 350mA und Shunt 1Ohm, auf Vref=0.35*1*1.44=0.504.
Und dementsprechend muss ich dann das poti so einstellen, dass beim schleifer 0.504V abfallen. Korrekt?

Im datenblatt zu dem L297 steht, dass man möglichst schnelle Dioden mit 2A nehmen soll.
-Welche Angabe steht für die Schnelligkeit bzw. welche technischen Daten sind noch wichtig zu beachten?

Genauso bei den 4 Kondensatoren in der Schaltung: Welche Bauweisen eignen sich am Besten?

MfG Peter