Servo an GPIO - ich bekomm's nicht an's Laufen

  • Hallo Leute,

    ich bin neu hier und bräuchte Eure Hilfe. Für ein Heizgerät bin ich seit Tagen eine unglaublich einfache Aufgabe zu lösen. Ich brauche zur Regelung eines Systems ein Servo, das angesteuert wird.

    Dafür habe ich einen Slider von 0 bis 100 angelegt und mit dem GPIO17 verbunden. diesen habe ich als PWM mit 50Hz konfiguriert.

    Servo MG90S an GPIO17 und +/- an die Raspberry +/- Pins gesteckt. So wie in hunderten tutorials beschrieben... und es tut sich nichts.

    Manchmal zuckt das Servo, aber meistens tut sich nichts.


    Mit einem Programmierer-Freund habe ich es auch schon mal durchgespielt, gleiche Situation. Er hat dann den GPIO nicht über einen Node angesprochen, sondern über python code und dann hat es funktioniert.

    Ich habe schon die Servos getauscht, gleiche Situation...

    Ich habe auch schon eine externe Spannungsversorgung für das Servo verwendet, auch keine Änderung.

    Ich habe es auch schon mit einem PCA9685 versucht, den bekomm ich auch nicht ans Laufen, da ruckelt es genauso.

    Hat wer eine Idee, warum das bei mir nicht funktioniert...?

    Kann mir vielleicht wer seinen Flow zum Importieren exportieren und schicken.

    danke schon mal

    Charly

    Edited once, last by charly122 (January 20, 2024 at 6:03 PM).

  • Aus deinen Text erahne ich das du versuchst den Servo über NodeRed anzusteuern, keine Ahnung ob sowas überhaupt möglich ist. Ich kann das auch nicht testen weil ich kein NodeRed habe.

    Mit dem PCA9685 könnte ich dir vielleicht helfen, aber nur mit Python, nicht mit NodeRed.

  • Heißt dass, du sendest ein PWM-Signal mit 0-100% Dutycycle? Laut Datenblatt (zumindest nach dem, das ich gefunden habe) stellt der Servo nur von 1-2 ms (bei 50 Hz=20 ms Zyklus), also von 5% bis 10%. Vielleicht ist das das Problem.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Moinsen,

    Wenn du mit Red-Note nicht weiter kommst, warum versteifst du dich dann auf diesen Weg ?
    Grundsätzlich ein Servo anzusteuern ist nicht das Problem. Allerdings sollte die Mittelstellung des Servos der Ausgangspunkt sein. Zudem muss auch die Stromversorgung ausreichend Strom liefern können einen Servo unter Last bewegen zu können. Bei diesem Servo ist der maximale Strom mit 700 mA angegeben. Wenn du das je nach Modell das RasPI versuchst über die 5,0 Volt Pins ( 2 oder 4 ) von GPIO Leiste zu versorgen, kann das durchaus schon zu viel sein.
    Jedoch wenn du bei deinem Node Red bleiben willst, weil du keine anderen Weg gehen willst, unter Node Red ist eine serielle Ausgabe die einfachste Aufgabe. Ob du dich dann für ein PICO oder einen günstigeren AVR µController entscheidest ist vollkommen egal. Diese können auf der UART Schnittstelle lauschen, welche Befehlsfolge vom PI gesendet wird.
    Das heißt nichts anderes ohne das man zu einem PCA9685 greifen müsste, ein PICO könnte bis zu 8 dieser Servos ( HW-PWM Kanäle ) und ein AVR ( ATTiny oder ATMega [ Arduino Prozessor ] ) je nach Anzahl der Timer auch mehrere dieser Servosignale generieren.
    Dazu muss man auch keine Komplizierten Code schreiben, denn die RS232 Transmit kann sich auf #<Servor-Nummer>#<Stellwinkel> beschränken. Das bekommt man problemlos als String oder Text mit Red-Note zusammengesetzt. Der Servo-steuernde µController lauscht dann nur auf dem RX Pin, und setzt entsprechend die Anweisungen um.

    Was dir allerdings klar werden muss, falls du mehrere dieser Servos, oder einen mit einer Haltlast beauflagten Servos aus seiner aktuellen Stellung herausbewegen willst, du musst dir um die Stromversorgung de(s)r Servo(s) Gedanken machen.

    Weiterhin muss immer das Servo sowohl mit der Masse, wie auch der Signalleitung mit dem steuernden Controller, und mit Vc + und Masse der Stromversorgungseinheit verbunden sein.

    Hier mal eine Umsetzungsvariante mit einem Sub-µC ATTiny412, einer Stromversorgung Servo IDauer 1A / IPeak 1,5A. Die Stromversorgung kann zwischen 6 und 12 V betragen. Der Tiny wird mit einer RasPI Datensignal-kompatiblen Vcc von 3,3 V betrieben.

    Für den ATTiny können die Standard-Bibliotheken "Servo" der Arduino IDE verwendet werden.

    Sonderlich groß wird das ganze nicht. Durch die Datenverbindung RS232 kann das Servo auch ein ganzes Stückchen weiter weg vom RasPI zur Verwendung kommen.

    Franky

  • Heißt dass, du sendest ein PWM-Signal mit 0-100% Dutycycle? Laut Datenblatt (zumindest nach dem, das ich gefunden habe) stellt der Servo nur von 1-2 ms (bei 50 Hz=20 ms Zyklus), also von 5% bis 10%. Vielleicht ist das das Problem.

    ha, das ist das problem. in den tutorials war immer 0-100 als bereich parametriert, das funktioniert so aber nicht!

    ich hab mal 2-7 parametriert und schon geht es in die richtig richtung. welche werte muss ich jetzt für 0 bis 180° nehmen bei 50Hz?


    danke

    Charly

  • Puh, das ist mir ehrlich gesagt zu steil! Danke aber für Deine ausführlichen Ausführungen!

    lg

    charly

  • Also, wie gesagt, laut Datenblatt 5-10. Bei 7,5 bist du in der Mitte (90°), bei 5 ganz links (0°) und bei 10 ganz rechts (180°). So müsste es sein.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Moinsen,

    Bei 100 Hz oder einer anderen Frequenz passiert gar nichts bis noch weniger. Der interne Encoder ist auf diese Frequenz abgestimmt.
    Du kannst in jedes Datenblatt eines solchen Servors schauen, da steht das Verhältnis als Prozentangabe drin, wo bei diesem Typ Servos die Mittelstellung ist, davon ausgehend bestimmt sich der Weg in die ein oder andere Richtung.
    Dieser PWM Duty wird normal bei Controllern als Schrittweite in einer Bit Auflösung angegeben. Das heist bei einem 10 bit PWM Generator bewegt sich das RAW Duty zwischen 0 und 1023 was einen Taskverhältnis ( Anteil der High - Zeit zur Low - Zeit ) 0 bis 100 % entspricht. Also man muss schon etwas rechnen können. Außer du kannst in deinem Node-Red angeben wie lang dieser positive High-Anteil in nSek ist.
    Da ich aber Node Red nicht nutze, keine Ahnung auf wie viele Schritte bei dir der Bereich 0 bis 100 % aufgeteilt ist.
    Den auch der PWM Steuerchip PCA9685 den du erwähntest , aber den du nicht zum laufen bekommen hast, löst mit 12 Bit also 4096 Schritten diesen Bereich zwischen 0 und 100 % auf.

    Franky

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!