Forum: Mikrocontroller und Digitale Elektronik 8-BIT-Timer, Erzeugung PWM-Signal


von Dennis S. (schwarde)


Lesenswert?

Hallo,
ich bin neue hier und völlig verzweifelt und hoffe hier auf Hilfe. Ich 
stehe kurz vor meiner
Mikroprozessortechnikklausur ( Grundlagen ) und mir macht eine 
Aufgabenstellung große Probleme:

Ich habe ein 8-Bit-Timer mit den eine PWM-Signal erzeuge. Davon von 
möchte ich die Periodendauer
errechnen ohne Vorteiler.
Das ist nicht weiter schwierig: T= (2^N)*Takt= 32 Mikrosekunden.

Jetzt soll das PWM-Signal eine Frequenz von 15,625 Hz haben und ein 
Tastverhältnis von 3:1 (ein:aus) besitzen.
Welcher Vorteiler (1,8,64,256,1024) und welcher Umschaltwert des Timers 
muss gewählt werden, um diese Forderungen
zu erfüllen?

Ich hoffe das mir einer Schritt für Schritt erklären kann wie vorzugehen 
ist. Ich danke schonmal im voraus  Smiley.

von Michael (Gast)


Lesenswert?

Dennis Schwarz schrieb:
> Das ist nicht weiter schwierig: T= (2^N)*Takt= 32 Mikrosekunden.
Aber nur, wenn ein Takt 32µs/(2^n) dauert. ;-)

> Jetzt soll das PWM-Signal eine Frequenz von 15,625 Hz haben und ein
> Tastverhältnis von 3:1 (ein:aus) besitzen.
> Welcher Vorteiler (1,8,64,256,1024) und welcher Umschaltwert des Timers
> muss gewählt werden, um diese Forderungen zu erfüllen?

Na ja, wenn das PWM-Signal eine Frequenz von 15,625 Hz haben soll, muss 
der Takt so weit heruntergeteilt werden, dass der Timer von der 
PWM-Einheit für eine Runde 1/15,625 Hz = 64 ms braucht.

von Dennis S. (schwarde)


Lesenswert?

Hmm okay, aber welcher Umschaltwert und Vorteiler muss gewählt werden?
LG

von Tomi (Gast)


Lesenswert?

Dennis Schwarz schrieb:
> Hmm okay, aber welcher Umschaltwert und Vorteiler muss gewählt werden?

Das kommt drauf an, welche Taktfrequenz am Eingang vom Vorteiler anliegt 
und wieviel Takte die PWM-Einheit für eine Periode braucht. Der 
Umschaltwert muss so gewählt werden, dass sich innerhalb einer Periode 
der PWM-Einheit das gewünschte Tastverhältnis ergibt (3-Satz).

von Dennis S. (schwarde)


Lesenswert?

Hmm okay, das steht leider nicht dabei. Habe gedacht da gibt es eine 
allgemeine
Formel.
Lg

von Karl H. (kbuchegg)


Lesenswert?

Sieh mal hier

FAQ: Timer

Wenn du das gelesen und verstanden hast, dann lachst du über deine Frage 
und .... löst sie ganz einfach.

Man braucht nicht für alles vorgekaute Formeln. Verstehen was abgeht und 
den Hausverstand benutzen .... damit kommt man schon recht weit. Nur 
darauf einlassen muss man sich halt mal und nicht gleich den Korn in die 
Flinte schütten.

von Tomi (Gast)


Lesenswert?

Dennis Schwarz schrieb:
> Habe gedacht da gibt es eine allgemeine Formel.

Die meinte ich mit "3-Satz" ;-)

von Dennis S. (schwarde)


Lesenswert?

Also es wir von einer Taktfrequenz von 8 Mhz ausgegangen. Jetzt braucht 
er für eine Periode 32 Mikrosekunden . So ich möchte eine Frequenz haben 
von 15,625 Hz und ein Tastverhältnis von 3:1 . Das heisst er muss für 
eine Runde 64 ms brauchen. Ich verstehe dann nicht mit welchen 
Vorladewert und Vorteiler (1,8,64,256,10249 ich benutzen soll
LG

von Dennis S. (schwarde)


Lesenswert?

Also ich habe jetzt den Vorteiler 1024 der braucht 16,384 ms . Den 
brauch ich jetzt nur noch anpassen. Mit Voraldewert und Vergleichswert

von Mäx (Gast)


Lesenswert?

Meiner Meinung nach ist das so:

Dein Timer braucht 32,768ms zwischen 2 Überläufen bei  Vorteiler 1024. 
Rechnung: 1/(8MHz) * 1024*2^8 = 32,768 ms.

Wenn du nun den PWM Phase Correct Modus benutzt, zählt der Timer ja von 
0 bis 255 hoch und wieder auf 0 runter.  D.h. also das du einen 
Vergleichswert von 192 einstellen kannst , ( nämlich 256 / 4 * 3 )  , 
hast du dein Verhältnis von 3 : 1 .

Was ich mich grad noch frage ist, ob man hier den Timer vorladen muss 
mit dem Wert 6 , damit ich genau auf 32ms komme.?

Bitte korrigieren wenn das nicht stimmen sollte.



MfG

Max

von Karl H. (kbuchegg)


Lesenswert?

Die Frage ist, ob der Modus der durchzurechnen ist überhaupt eine Phase 
Correct PWM ist.

Die andere Frage, und die sollte man sich immer stellen, lautet: gibt es 
einen Timer Modus bei dem man dieses bescheuerte Vorladen des Timers 
nicht benötigt.

AVR haben für beides einen Ausweg:
Es gibt einen Fast-PWM Modus, bei dem man keine Kopfstände wegen 
rauf/runter zählen machen muss. Der Timer zählt durch von 0 bis zum 
Endwert, bei 0 wird der Pin eingeschaltet, beim Vergleichswert wird er 
ausgeschaltet.

Und: Es gibt auch einen Modus, bei dem der Endwert nicht fix vorgegeben 
ist, sondern bei dem man ihn in einem Register einstellen kann.

Daher: Fast PWM durchrechnen, welchen Endwert man bei welchem Vorteiler 
einstellen muss, damit die Zykluszeit dafür rauskommt.
2/3 dieses Endwerts sind dann der einzustellende Endwert.

Meiner Meinung nach spricht aus der geposteten Aufgabenstellung, ausser 
das er den Prozessor nicht genannt hat und daher nicht klar ist, was der 
alles kann, nichts dagegen, das erst mal so zu rechnen.

von Fabian O. (xfr)


Lesenswert?

Bei 8 MHz CPU-Takt und 15,625 Hz PWM-Frequenz vergehen in einem 
PWM-Zyklus 8 MHz / 15,625 Hz = 512.000 CPU-Takte. Wenn Du den Vorteiler 
1024 benutzt, sind es noch 512.000 / 1024 = 500 Zählschritte, die der 
Timer in einem PWM-Zyklus machen müsste. Da ein 8-Bit-Timer nur von 0 
bis 255 zählen kann, klappt das nicht in Hardware.

Also gehen wir mal von nur 2 MHz CPU-Takt aus. 2 MHz / 15,625 Hz = 
128.000 CPU-Takte. Mit Vorteiler 1024 muss der Timer 128.000 / 1024 = 
125 Zählschritte pro PWM-Zyklus machen. Also setzt Du das Top-Register 
auf 124, so dass der Timer von 0 bis 124 zählt. Für das Tastverhältnis 
3:1 muss der Ausgang 3/4 der Zeit an sein, also müsstest Du das 
Compare-Register auf 3/4 * 124 = 93 setzten.

von Karl H. (kbuchegg)


Lesenswert?

Karl Heinz Buchegger schrieb:

> 2/3 dieses Endwerts sind dann der einzustellende Endwert.

3/4 natürlich. 3/4
Und das sind auch nicht der Endwert sondern der Umschaltwert.


Sorry for that.

Edit: Fabian hats richtig gesehen.

von Mäx (Gast)


Lesenswert?

Ok,

wenn dann der Fast PWM Mode benutzt wird, dann würde ich auch den 
Vorteiler von 1024 wählen. Mit der Überlaufzeit von 32,768ms müsste man 
dann so verfahren.

1.) Wenn keine 1 im Überlaufregister steht, darf der Pegel des PWM 
Signals nicht geändert werden.
2.) Wenn eine 1 im Überlaufregister steht ( also nach dem ersten mal 
Hochzählen), muss beim erreichen des Vergleichswertes von 119 der Pegel 
getoggelt werden. Danach ist das Überlaufregister wieder zu löschen.

Rechnung für Schritt 2 : Zeit zwischen 2 Überläufen ist 32,768ms.  Dann 
haben wir noch 31,232ms  bis 64ms erreicht sind. Davon 16ms für die 
Ausschaltzeit abziehen. Sind 15,232ms. Vergleichswert = 15,232ms * 8MHz 
/ 1024 = 119.

Stimmt das so?

von Fabian O. (xfr)


Lesenswert?

Mäx schrieb:
> Stimmt das so?

Ja, bzw. fast.

Der Timer muss 8 MHz / 15,625 Hz / 1024 = 500 Zählschritte pro Zyklus 
machen. Nach 3/4 der Zeit muss umgeschaltet werden, also nach 3/4 * 500 
= 375 Schritten. Im ersten Durchgang zählt er 256 Schritte, also fehlen 
im zweiten Durchgang noch 375 - 256 = 119 Schritte. Dazu muss man 
allerdings das Compare-Register auf 118 setzen, denn der nullte Schritt 
zählt ja mit.

Man muss aber natürlich noch bedenken, dass nach weiteren 125 Schritten 
für die Aus-Zeit das ganze wieder zurück auf die Ausgangsposition 
gesetzt werden muss ...

von Mäx (Gast)


Lesenswert?

Ok, dann haben wir die Aufgabe ja gelöst. :-)

von Fabian O. (xfr)


Lesenswert?

In der Praxis wäre allerdings die einfachere Lösung, den Timer alle 16 
ms einen Interrupt auslösen zu lassen und das Tastverhältnis von 3/4 mit 
einem Softwarezähler zu realisieren. Dann kann man den Timer einfach 
ohne Rumpfuschen an den Counter- und Compareregistern durchlaufen lassen 
...

von ... (Gast)


Lesenswert?

Wenn der Prozessor das in Hardware kann, wozu sollte ich ihn mit 
Software quälen?
Außerdem kann man in moderneren AVRs den Vorteiler des Taktgebers 
programmieren. Es gibt nicht nur DIV8.
Und wenn es einfacher ist, die Quarzfrequenz passend zu wählen, kann man 
das auch machen.

von Fabian O. (xfr)


Lesenswert?

... schrieb:
> Wenn der Prozessor das in Hardware kann, wozu sollte ich ihn mit
> Software quälen?

Kann er bei 8 MHz ja eben nicht ...

von c-hater (Gast)


Lesenswert?

Fabian O. schrieb:

> Kann er bei 8 MHz ja eben nicht ...

Natürlich kann er das. Was war gleich gefordert?

15625Hz PWM-Cycle
3:1 Duty

Also:
Prescaler 8
Timer-Mode 7
OCR0A auf 63
OCR0B auf 15
COM0B auf 0b11

PWM fällt aus dem OC0B-Pin raus. Zyklus stimmt exakt, Duty stimmt exakt.

Was genau soll er da jetzt deiner Meinung nach nicht können?

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.