PWM mit Peridondauer Auflösung im mikrosekunden Bereich

Bartinli

Level-1
Beiträge
5
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Freunde,

kurz zu meinem Problem ich nutze eine Schneider SPS auf Codesys Basis und möchte dort über eine PWM eine LED ansteuern. Allerdings möchte ich bei der PWM die Frequenz mit einer Auflösung von 1mHz genau einstellen können. Das entspricht dann einer Einstellung der Periodendauer im mikrosekunden Bereich. Mit den fertigen Bibliothek Bausteinen ist die Auflösung nicht gegeben. Weil ich ja die Taskzykluszeit auf minimal einstellen 1 ms einstellen kann. Gibt es einen Trick, dass dies trotzdem ermöglicht wird. Ich wäre für jede Idee dankbar.

Viele Grüße
Bartinli
 
Allerdings möchte ich bei der PWM die Frequenz mit einer Auflösung von 1mHz genau einstellen können. Das entspricht dann einer Einstellung der Periodendauer im mikrosekunden Bereich.
Nicht wirklich. 1 Hz ist eine Periode pro Sekunde und 1 mHz ist 1 Periode pro 1000 Sekunden. Letzteres kann eine SPS locker.
Aber Dein Ziel bewegt sich am anderen Ende der Skala und ist nicht wirklich für eine SPS-Lösung geeignet - wie Du selbst schon schreibst.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Eine übliche SPS kann das nur mit spezieller PWM Hardware, wo man die PWM-Frequenz einstellen kann und dann der Hardware-Kanal unabhängig vom SPS-Zyklus das Ausgangssignal erzeugt.

Was für Hardware/Baugruppen/Module hast Du?

Harald
 
Nicht wirklich. 1 Hz ist eine Periode pro Sekunde und 1 mHz ist 1 Periode pro 1000 Sekunden. Letzteres kann eine SPS locker.
Aber Dein Ziel bewegt sich am anderen Ende der Skala und ist nicht wirklich für eine SPS-Lösung geeignet - wie Du selbst schon schreibst.

Danke zunächst für die Antwort. Nein es geht darum in 1mHz Schritten einzustellen nicht auf 1mHz. Beispielweise 3,215Hz von 3,214Hz zu unterscheiden
 
Zuletzt bearbeitet:
Eine übliche SPS kann das nur mit spezieller PWM Hardware, wo man die PWM-Frequenz einstellen kann und dann der Hardware-Kanal unabhängig vom SPS-Zyklus das Ausgangssignal erzeugt.

Was für Hardware/Baugruppen/Module hast Du?

Harald
Danke das habe ich mir auch schon gedacht. Das Modul ist eine M241 mit speziellen schnellen digitalen Ausgängen, die können zwar hohe Frequenzen, aber nur in 0,1Hz Schritte. Es gibt wahrscheinlich keinen wirklich Trick ohne zusätzliche oder andere Hardware oder?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nein es geht darum in 1mHz Schritten einzustellen nicht auf 1mHz.
Eigentlich geht es bei PWM darum, nicht die Frequenz der Periode zu ändern, sondern das Verhältnis der "Eingeschaltet-Dauer" zur PeriodenDauer.
Du möchtest also vermutlich die "Eingeschaltet-Dauer" in ms-Schritten variieren können bei einer konstanten PeriodenDauer von 1 s.
Deine Anwendung (LED) ist wahrscheinlich nur ein "bescheidenes" Beispiel, denn die wahrnehmbare Frequenz ist dann 1 Hz, wohingegen die Abstufungen in Tausendstel wohl kaum wahrnehmbar sein dürften - als DimmFunkton sagen wir mal "unangenehm".
Wenn man eine so feine Abstufung benötigt, ist eine PWM per SPS ziemlich ungeeignet. Sie ist ohnehin nur als Kompromiss zu verstehen, quasi eine behelfsmässige Lösung, die den Aufwand für eine analoge Ausgabe auf den Aufwand für eine digitale Ausgabe reduzieren soll. Diese Vereinfachung damit zu erkaufen, dass man in (z.Z. noch) utopische oder zumindest grenzwertige Bereiche der ZyklusZeit bzw. der HardwareReaktionsZeit investieren muss ... na ja, das muss jeder selbst abwägen.
Wenn der SPS-Zyklus sich ausser um die PWM-Ausgabe noch um andere Aufgaben kümmern muss, dann spätestens sollte man auch in Betracht ziehen, ob nicht daraus ein Jitter der ZyklusZeit entsteht, der einem ohnehin die angestrebte Genauigkeit "kaputt" macht.
Tricks für die Umsetzung in einer SPS wüsste ich nicht, verschiedene Varianten schon:
- 2 Timer, einen für die GesamtDauer einer Periode, einen für die "Eingeschaltet-Dauer".
- 2 Timer, einen für die "Eingeschaltet-Dauer", einen für die "Ausgeschaltet-Dauer".
- 1 Zähler, der die gesamte PeriodenDauer zählt und in der nächsten Periode wieder etc. .... Die Periode beginnt mit "eingeschaltet" und abgeschaltet wird bei Erreichen bzw. Überschreiten des gewünschten Wertes.
- 1 Zähler, der endlos läuft und den man per Modulo-Funktion auf die PeriodenDauer begrenzt - ansonsten wie oben beschrieben.
- Die SystemZeit, von der man z.B. die ms auswertet und als Zähler "missbraucht" - ansonsten s.o..
Generell muss man aber beachten, dass man es mit 1 Fall mehr zu tun hat, als man zunächst vielleicht denkt:
Will man z.B. in ProzentSchritten abstufen, so kann man 0 bis 99 oder 1 bis 100 mit 100 Stufen realisieren. Aber man möchte 0 bis 100 realisieren - und das sind 101 verschiedene Stufen und erfordert ggfs eine SonderBehandlung für 0% bzw. 100%!
Bei dem Lösungsweg mit einem Timer für die GesamtDauer einer Periode ist zu beachten, dass man nicht einen "LeerZyklus" einbaut, in dem der Timer zwar abgelaufen ist, aber noch nicht wieder neugestartet wurde.
 
Zuletzt bearbeitet:
Eigentlich geht es bei PWM darum, nicht die Frequenz der Periode zu ändern, sondern das Verhältnis der "Eingeschaltet-Dauer" zur PeriodenDauer.
Du möchtest also vermutlich die "Eingeschaltet-Dauer" in ms-Schritten variieren können bei einer konstanten PeriodenDauer von 1 s.
Deine Anwendung (LED) ist wahrscheinlich nur ein "bescheidenes" Beispiel, denn die wahrnehmbare Frequenz ist dann 1 Hz, wohingegen die Abstufungen in Tausendstel wohl kaum wahrnehmbar sein dürften - als DimmFunkton sagen wir mal "unangenehm".
Wenn man eine so feine Abstufung benötigt, ist eine PWM per SPS ziemlich ungeeignet. Sie ist ohnehin nur als Kompromiss zu verstehen, quasi eine behelfsmässige Lösung, die den Aufwand für eine analoge Ausgabe auf den Aufwand für eine digitale Ausgabe reduzieren soll. Diese Vereinfachung damit zu erkaufen, dass man in (z.Z. noch) utopische oder zumindest grenzwertige Bereiche der ZyklusZeit bzw. der HardwareReaktionsZeit investieren muss ... na ja, das muss jeder selbst abwägen.
Wenn der SPS-Zyklus sich ausser um die PWM-Ausgabe noch um andere Aufgaben kümmern muss, dann spätestens sollte man auch in Betracht ziehen, ob nicht daraus ein Jitter der ZyklusZeit entsteht, der einem ohnehin die angestrebte Genauigkeit "kaputt" macht.
Tricks für die Umsetzung in einer SPS wüsste ich nicht, verschiedene Varianten schon:
- 2 Timer, einen für die GesamtDauer einer Periode, einen für die "Eingeschaltet-Dauer".
- 2 Timer, einen für die "Eingeschaltet-Dauer", einen für die "Ausgeschaltet-Dauer".
- 1 Zähler, der die gesamte PeriodenDauer zählt und in der nächsten Periode wieder etc. .... Die Periode beginnt mit "eingeschaltet" und abgeschaltet wird bei Erreichen bzw. Überschreiten des gewünschten Wertes.
- 1 Zähler, der endlos läuft und den man per Modulo-Funktion auf die PeriodenDauer begrenzt - ansonsten wie oben beschrieben.
- Die SystemZeit, von der man z.B. die ms auswertet und als Zähler "missbraucht" - ansonsten s.o..
Generell muss man aber beachten, dass man es mit 1 Fall mehr zu tun hat, als man zunächst vielleicht denkt:
Will man z.B. in ProzentSchritten abstufen, so kann man 0 bis 99 oder 1 bis 100 mit 100 Stufen realisieren. Aber man möchte 0 bis 100 realisieren - und das sind 101 verschiedene Stufen und erfordert ggfs eine SonderBehandlung für 0% bzw. 100%!
Bei dem Lösungsweg mit einem Timer für die GesamtDauer einer Periode ist zu beachten, dass man nicht einen "LeerZyklus" einbaut, in dem der Timer zwar abgelaufen ist, aber noch nicht wieder neugestartet wurde.

Es geht nicht um eine Dimmfunktion. Ich möchte tatsächlich die Frequenz und damit die Periodendauer exakt in mikrosekunden Bereich variieren. Das Duty-Cycle soll veränderbar sein, allerdings eher selten geändert werden. Damit ändert sich eigentlich mit der Periodendauer auch die Einschaltdauer, wenn ich das Duty-Cycle gleich halte.
Das Anwendungsszenario ist richtig beschrieben. Bei einer einfachen Dimmfunktion ändert man natürlich nur das Duty-Cyle und sucht sich eine Freuquenz aus, die der Mensch nicht wahrnimmt.
 
Bei den Anforderungen ist eine SPS ungeeignet. Dazu solltest Du dich mal mit FPGA Schaltkreisen beschäftigen. ;-)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich möchte tatsächlich die Frequenz und damit die Periodendauer exakt in mikrosekunden Bereich variieren. Das Duty-Cycle soll veränderbar sein, allerdings eher selten geändert werden. Damit ändert sich eigentlich mit der Periodendauer auch die Einschaltdauer, wenn ich das Duty-Cycle gleich halte.
Zugegeben, ich habe mich durch den Begriff PWM irritieren lassen und den Begriff µs gar nicht so sehr beachtet.
Bei einer ZyklusZeit von 1 ms kannst Du maximal 500 Hz ausgeben. Von µs kannst Du da nur träumen.
Selbst, wenn Dein Programm sich voll auf die Aufgabe konzentrieren kann und nichts anderes tut, als die Impulse auszugeben - das BetriebsSystem braucht auch seine Zeit und ist alles andere, als für Deine Anwendung massgeschneidert.
Du könntest mehrfach pro Zyklus den Ausgang ein- und ausschalten (vorausgesetzt die Hardware des Ausgangs ist schnell genug), aber damit mache ich Dir vermutlich unnötig Hoffnung. Denn die Periode des Zyklus von 1 ms bleibt, aber innerhalb dieser Periode könntest Du Impulse senden. Das ist aber ziemlich an Deiner Anforderung vorbei, weil sich das Variieren der ImpulsAbstände nicht so ganz leicht realisieren lässt und immer ein Rest des Zyklus bleibt, auf den Du keinen Einfluss hast. Und die ZyklusZeit müsste nach Deinen Vorstellungen wohl immer genau ein ganzzahliges Vielfaches der ImpulsAbstände ergeben?
Eine SPS scheint nicht das richtige Mittel zur ProblemLösung zu sein. Ich glaube, Du wärst in einem µProzessor-Forum besser aufgehoben.

Gruss, Heinileini
 
Vielen Dank für die Antworten vom ähnlichen bin ich auch ausgegangen. Dachte vielleicht gibt es da doch irgendwie ein Trick das zu realisieren. Danke werde wohl auch nach Lösungen außerhalb der SPS suchen.
Gruß
Bartinli
 
Zurück
Oben