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
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
ä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 :)
@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.
@ 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
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
@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
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