PWM Regelung

Moderator: RevPiModIO

Post Reply
Jacqueline
Posts: 2
Joined: 22 Jun 2020, 08:48

PWM Regelung

Post by Jacqueline »

Hallo,
besteht die Möglichkeit über die die RevPiModIO2 die Frequenz und die Impulslänge des PWM Signals zu ändern/definieren?
Falls ja, welche Codezeilen muss ich für die beiden Faktoren nutzen.

Vielen Dank,
Jacqueline
User avatar
RevPiModIO
KUNBUS
Posts: 335
Joined: 20 Jan 2017, 08:44
Contact:

Re: PWM Regelung

Post by RevPiModIO »

Moin Jacqueline!

Als erstes musst du in piCtory beim MEM "OutputPWMActive" einen Wert eintragen um zu bestimmen, welche Ausgänge überhaupt PWM machen sollen. Der Wert muss als Zahl eingegeben werden, dabei bestimmen die einzelnen BITs, ob einer der (theoretisch) 16 Ausgängen für PWM aktiviert wird. Jedes aktive Bit konfiguriert den Ausgang für PWM.
Wenn der erste Ausgang für PWM aktiviert werden soll, trägts du als Wert eine 1 ein. Wenn du Ausgang 1 und 4 als PWM nutzen möchtest, musst da 9 eingegeben werden (Ausgang 1 = 1 | Ausgang 4 = 8).

Die PWM Frequenz wird im MEM "OutputPWMFrequency" konfiguriert.

Wenn das erledigt ist und alles gespeichert und "Reset Driver" gemacht wurde, kannst du über die Ausgänge "PWM_x" (In unserem Beispiel "PWM_1" und "PWM_4") die Puls-Pause Zeit über dein Python-Programm regeln. Dabei meine ich sind zahlen von 0 - 100 möglich :D

Gruß, Sven
python3-RevPiModIO - https://revpimodio.org/ || Der RevPi ist das Beste, was passieren konnte!
Jacqueline
Posts: 2
Joined: 22 Jun 2020, 08:48

Re: PWM Regelung

Post by Jacqueline »

Hi,
vielen Dank für deine Antwort.
Ich glaube meine Frage ist nicht so ganz deutlich geworden.
Ich möchte gerne eine Ausgangsfrequenz von 50 Hz einstellen.
In PicTory kann ich ja nur 40 Hz, 80Hz, ... einstellen.
Besteht die Möglichkeit das im Skript auf 50 Hz zuändern ?

Im Falle von der GPIO bib beim Raspi kann ich das ja so machen:
servoPIN = 17
p = GPIO.PWM(servoPIN, 50) # GPIO 17 als PWM mit 50Hz

Anschließend möchte ich die Pulse-Pause-Zeit ändern.
Bei der GPIO funktioniert das ja wie folgt:
p.start(2.5)
p.ChangeDutyCycle(5)

Wenn ich die Revpimodio2 nutze mache ich das dann über den folgenden Code (Pulse-Pause-Zeit)?
rpi.io.PWM_1.value=5

Vielen Dank für die Rückmeldung.
Jacqueline
User avatar
RevPiModIO
KUNBUS
Posts: 335
Joined: 20 Jan 2017, 08:44
Contact:

Re: PWM Regelung

Post by RevPiModIO »

Moin Jacqueline!

Es ist, wie du es schreibst, aber die Hardware vom RevPi ist eben etwas anders aufgebaut. Beim Raspberry Pi benutzt du ja direkt alles von der CPU für deine GPIO, der hat ja sogar an einigen Pins ein Hardware PWM. Das kannst du, wie du oben schreibst über die GPIO Bibliothek frei einstellen.

Hier arbeiten wir etwas anders. Die DO/DIO Module haben eine echte Hardware PWM integriert. Das passiert nicht im RevPi und dementsprechend nicht über RevPiModIO (Außer den Wert für die Puls-Pause-Zeit einstellen).

Deine Zeile "p = GPIO.PWM(servoPIN, 50) # GPIO 17 als PWM mit 50Hz" müsstest du, auf den RevPi übertragen, wie folgt interpretieren:
- servoPIN = Ausgang 1 auf dem DO/DIO Modul, dann muss im piCtory der MEM "OutputPWMActive" den Wert 1 erhalten
- 50 = Herz, da kannst du aber nur die Werte wählen, die dir der MEM "OutputPWMFrequency" anbietet

Diese Werte sind (beim RevPi) fest über die Hardware zu konfigurieren und können nicht mit Steuerungsprogrammen angepasst werden (egal ob Python oder was anderes)! Da müsstest du evtl. einmal auf Kunbus zugehen.

Als letztes das Puls-Pause Verhältnis, dessen Wert dann über das Steuerungsprogramm gegeben wird, wie du es schon geschrieben hast:

p.ChangeDutyCycle(5) wird mit rpi.io.PWM_1.value=5 ersetzt. Damit erhält das DO/DIO Modul den Wert 5 und dessen Hardware PWM arbeitet das dann ab, direkt im Modul und 100% genau ;)

Gruß, Sven
python3-RevPiModIO - https://revpimodio.org/ || Der RevPi ist das Beste, was passieren konnte!
Post Reply