PWM Tastverhältnis und Frequenz bestimmen

Gast #1137136
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
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
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
>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
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
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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.