Forum: Mikrocontroller und Digitale Elektronik Frage zur Soft PWM


von messi (Gast)


Lesenswert?

Morgen,

ich bin gerade dabei mich in den Software PWM Artikel reinzudenken.

Dabei ist mit folgendes aufgefallen:
1
#define F_CPU 8000000L                  // Systemtakt in Hz
2
#define F_PWM 100                       // PWM-Frequenz in Hz
3
#define PWM_STEPS 256                   // PWM-Schritte pro Zyklus(1..256)
4
#define PWM_PORT PORTD                  // Port für PWM
5
#define PWM_DDR DDRD                    // Datenrichtungsregister für PWM
6
 
7
// ab hier nichts ändern, wird alles berechnet
8
 
9
#define T_PWM (F_CPU/(F_PWM*PWM_STEPS)) // Systemtakte pro PWM-Takt
10
 
11
#if (T_PWM<(93+5))
12
    #error T_PWM zu klein, F_CPU muss vergrössert werden oder F_PWM oder PWM_STEPS verkleinert werden
13
#endif

Mit den Beispielwerten ergibt das für T_PWM 312,5.
Nun geht ja der Nachkommateil verloren.

Aber was bedeutet diese Ungenauigkeit für meine PWM?
Nachdem ichs im Kopf durchgespielt habe denke ich, dass sich dadurch 
meine PWM Frequenz ändert. Anstatt meine gewünschten 100Hz hab ich eine 
Frequenz von 100,16Hz. Das dürfte aber in der Praxis kein Problem 
darstellen, richtig? Denn das wichtige an der PWM ist ja der Dutycycle 
=(Tan / Tgesamt). Und der bleibt ja erhalten.

Kann hier jemand meine Gedanken bestätigen oder wiederlegen?
Und woher stammt der Wert aus dem #if Block (93+5)? Da happerts auch 
noch wenig :-)

Danke und viele Grüße!

von Volkmar D. (volkmar)


Lesenswert?

messi schrieb:
> Anstatt meine gewünschten 100Hz hab ich eine
> Frequenz von 100,16Hz.

Richtig

> Das dürfte aber in der Praxis kein Problem
> darstellen, richtig?

Das hängt von der Anwendung ab. Für LEDs ist das egal.

> Denn das wichtige an der PWM ist ja der Dutycycle
> =(Tan / Tgesamt). Und der bleibt ja erhalten.

Richtig

> Und woher stammt der Wert aus dem #if Block (93+5)? Da happerts auch
> noch wenig :-)

Das hängt von der Ausführungsdauer der ISR ab. Wenn der Interrupt zu 
schnell angefordert wird, gehen Interrupts verloren und die Frequenz 
wird niedriger.

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.