PWM mit dem Raspberry Pi erzeugen

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1430
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

PWM mit dem Raspberry Pi erzeugen

Beitrag von fliegermichl »

Hallo,

hat das schonmal jemand hinbekommen? Ich hab gestern den ganzen Tag versucht dem Raspberry Pi eine 30 Khz PWM zu entlocken. Es ist mir nicht gelungen.

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: PWM mit dem Raspberry Pi erzeugen

Beitrag von mschnell »

fliegermichl hat geschrieben: Ich hab gestern den ganzen Tag versucht dem Raspberry Pi eine 30 Khz PWM zu entlocken. Es ist mir nicht gelungen.

Auf welchem Pin ?
Mit welcher Chip-internen Hardware (per GPIO und Software wird es nicht sinnvoll funktionieren) ?
-Michael

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1430
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: PWM mit dem Raspberry Pi erzeugen

Beitrag von fliegermichl »

So wie ich das gelesen habe, gibt es nur einen PWM Pin. GPIO18 (Pin 12 am GPIO Adapter)
Wenn ich

Code: Alles auswählen

 
gpio mode 18 output
gpio write 18 1
gpio write 18 0
 


schreibe (oder das über die virtuellen Dateien in /sys/class/gpio) in meinem Lazarusprogramm mache) kann ich den Pegel am Pin mit High und Low messen (bzw. sehe es am Oszilloskop)
aber keines der Beispiele die ich finden konnte hat mir eine funktionierende PWM generiert. PascalIO bekomme ich noch nicht mal compiliert.

Eigentlich wäre ein Arduino für meine Anwendung viel praktischer, den kann ich aber nicht per Wifi erreichen.

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: PWM mit dem Raspberry Pi erzeugen

Beitrag von pluto »

Eigentlich wäre ein Arduino für meine Anwendung viel praktischer, den kann ich aber nicht per Wifi erreichen.

Es gibt auch auch noch die ESP8266(Die sind W-Lan fähig) die deutlich mehr können als eine Arduino und viel Günstiger sind.
Außerdem gibt es da noch die Cortex M "Reihe".... davon habe ich bisher nur Gehört. Dort gibt es MCU'S die haben eingebauten funk auf 2,4 GHZ..... da hat man deutlich mehr Kontrolle als beim ESP8266....

Wenn du dir einen Zulegen möchtest, würde ich dir zu einem Wemos D1 mini raten., wie der Analoge Eingang ist, weiß ich nicht, ich weiß nur:
Es wird nur ein Pin rausgeführt und du musst dort mit der Spannung aufpassen.... Bei den NodeMCU'S ist es wohl noch kritischer als bei den Wemos D1 mini, obwohl sie beiden den ESP8266-12E Mod verwenden. Der beim Wemos D1 Mini kann bis 3,3 Volt am Eingang genutzt werden bei den NodeMCU's leider nur bis 1,1 Volt oder so...

Falls du noch mehr Leistung brauchst als der ESP8266 Zuverfügung stellt, da gibt es auch noch die ESP32. Die haben neben W-Lan auch noch Blauen Zahn... und sind noch mal um einiges schneller.

Edit: Hinweis, es gibt auch noch externe ADC Module die per SPI oder I2C Arbeiten die vielleicht auch mit dem PI Funktionieren.
MFG
Michael Springwald

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: PWM mit dem Raspberry Pi erzeugen

Beitrag von Warf »

fliegermichl hat geschrieben:So wie ich das gelesen habe, gibt es nur einen PWM Pin. GPIO18 (Pin 12 am GPIO Adapter)
Wenn ich

Code: Alles auswählen

 
gpio mode 18 output
gpio write 18 1
gpio write 18 0
 


schreibe (oder das über die virtuellen Dateien in /sys/class/gpio) in meinem Lazarusprogramm mache) kann ich den Pegel am Pin mit High und Low messen (bzw. sehe es am Oszilloskop)
aber keines der Beispiele die ich finden konnte hat mir eine funktionierende PWM generiert. PascalIO bekomme ich noch nicht mal compiliert.

Eigentlich wäre ein Arduino für meine Anwendung viel praktischer, den kann ich aber nicht per Wifi erreichen.


Der Raspi sollte das auch für die meisten geräte ausreichend genau können. Zum einen kann man den PWM prozess eine hohe priorität geben, in kombination mit busy waiting (also nicht sleep verwenden sondern while (timeelapsed < timeToSwitch) do NOOP; ) und wenn das auch nicht reicht kann man ja einfach den interrupthandler für einen der Hardware timer des Raspis registrieren. Wenn ich mich richtig erinnere gibts ein Programm fürn raspi die genau das macht.

Zum thema arduino (bzw. microcontroller, man muss sich ja nicht die teuren arduinos holen, ein billiger kompatibler elegoo oder direkt ein bare Atmega auf nem testbed tuts auch und kostet nur ein zehntel), da gibt es auch mehr optionen. pluto hat bereits den esp angesprochen, das ist aber keine avr architektur, wenn du also eine avr architektur möchtest (z.B. weil du bereits schon ne menge avr code rumfliegen hast) ist der nix für dich. Daher wird oft gerne ein esp für das wifi verwendet und ein avr für die programmlogik, und die kommunizieren dann über z.B. seriellen anschluss. da sowohl der avr als auch der esp jeweils <3€ kosten sollten ist das preislich auch kein großer mehraufwand.

Ich persönlich bin mehr ein freund von avrs, weil ich die mit Atmel Studio in C++ programmieren kann. Für den esp gibt es zwar auch einen C++ compiler, allerdings fehlen einem dann die ganzen features der IDE.

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: PWM mit dem Raspberry Pi erzeugen

Beitrag von pluto »

(z.B. weil du bereits schon ne menge avr code rumfliegen hast) ist der nix für dich.

In der Regel ist der Arduino avr code aber durchaus mit dem ESP Kompatibel... Nur die Pins müssen Angepasst werden.
Es sei denn, du verwendest sehr oft ASM.

Daher wird oft gerne ein esp für das wifi verwendet und ein avr für die programmlogik, und die kommunizieren dann über z.B. seriellen anschlus

Das habe ich nur am Anfang vor ein paar Jahren mal gemacht. Das macht aber heute kaum noch jemand, weil die ESP den Arduino einfach überlegen ist. der ESP kann bis zu 160 mhz Arbeiten.
In der Regel wird aber mit 80 mhz. gearbeitet. Es gibt 1 mb Flash Speicher... Da kann ein AVR nicht mithalten.
Und der ESP selbst ESP Boards kosten nur ein Bruchteil. Von einem Arduino.

Für den esp gibt es zwar auch einen C++ compiler, allerdings fehlen einem dann die ganzen features der IDE.

Wer braucht schon eine IDE? Die Arduino IDE bezeichne ich nicht als IDE.... Weil es einfach nur ein Editor ist mit ein paar Extras.
MFG
Michael Springwald

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: PWM mit dem Raspberry Pi erzeugen

Beitrag von Socke »

fliegermichl hat geschrieben:PascalIO bekomme ich noch nicht mal compiliert.

Das sollte sich mit einem Update behoben haben 8).

Für PWM sind dort (noch) keine Klassen enthalten; Soft-PWM sollte sich aber realisieren lassen.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: PWM mit dem Raspberry Pi erzeugen

Beitrag von Warf »

pluto hat geschrieben:In der Regel ist der Arduino avr code aber durchaus mit dem ESP Kompatibel... Nur die Pins müssen Angepasst werden.
Es sei denn, du verwendest sehr oft ASM.

[...]

Wer braucht schon eine IDE? Die Arduino IDE bezeichne ich nicht als IDE.... Weil es einfach nur ein Editor ist mit ein paar Extras.

Ich benutze kein Arduino C++, sondern arbeite viel lieber auf dem bare metal mit dem avr-gcc. Und da unterscheiden sich ESP und avr-C doch schon mehr.

Und eine IDE kann grade wenn man richtig C++ verwendet (operatoren überladen, templates, Klassenvererbung, etc.) sehr viel hilfreicher sein da es schnell unübersichtlich werden kann, bzw. die IDE dir sachen sagt die du sonst nicht bemerkt hättest. Und mindestens die Autovervollständigung brauche ich (darum benutz ich sogar lieber vim als Arduino IDE, da vim selbst mit standard konfiguration viel mehr kann)

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: PWM mit dem Raspberry Pi erzeugen

Beitrag von pluto »

Ich benutze kein Arduino C++, sondern arbeite viel lieber auf dem bare metal mit dem avr-gcc. Und da unterscheiden sich ESP und avr-C doch schon mehr.

Das Stimmt natürlich...

Und eine IDE kann grade wenn man richtig C++ verwendet (operatoren überladen, templates, Klassenvererbung, etc.) sehr viel hilfreicher sein da es schnell unübersichtlich werden kann, bzw. die IDE dir sachen sagt die du sonst nicht bemerkt hättest.

Eben, darum bezeichne ich die Arduino IDE auch nicht als IDE.... sondern nur als Erweiterter Text Editor.

Und mindestens die Autovervollständigung brauche ich (darum benutz ich sogar lieber vim als Arduino IDE, da vim selbst mit standard konfiguration viel mehr kann)

Ja, aber wie lange hast du gebraucht um dich in vim einzuarbeiten?
MFG
Michael Springwald

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: PWM mit dem Raspberry Pi erzeugen

Beitrag von Warf »

pluto hat geschrieben:Ja, aber wie lange hast du gebraucht um dich in vim einzuarbeiten?


Es geht, ich kann vim lang nicht so gut wie ich es gerne könnte, aber es ist vor allem eine gewöhnungssache, es ist nicht mal so schlimm wie man meint. Solang man maus modus aktiviert und verstanden hat wie die verschiedenen modes funktioniert hat kann man in der grundkonfiguration (mit googlen) nach ein paar tagen schon die selbe funktionalität wie mit der Arduino IDE. kompliziert wirds erst wenn man sich plugins, die vim language und die ganzen profi tricks aneignen will. Dazu war ich bisher auch zu faul, ich kann praktisch nicht viel mehr als copy&paste, allgemeines navigieren, tabs und code vervollständigung, zusammen mit ein paar basic tmux commands ist das meine dritt liebste C(++) entwicklungsumgebung (direkt nach Visual Studio und XCode). Auf jeden fall besser (schneller, einfacher) als z.B. Eclipse oder Netbeans.

Da sieht man aber auch mal wie verwöhnt man mit Lazarus ist, ich kenn kaum eine IDE die kostenlos, open Source und so einfach in der benutzung wie Lazarus ist (während ich z.T. immernoch am projekt management von eclipse verzweifle)

Aber mal was anderes, kennst du dich mit der PIC architektur von microchip aus? von denen gibts ja auch einige uC's mit integriertem wifi. Persönlich hab ich die aber noch nie benutzt

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: PWM mit dem Raspberry Pi erzeugen

Beitrag von pluto »

Aber mal was anderes, kennst du dich mit der PIC architektur von microchip aus? von denen gibts ja auch einige uC's mit integriertem wifi. Persönlich hab ich die aber noch nie benutzt

Nein, damit habe ich noch nie gearbeitet, aber ich kenne jemand der das schon öfter gemacht hat und von den soweit ich weiß nicht so begeistert waren.
Was hast du vor? Musst du die nehmen? Im Verein(KTT) Arbeiten wir in der Regel mit den ESP8266 oder aber auch viel mit AVR einige z.b. auch direkt mit STM32, davon habe ich sogar auch schon einige Bords gekauft.

Interessant sind hier die gewaltigen unterscheide zu den AVR. Wobei die AVR'S gelten als veraltet und überteuert.

Bei den PIC weiß ich nur, dass der Einstieg noch schwer ist als beim STM32 und das die (meine ich) nicht so leicht programmiert werden können...
bei dem STM32 und den AVR's reicht ja z.b. ein einfacher Prorgammer wie der Nano oder ein andere STM32 völlig aus(soweit ich es bisher beurteilen kann).
MFG
Michael Springwald

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: PWM mit dem Raspberry Pi erzeugen

Beitrag von mschnell »

Warf hat geschrieben: in kombination mit busy waiting (also nicht sleep verwenden

Das geht leider gar nicht !
Dauerndes Busy wait ist in einem Linux System ein absolutes NoGo: alles andere wird lahmgelegt, außer es hat eine höhere Priorität, und wenn anderes (z.B. das Betriebssystem :) ) eine höhere Priorität hat ist der Sinn von busy wait für Timing dahin.
30 KHz PWM ist nur machbar, wenn man eine entsprechende Hardware (PWM-Timer-Ausgang) oder (wie bei einem BeagleBone) einen Coprozessor verwendet.
-Michael

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1430
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: PWM mit dem Raspberry Pi erzeugen

Beitrag von fliegermichl »

Ich wollte das schon mit Hardware machen lassen.
Man kann ja

Code: Alles auswählen

 
gpio mode 18 pwm
gpio pwm 18 512
 


Da gibt es auch keine Fehlermeldungen oder sowas aber auch keine pwm. Irgendwo scheint noch etwas zu fehlen.

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1430
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: PWM mit dem Raspberry Pi erzeugen

Beitrag von fliegermichl »

Ich hab im Internet ein Python Script gefunden. Da wird die pwm anscheinend aber auch per Software gemacht.
Wenn ich eine Frequenz von 5KHz eingebe, dann zeigt mein Oszilloskop diese auch fast an. Wenn ich eine Frequenz von 30KHz eingebe, zeigt das Oszilloskop etwas zwischen 7,16 und 7,2 KHz an und die Prozessorlast geht deutlich hoch.

Ich habe aber irgendwo gelesen, daß am GPIO Pin 18 (Pin 12 auf der Steckerleiste) eine per Hardware generierte pwm ausgegeben werden kann.

Ich könnte natürlich zusätzlich noch einen AVR dazunehmen. Aber das ist verdammt viel Overkill um ein Garagentor auf und zu zu machen :-)

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: PWM mit dem Raspberry Pi erzeugen

Beitrag von mschnell »

fliegermichl hat geschrieben:Ich wollte das schon mit Hardware machen lassen.
Man kann ja

Code: Alles auswählen

 
gpio mode 18 pwm
gpio pwm 18 512
 


Da gibt es auch keine Fehlermeldungen oder sowas aber auch keine pwm. Irgendwo scheint noch etwas zu fehlen.

Das heißt nicht, dass der Linux-Treiber tatsächlich Hardware verwendet. Er könnte es auch per Software simulieren. Für langsame Frequenzen (10 Hz oder so) wäre das auch OK. Du müsstest Dir die Dokumentation oder den C-Sourcecode des Treibers anschauen.

-Michael

Antworten