Schrittweite von PWM Signal einlesen ATMega16

OP #663006
Lesenswert?
• ▲
▼
Hallo zusammen,
ich habe ein Problem mit dem einlesen der Schrittweite eines PWM 
Signals.
Die Frequenz kann ich einlesen (schwankt bei 17kHz schon sehr. ca. +/- 
100Hz).
Allerding erfasse ich ja nur die Frequenz einer Periode (High Flanke 
nach High Flanke). Nun möchte ich aber die Schrittweite des Signals 
bestimmen. Diese beträgt ca. 98%. Wie kann ich nun den Timer1 von High 
nach Low Flanke laufen lassen?

Vielen Dank für dir Hilfe
#663024
Lesenswert?
• ▲
▼
@ Sören Schnell (soeren)

>ich habe ein Problem mit dem einlesen der Schrittweite eines PWM
>Signals.
>Die Frequenz kann ich einlesen (schwankt bei 17kHz schon sehr. ca. +/-
>100Hz).

Du willst also die Pulsbreite eines PWM-Signals messen, das 17 kHz 
Periodendauer hat?
Bei einer Auflösung von 8 Bit (=256 Stufen) brauchst du einen Takt von 
4,3 MHz oder mehr.

>Allerding erfasse ich ja nur die Frequenz einer Periode (High Flanke
>nach High Flanke). Nun möchte ich aber die Schrittweite des Signals
>bestimmen. Diese beträgt ca. 98%.??

> Wie kann ich nun den Timer1 von High
>nach Low Flanke laufen lassen?

Du musst das mit der Input Capture Funktion machen. Dabei musst du sie 
erst auf die steigende Flanke einstellen. Wenn dann ein Interrupt 
ausgelöst wird musst du sie auf die fallende Flanke einstellen. Die 
Differenz der Messergebnisse ist deine Pulsbreite. Allerdings kannst du 
nur Pulse messen, die länger dauern als deine Interruptroutine, die 
vielleicht 100 Takte braucht. Bei 10 MHz wären das 10us, bezogen auf 
dein 17 kHz PWM Signal ca. 17%.

MFG
Falk
OP #663044
Lesenswert?
• ▲
▼
Hallo.
Also ich benutze diese Input Caputure Funktion des AT Mega 16 (PD6).
Mein Interner Resonator ist auf 8MHZ gesetzt.
Wie gesagt, das Signal hat 17kHz / Schrittweite 98% high.
Deine Rechnung verstehe ich nicht ganz. Wieso kann ich die 98% nicht 
auflösen?

Wenn in die Interrupt Routine gesprungen wird, kann ich doch nicht die 
Trigger für die Flanken umstellen, oder doch?

Hast du sowas schon einmal gemacht?

Hast du ein dokumentiertes Codebeispiel??

Danke für deine Hilfe - bin sehr am Schwitzen.

Viele Grüße
#663051
Lesenswert?
• ▲
▼
@ Sören Schnell (soeren)

>Also ich benutze diese Input Caputure Funktion des AT Mega 16 (PD6).
>Mein Interner Resonator ist auf 8MHZ gesetzt.

Der ist relativ ungenau.

>Wie gesagt, das Signal hat 17kHz / Schrittweite 98% high.

Wenn du das genau weist, warum willst du dann messen?

>Deine Rechnung verstehe ich nicht ganz. Wieso kann ich die 98% nicht
>auflösen?

Hat keiner gesagt.

>Wenn in die Interrupt Routine gesprungen wird, kann ich doch nicht die
>Trigger für die Flanken umstellen, oder doch?

Doch.

>Hast du sowas schon einmal gemacht?

Ja.

>Hast du ein dokumentiertes Codebeispiel??

Nein.

MFG
Falk

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 19 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.