PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Hardware PWM mit feineren frequenzabstufungen?



Step
27.08.2006, 13:03
Hallo,

ich bin gerade dabei mich mit PWM zu beschäftigen.
Ich möchte einen DC-Getriebemotor mit PWM regeln.
Hierzu weiß ich - habe einige PWM-Versuche ohne µC gemacht - daß die PWM-Frequenz recht genau auf den Motor abgestimmt werden muß um optimale Ergebnisse zu erhalten.

Nun ist die hardwaremässige PWM-Erzeugzeugung mit Timer 1 ja hierfür eine einfache, schnelle und gute Sache, währen da nicht die extrem groben Abstufungen der PWM-Frequenz.

Wenn ich das richtig sehe, müsste nachfolgende Betrachtung zutreffen:

Timer 1 auf PWM-9 Bit Modus, somit 512 Schritte im PWM-Tastverhältnis.
Der Prescaler kann 1, 8, 64, 256 oder 1024 sein.
Die PWM-Ausgangsfrequenz ist = (Quarzfrequenz/Prescale ) /(Timerauflösung*2)

Bei 8MHz, 9Bit Genauigkeit und Prescaler 8 also (8.000.000/8)/(512*2)=977Hz.

Bei 8MHz mit 9Bit Genauigkeit ergeben sich folgende PWM-Frequenzen:
7813Hz
977Hz
122Hz
30,5Hz
7,6Hz

Wie kann ich feinere Abstufungen der PWM-Frequenz im Bereich zwischen 1KHz und 5KHz erhalten?

Vielen Dank!

Wolfram

uwegw
27.08.2006, 13:13
Du könntest den Timer extern takten, evtl nen zweiten Timer die Frequenz erzeugen lassen und die Pins extern verbinden...

Step
27.08.2006, 13:46
Hallo,

ist ´ne gute Idee - DANKE.

Vor allem die Möglichkeit Timer 1 z. B. über Timer 0 in der PWM-Frequenz zu bedienen finde ich klasse!

Ich habe eben per Suche "Timer extern takten" versucht im Forum was darüber zu finden....Nix!

Im Datenblatt fand ich die Info daß ein externes Timersignal auf T0 und T1 (Pin 4 und 5 des Mega48) gelegt werden muß.
Den Rest im Datenblatt kapiere ich nicht.

Wahrscheinlich muß ich die Ausgänge OC0A und OC0B (Pin 12 und 11 des Mega48) des Timer0 irgendwie mit den Takteingängen T0 und T1 des Timer1 verknoten?

Wo finde ich Informationen über externe Taktung eines Timers mit der Frequenz eines anderen Timers?

Wolfram

uwegw
27.08.2006, 15:45
Mit den CS10/11/12-Bits in TCCR1B, mit denem man auch den Prescaler einstellt, kann man den T1-Pin als Taktquelle auswählen, Datenblatt S.133. Und T1 dann mit dem Ausgang von Timer0 verbinden, der den Takt vorgibt.

Step
27.08.2006, 17:44
Danke, ich hab mir TCCR1B im Datenblatt angeschaut.

Das Problem mit der externen Taktung durch einen weiteren Timer des ATMega48 ist, daß die anderen Timer keine hardwaremäßige Ausgabe (wie beim Timer 1 die PWM-Ausgabe) besitzen und daß es leider zu viel Zeit kostet die Frequenz Softwaremäßig auszugeben.

Zumindest habe ich bei den Timern 0 und 2 nichts dergleichen gefunden.

Da muß ich dann wohl ggf. noch ´nen zusätzlichen Quarz bemühen.

Wolfram

uwegw
27.08.2006, 18:13
doch, alle drei Timer können sowohl PWM erzeugen als auch hochzählen und beim compare match nen pin togglen. da wäre der CTC modus richtig...

der M8 kann das noch nicht so viel, da zählt einer der 8bit-Timer nur durch, bis er überläuft, und der andere hat nur ein compare.

Step
27.08.2006, 18:43
...und beim compare match nen pin togglen. da wäre der CTC modus richtig...

Ähh...Bahnhof?

Sorry das ist mir als Einsteiger zu hoch!
Ich bin (noch) nicht in der Lage das alles nachzuvollziehen.

Hast Du evtl. einen Codeschnipsel oder ´nen Thread dazu...meistens kapiere ich das zumindest oder kann es durch Versuche nachvollziehen.

Wolfram