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!