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.