PWM Tastverhältnis und Frequenz bestimmen

Gast #1137136
Lesenswert?
• ▲
▼
Hallo

ich habe vor, mich intensiver mit dem Einlesen eines PWM Signals 
auseinanderzusetzen.
Ich habe bereits mehrere Beiträge gelesen und wie ich gesehen habe, wird 
oft empfohlen Interrupts und Timer zu benutzen.
Es wurden folgende Vorschläge gemacht:

1.  Variante:
- ICP

2. Variante:

- Interrupt Timer --> steigende flanke -->Timer Start
  Timer --> fallende flanke --> Timer Stop ---> Timer Wert auswerten

3. Variante (wie 2. variante):

- ext. Interrupt auf steigende Flanke einstellen
- wenn der auslöst, auf fallende Flanke umstellen und passenden Timer
  starten
- wenn der auslöst, Timer ablesen und auswerten

4.Variante:

>> Interrupt0 auf beide Flanken stellen.(geht z.B. beim Mega8)
In der Interuptroutine pin auf high testen, war steigende flanke.
Variable "X" auf null setzen.
ist der Portpin LOW, war es eine fallende Flanke, Variable "X"
auslesen und anzeigen.
Die Variable "X" wird im Timerinterrupt unabhängig vom Int0 langhin
hochgezählt. Die Genauigkeit/Auflösung hängt von der
Zählgeschwindigkeit des Timers ab. <<

Ich möchte gerne wissen (bevor ich mich an die Arbeit mache), welche 
Variante ihr emfehlen würdet. Gibt es inzwischen bessere Methoden ein 
veränderliches PWM Signal einzulesen?
Habt ihr bessere Vorschläge, wie man sowas angehen kann?

Wenn jemand sowas in der Richtung mal gemacht hat, wäre ich über Tipps 
sehr dankbar?

Gruss und Danke
Gast #1137147
Lesenswert?
• ▲
▼
Variante 1 und 3 sind sich sehr ähnlich, wobei ICP das was man bei 
Variante 3 von Hand macht, mehr oder weniger automatisch erledigt.

Atmel hat schon eine Application Note zu dem Thema herausgebracht. Da 
wird es per ICP erledigt...
Gast #1137184
Lesenswert?
• ▲
▼
Hallo,

Teilst du deine Erfahrungen mit uns in Form deines Beispiel Codes oder 
ist es streng geheim? :)
Als Richtschnur wäre es sehr hilfreich, besonders in Anlehnung an ICP.

P.S.: Was müsste man machen, um Frequenzen in der Grössenordnung 20 kHz 
bis
60 kHz einzulesen?

Sind die 2,5 kHz dadurch begrenzt, weil der verwendete Timer nicht mehr 
kann oder liegt es einfach an deiner Anforderung?

Gruss
Gast #1137190
Lesenswert?
• ▲
▼
>Sind die 2,5 kHz dadurch begrenzt, weil der verwendete Timer nicht mehr
>kann oder liegt es einfach an deiner Anforderung?

Wenn dann ist die untere Grenzfrequenz die Beschränkung, weil der Timer 
nicht lange genug läuft, um es in einer "Runde" zu schaffen die 
komplette Periodendauer zu messen. Dann muß man den Timer manuell 
"verlängern".

>P.S.: Was müsste man machen, um Frequenzen in der Grössenordnung 20 kHz
>bis 60 kHz einzulesen?

Die Frequenzen sind nicht unbedingt das Problem, sondern die Auflösung 
des Pulses. Man muß ja während des Pulses eine bestimmte Anzahl an 
Takten haben, um auf das Tastverhältnis schliessen zu können. Wenn man 
den Timer mit 120kHz betreibt, wird man nur ein Tastverhältnis von 0,5 
bei einer Frequenz von 60kHz messen können. Nimmt man aber 600kHz, kann 
man schon 10 Pulsbreiten unterscheiden. Bei 6MHz wären es schon 100... 
(wenn ich mich jetzt nicht total vertan habe...).
Gast #1137200
Lesenswert?
• ▲
▼
den Code kann ich leider nicht rausgeben, war damals kundenspezifisch.
Die Begrenzung 2,5kHz ist durch ext. Filter entstanden, wobei ich damals 
bis 5kHz getestet habe. Wenn es in Richtung 20-60 kHz geht, würde ich 
jegliche "Handarbeit" in ISR vermeiden wollen. Capture Einheit und 
geeignete Fensterung ist hier wohl geeignetere Methode.
Gast #1137614
Lesenswert?
• ▲
▼
Also ist die beste Methode:

- ICP und mit möglichst hohem internem Takt (6MHz Osci), um eine 
Auflösung von 1% TV bei 60kHz PWM Freq. zu erhalten?

Bessere/optimierende Vorschläge weiterhin erwünscht ;)

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