Forum: Mikrocontroller und Digitale Elektronik PWM mit niedriger Frequenz mit ATmega323?


von Stefan G. (Gast)


Lesenswert?

Hallo,
ich bin gerade dabei mittels PWM ein Ventil anzusteuern und somit ein 
einfaches Auf/ Zu Ventil als Proportionalventil zu missbrauchen.
Die kleineste Frequenz die ich bei der PWM hinbekomme sind 3,6 kHz. Das 
ist mir aber etwas hoch, da das Ventil bei 100 Mio garantierten 
Lastwechseln schon nach ca. 7 Stunden hinüber wäre. Ich möchte also die 
Frequenz niedriger haben. Wie mache ich das? Ich benutze Timer 0. Hier 
ein kleiner Auszug aus dem Programm:

// Timer/Counter 0 initialization => PWM
// Clock source: System Clock
// Clock value: 3,600 kHz
// Mode: Phase correct PWM top=FFh
// OC0 output: Non-Inverted PWM
TCCR0=0x65;
TCNT0=0x00;
OCR0=0x00;

Das TCCR0 Register bereitet mir auch noch etwas Kopfzerbrechen. Bedeutet 
TCCR0 = 0x65, daß in dem Register Bit 6 (also PWM0) sowie Bit 5 (also 
COM01) gesetzt sind? Worin ist die Information enthalten, daß mein CPU 
Takt (3686,4 kHz) durch 1024 geteilt wird und ich somit eine PWM 
Frequenz von 3,600 kHz erhalte?
Wäre super wenn ihr ein par Anregungen für mich hättet.
Grüße,
Stefan

von Andreas Tekautz (Gast)


Lesenswert?

die nachfolgenden angaben beziehen sich auf den ATmega8(L), aber die 
anderen werden wahrscheinlich ähnlich aufgebaut sein.

dein effektiver takt der PWM wenn du mit dem TC2 (8 bit) und fastPWM 
arbeitest ist folgender:

CLK / (256 x prescaler)
wobei der prescaler 1, 8, 32, 64, 128, 256 oder 1024 sein kann.

bei CLK=1MHz und prescaler=1024 ergibt das eine frequenz von
ca. 1E6/256/1024=3,8Hz

dementsprechend ändert sich der takt bis ca. 3,9kHz bei einer prescaler 
einstellung von 1.

lies am besten das datenblatt (ATmega8L seite 111ff)

hoffe dir geholfen zu haben,
lg andi

von Andreas Tekautz (Gast)


Lesenswert?

ähh, hab übersehen, dass du die phase correct PWM verwendest, im 
datenblatt steht da was von

f(PWM) = CLK / (N x 510)
N..prescaler

woher die 510 (256?) kommen weiss ich nicht ganz, fakt ist jedenfalls, 
dass sich deine CLK durch den prescaler und die 8bit des TC dividieren. 
aja, der TC zählt bei der phase correct PWM nach oben und dann nach 
unten 255 und 0 werden natürlich nicht doppelt gezählt, daher 512-2=510. 
dadurch ergibt sich eine (fast) halb so schnelle PWMfrequenz als bei der 
fastPWM, wo der zähler jedesmal einfach überläuft und wieder bei 0 zu 
zählen beginnt.

soweit sogut.

lg andi
(man lernt nie aus :)

von mikki merten (Gast)


Lesenswert?

@stefan
Selbst bei einer Frequenz von 1 Hz, welche mit Leitigkeit per Software 
PWM zu realisieren wäre, lebt dein Ventil nur gut 3,17 Jahr. Der Ansatz 
Hardware PWM ist wohl vollständig fehl am Platz.

von Stefan G. (Gast)


Lesenswert?

@ mikki merten: Das Ventil soll nicht im Dauerbetrieb betrieben werden. 
Lediglich für einzelne Mischvorgänge, die jeweils ca. 5 Minuten dauern. 
Aber wo ist denn da der Zusammenhang mit Software und Hardware PWM? Die 
Auswirkungen auf das Ventil sind doch die selben, oder habe ich dich da 
irgendwie missverstanden?
Stefan

von Stefan G. (Gast)


Lesenswert?

Hallo,
mittlerweile glaube ich, daß ich keine geringere Frequenz als CK/1024 
erreichen kann. Beim Durchstöbern meines Datenblatts finde ich nämlich 
nur die Optionen CK, CK/8, CK/64, CK/256 und CK/1024 (je nachdem wie die 
Bits im TCCRO Register gesetzt sind). Das hieße daß meine niedrigste 
Frequenz bei 3,600 kHz läge. Leider viel zu hoch für meine Zwecke. Oder 
hat jemand noch eine Idee?
Grüsse,
Stefan

von Andreas Tekautz (Gast)


Lesenswert?

@stefan

hi stefan, hast du meine beiträge nicht gelesen, oder nicht verstanden? 
du musst CK/N auch noch durch 510 teilen, dann bekommst du die richtige 
PWM-frequenz. da die PWM ja durch überprüfen des 8bit-zählers erzeugt 
wird ist die periodendauer solang wie es dauert den timer einmal 
überlaufen zu lassen (bei der phasenkorrekten eben beinahe doppelt so 
lang)
alternativ für längere zeiten könntest du auch den 16bit timer 
verwenden, da verlängert sich die mögliche periodendauer erheblich.
eine andere alternative ist natürlich auch die PWM "händisch" zu 
erzeugen indem du mit einer festen zeitbasis, die du z.b. mit einem 
timer und registern die du hinaufzählst erzeugst und damit dann deine 
eigene PWM generierst.

das ganze sollte eigentlich überhaupt kein problem sein, es gäbe mehrere 
lösungsmöglichkeiten.

lg andi

von Stefan G. (Gast)


Lesenswert?

Hi Andreas,
ich glaube jetzt habe ich´s verstanden. Ich habe nochmal in meinem 
Datenblatt gelesen und rausgefunden, daß meine Frequenz die ich derzeit 
eingestellt habe tatsächlich VK/(1024*510) sein müßte. Somit hätte ich 
also irgendwas im Bereich von 7 Hz haben. Das wäre schonmal nicht 
schlecht. Ich werde das gleich nochmal mit dem Oszi überprüfen. Erstmal 
vielen Dank, vielleicht melde ich mich später nochmal :-)
Stefan

von Andreas Tekautz (Gast)


Lesenswert?

hi stefan,

na da bin ich aber froh, freu mich immer wenn ich helfen kann ;)

viel erfolg weiterhin!

lg andi

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.