Moin,
ich habe nur eine kurze Frage:
Wenn ich das Datenblatt des Atmega328p richtig verstehe, verträgt dieser
einen Quartz mit max. 16MHz. Für meine FAST PWM würde das dann
entsprechend Vorteiler 1 bedeuten: 16.000.000/1x256 = 62500Hz.
Mit anderen Worten ich werde mit diesem Chip nie mehr als ~62KHz
erreichen können richtig?
bG
B.
Baumbart schrieb:> richtig?
Hallo. Leider falsch.
Benutze die CTC-Modi, dann geht mehr, zulasten der Auflösung.
Benutze einen 20MHz Quarz, weil der ATMEGA328-20 das auch erlaubt. Lies
mal die Gehäusebeschriftung ;)
mfg mf
Baumbart schrieb:> Für meine FAST PWM würde das dann entsprechend Vorteiler 1 bedeuten:> 16.000.000/1x256 = 62500Hz.
Wenn deine Anwendung volle 8 Bit Auflösung braucht, dann ja. Oder eben
bestenfalls noch die 25% mehr mit 20MHz Taktfrequenz. Nicht schlecht für
ein knapp 30 Jahre altes Design...
Wenn du schneller willst, dann musst du neuere oder speziellere Designs
nehmen, wie z.B. den ATTiny25/45/85, der kann die PWM-Grundfrequenz erst
mal per PLL auf 64MHz anheben und erreicht damit bei 8 Bit Auflösung ein
PWM-Frequenz mit 250kHz.
Sorry falls ein bisschen Offtopic, würde gerne etwas dazu lernen :D.
Für was könnte man so hohe PWM Frequenzen benötigen?
Für Motorensteuerungen werden doch afaik Frequenzen >20kHz genutzt,
damit die Lautstärke verringert wird.
Für LEDs nutzt man doch zwischen 100Hz & 500Hz.
Mir fällt gerade nicht wirklich ein, für was man PWM noch nutzen könnte
:l
Thomas R. schrieb:> Sorry falls ein bisschen Offtopic, würde gerne etwas dazu lernen :D.>> Für was könnte man so hohe PWM Frequenzen benötigen?> Für Motorensteuerungen werden doch afaik Frequenzen >20kHz genutzt,> damit die Lautstärke verringert wird.
Das stimmt so allgemein nicht. Bei kleinen Motoren kann man mit 20kHz
und mehr arbeiten, bei großen Umrichtern mit 2-3stelligen kW Leistungen
geht es deutlich darunter. Ich hab hier ein Datenblatt von Hitatchi, die
größte Kiste der SJ700 Reihe mit 132kW erreicht seine volle Leistung bei
max. 3kHz, darüber muss er auf grund der Schaltverluste den
Ausgangsstrom reduzieren.
> Für LEDs nutzt man doch zwischen 100Hz & 500Hz.
In etwa.
> Mir fällt gerade nicht wirklich ein, für was man PWM noch nutzen könnte
Es gibt Dutzende Anwendungen für PWM.
https://www.mikrocontroller.net/articles/Pulsweitenmodulation#DA-Wandlung_mit_PWM
Datenübertragung
WS2812 Ansteuerung
Liste unvollständig
Thomas R. schrieb:> Für LEDs nutzt man doch zwischen 100Hz & 500Hz.
Ich nehme oft 4kHz, weils dann nicht mehr sichtbar flimmert, auch bei
Bewegung.
Je höher die PWM, umso besser kann man sie wegfiltern, was z.B. bei FU
und WR sinnvoll ist.
Stimmt... Gar nicht so weit gedacht.
Bin irgendwie nur von Brushed-DC Motoren ausgegangen.
Ist ja auch ebenfalls bei Schrittmotoren (siehe Hard-drive-disk) so mit
einer hohen Frequenz.
Danke euch!
Mir fiele noch ein, dass man mit der PWM auch andere Dinge in der
Schaltung clocken könnte. So bräuchte man weniger Quarze (und weniger
Oszillatoren, die warum auch immer nicht anschwingen; weniger kosten tut
es dann auch).
Da würde mich aber auch interessieren: Wird das professionell auch so
gemacht?
> So bräuchte man weniger Quarze
Quarze und Quarzoszillatoren sind in einem kommerziellen Design
wohl die geringsten Kostenfaktoren.
Ueblich sind dagegen eher "spezielle" Signalprozessoren
(z.B. TI TMS320x28) und fuer exakte Timings, verifizierbare
Sicherheit etc. noch ein FPGA.
Löppt schrieb:> Mir fiele noch ein, dass man mit der PWM auch andere Dinge in der> Schaltung clocken könnte. So bräuchte man weniger Quarze
Um "Dinge zu clocken" - sprich: ein Taktsignal bereit zu stellen,
braucht man aber keine PWM. Für die meisten Anwendungsfälle dürfte ein
symmetrisches Taktsignal (50% PWM) ausreichen. Und das kann man
wesentlich einfacher und vor allem bis zur Taktfrequenz des AVR selber
generieren.
> Da würde mich aber auch interessieren: Wird das professionell auch so> gemacht?
Mit PWM? Sicher nicht.
Taktsignal für angeschlossene Peripherie mit µC erzeugen? Absolut. Oft
ist es sogar notwendig, etwa für die Synchronisation.
Cartman schrieb:>> So bräuchte man weniger Quarze>> Quarze und Quarzoszillatoren sind in einem kommerziellen Design> wohl die geringsten Kostenfaktoren.> Ueblich sind dagegen eher "spezielle" Signalprozessoren> (z.B. TI TMS320x28) und fuer exakte Timings, verifizierbare> Sicherheit etc. noch ein FPGA.
Hängt wohl davon ab, was das für ein Design ist. Nicht alles enthält 2
FPGA und Cortex A :)
Axel S. schrieb:> Löppt schrieb:>>> Mir fiele noch ein, dass man mit der PWM auch andere Dinge in der>> Schaltung clocken könnte. So bräuchte man weniger Quarze>> Um "Dinge zu clocken" - sprich: ein Taktsignal bereit zu stellen,> braucht man aber keine PWM. Für die meisten Anwendungsfälle dürfte ein> symmetrisches Taktsignal (50% PWM) ausreichen. Und das kann man> wesentlich einfacher und vor allem bis zur Taktfrequenz des AVR selber> generieren.>> Da würde mich aber auch interessieren: Wird das professionell auch so>> gemacht?>> Mit PWM? Sicher nicht.> Taktsignal für angeschlossene Peripherie mit µC erzeugen? Absolut. Oft> ist es sogar notwendig, etwa für die Synchronisation.
Ja, da war ich noch nicht wach. Ich meine natürlich, ein Taktsignal mit
Timer-Peripherien zu erzeugen.
Danke für die Antwort :)
Thomas R. schrieb:> Sorry falls ein bisschen Offtopic, würde gerne etwas dazu lernen> :D.>> Für was könnte man so hohe PWM Frequenzen benötigen?> Für Motorensteuerungen werden doch afaik Frequenzen >20kHz genutzt,> damit die Lautstärke verringert wird.> Für LEDs nutzt man doch zwischen 100Hz & 500Hz.>> Mir fällt gerade nicht wirklich ein, für was man PWM noch nutzen könnte> :l
Auch wenn bereits mehrfach drauf eingegangen, bei mir war die hohe
Schaltfrequenz für Versuche mit einem selbstbau-Aufwärtswandler. Den
dazu notwendigen Mosfet steuere ich mit dem Atmega328p an. Btw. ich habe
mir laut Datenblatt nachfolgendes gebaut. Damit sind alle möglichen
Frequenzen < Quarz möglich.
Die Frequenz errechnet sich aus: QuartzFrequenz/Prescale*OCR0A
Duty Cycle muss zwangsläufig mind OCR0A -1 sein.
Beispiel:
16000000/1*100 = 160kHz
Duty Cycle 50% (OCR0B) wären dann max OCR0A * 0.5 ergibt OCR0B = 50;
1
//generate Timer0 Fast PWM on PD5 OC0B with adjustable Freq on OC0A
2
TCCR0A|=(1<<COM0B1);//Clear OC0B on compare match
3
TCCR0A|=(1<<WGM00)|(1<<WGM01);//Fast PWM Mode 7 with OCR0A as TOP
4
TCCR0B|=(1<<WGM02);//Fast PWM Mode 7 with OCR0A as TOP