PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Schrittmotor mit 3 Kabel und L298N-Brücke



Chris1803
11.09.2017, 22:36
Hallo zusammen

Ich habe zwei Schrittmotoren aus einem abgestürzten Modellflieger, mit denen ich etwas herumspielen wollte.
Die Dinger sehen so aus:
http://www.conrad.ch/ce/de/product/1365555/Reely-Mini-Servo-AS0008-Analog-Servo-Getriebe-Material-Kunststoff-Stecksystem-JR
H-Brücken
http://www.conrad.ch/ce/de/product/1573541/Entwickler-Platine-SBC-MotoDriver2-Arduino-Banana-Pi-Cubieboard-pcDuino-Raspberry-Pi-Raspberry-Pi-2-B-Raspberry?ref=searchDetail

Irgendwie scheint es so, als ob im Internet überall nur Anleitungen für Schrittmotoren mit vier Kabeln herumgeistern. Aber meine haben 3 Kabel.
Für meinen Modelllaster habe ich L298N-H-Brücken, mit denen ich versuche, DC-Motoren anzusteuern. Mit einem Mini-Motor funktionier es, der grosse kommt noch per Post. Aber ich schweife ab.

Wie muss ich die an die H-Brücke und von dort aus an der Raspberry Pi anschliessen? Die Stromversorgung scheint mir klar (es gibt ja vorne nur einen 5 und einen 12V-Anschluss). Die Ausgänge 1 und 2 sind mir soweit auch klar. Aber was ist mit dem 3. Anschluss? Direkt auf den Pi? Wäre wiederum widersinnig, da die Stromversorgung über die H-Brücke läuft. Weg lassen? Oder habe ich mich jetzt völlig verirrt?

Chris

Peter(TOO)
11.09.2017, 23:20
Hallo Chris,

Irgendwie scheint es so, als ob im Internet überall nur Anleitungen für Schrittmotoren mit vier Kabeln herumgeistern. Aber meine haben 3 Kabel.
Das sind auch keine Schrittmotoren, das sind Servos!

Servos werden ganz anders angesteuert und mit deinen L298 kannst du da nichts anfangen.

http://rn-wissen.de/wiki/index.php?title=Servos

MfG Peter(TOO)

Chris1803
12.09.2017, 06:22
Hallo Peter

Stimmt, jetzt weiss ich, wieso ich so verwirrt war gestern Abend. Da habe ich alles durcheinander gebracht. Nun ergeben die Anleitungen auch deutlich mehr Sinn. Danke, manchmal braucht man eine Wink mit dem Zaunpfahl.

Nachdem sich das geklärt hat bleibt die Frage, wie ich sie ansteuere. Da die vermutlich nur Belastung und und Gefahr darstellen könnte ich diese doch direkt an den Pi anschliessen, ohne zu riskieren, diesen gleich zu zerstören.
Chris

HaWe
12.09.2017, 12:41
Hallo Peter

Stimmt, jetzt weiss ich, wieso ich so verwirrt war gestern Abend. Da habe ich alles durcheinander gebracht. Nun ergeben die Anleitungen auch deutlich mehr Sinn. Danke, manchmal braucht man eine Wink mit dem Zaunpfahl.

Nachdem sich das geklärt hat bleibt die Frage, wie ich sie ansteuere. Da die vermutlich nur Belastung und und Gefahr darstellen könnte ich diese doch direkt an den Pi anschliessen, ohne zu riskieren, diesen gleich zu zerstören.
Chris

ja, kannst du "normalerweise"... zB so:
https://tutorials-raspberrypi.de/raspberry-pi-servo-motor-steuerung/

Chris1803
12.09.2017, 21:49
Siehe da, ein Schubs in die richtige Richtung und es funktioniert. Danke für die schnelle Hilfe. Grossartig!
Nun noch eine Frage zum Thema H-Brücke (oder eben auch nicht). Wie kann ich die externe Stromversorgung sicherstellen? Die L298N fallen ja weg.
Ich habe was von LM2576 gelesen. Aber das sind ja nur die Regler an sich. Gibt es da auch schon vorgefertigte Module anlaog zur Arduino H-Brücke (Link wie oben angegeben)?

hbquax
13.09.2017, 06:51
Gibts im Modellbaubereich unter Stichwort "BEC" in allen Formen, Farben und Größen. Aber wenn der Strombedarf gering ist tuts auch ein einfacher 5-Volt-Spannungsregler. Für hohe Ströme oder große Spannungsdifferenzen zwischen Ein- und Ausgang gibt es getaktete BECs mit weniger Verlusten und weniger Wärmeerzeugung.

Chris1803
14.09.2017, 20:50
So, ich habe mich mit meinem Halbwissen mal durch das Internet und diverse Shops gegoogelt. Bevor ich jetzt aber Fehler mache: funktioniert dieses Teil als Brücke zwischen meiner externen Stromversorgung (4x1.5V-Batterien), den Servos und meinem RPI?
https://www.conrad.ch/de/2-kanal-kreuzmischer-baustein-225231.html

Soweit ich das verstanden habe, würde ich das Batterienpack an dieses Teil hängen, von dort aus das Plus-Kabel an den Stecker des Servos, zwei Minus-Kabel einmal an die Servos und einmal an den RPI und von 2 GPIO-Pins aus das PWM-Signal an den dritten Anschluss der Servos. Stimmt das so?

hbquax
14.09.2017, 22:08
Was willst du mit dem Kreuzmischer?

Bei 4 x 1,5 V solltest du das Servo einfach direkt anschliessen.

Urinstein
15.09.2017, 08:41
Die H-Brücke brauchst du für die Servos überhaupt nicht. Die Versorgungsleitungen deiner Servos kannst du direkt an eine Quelle mit 4,8V bis 6 V Gleichstrom hängen.
Falls PI und Servos aus unterschiedlichen Quellen versorgt werden musst du natürlich noch für ein gemeinsames Nullpotential sorgen.

Chris1803
25.09.2017, 21:12
Hallo zusammen

Nun sind die bestellten Teile endlich da und ich hatte Zeit einige Gehversuche zu machen.
Der Motor (https://www.roboternetz.de/community/threads/71037-20kg-Fahrzeug-und-keine-Ahnung?p=638997#post638997) dreht und Geschwindigkeit/Richtung lassen sich ändern.

Nun zum eigentlichen Thema.
Da die ursprünglich genutzten Servos hinüber sind (waren ja aus einem abgestürzten Modellflieger und allen Zahnräder fehlen einige Zähne) habe ich einen neuen bestellt (Blue Bird BMS-666MG-HS :https://www.conrad.ch/de/bluebird-standard-servo-bms-660mg-hs-analog-servo-getriebe-material-metall-stecksystem-jr-239411.html ).

Mit dem weiter oben von HaWe angegebenen Code konnte ich den Servo in Betrieb nehmen. Das Ganze funktioniert zwar, aber alles ist etwas ruckelig und hastig.
Wie kann ich das etwas - im Englischen würde man "smoother" sagen - machen? Und wie kann ich herausfinden, wie ich den Maximalausschlag nach links und rechts sowie die Mittelstellung über den Code einstellen kann?
Danke für eure weitere Hilfe.

Chris

Peter(TOO)
25.09.2017, 21:59
Hallo Chris,

Mit dem weiter oben von HaWe angegebenen Code konnte ich den Servo in Betrieb nehmen. Das Ganze funktioniert zwar, aber alles ist etwas ruckelig und hastig.
Wie kann ich das etwas - im Englischen würde man "smoother" sagen - machen? Und wie kann ich herausfinden, wie ich den Maximalausschlag nach links und rechts sowie die Mittelstellung über den Code einstellen kann?
Den hier ?
https://tutorials-raspberrypi.de/raspberry-pi-servo-motor-steuerung/

Steht ja ganz unten, direkt unter dem Programm. :-)

p.ChangeDutyCycle(x)
x ist die Position.
Da musst du halt etwas probieren, bei welchen Werten dein Servo am linken und rechten Anschlag ist. Die Mitte liegt dann dazwischen. :-)

MfG Peter(TOO)

Chris1803
25.09.2017, 22:22
Hallo Peter

Danke für die schnelle Antwort. In dem Fall kann ich mich an die Grenzen tasten. Besteht eine Gefahr, dass ich den Servo zerstöre, wenn ich zu hohe Werte angebe?
Hast du eine Idee zur anderen Frage, wie ich die Bewegungen geschmeidiger machen kann?

Chris

Peter(TOO)
25.09.2017, 23:22
Besteht eine Gefahr, dass ich den Servo zerstöre, wenn ich zu hohe Werte angebe?
Eigentlich nicht, kam nur bei alten dummen Servos vor.
Du kannst dich mal in 1er Schritten vortasten, du merkst dann schnell wenn er nicht mehr weiter dreht.

[QUOTE=Chris1803;639354]Hast du eine Idee zur anderen Frage, wie ich die Bewegungen geschmeidiger machen kann?
Dies liegt zum Teil am Servo selbst. :-(
Wie schnell sich der Servo zwischen zwei Positionen bewegt hängt vom Servo und dessen Belastung ab. Wenn es langsamer sein soll, kannst du nur entsprechend viel Zwischenpositionen vorgeben und diese immer für eine gewisse Zeit halten.

Das Zittern an einer festen Position kannst du, wie im Link angegeben, durch Ausschalten der PWM verbessern.

Die Ansteuerung der Modellbau-Servos ist eigentlich ein Murks, war aber zu den damaligen Zeiten nicht besser Lösbar. Die ganze Steuerung muss möglichst leicht sein (Flugzeugmodelle).

Du kannst hier im RN-Wissen Bereich einiges darüber nachlesen.
Das technische Problem ist, dass man eine Impulsbreite immer nur mit einem gewissen Jitter erstellen kann. Du hast irgendwo einen festen Takt und die Zeit kann immer nur ein Vielfaches dieser Zeit sein. Da gibt es dann eine Rasterung.

Bei Auswerten hat man das selbe Problem. Auch hier kann man nur auf Taktschritte genau die Impulsbreite messen. Da die Takte nicht synchron sind, kann man schon theoretisch nicht genauer als +/-2 Takte genau messen.

Die Übertragungsstrecke als solche trägt auch noch ihren Teil zum jitter bei.

Der Servo versucht also immer den, aus der Impulsbreite gewonnene, Sollwert mechanisch einzustellen. Durch den Jitter versucht er immer diesen Messfehlern zu folgen. Deshalb zittert das Ding dann, auch wenn man am Sollwert gar nichts ändert.
Stell man das PWM-Signal ab, verwendet er die letzte Messung als Vorgabe.

Allerdings gibt es neben der elektronischen Seite auch noch die Mechanische. Zwischen Motor und Abgang sitzt noch ein Getriebe und dieses hat immer etwas spiel. Hat sich der Motor z.B. zuerst nach links gedreht und soll sich jetzt nach rechts drehen, passiert zuerst gar nichts am Abtrieb, weil der Motor so weit drehen muss, bis sich die anderen Zähne der Zahnräder berühren und Kraft übertragen können.
Das Getriebespiel ist immer ein Qualitätsmerkmal. Ideal sollte man keines haben.


MfG Peter(TOO)

Urinstein
26.09.2017, 10:18
Und wie kann ich herausfinden, wie ich den Maximalausschlag nach links und rechts sowie die Mittelstellung über den Code einstellen kann?
Die Mittelstellung entspricht normalerweise einer Einschaltzeit von etwa 1,5 ms. Oberer und unterer Anschlag liegen irgendwo im Bereich von 2,1 ms bzw. 0,9 ms. So wie ich das sehe gibst du in deinem Code keine Einschaltzeit ein, sondern ein PWM-Tastverhältnis. Das musst du dann eben noch über die eingestellte PWM-Frequenz umrechnen. Bei 50 Hz (Periodendauer 20 ms) entsprächen 1,5 ms dann 1,5 ms/20 ms = 0,075 = 7,5%.

Die Zuordnung zwischen Einschaltzeit und eingestelltem Winkel ist nicht immer ganz eindeutig. Solltest du exakte Winkel anfahren wollen bleibt dir nicht viel anderes übrig als die entsprechenden Signale durch ausprobieren herauszufinden. Ich hatte den entsprechenden Fall schon und habe mir dafür eine kleine Vorrichtung gebastelt:
https://abload.de/thumb/img_20170607_103117l1zkp.jpg (http://abload.de/image.php?img=img_20170607_103117l1zkp.jpg)



Wie kann ich das etwas - im Englischen würde man "smoother" sagen - machen?
Modellbauservos sind so parametriert, dass sie die vorgegebene Stellung so schnell wie möglich anfahren. Sprich: hohe Beschleunigung, schnelle Bewegung, abruptes Abbremsen. Falls du das meinst kannst du wie Peter empfohlen hat Zwischenpositionen vorgeben (z.B. einen gleitenden Mittelwertfilter über die Steuergröße legen). Falls der Servo zittert und "falsche" Bewegungen machst solltest du überprüfen ob bei deinem Signal zwischen Pi und Servo irgenwas nicht stimmt (einfach mal mit einem Oszilloskop abgreifen sofern vorhanden). Falls du unterschiedliche Stromquellen zur Versorgung von Pi und Servos verwendest musst du ausserdem sicher stellen dass die Massen verbunden sind.

oberallgeier
26.09.2017, 10:59
Hallo Chris!


.. Besteht eine Gefahr, dass ich den Servo zerstöre, wenn ich zu hohe Werte angebe ..Ja - wenn Du zu lange "heizt"! *gg* Aber eigentlich brauchst Du wenig Bange zu haben. Sinnvoll ist es beim Er-testen der beiden Grenzstellungen ein Labornetzgerät zu benutzen oder ein Ohmmeter mit nem Messbereich bis ca. 2A und drüber in die Versorgungsleitung einzuschleifen. Dann kannst Du sehen wann Du die erlaubten Pulsdauern/Grenzen überschritten hast, weil dann die Stromaufnahme deutlich ansteigt. Ausserdem ist bei vielen Servos dann ein deutliches anderes Geräusch zu hören. Ein paar wenige Sekunden Stromverbrauch im Bereich von 0,5 bis 1A hatte bei meinen Servos nie geschadet (gilt aber nur für lastlosen Servotest). Sonstige Aussagen sind im RNWissen (klick hier (http://rn-wissen.de/wiki/index.php?title=Servos#Ansteuerung:_Signalform_und _Schaltung)) zu sehen. Für solche Tests hatte ich mir Servotester gebaut. Die "neueste" Vorrichtung mit nem 10K-Poti zum Variieren der Pulslänge ist mit nem nanoclone und nem LCD aufgebaut, siehe hier (https://dl.dropbox.com/s/y3i8m4gjdlr75nk/Servotester_2822-33proz.JPG?dl=0). Das Display zeigt z.B. die aktuelle Periodendauer (oben rechts) und die Pulszeit mit der angesteuert wird (unten rechts), der ADC-Wert ist sozusagen ein Gimmick. Übrigens ist diese Software bei meinen Platinen (https://www.roboternetz.de/community/threads/61379-Kopfsache-und-ein-m1284-etliche-Servos-viel-Alu?p=629876&viewfull=1#post629876) zum Ansteuern mehrerer Servos als Testmodus bereits eingebaut.


.. Hast du eine Idee zur anderen Frage, wie ich die Bewegungen geschmeidiger machen kann? ..Das wurde ja schon mehrfach beantwortet. Softwaremässig habe ich das so gelöst (in C), dass der Servo-Ansteuerungsroutine ein Zielwert und ein Increment vorgegeben wird (und noch zwei Parameter). Nun wird die Pulslänge bei jedem neu ausgegebenen Puls um das Increment verändert (+ oder -) bis der Zielwert überschritten ist. Der letzte Wert wird dann aber nur als der vorher genannte Zielwert eingegeben. Die Incremente sind so bemessen, dass ich für die gesamte Schwenkbreite rund sechstausend Ticks habe (6000), Full speed wird bei ca. 180 Incrementen pro neuer Servoperiode erreicht - also 180 Inc / 20 ms. Das ist für viele Servos zu fein - aber der läuft dann eben wenn die Ansteuerung seine ganz bestimmte (bestimmbare) Mindestpuls-differenz erreicht hat.

So siehts aus (https://www.youtube.com/watch?v=Y85-rKqte-c) wenn die Servos full speed laufen (Standardgeschwindigkeit - ca. 0,1 bis 0,16 sec pro 60°) und so fahren die servobetätigten Teile (https://www.youtube.com/watch?v=Kt4UiEaTicc) mit gebremster/variabler Geschwindigkeit.

Viel Erfolg!