gpio pwm, Problem mit DutyCycle

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Schönen guten Abend.

    Ich habe ein kleines Problem mit dem DutyCycle meiner PWM.
    Vorab muss ich sagen, dass ich noch nicht lange mit Python unterwegs bin, verzeiht mir deshalb bitte ein kleines bisschen Unwissenheit :blush:

    Geplant ist eine Motorregelung.
    Ich beschalte einen GPIO per PWM mit 50Hz.
    Der Ausgang steuert dann über einen Transistor (IRFU 3711Z) einen Op-Amp (L165) an, der denn entsprechend des DutyCycle von 0-100% seine 0-12V ausgibt.
    Den DutyCycle steuer ich bislang in "händischen Laborversuchen" folgendermaßen an:

    Code
    p = GPIO.PWM(26, 50.0)
    p.start(1)
    p.ChangeDutyCycle(50.0)


    Nun möchte ich eine Analoge Rückführung einbinden (deswegen ja Regelung) die aus einer Datei mit einem enthaltenen Wert von 0-1023 besteht, wobei der Wert 511 anzustreben ist.
    Die Logik hinter der Regelung ist soweit kein Problem, aber ich bekomme es nicht hin, den "neuen" Wert für den DutyCycle als Variable in den Befehl einzubinden.

    Wobei wir "schön" beim Problem angekommen sind.

    Hat da irgendjemand eine Idee, wie sich das realisieren lässt?

    Liebe Grüße

    egg

  • Der RaspberryPI hat nur einen Hardware-PWM -> GPIO18 (wiringPI pin 1)
    Alle anderen GPIO Pins wären nur Software-PWM und benötigen sowas wie wiringPI


    Die GPIO's werden in ein dynamisches und vituelles Datei System verwaltet: /sys/class/gpio/
    Dort würdest du dann auch eine Datei 'value' finden in der der aktuelle Wert drin steht

  • Das ist mir so weit bekannt. WiringPi habe ich mit der Shell auch viel in Verwendung gehabt, bis ich auf Python umgeschwenkt bin.


    Mein kleines Test-Script ...

    ... ist also wie von dir erwähnt ein Software-PWM.
    Da am Ende des Tunnels eine zusammenhängende 6-Motoren-Regelung geplant ist, kann ich mich ja auch leider nicht auf den Hardware-PWM beschränken :(


    Also muss ich den neuen DutyCycle-Wert in eine Datei schreiben, und nicht in einen Befehl reinquetschen?

    Was Du da machst ist imho nichts anderes als eine D/A-Wandlung,

    Das ist mir bekannt.
    PWM ist für mich (bis jetzt) der einfachste Weg, einen Digitalausgang in einen Analogausgang umzuwandeln, den der Pi ja in der Form leider nicht hat.


    egg

    Einmal editiert, zuletzt von egg-91 (16. Dezember 2013 um 20:49)

  • Nun, wenn es aber doch scheinbar nur darum geht, einen digitalen Wert in eine Spannung umzuwandeln, kannst Du Dir den PWM Krams ja sparen, oder sehe ich das falsch?
    Da wäre es imho doch wesentlich einfacher einen simplen D/A-Wandler mit IIC-Schnittstelle zu nehmen (z.B. diesen hier) und gut is ...

    BTW: Wenn Du wirklich sechs PWM-Signale brauchst, kannst Du wiringPi eh vergessen. Da wirst Du wohl auf pigpio o.ä. ausweichen müssen.

    //EDIT:
    Quatsch ... du brauchst natürlich das Pendant zum PCF8591 ... also z.B. so was hier ... junge, junge ... Zeit fürs Bett, ich lass nach :) ...

    cu,
    -ds-

  • Das heißt, durch sechs PCF 8591 P parallel auf den I²C-Pins angeschlossen, habe ich meine sechs analogen Ausgänge die ich durch einen Schreibbefehl in eine Datei direkt programmieren kann?

    Und wenn mich nicht alles täuscht, kann ich meine Op-Amp-Schaltung bis auf ein paar Widerstände so übernehmen.

    Oder habe ich da jetzt einen Denkfehler drin?

    egg

  • Sorry, ich hatte den falschen verlinkt.
    Sechs mal das PCF8591 Modul wird nicht funktionieren, weil ich befürchte, dass man den Modulen nicht so viele verschiedene Addressen zuordnen kann.
    Du bräuchtest also das Pendent zum PCF8591 - wie ich ja im edit angemerkt habe.
    D.h. mit z.B. 2 D/A-Wandler-Chips mit jeweils 4 D/A-Wandlern kannst Du bis 8 Spannungen erzeugen.
    Du schreibst einfach den digitalen Wert über IIC auf den Baustein, und der regelt daraufhin seinen Ausgang entsprechend.

    Müsste halt mal recherchiert werden, was es da so gibt ...
    cu,
    -ds-

Jetzt mitmachen!

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