Motor Richtungswechsel

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Guten Tag,
    ich habe ein Motor (mit Externer Spannungsquelle).
    Diesen möchte Ich mit meinem Pi so steuern, dass ich die Laufrichtung des Motors wechseln
    kann. Das wars (Keine PWM und etc).

    Soweit ich weis, benötigt man so was wie ein L298N H-Bridge oder ähnliches, kenne mich aber bezüglich dessen nicht aus.

    Vielen Dank!
    :danke_ATDE:

  • Halo Leonvario,

    was für einen Motor hast Du denn?

    Wenn es simpler Getriebemotor ist, der nur einen Eingang für Plus und einen für Minus hat, dann ist es ganz einfach:

    Schaltung:
    Pin1 und Pin2 treiben jeweils eine Transistorstufe an, da Du die GPIO-Schittstelle nicht überlasten darfst.
    Die Schaltung braucht dann noch 2 Freilaufdioden, damit Dir der Rücklaufstrom beim Ausschalten nicht den Pi zerfetzt.

    Sicherer ist es, den Motor über ein Relais anzutreiben. Das kleine Programm kann aber unverändert eingesetzt werden.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (21. Februar 2015 um 14:31)

  • Hallo Leonvario,

    eigentlich ist der Code schon kommentiert.

    Viel interessanter ist eigentlich die Schaltung dazu.


    Und wie heißt es in meiner Signatur?

    Kein Support über PN!

    Und was finde ich in der Postbox um 14:17?

    Zitat


    Hi,
    erstmal Danke für die Schnelle Antwort.
    Es währe nett wenn du dein Code kommentieren (bzw. Erklären) könntest.

    Hier der Link : https://www.forum-raspberrypi.de/Thread-m...#pid135879

    Mich nervt das... :@
    Jegliches Wissen, das über Persönliche Nachrichten verschickt wird, geht den interessierten Forenmitgliedern und sonstigen Lesern verloren. Damit wird die wesentlichste Eigenschaft eines Forums (Probleme zu lösen und Wissen zu vermitteln) eigennützig umgangen. "Alles, was ich alleine weiß, verrate ich auch niemand anderem!" Ich finde das den anderen Usern gegenüber nicht fair!

    Vor Jahren hatte ich mal eine Kollegin, die das so praktiziert hatte. Sie hechelte von einer Schulung zur anderen. Ließ andere ihre Arbeit machen - und wenn ein Fehler enthalten war, den sie erst aufgrund der Schulung als Fehler erkennen konnte, "petzte" sie bei Vorgesetzten und setzte sich entsprechend in Szene.
    Irgendwann (ziemlich schnell) war sie sehr allein... :s


    Also zum Programm (Quellcode in der Programmiersprache Icon:(

    Code
    # Motorsteuerung ohne PWM in zwei Richtungen


    ist ein Kommentar.


    Code
    link GPIO


    öffnet meine GPIO-Library


    Code
    $define Pin1 23
    $define Pin2 24


    definiert zwei wahllose GPIO-Pins. Ich habe hier 23 und 24 gewählt. Du kannst aber jeden beliebig unbelegten freien GPIO-Pin nehmen. Diese beiden Präprozessor-Direktiven habe ich gesetzt, um bei Änderung der GPIO-Pins nur diese beiden Zeilen ändern zu müssen - und nicht irgendwelche Zeilen im weiteren Code. Programmierer sind halt beliebig faul. :cool:


    Code
    procedure main()
    end


    Die Hauptprozedur wird durch main() eingeleitet und durch end abgeschlossen.
    Das Programm wird von hier aus abgearbeitet.


    Code
    repeat
        {   ...
        }


    Eine Endlosschleife als simple Demonstration ...


    Code
    GPIO(Pin1, 1)    # Pin1 als Output einschalten
            x := GPIO(Pin2) # Pin2 als Input
            delay(1000)


    Meine GPIO-Library kennt im Wesentlichen nur einen Befehl: GPIO(Pin, wert, dauer)
    [font="Courier"]Pin1[/font]: GPIO-Pin, der angesteuert wird
    [font="Courier"]wert[/font]: Wert, der auf den GPIO-Pin [font="Courier"]pin[/font] geschrieben wird
    [font="Courier"]dauer[/font]: Zeit in ms, für dieser Zustand beibehalten werden soll
    dauer ist optional. Ist keine Dauer festgelegt, dann bleibt der Zustand bis zur nächsten Änderung erhalten
    [font="Courier"]wert[/font] ist auch optional.
    Ist [font="Courier"]wert[/font] vorhanden, dann wird auf den Pin [font="Courier"]pin[/font] geschrieben (also als Ausgang gesetzt).
    Ist [font="Courier"]wert[/font] nicht vorhanden, dann wird der Pin ausgelesen (also als Eingang gesetzt)

    Somit sagt der Code-Ausschnitt aus, dass [font="Courier"]Pin1[/font] als Ausgang gesetzt wird und der Wert [font="Courier"]1[/font] gesetzt wird. Somit liegt 3V3 an diesem Pin (logisch [font="Courier"]HIG[/font]H an ).

    Dieser Zustand wird für 1000 ms aufrecht erhalten.

    Der andere Pin wird als Eingang geschaltet.

    Wenn Du eine Schaltung aufbaust, in der [font="Courier"]Pin1[/font] und [font="Courier"]Pin2[/font] über einen Widerstand von 1650 Ohm (die nächste Stufe oberhalb davon) verbunden sind, würde ein Strom von 2 mA in von Pin1 nach Pin2 fließen.


    Code
    GPIO(Pin1,0)     # Pin1 ausschalten
            delay(1000)      # Motor auslaufen lassen


    Pin1 wird ausgeschaltet - ist aber weiterhin als Ausgang geschaltet! 1000 ms lang passiert nichts weiter. In dieser Zeit soll der Motor auslaufen. Diesen Wert besser gößer wählen - weiß der Geier, wie lange der Motor ausläuft ...


    Code
    GPIO(Pin2, 1)    # Pin2 2 als Output einschalten
            x := GPIO(Pin1) # Pin1 als Input
            delay(1000)


    Jetzt wird Pin 2 als Ausgang gesetzt und auf Logisch HIGH gesetzt. Pin1 ist auf Eingang gesetzt und ermöglicht somit einen geschlossenen Stromkreis
    Während 1000 ms dreht der Motor in der anderen Richtung.


    Code
    GPIO(Pin2,0)     # Pins ausschalten
            delay(1000)      # Motor auslaufen lassen


    Und wieder auslaufen lassen...


    Und während ich das gerade lesen, sollte der Block

    Code
    GPIO(Pin2, 1)    # Pin2 2 als Output einschalten
            x := GPIO(Pin1) # Pin1 als Input
            delay(1000)

    durch den hier ersetzt werden:

    Code
    x := GPIO(Pinx) # Pin1 als Input
            GPIO(Piny, 1)    # Pin2 2 als Output einschalten
            delay(1000)


    um zu verhindern, das nicht beide Pins kurzfristig als Ausgänge geschaltet sind. Passieren dürfte nichts, da durch GPIO(Pins, 0) eh kein Strom fließt.


    Kriegst Du das mit der Schaltung hin?
    Du brauchst:
    - eine Diode (1N4148), die bei der einen Richtung einen Transistor (P2N2224A ==> korrigiert zu P2N2 222A <==) oder funktionsgleichen auf Basis ansteuert. Vom Emitter geht's auf den anderen GPIO-Pin (der dann als GND dient). Vom Kollektor geht's zum Motor (einen der beiden Anschlüsse), vom anderen Anschluss geht's zum anderen GPIO-Pin
    - Widerstand (Wert muss ich noch ausrechnen) zwischen GPIO und Basis
    - Freilauf-Dioden (auch 1N4148) (zwischen GPIO und Motor-Ausgang)

    Diese Schaltung doppelst Du, damit das Gleiche auch für den anderen GPIO gilt. Einmal fließt der Strom über eine der beiden Dioden in den einen Transistor, dann über die andere Diode in den anderen Transistor.

    Auf diese Weise kannst Du eine Motorsteuerung ohne PWM realisieren.

    Ob das allerdings Sinn macht, musst Du beurteilen, weil gerade darin die Stärke von PWM liegt. Aber egal... Jedem so wie er möchte...

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (22. Februar 2015 um 18:41)

  • Hallo Franz,

    steht drin: Icon.

    Aber bei SOVIEL Text gehen die vier Buchstaben unter.

    Wenn Du mehr wissen willst. In diesem Forum sind mittlerweile 26 Teile meines Icon-Tutorials erschienen. Mehr sollte Dir die Suchfunktion offenbaren...


    Beste Grüße

    Andreas

    Hallo Leonvario,

    hier eine aufgehübschte Version:

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (21. Februar 2015 um 15:43)

  • Hallo Leonvario,

    hier noch eine Schaltung. Bevor Du jetzt aber los legst, warte noch Stellungnahmen und Verbesserungen unserer Elektronik-Profis ab.

    Bevor Du den Raspberry Pi anschließt, stelle auch sicher, dass nicht mehr als 50 mA über 5V nach GND fließen sowie nicht mehr als 2 mA von GPIO abfließen.

    Beste Grüße

    Andreas

    Bilder

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (12. Oktober 2017 um 01:08)

  • Hallo Andreas,


    ...
    ... einen Transistor (P2N2224A) oder funktionsgleichen ...
    ...


    wo hast Du denn das Teil ausgegraben :s ...
    Wenn, dann find ich nur was in der Art P2N2222 ... und der ist bei einem hfe von ca. 30 eher ungeeignet. Da wird der Strom nicht reichen.
    Vielleicht mal als Anhaltspunkt in -> diesen <- Thread schauen ;) ...

    cheers,
    -ds-

  • Andreas: Wieso legst du denn beim Transistor eine Diode zwischen dem zu schaltenden GND und 5V? Ich seh scho das die in Sperrichtung is - aber wozu das ganze überhaupt? :s

    Mal davon abgesehen das du bereits oben einen Kurzschluss auf dem Steckbrett fabriziert hast:

    Also so bitte auf keinen Fall verdrahten!! :baeh2:

  • Hallo Meigrafd,

    die besondere Herausforderung bestand ja darin, einen Richtungswechsel zu haben - ohne den Motor über PWM anzutreiben.

    Deswegen 2 GPIO und 2 Transistoren - je ein Satz für die eine Richtung und ein Satz für die andere Richtung.

    Je eine Diode fungiert als Freilaufdiode, um beim Abschalten der Schaltung wegen der Induktionsspannung keinen Rückstrom zu erzeugen, der der angelegten Spannung entgegengesetzt und in der Höhe geeignet ist, den Raspberry Pi abzuschießen.

    Die anderen beiden Dioden sind in Sperrichtung geschaltet, damit der Strom - egal über welchen GPIO gerade geschaltet wird, den richtigen Transistor anzusteuern.

    Danke für den Hinweis. Den Kurzschluss sehe ich jetzt auch!


    Beste Grüße

    Andreas

    Bilder

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (21. Februar 2015 um 22:44)

  • Ah siehste ... muss man sich doch mal genauer anschauen. Den Kurzen hab' ich vor lauter 2222 komplett übersehen.
    Also ... rückspulen auf Anfang ...

    Leonvario:
    genau, das was Du benötigst nennt sich H-Brücke ...
    Die kannst Du jetzt diskret aufbauen oder Dir ein fertiges Breakout-Board zulegen. Ich persönlich würde zu letzterem tendieren. Für den Preis eines Breakout-Boards bekommst Du in der Regel noch nicht mal die benötigten Bauteile - ist halt alles dabei, Stecker, Jumerbrücken, ...

    Für eine selbstgebaute H-Brücke brauchst Du mindestens zwei NPN- und zwei PNP-Transistoren, ein paar Widerstände und evtl. Freilaufdioden.
    Ich will da jetzt nicht näher ins Detail gehen. Z.B. findest Du -> hier <- was zur Funktionsweise inkl. Schaltplänen und -> hier <- ist eine H-Brücke zum Selbstbau ... allerdings ohne Freilaufdioden.

    Mit z.B. -> solch einem <- Breakoutboard hast Du einen L298N Baustein, der Dir gleich zwei H-Brücken zur Verfügung stellt.
    Zur Verschaltung kannst Du Dir -> diesen <- Beitrag als Vorlage nehmen. Ist zwar für den Arduino, spielt aber zur Verkabelung erst mal keine Rolle ...

    cheers,
    -ds-

  • Ich hab mir mal die Mühe gemacht und das nachgebaut, weil ich find auch die Farbwahl der Strippen nicht ganz so leicht zu durchschauen ;) Hoffentlich hab ich alles richtig gemacht :fies:

    Im Anhang auch das fritzing File :angel:


    Motorsteuerung.zip

  • Jetzt fiel mir grad nich was zum Thema Motor ein, aber das hat sich teilweise erledigt, da ja offensichtlich eine externe Stromversorgung vorhanden ist. Lediglich die Frage nach der Entstörung ist noch offen.
    //EDIT: mal so zur Info: der Motor, den ihr da in Fritzing verwendet, den gibts für ein paar Cent ja auch im realen Leben. Ich hab spasshalber mal ausgemessen - der zieht so 800 mA aufwärts.

    Zur Schaltung: Hmmm ... ich fürchte, da hast Du Dir die Arbeit umsonst gemacht.
    Ich hatte, wie gesagt, vorher schon beim 22222 Zeugs abgeschaltet und nicht mehr genauer hingeschaut. Aber habt ihr mal den Stromfluss nachverfolgt?
    Also ... ehrlich gesagt hab' ich da meine Zweifel, dass dieser Ansatz überhaupt funktioniert ;) ...
    Der Motor braucht einmal rechts + und links - und dann umgekehrt ;)

    cu,
    -ds-

  • Hallo Dreamshader,

    eine Hälfte der Schaltung hatte ich so aufgebaut. Die funktioniert.

    Die andere Hälfte ist analog gedoppelt. Das Einzige, was aus meiner Sicht noch offen ist, ist der Widerstand - und die Art der Spannungsversorgung. Die sollte nicht vom Raspberry Pi kommen. Es reichen ja die Impulse vom GPIO und eine gemeinsame Masse-Leitung.

    Den Motor habe ich beliebig aus Fritzing herausgegriffen. Damit es wie Motor aussieht. Mehr Infos hatte Leonvario ja nicht verraten.


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.


  • ...
    Den Motor habe ich beliebig aus Fritzing herausgegriffen. Damit es wie Motor aussieht. Mehr Infos hatte Leonvario ja nicht verraten.
    ...

    Das war auch mehr als Info gedacht, falls Du mal so ein Teil in den Fingern hast - damit Du nicht auf den Gedanken kommst "ach, das kleine Ding kann ich direkt anstecken" :angel: ...

    Aus Verdoppeln einer Treiberschaltung wird keine H-Brücke ... geh's mal logisch durch ...
    Is aber eh' erledigt ... sagt der TE zumindest ;) ...

    cu,
    -ds-

  • Hallo Dreamshader,


    Das war auch mehr als Info gedacht, falls Du mal so ein Teil in den Fingern hast - damit Du nicht auf den Gedanken kommst "ach, das kleine Ding kann ich direkt anstecken" :angel: ...

    cu,
    -ds-

    na, auf solch einen Gedanken komme ich schon mal nicht. Alles was in einer Versuchsschaltung mit eigener Stromversorgung (>2A-Netzteil mit einstellbarer Spannung und Polarität) mehr als 50 mA zieht, kommt eh nicht an den Raspberry. Und was mehr als 2 mA pro GPIO-Pin zieht auch nicht. So ist die Voraussetzung, dass die Raspberries alt werden können, recht groß.

    Jedenfalls habe ich noch keinen einzigen verschrotten müssen :thumbs1: .

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Hallo Dreamshader,

    so steht's in kleinst-Buchstaben auf dem Bauteil P2N2222A E02. Dein Link passt wohl dazu :thumbs1:.

    Ich habe mit dem Teil mal einen Motor angetrieben. Deswegen weiß ich, dass die "Halbschaltung" funktioniert.

    Natürlich muss Leonvario einen Transistor mit einem für seinen Motor abgestimmten Verstärkungsfaktor auswählen. Bestimmt sind die bekannteren Transistoren besser geeignet.

    Die Schaltung betrachte ich als Diskussionsgrundlage - nicht als DIE EINZIG funktionierende Lösung.


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Hi,
    ja ... ne ... also die Treiberschaltung ist ja so weit ok ... nur bekommst Du durch verdoppeln halt keine H-Brücke. "Denk" die verdoppelte mal durch ;) ...

    Aber darum gings jetzt gar nicht: Du hattest halt -> hier <- was von


    ...
    ... einen Transistor (P2N2224A) oder funktionsgleichen ...
    ...


    geschrieben und ih wollte jetzt nur wissen, was das jetzt für ein Teil war. So was lässt mir halt keine Ruhe ...


    cheers,
    -ds-

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!