Forum: Mikrocontroller und Digitale Elektronik Schrittweite von PWM Signal einlesen ATMega16


von Sören S. (soeren)


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

von Falk B. (falk)


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

von Sören S. (soeren)


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

von Falk B. (falk)


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

von Sören S. (soeren)


Lesenswert?

Hi,
soll eine Funktionsüberprüfung werden, daher das Einlesen des Signals.
Ich tüftel man.
Danke

von Rahul D. (rahul)


Lesenswert?

>Hast du ein dokumentiertes Codebeispiel??

Atmel könnte sowas zwischen den ApplicationNotes "rumliegen" haben...

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

Klar geht das.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.