Codesys 3.4 raspbery PWM Signal erzeugen

Andrax

Level-1
Beiträge
84
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

Ich muss auf einen Raspberry pi einen Lüfter mittels PWM ansteuern.
Der Frequenzbereich ist von 2000Hz bis 5000Hz.
Ich habe das über OSCAT_BASIC PWM versucht. Dies funktioniert leider nicht, da die Fequenz dafür wahrscheinlich zu hoch ist.
Zumindest wird Pin18 nur sporadisch ein und ausgeschaltet.
Gibt es noch andere Möglichkeiten?

Grüße

Andre
 
Da OSCAT das ja direkt selbst erzeugt muss die Zykluszeit entsprechend niedrig sein. 5kHz entspricht ja einer Periode von 200 Microsekunden, die Zykluszeit muss aber noch niedriger als das sein sein, damit das funktioniert. Das das der Raspberry pi das schafft wage ich zu bezweifeln. Da wirst Du spezielle Hardware zu brauchen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das ist mir auch aufgefallen.
Ich hatte den PWM in ein extra Task ausgelagert mit einer Zykluszeit von 50us.
Nu stellt sich mir die Frage, kann Codesys den Pin18 nicht so schnell schalten oder hab ich was anderes nicht auf dem Schirm?
 
Das ist mir auch aufgefallen.
Ich hatte den PWM in ein extra Task ausgelagert mit einer Zykluszeit von 50us.
Nu stellt sich mir die Frage, kann Codesys den Pin18 nicht so schnell schalten oder hab ich was anderes nicht auf dem Schirm?
Codesys hat damit denke ich mal nichts zu tun, die Frage ist, kann der Raspi das? Was sagt das Datenblatt denn?
Bei den "normalen" Beckhoffklemmen liegen die Schaltzeiten auf jeden Fall deutlich höher.
 
GIbt es für sowas nicht spezielle PWM klemmen? 5Khz auf normalen Digouts halte ich für utopisch.
Mal abgesehen davon, hängt der PIN den im Prozessabbild der schnellen Task? Ich hatte mich bei Beckhoff da mal schwergetan mit nicht ganz so schnellen Signalen. Deren Abfrage hatte ich in der langsameren Basistask vergessen...
 
Guten Abend,

Es ist ein raspi 4. Der pin 18 (gpio) ist auf alle Fälle für PWM geeignet. Ein Mitarbeiter von uns hat da was über Python gezaubert. Ich mag allerdings Codesys nicht mit Python verwursten. Das ist für mich keine saubere Lösung.
Ich hab jetzt abends noch was über Softmotion pwm gefunden.
Lohnt es sich, das näher zu betrachten?

Gruß

Andre
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin,

ich hab eine naja gangbare Lösung für mich gefunden.
Ist jezt nicht ideal aber funktioniert.

WiringPi muss auf dem Raspi installiert sein.
Dann benötigt Codesys Zugriff auf die Console.
Dazu die sudo nano /etc/CODESYSControl.cfg editieren und folgende Zeilen anpassen bzw. ergänzen.

[SysProcess]
Command=AllowAll

Im Programm hab ich mir einen Task mit einer langsamen Zykluszeit angelegt.
PROGRAM PWM VAR Init_schritt : INT :=0; Init : STRING := 'gpio -g mode 13 pwm'; command1 : STRING := 'gpio -g pwm 13 '; command2 : STRING; Command3 : string; stdout : STRING(1000) := ''; Result : RTS_IEC_RESULT; xExecuteSysP: BOOL; xshowCPUInfo: BOOL; END_VAR VAR_INPUT END_VAR //PWM CASE Init_schritt OF 0: SysProcess.SysProcessExecuteCommand2(pszCommand:=Init, pszStdOut:=stdout, udiStdOutLen:= SIZEOF(stdout),pResult := ADR(Result)); Init_schritt :=10; 10: command2 := REAL_TO_STRING(PLC_PRG.Rampenbaustein.out); command3 := concat(command1, command2); IF PLC_PRG.Start THEN SysProcess.SysProcessExecuteCommand2(pszCommand:=command3, pszStdOut:=stdout, udiStdOutLen:= SIZEOF(stdout),pResult := ADR(Result)); END_IF END_CASE

Läuft für mich
 
Zurück
Oben