PWM Signale auswerten

OP #1008171
Lesenswert?

Hallo,
ich habe gleichzeitig von einem anderen Gerät 12 PWM-Signale.
Die Frequenzen dieser Signale betragen 100Hz, 250Hz und 150Hz.
Ich möchte das Puls zu Gesamtdauer messen. Welche Möglichkeit habe ich, 
das mit Digitaleingängen zu machen?

Analog währe keine Option, dazu müsste ich die Signale jeweils mit einem 
Tiefpass "analogisieren" und dann brauche ich 12 Analogeingänge.
Moderator (Firma: Titel) Persönliche Seite #1008198
Lesenswert?

> Ich möchte das Puls zu Gesamtdauer messen.
Welche Auflösung (8,10,16 Bit)?
Wie werden die gewonnenen Daten weiterverarbeitet?

> Welche Möglichkeit habe ich, das mit Digitaleingängen zu machen?
Nimm die Digitaleingänge eines uC und lass auf dem einen Timerinterrupt 
mit (1/250Hz)/(gewünschte Auflösung) laufen (z.B.  4ms/8 Bit = 16us). In 
der Timer-Interruptroutine schaust du jetzt nach, ob du einen Low- oder 
High-Pegel am Pin hast und zählst einen entsprechenden Zähler hoch. An 
jeder steigenden Flanke übernimmst du die aktuellen Zählerwerte und 
berechnest das Tastverhältnis (n = thi/(thi+tlo)).


Wie oft müssen aktuelle Daten bereitstehen (könnten die Kanäle evtl. 
nacheinander ausgewertet werden)?
Dann könnten die Kanäle mit einem Mux auf Capture-Einheiten eines uC 
ausgewertet werden -> weniger Interruptlast, größere Genauigkeit möglich
Gast #1008203
Lesenswert?

Einen Timer ICP (input Capture) mit mind. 4-facher Frequenz der PWM 
Takten.
Also bei 250Hz ca. 1 KHz.

Alternativ zu Input Capture die Eingänge in der Timer ISR Pollen und 
entsprechend vermessen. Dafür würde ich dann die Timerfrequenz noch ein 
wenig erhöhen. Wobei weniger als 1 ms zw. zwei Interrupts etwas happig 
werden könnte, falls der benutzte Controller mit ca. 8-16 MHz läuft. 
Allerdings nur dann, wenn man noch ne Menge anderer Sachen erledigen 
muss.

Je nachdem, wie genau das Messergebnis sein muss, muss auch die Timer 
Frequenz eingestellt werden.
Moderator (Firma: Titel) Persönliche Seite #1008335
Lesenswert?

> Einen Timer ICP (input Capture) mit mind. 4-facher Frequenz der PWM
> Takten. Also bei 250Hz ca. 1 KHz.
Die PWM hat eine Wiederholfrequenz von 250Hz. Während dieser Zeit spielt 
sich die mögliche Auflösung ab. Deshalb muß z.B. mit 250kHz abgetastet 
werden, um 10 Bit Genauigkeit zu erhalten. Ergo: der Faktor 4 ist viel 
zu klein.
1
      1/(t1-t0) = 250Hz                    
2
             t0                                                  t1
3
 PWM = 0    _|___________________________________________________|___
4
 
5
              ______                                              ___
6
 PWM = klein_|      |____________________________________________|
7

8
              _____________                                       ___
9
 PWM = 1/4  _|             |_____________________________________|
10

11
              __________________________                          ___
12
 PWM = halb _|                          |________________________|
13

14
            _________________________________________________________
15
 PWM = max   |                                                   |

> Wobei weniger als 1 ms zw. zwei Interrupts etwas happig
> werden könnte, falls der benutzte Controller mit ca. 8-16 MHz läuft.
Ich kann durchaus einen Timer-Interrupt mit 16us laufen lassen und noch 
sinnvoll was tun (immerhin 256 theoretische Befehle zwischen zwei Ints 
bei 16MIPS). Nur darf ich dann keine Zeit mit Register-Sichern usw. 
verplempern.
Moderator (Firma: Titel) Persönliche Seite #1008358
Lesenswert?

Die andere Methode, die ich auch schon realisiert habe, geht so:
- Lass einen Timer mit z.B. 990 ms laufen.
  Diese Zeit ist relativ unkritisch, muß aber so gewählt sein,
  dass der Abtastzeitpunkt sich nicht immer an der selben Stelle
  innerhalb des PWM-Signals befindet. Die Zeit zwischen 2 Interrupts
  sollte also kein geradzahliger Teiler der PWM-Frequenz sein.
- In der Timer-ISR zählst du jetzt jeden '1' bzw. '0'-Pegel
- wenn du das lange genug machst bekommst du die gewünschte Auflösung
  (nach 1 sec sind das dann 10 Bit, nach 4 sec 12 Bit usw.)

Das Verfahren funktioniert dann etwa so:
1
              ____          ____          ____          ____          ____          ____          
2
PWM = 2/5   _|    |________|    |________|    |________|    |________|    |________|    |________
3
            |_______|_______|_______|_______|_______|_______|_______|_______|_______|_______|____
4
1-Counter:  0       0       1       1       2       2       3       3       3       4       4    
5
0-Counter:  1       2       2       3       3       4       4       5       6       6       7
Bis hierher ist das Ergebnis jetzt: 4/(4+7) = 36% und das liegt schon 
gut in der Richtung von 2/5 = 40%.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren