PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Software PWM ?



Blamaster
04.05.2009, 16:52
Hi,

hat jemand zufällig eine kleine Erklärung zur Software Pwm, bzw einen Beispielcode ?

Die suche bei google brachte mich bis dato leider zu keinem Ergebnis.

Soweit ich bis jetzt rausgefunden habe erzeuge ich das Pwm Signal indem ich einen Timer nutze und dann Werte abgleiche. Nur wie genau funktioniert das ?

mfg Yannic

Gock
04.05.2009, 18:18
Klein nicht, zufällig schon...
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=46478&postdays=0&postorder=asc&start=0
und
https://www.roboternetz.de/wissen/index.php/Pulsweitenmodulation
Gruß

yaro
04.05.2009, 21:57
Im grunde genommen funktioniert PWM so: ein Zähler Läuft von Null bis zu einem Maximalwert und fängt dann wieder von Null an (einfachstes Beispiel).
Ein PWM wird nun z.B. folgendermaßen erzeugt: wenn der Zähler auf Null ist, wird der Pin auf High gesetzt. Bei einem bestimmten Wert zwischen Null und Maximalwert wird der Pin auf Low gesetzt. Je später der Pin auf Low gesetzt wird, desto länger der Higt-Zeitraum, desto höher die Durchschnittsspannung.
Hardwaremäßig geht das, in dem es ein bestimmtes "compare-match"-Ereigniss bei den Timern gibt, das den Pin automatisch auf Low stellt, du musst nur einstellen, bei wälcher Zählzeit (bei Null wird er wieder auf High gestellt).
Wenn du es per software machen willst, musst du das manuell machen. Du beobachtest also durchgehend deinen Timer und vergleichst ihn mit deinen Werten. Bei Null stellst du den Pin auf High, und bei der passenden Zählzeit (wann immer du den Pin wieder auf Low haben willst) stellst du den Pin auf Low.
Auf Porgrammbeispiele habe ich heute nicht wirklich Lust, srry.

Gruß, Yaro

Blamaster
04.05.2009, 23:20
Gut soweit kann ich mir das jetzt vorstellen und versuch es jetzt mal nicht in code sondern in worten zu beschrieben.

Timer1 zählt Variable_ZEIT hoch.

Nun möchte ich die Led Led_R in einer bestimmten frequenz deimmen.

Also im OnTimer vom Timer1

If Variable_ZEIT <= MEIN WERT Then Led_R = 1 Else Led_R = 0

Wenn das sowit stimmt, dann würde mich noch interessieren, wie ich den Timer einstellen müsste. Das ist glaube ich momentan mein größtes Problem. Wonach wird das Ganze errechnet ?

TomEdl
12.05.2009, 16:46
Hallo!



Wenn das sowit stimmt, dann würde mich noch interessieren, wie ich den Timer einstellen müsste. Das ist glaube ich momentan mein größtes Problem. Wonach wird das Ganze errechnet ?
Hier ist das Ganze recht gut erläutert:
http://www.bunbury.de/technik/avr/

Gruß
Thomas

yaro
12.05.2009, 21:40
Nimmst z.b. einen 8-Bit Timer, lässt ihn von 0 bis 255 laufen. Deine Werte sind dann auch zwischen 0 und 255. Wert 0 heißt LED aus, 255 heißt voll an. 127 bedeutet halbe helligkeit (ungefähr). Wähle den Prescaler nicht viel zu groß, sonst könnte es sein, dass du siehst, wie die LED blinkt.

Gruß, Yaro