So. Etwas länger drüber nachgedacht und überschlafen, die Lösung dann erträumt

Erkenntnis: die Aufgabe ist doch lösbar.
Da die PWM-Frequenz gleich bleibt, braucht man nur die Pulslänge messen (und könnte den Rest bei Bedarf ausrechnen). Die Pulslänge alleine ist aber schon ausreichend. Der Wert ist proportional zur Pulslänge.
Eckdaten: PWM-Frequenz 73.3 Hz = 13.64 ms * 0.4 ms Zählpulse = max 34.1 Pulse je PWM-Periode
Kurzbeschreibung:
In HW Konfig einen schnellen Kanal auf Ausgabe von 2.5 kHz (T=0.4 ms) 50% Puls/Pause einstellen
Betriebsart: Pulsweitenmodulation , Periodendauer: 4 x 0.1ms, Mindestimpulsdauer: 2 x 0.1ms, (SFB49 ist dann vermutlich nicht nötig, oder muß das Softwaretor geöffnet werden?)
den Digitalausgang zurück auf Zählkanal 2 Eingang verdrahten
das PWM-Signal auf HW Tor Zählkanal 2 verdrahten
In HW Konfig den Zählkanal 2 einstellen:
- endlos zählen
- Prozessalarm bei HW Tor öffnen --> alle 13.64 ms wird dann OB40 aufgerufen
Im Prozessalarm OB40 (alle 13.64 ms) prüfen ob der Prozessalarm vom Zählkanal 2 kommt.
( siehe das Handbuch Kapitel "5.8.4 Prozessalarm projektieren", und hier Forumssuche nach "OB40_MDL_ADDR" )
Wenn ja, den Zählerstand aus der Peripherie lesen (PED776 ?? untere 16 Bit würden auch reichen), Differenz zu Zählerstand vorher bilden (max 34, auch bei Überlauf immer positiv) und in eine Variable für OB1 speichern, neuen Zählerstand speichern
Tip: Für mehr Messwert-Genauigkeit/Glättung/Beruhigung 10 Messperioden je 10*13.6 ms = 136 ms ineinander schachteln. Ringpuffer (Array) für ca. 10 Werte Start-Zählerstand für 10 Differenzen. So gibt es alle 13.6 ms einen neuen Messwert mit Messzeit 136 ms. Das Arbeiten mit dem Ringpuffer multitasking-sicher im OB40 programmieren.
Im OB1 skalieren: ungefähr 0/1..34 = 0..100%
Das sollte so funktionieren und für den Lüfter genau genug sein.
Was noch zu klären ist:
- Wie groß/kurz ist die Mindest-Pulsdauer des PWM-Signals?
- Wie verhält sich das Signal bei 100% ? Mindest-Pausendauer?
Harald