Forum: Mikrocontroller und Digitale Elektronik PWM mit 2 Sekunden Periodendauer


von Patrick B. (paddybo93)


Lesenswert?

Moin,

ich möchte gerne ein PWM Signal mit einem Atmega16 erzeugen, das problem 
es soll eine Periodendauer von 2 Sekunden haben. Das heißt bei 50% Soll 
das Signal eine Sekunde an sein und eine Sekunde aus sein, bei 25% 0,5 
Sekunden ein und 1,5 Sekunden aus usw....

Das Ganze soll eine Temperaturregelung werden, das Signal muss so 
langsam sein da es später eine Wechselspannung schalten soll und es soll 
nicht kürzer sein als eine Sinuswelle der Wechselspannung.

Ich habe im Datenblatt geschaut wie ich die Timerregister setzen muss, 
ein "normales" PWM Signal mit 20ms habe ich auch hin bekommen. Aber 
entweder sehe ich den Wald vor lauter Bäumen nicht oder es ist wirklich 
etwas komplizierter mit 2 Sekunden. Hat jemand Tipps?

vielen Dank
Paddy

von Lukas T. (tapy)


Lesenswert?

Wo hängt's denn? Einfach maximalen Prescaler nehmen und dann manuell je 
nach Takt noch ein paar mal teilen.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Mit Timer 1 im 16 Bit Modus und einem Vorteiler von 256 kommst du bei 
8MHz Taktfrequenz auf etwa 0,47 Hz - ziemlich genau das, was du 
möchtest.

Mode 14 bietet sich dafür an (Fast PWM, TOP in ICR1)

von spess53 (Gast)


Lesenswert?

Hi

>ich möchte gerne ein PWM Signal mit einem Atmega16 erzeugen, das problem
>es soll eine Periodendauer von 2 Sekunden haben.

Kommt auf die Taktfrequenz deines ATMegas und den Timertyp (8- / 16-Bit) 
an.

MfG Spess

von Patrick B. (paddybo93)


Lesenswert?

Ahhh, vielen dank für die schnellen Antworten. Ich werde es mal mit dem 
Mode 14 probieren. Bisher hatte ich 15, allderdings war mir nicht ganz 
klar in welches Register ich dann den Wert für das eigendliche Siganl 
eintragen muss.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Patrick B. schrieb:
> Bisher hatte ich 15, allderdings war mir nicht ganz
> klar in welches Register ich dann den Wert für das eigendliche Siganl
> eintragen muss.

Da in Mode 15 TOP durch OCR1A gesetzt wird, bliebe dir nur der OC1B als 
Hardware PWM Ausgang. In Mode 14 sind OC1A und OC1B verfügbar. In ICR1 
schreibst du z.B. 0xFFFF, dann nutzt du den vollen Bereich der PWM.

von H.Joachim S. (crazyhorse)


Lesenswert?

Dann machs gleich richtig und synchronisiere das ganze mit der 
Netzfrequenz.
Nulldurchgänge erkennen, ganze Perioden einschalten oder aus lassen.

von Alexxx (Gast)


Lesenswert?

>> es soll eine Periodendauer von 2 Sekunden haben...
>> und es soll nicht kürzer sein als eine Sinuswelle der Wechselspannung.

Eine Sinuswelle hat eine Periodendauer von 20ms!!!
Wenn du nicht sychronisierst - wie H.Joachim Seifert ganz richtig 
angemerkt hat - kannst du trotzdem irgendwann genau bei Maximalspannung 
schalten!
Also gleich richtig machen, dann gibt es das Problem gar nicht!

von Wolfgang (Gast)


Lesenswert?

Warum willst du asynchron zur zu schaltenden Wechselspannung mit deinem 
Timer irgendwo in die Phase der Wechselspannung reinhackst. Wäre es 
nicht wesentlich sinnvoller, den Takt aus dem Nulldurchgang eben der zu 
schaltenden Wechselspannung zu generierst. Dann reduziert sich dein 
Timerproblem auf Zählen im Zahlenraum bis 256 oder wie hoch auch immer 
die Auflösung deiner PWM werden soll. Allenfalls brauchst du den Timer, 
um von der Detektion eines Nulldurchgangs auf einen Zeitpunkt kurz vor 
dem echten, nächsten Nulldurchgangs zu extrapolieren und dann ggf. einem 
Opto-Triac mit Nulldurchgangsschalter den Rest zu überlassen.

von Jakob (Gast)


Lesenswert?

Bei einer Heizung wo einiges an Strom geschaltet werden soll,
ist die Wellenpaket-Steuerung zu bevorzugen, wobei immer
1 bis N komplette (!) Wellen (20 ms) geschaltet werden.

Also versorge deinen Timer über den external Clock mit
der Netzfrequenz. Dafür gibt es bewährte kostengünstige
Lösungen, die sehr gut den Nulldurchgang erfassen.

100 Perioden sind 2 Sekunden, dafür reicht ein 8-Bit-
Timer. Also den Max-Count = 99 einstellen.

Auf einfache Weise macht die PWM damit duty-cycle von
0 bis 100% in 1%-Schritten.

Will man es feiner auflösen, gibt man alle 2, 3, ...
2-Sekunden-Perioden 1% mehr und/oder 1% weniger aus.
- Da kann man schön spielen...

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Jakob schrieb:
> Also versorge deinen Timer über den external Clock mit
> der Netzfrequenz. Dafür gibt es bewährte kostengünstige
> Lösungen, die sehr gut den Nulldurchgang erfassen.

Das ist unnötig, wenn man z.B. ein SSR mit ZC Detektor oder auch den 
guten alten MOC3063 benutzt und vom MC ansteuert. Der Optokoppler selber 
hat den ZC Detektor und macht das alles richtig.

von Axel S. (a-za-z0-9)


Lesenswert?

Patrick B. schrieb:
> ich möchte gerne ein PWM Signal mit einem Atmega16 erzeugen, das problem
> es soll eine Periodendauer von 2 Sekunden haben.

Wieso soll das ein Problem sein? Die Timer im ATmega haben Vorteiler. 
Die müssen nicht mit dem vollen Systemtakt laufen.

Und wenn es langsamer werden soll als es mit Vorteiler geht, dann kann 
man auch gleich eine Software-PWM machen. Dazu baut man einfach die 
Funktion von Zähler und Compare-Register nach und läßt sich den Zähltakt 
von einem Timerüberlauf liefern.

Konkret: wenn man immer ganze Perioden der Netzfrequenz schalten will, 
dann konfiguriert man einen Timer so, daß er 50 Mal pro Sekunde einen 
Interrupt liefert. Und in der ISR zählt man eine Variable (Zähler) hoch 
und vergleicht sie mit einer zweiten Variable (Compare). Und je nachdem 
ob kleiner oder größer wird die Last an- oder ausgeschaltet. War das 
jetzt schwer?

von Patrick B. (paddybo93)


Lesenswert?

Vielen Dank für die Zahlreichen Tipps,
Also ich werde mich erstmal darum kümmern den Timer einzustellen. Die 
Regelung muss nicht soo präzise sein von daher denke ich das ich es 
nicht mit phasenanschnitt bzw. 20ms Periodenlänge mit Nulldurchgang 
realisieren werde. Es soll nicht zu kompliziert werden ;-)
Falls ich damit Probleme bekommen sollte kann ich immernoch umdenken.

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.