Stufenloses steuern mit H-Brücke L298n PS4 Controller

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Guuuten morgen,

    Wir sind gerade dabei unser zwischen Projekt von unserer Techniker Ausbildung zu programmieren, wir arbeiten mit einer L298n Brücke um unseren Kettenantrieb unseres Roboters zu steuern. Leider ist es und nach über 15 Stunden nicht gelungen ihn stufenlos über L2/R2 zu steuern. Die werte der beiden axis wurden via pygame ausgelesen und es wird uns auch 0-100 angezeigt.

    Wir haben dafür die beiden PWM Ausgänge genutzt und sind auf ENA und ENB gegangen.

    Verstehe ich die Funktion richtig, dass wir die Motoren über In 1-4 L vorwärts L rückwärts, R vorwärts, R rückwärts.

    Über ENA und ENB muss das Signal 0-100 über die PWM Ausgänge eingebracht werden und dieser stückelt dann die Spannung zum stufenlos fahren.

    Danke im vorraus!

  • Stufenloses steuern mit H-Brücke L298n PS4 Controller? Schau mal ob du hier fündig wirst!

  • Zur hilfreichsten Antwort springen
  • Was heißt denn es geht nicht? Macht er gar keinen mucks? Oder geht nur Vollgas?

  • Aktuell haben wir ihn so am laufen, das wir via Controller

    L2 ( Links vorwärts)

    R2 ( Rechts vorwärts)

    L1 ( Links rückwärts)

    R1 (Rechts rückwärts)

    funktioniert Tadelos, allerdings bekommen wir es nicht hin die PWM daten in ENA/ENB einzulesen, somit haben wir nur 0 oder 1 keine stufenlose Steuerrung.

    da wir aktuell R2 / L2 als Button hinterlegt haben.

    Normalerweise sollten diese beiden als Axis hinterlegt sein damit man die 0-100 angezeigt bekommt.

    Da wir aber überprüfen wollten, ob das überhaupt Funktioniert haben wir das vorerst als Button deklariert.


    Im PWM script steht bei uns das . aktuell haben wir ja den Button script geladen, da es mit diesem nicht funktionierte ( er fuhr überhaupt nicht )

    ENA_PWM = GPIO.PWM (ENA,100)

    ENB PWM = GPIO.PWM (ENB,100)

    ENA_PWM.start(0)

    ENB_PWM.start(0)

    Rechts vorwärts

    if R2 < -32676 ( wert bei nicht drücken von R2 )

    GPIO.output (IN1,False)

    GPIO.output (IN2, True)


    Deklarierung der achsen

    axisR2 = 5 ( ausgelesen über jstest /dev/input/js0 )

    axisR2 = 2


    Hier sind wir uns unsicher deklarierung ENA&ENB

    ENA = 12 ( PWM0 )

    ENB = 13 ( PWM1 )

  • Das ist alles konfus. Zeig mir bitte den vollständigen Code, in den Code Tags hier. Das ist der </>-Knopf. Und dann was du für eine Fehlermeldung bekommst.

  • Das ist der Aktuelle script mit den Button als R2/L2...

  • Das ist der Script, der nicht funktioniert haben den eben noch mal versucht.

    Fehlermeldung:

    pi@raspberrypi:~ $ sudo -s

    root@raspberrypi:/home/pi# python testPanzer.py

    File "testPanzer.py", line 80

    r1 = joystick.get_button(r1)

    ^

    IndentationError: unexpected indent

    Wir haben r1 auch schon groß geschrieben, kommt die gleiche Fehlermeldung


    ***** Edit wir haben alles auf eine ebene gebracht und alles klein geschrieben, dass es im ganzen Script einheitlich steht.

    Fehlermeldungen sind jetzt soweit weg.

    aktuell haben wir noch dieses problem

    line 87, in <module>

    ENA_PWM.ChangeDutyCycle(dc)

    ValueError: dutycycle must have a value from 0.0 to 100.0


    im Script finde ich

    dc = (r2+1) *50

    ich verstehe das so, dass dort ein anderer Wert eingegeben werden muss

    4 Mal editiert, zuletzt von AkaKani (11. Mai 2020 um 13:31)

  • Und hast du die Fehlermeldung mal gegoogelt? Was Indentation ist, und welche Relevanz das für Python hat?

  • Welche Werte nimmt r2 an? Und wie sollen die auf den erlaubten Duty cycle von 0-100 abgebildet werden?

  • r2 unbetätigt

    -32767

    r2 komplett gedrückt

    32767

    50% gedrückt

    0


    wir hatten uns das so vorgestellt, dass er desto tiefer r2 gedrückt wird desto schneller soll der Roboter fahren.

  • Na dann, mal dir das mal auf. Auf der x-Achse die Werte zwischen -32... und +32..., und auf der y-Achse den gewünschten Bereich von 0-1. das ist eine gerade, und aus einem solchen Bild bekommst du die Vorstellung, wie du Steigung und Achsenabschnitt zu setzen hast, damit die Umrechnung klappt.

  • Soeben getan

    0.0 = -32767

    0.1 = -26213,6

    0.2 = -19660,2

    0.3 = -13106,8

    0.4 = -6553,4

    0.5 = 0

    0.6 = 6553,4

    0.7 = 13106,8

    0.8 = 19660,2

    0.9 = 26213,6

    1.0 = 32767


    so habe ich schon mal 10 Stellungen für den Motor, aber wie kann ich dem dc das beibringen ?

    10.0 = -26213,6

    20.0 = -19660,2

    usw... ?


    *** Vielen dank für deine schnellen Antworten!

  • Das ist eine Division, gefolgt von einer Addition. Und dann hast du einen Wert zwischen 0 und 1. Teilen durch 2**16, addieren von 0.5.

  • (-32767 / 2^16) +0.5 = 0,0000152587890625 => 0.0

    (6553,4 / 2^16) + 0.5 = 0,5999969482421875 => 0.6

    schau in deine tabelle

    --- wer lesen kann, ist klar im Vorteil ---

    --- man sollte keine Dummheit zweimal begehen, die Auswahl ist schließlich groß genug ---

    --- der Fortschritt der Menschheit ist das Werk der Unzufriedenen ---

    --- Freude entsteht aus Mangel an Information ---

    --- Scheiße ist, wenn der Furz etwas wiegt ---

  • stehe Aktuell wohl sehr auf dem Schlauch ...

    habe es eben versucht zu rechnen aber verstehe nicht was ihr mit 2^16 meint, den Gedankengang kann ich nicht nachvollziehen.

    Und ich verstehe auch nicht, in welchem Zusammenhang das mit dutycycle 0.0 - 100.0 steht....


    danke für eure schnellen Antworten! :)

  • Jetzt habe ich verstanden, was ihr meint! haben soeben mit 26213,6 gerechnet und kam auf die ( wie im Diagramm abgelesenen 0.9 )

    aber wie kann ich dem dutycycle das denn beibringen ?

    wie der das zu stückeln hat...

  • Wer muss denn da was stückeln? Du bekommst eine. Wert von 0 bis 1 und wenn du den nochmal mit 100 multiplizierst, hast du das Resultat. Oder stattdessen durch 2^16/100 teilen, und 50 addieren. Das ist ja simples umformen.

  • 0.5 x 100 = 50

    (a / 1) / (b / c) = (a x c) / b

    --- wer lesen kann, ist klar im Vorteil ---

    --- man sollte keine Dummheit zweimal begehen, die Auswahl ist schließlich groß genug ---

    --- der Fortschritt der Menschheit ist das Werk der Unzufriedenen ---

    --- Freude entsteht aus Mangel an Information ---

    --- Scheiße ist, wenn der Furz etwas wiegt ---

Jetzt mitmachen!

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