Forum: Mikrocontroller und Digitale Elektronik PWM 40 khz ?


von Jörn (Gast)


Lesenswert?

Hi,

Ist es möglich per Hardware pwm des at90s2313 eine 40 khz frequenz zu
erzeugen? Mein programm läuft schon, ich betreibe den avr mit 4 Mhz,
doch die höchste frequenz die ich hinbekomme liegt bei ca. 6,8 khz.

MFG Jörn

von Matthias (Gast)


Lesenswert?

wenn man den PWM mit 8bit fährt dann ist der Vorteiler 510. Die maximal
erreichbare Frequenz müsste bei 4 MHz Takt also bei etwa 7,8 kHz
liegen. Mehr ist bei 4 MHz leider nicht drin.

von crazy horse (Gast)


Lesenswert?

die Grössenordnung stimmt, exakt sind es 7,8xx kHz. Schneller gehts beim
2313 mit 4MHz nicht.

von Peter D. (peda)


Lesenswert?

Du must den Timer im "clear on compare match" betreiben und das
Compareregister auf 49 setzen, dann hast Du
4MHz  2  (49 + 1 ) = 40kHz.


Peter

von crazy horse (Gast)


Lesenswert?

ja, und wo bleibt dann die PWM? Darum gehts ja eigentlich.

von Jörn (Gast)


Lesenswert?

Hi,
erstmal danke für die schnellen antworten!! So was in der art habe ich
mir schon gedacht.

@peter dannegger
Kannst du das mit dem Timer noch etwas genauer erklären? Eventuell
kurzes Codebeispiel z.B. wie man das initialisiert?

MFG Jörn

von Peter D. (peda)


Lesenswert?

"Kannst du das mit dem Timer noch etwas genauer erklären? Eventuell
kurzes Codebeispiel z.B. wie man das initialisiert?"

TCCR1A = 1<<COM1A0;       // toggle pin on compare match
OCR1A = 49;               // count: ...48,49,0,1...
TCCR1B = 1<<CTC1^1<<CS10; // clear on compare match,
                          // CK / 1,
                          // start


Peter

von Fritz Ganter (Gast)


Lesenswert?

@Peter

Vielleicht versteh ich das auch falsch, aber so bekommst nur 1:1
Tastverhältnis raus, oder?
PWM muss ja bis MAX laufen und bei TOP umschalten.

@Jörn: hat dein µC einen Fast-PWM Mode? Damit lässt sich die Frequenz
zumindest verdoppeln.

von Mattias (Gast)


Lesenswert?

Also ich habe auch schon mal so ca. 20 khz pwm gebraucht und das bei 8
bit Auflösung. Es geht definitiv nur, wenn Du den Controller
übertaktest. Bei mir läuft ein mega8-16 schon lange mit einem 24 Mhz
Quarz. Anders ist das nicht zu machen. 40 Mhz ist aber so sicherlich
nicht zu machen.

Gruß Mattias

von Peter D. (peda)


Lesenswert?

@Fritz,

"PWM muss ja bis MAX laufen und bei TOP umschalten."

Mit PWM kannst Du doch nur Gleichspannungen erzeugen bzw. sehr
niederfrequente Wechselspannungen. Die Wandlerfrequenz wird ja danach
über einen Tiefpaß rausgefiltert.

Die PWM läßt sich also nicht zur Frequenzerzeugung mißbrauchen, sondern
es geht nur, wie oben beschrieben.


Peter

von Fritz Ganter (Gast)


Lesenswert?

@Matthias

Er braucht ja nur 40kHz, nicht 40MHz :-)

von Fritz Ganter (Gast)


Lesenswert?

Hmm, wollte er jetzt PWM oder bloss eine Frequenz?

Ich habs so verstanden, dass er PWM machen will mit einem 40kHz Takt.
Reine Rechteckfrequenzen gehen natürlich mit dem Counter viel höher.

von mmerten (Gast)


Lesenswert?

Schau dir doch mal den TINY26 als alternative an der hat "High Speed"
PWM

von MasterD (Gast)


Lesenswert?

"Die PWM läßt sich also nicht zur Frequenzerzeugung mißbrauchen,
sondern
es geht nur, wie oben beschrieben."

Doch, wenn man einen Kondensator in Reihe schaltet. Der Filtert den
Gleichspannungsanteil raus, man bekommt den reinen
Wechselspannungsanteil.

von Hagen (Gast)


Lesenswert?

Die neueren Tinys erlauben PWM's mit hoher Frequenz, bei 25Mhz PCK. Die
PWM Frequenz und Pulsweite kann dann fast stufenlos eingestellt werden.
Dazu wird das Register ICP oder OCR1A als TOP benutzt und OCR1B
bestimmt im Bereich von 0 bis TOP die Pulsweite.

40KHz mit annähernd 8Bit Auflösung ist da kein problem.

Gruß Hagen

von Hagen (Gast)


Lesenswert?

Achso, nutzt man ICP = Input Capture Reegister dann kann man über OCR1A
und OCR1B jeweils zwei verschiedene PWM's mit unterschiedlichen
Pulseweiten erzeugen, bei gleicher PWM Frequenz und auf zwei Pins
ausgeben. Nutzt man aber OCR1A als TOP Register so kann man die
Pulseweite nur vom B Kanal einstellen, über OCR1B. Der A kanal arbeitet
dann immer mit 50% Duty Cycle. In jedem Falle benötigt man bei diesen
Modis dann keinerlei extra Software Controlling, d.h. die hardware
macht alles selber. Im zweiten Modus hat man aber den Vorteil das die
Änderung der PWM Frequenz über das Register OCR1A ohne Störungen läuft,
also synchronisiert zum PWM Counter durchgeführt wird. Dies ist beim
ICP als TOP nicht der Fall.

Gruß Hagen

von Hagen (Gast)


Lesenswert?

Die Modulation dieser PWM's ist dann ebenfalls absolut einfach. Die
DDR's der Pins werden dann einfach als Eingang oder Ausgang
geschaltet. Am besten nutzt man den Compare Match Interrupt um das DDR
entsprechend zu setzen. So hat man dann die Möglichkeit exakt die PWM
Pulse eines Burst's abzuzählen und entsprechend die PWM auf die Pins
ein/aus zu schalten.

Gruß Hagen

von Jörn (Gast)


Lesenswert?

Hi,
Eigentlich geht es mir nur um die 40 khz, ich wusste nur nicht das ich
mit pwm nicht so hohe frequenzen erzeugen kann. Die 40 khz brauche ich
als Trägersignal für einen Infarotsender.

Was für ein ein-auschaltverhältnis sollte man dafür nehmen ? 50%?

MFG jörn

von Peter D. (peda)


Lesenswert?

Also nochmal ganz langsam zum Mitschreiben:

Eine PWM dient dazu, GLEICHSPANNUNG zu erzeugen !!!

Die Wandlungsfrequenz will man dabei NICHT haben !!!

Deshalb wird diese durch den nachfolgend angeschalteten Tiefpaß
komplett rausgefiltert.


Im PWM-Mode kann man also nur das Tastverhältnis, nicht aber die
Frequenz ändern.

Um variable Frequenzen zu erzeugen, nimmt man den
clear-on-compare-Mode. Das Tastverhältnis ist dabei immer 50%.


Das bei einer PWM eine Frequenz mit entsteht, ist also nur ein
unerwünschter Nebeneffekt des Prinzips PWM, aber nicht das Ziel.


Peter

von Hagen (Gast)


Lesenswert?

30-50% Duty Cycle und der Burst sollte bei 40KHz mindestens 10 Pulse
groß sein. Besser sind 16 oder mehr wie beim RC4. beim RC4 sind es zB.
2x 32 Pulse pro Bit.

Gruß Hagen

von Marko B. (Gast)


Lesenswert?

Hab ich schonmal hier erwähnt:

http://web.archive.org/web/20030618100058/http://www.nwlink.com/~kevinro/guide/infrared.html

Mit dieser Schaltung lassen sich IR-Dioden mit einer beliebigen
(einstellbaren) Frequenz modulieren.

von Jörn (Gast)


Lesenswert?

Hi,

Wow das funzt ja supergut mit diesem clear on compare match!! hab 39,7
khz gemessen! Vielen dank für eure schnelle hilfe!!

Nun noch eine frage wie kann ich das signal an und ausschalten? muss
ich dafür den timer abschalten? wenn ja wie? oder einfach den pin mit
cbi oder sbi löschen oder setzen?

MFG Jörn

von Matthias (Gast)


Lesenswert?

Hi

@Peter
Warum dient PWM nur dazu Gleichspannung zu erzeugen? Mann kann mit PWM
doch viel mehr machen. z.B. zur Helligkeitseinstellung von LED's. Da
brauchts keinen Filter. Weitere Anwendung hier war die Ansteuerung von
Propventilen in der Hydraulik. Hier war neben dem Tastverhältnis der
PWM auch deren Frequenz mitentscheidend da diese nicht zu hoch werden
durfte um die Schaltverluste klein zu halten und das Ventil immer ein
bischen "flattern" zu lassen.

Matthias

von Peter D. (peda)


Lesenswert?

@Matthias

"Da brauchts keinen Filter."

Na dann rate mal, was Dein Auge ist.
Ein richtig super Tiefpaß, sonst würde ja Film und Video nicht
funktionieren. Und das Ventil hat auch eine super mechanische Trägheit
als Filter.

Ich hab ja nicht behauptet, das Filter muß elektrisch aufgebaut sein.

In jedem Fall ist bei einer PWM der sich aus dem Tastverhältnis der
Ausgangsspannung ergebende Mittelwert die zu steuernde Größe und nicht
die Frequenz.


Peter

von Matthias (Gast)


Lesenswert?

Hi

@Peter
Du hast aber von Gleichspannung und Filter geschrieben. Da dachte ich
ich muß erwähnen das man aus einer PWM nicht generell Gleichspannung
macht sondern diese auch direkt verwenden kann (das dürfte sogar viel
öfters der Fall sein). Und auch die Frequenz spielt natürlich eine
Rolle. Bei einer Motorsteuerung wird man wohl nicht in den hohen
Kiloherz-Bereich gehen um die Schaltverluste gering zu halten.

Natürlich ist bei einer LED das Auge der Tiefpass-Filter und bei einem
Motor die Massenträgheit.

Matthias

von Hagen (Gast)


Lesenswert?

>Nun noch eine frage wie kann ich das signal an und ausschalten?
>muss ich dafür den timer abschalten? wenn ja wie? oder einfach den
> pin mit cbi oder sbi löschen oder setzen?

Nein, du kannst es ohne Timer machen. Der Timer bringt dich da nicht
weiter und wäre zu ungenau.

Also eine PWM besteht aus einer Halbwelle von 50% High und nachfolgend
50% Low. Der Übergang von High nach Low erfolgt exakt zum Compare
Match. Da du aber den CTC Mode benutzt wird also bei jedem Compare
Match der Pegel des Ausgangspins invertiert. D.h. heist für dich also
das nach 2x Compare Match ein Pulse der PWM erfolgt ist. Nun, du
installierst also eine Interrupt Service Routine für den Compare Match
Interrupt. Innerhalb dieser Routine zählst du mit wie oft nun der Pegel
sich geändert hat. Nach exakt 32 Pegel Änderungen, also 16 Pulsen der
IR Diode schaltest du abhänig von den zu sendenden Datenbits das
Datenrichtungsregister auf Eingang oder Ausgang. Der Pin an dem also
deine IR Diode hängt wird wenn er als Ausgang geschaltet ist mit 40KHz
gepulst. Ist er als Eingang geschaltet wird er mit Hilfe des Pullps auf
High gezogen. Da deine IR Diode ja von Vcc zum Pin geschaltet ist,
"leuchtet" sie nur wenn am Pin ein Low anliegt.

Zum mitmeiseln. Statt einem Timer wird durch die hardware zur Erzeugung
der 40KHz PWM bei jedem Puls ein Interrupt ausgelösst, der sogenannte
Compare Match ISR. Diesen benutzt du nun um exakt 10 bis 32 Impulse
abzuzählen, unabhänig davon ob der Pin an dem die IR Diode als Ein-
oder Ausgang geschaltet ist. Diese 10-32 Pulse sind der sogenannte
Burst beim RC5 Protokoll, also ein exakter Block von 32 Lichtblitzen.
Jedes Bits beim RC5 besteht immer aus 2 * 32 Impulsen,  wobei aber eben
nur 32 Impulse geblitzt wird und der Rest der 32 Impulse die IR Diode
nicht sendet. Abhängig davon ob nun zuerst ein 16 Lichtblitz Burst
erfolgt und dann 16 Impulse Ruhe ist, oder eben umgekehrt entsteht also
ein Pegelwechsel im Signal von entweder High->Low oder Low->High. Exakt
dieser Pegelwechsel bestimmt beim Manchastercode ob es ein 1 oder 0
Datenbit ist.

Gruß Hagen

von Hagen (Gast)


Lesenswert?

Hm, oben bin  ich mit den zahlen ein bischen durcheinander gekommmen.

Also: RC5 arbeitet mit 36KHz und Manchaster Codierung. Ein Datenbit
wird innerhalb von 64 Impulsen übertragen, macht also 1.77778 ms pro
Bit. Die Information ob ein Bit einen 1 oder 0 ist wird exakt nach 32
Impulsen übertragen. Je nachdem ob zuerst 32 mal geblitzt wurde und
danach 32 Impulse Ruhe ist, oder eben umgekerht, handelt es sich um
eine 1 oder 0 beim datenbit. Somit blitzt die IR Diode maximal 64 mal
am Stück und maximal 64 Impulse kann Ruhe sein. Minimal blitzt die
Diode 32 mal und auch 32 Impulse ist die kürzeste Ruhepause. Das ist
der Vorteil der Manchastercodierung.

Somit heist das für dich: Du zählst per ISR die Impulse mit. Nach 32
Impulsen = 64 mal ein Compare Match im CTC Mode, musst die IR Diode ein
oder ausgeschaltet werden, sprich das Signal moduliert werden.

Am besten ist es wenn exakt in der Compare Match ISR der Pin durch die
PWM Hardare auf High gesetzt wurde. Dadurch brauchst du nun nur noch
das Datenrichtungsregister des Pins nur noch auf Ein- oder Ausgang
setzten. Wird es auf Eingang gesetzt so ist alos automatisch dser
Pullup nach Vcc aktiviert, wird es auf Ausgang gesetzt so liegt High am
Pin an = ID Diode ist aus.

Nun wird in deiner ISR 2  2  32 * 14 Bits aufgerufen, und raus ist
der RC5. 2  32  14 = 896 * 1/36000 = 24.888ms.


Gruß Hagen
Gruß Hagen

von Peter D. (peda)


Lesenswert?

Es erstaunt mich wirklich, wie hartnäckig hier am Begriff PWM
festgehalten wird, obwohl ja nun inzwischen klar sein sollte, daß es
kein PWM ist.

Und da es also nicht der PWM-Mode ist, kann man im Compare-Interrupt
die Impulse mitzählen und dann im Register TCCR1A den Pin von
"Toggle" auf "Set" (LED gegen VCC) oder "Clear" (LED gegen GND)
setzen. Und nach weiteren 32 Interrupts wieder zurück.


Peter

von Hagen (Gast)


Lesenswert?

Auch der CTC Mode wird in den Datenblättern unter dem Oberbegriff PWM
geführt. Ich finde dies auch logisch da es nichts anderes als eine PWM
mit 50% Duty Cycle ist.

Ok Peter, wir können auch den Begriff PWM ausklammern und von einer
Amplitudenmodulation einer Frequenz mit 50% Pulseverhältnis reden. Das
macht aber keinen Unterschied.

Was ich aber nicht ganz verstanden habe ist das du meinst das man nur
im TCCR1A register den "Pin" Modus ändern muss. Wenn ich die
Datenblätter aber richtig verstanden habe würde beim deinem Vorschlag
sich nur die Phase der Frequenz um jeweils eine Halbwelle verschieben.
D.h. egal ob der Toggle Mode oder Set/Clear Mode benutzt wird die LED
würde denoch fortwährend gepulst werden. Sehe ich dies richtig oder
habe ich da einen Denkfehler ?

Gruß hagen

von Peter D. (peda)


Lesenswert?

Set heißt, er wird beim nächsten Compare auf 1 gesetzt, egal wie der
Zustand davor war.

Pulsen geht erst wieder, wenn man auf Toggle umschaltet.
Alternativ könnte man auch bei jedem Interrupt zwischen Set und Clear
umschalten.

Das geht aber alles nur im nicht PWM.


Peter

P.S.:
Es ging mir ja nur darum, eine Begriffsverwirrung zu vermeiden. Wenn
man mit jemandem von PWM spricht, dann weiß derjenige, daß man eine
variable Spannung erzeugen will.
Wie man ja deutlich sehen kann, sind durch das Wort PWM in der Frage
erstmal völlig falsche Antworten gegeben worden.

von Hagen (Gast)


Lesenswert?

>Set heißt, er wird beim nächsten Compare auf 1 gesetzt, egal wie der
>Zustand davor war.

Ok, danke Peter. Es ist ja auch im CTC Mode logisch.

Gruß Hagen

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.