www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PWM Tastverhältnis und Frequenz bestimmen


Autor: PWMSpec (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: PWMSpec (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

ja, ich habe diese Fragmente aus vielen Beiträgen kopiert um mal diese 
vor augen zu haben.
Kannst du mir den Link zur Application Note geben?

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: wt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
habe schon var 2 und 3 implementiert bis 2,5kHz, funktioniert beides 
gut, wobei die var 1 sehr sympatisch erscheint

Autor: PWMSpec (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...).

Autor: wt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: PWMSpec (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.