Forum: Mikrocontroller und Digitale Elektronik AVR: FastPWM Frequenz erhöhen


von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

Hallo allerseits,
ich hab hier eine Schaltung mit einem ATmega328P, auf Timer0 hängen zwei 
(unabhängige) FastPWM-Schaltungen die einen MOSFET treiben. Taktfrequenz 
16MHz, kein Prescaler, also PWM-Frequenz 62.5kHz. Keine Interrupts, Duty 
wird ausschließlich über OCR0A und OCR0B gesteuert, die ganze PWM läuft 
also rein in Hardware. Funktioniert ganz ausgezeichnet.

Nun muss ich die PWM-Frequenz erhöhen, bei gleichzeitiger Reduktion der 
Auflösung. Ich möchte z.B. dass der Timer nur bis 100 zählt, OCR0A/B 
darf dann halt nur mehr 0..100 (oder 0..99) betragen, das ist 
unkritisch.

Soweit der Plan :-( Ich kann zwar TOP beeinflussen, aber das ist ja 
OCR0A, den kann ich ja nicht verwenden, weil das ist ja mein PWM-Faktor.

Ich bin sicher da gibts einen Trick... nur seh ich den im Moment nicht. 
Kann mir jemand auf die Sprünge helfen?

von Walter Tarpan (Gast)


Lesenswert?

Tja....bei Timer1 hättest Du ICR1.

von chris (Gast)


Lesenswert?

wie hoch muss denn die pwm-frequenz sein die du erreichen willst??

zu not könntest du ja auf 20Mhz gehen dann bist du bei 78,125Khz...

von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

Walter Tarpan schrieb:
> Tja....bei Timer1 hättest Du ICR1.

Tja... wenn die hardware nciht schon fertig vor mir liegen würde :-(

chris schrieb:
> wie hoch muss denn die pwm-frequenz sein die du erreichen willst??
>
> zu not könntest du ja auf 20Mhz gehen dann bist du bei 78,125Khz...

Ich möchte auf >100kHz kommen.

von tictactoe (Gast)


Lesenswert?

Du könntest im OVF0-Interrupt den TCNT0 auf 156 setzen und OCR0A und 
OCR0B ebenfalls mit diesem Offset versehen.

von Oliver S. (oliverso)


Lesenswert?

Michael Reinelt schrieb:
> Ich bin sicher da gibts einen Trick...

Nach Datenblatt gibt es für TOP nur 0xff oder OCRA zur Auswahl, und 
damit lassen sich halt keine zwei unabhängigen PWM-Kanäle mit variablem 
Grundtakt erzeugen. Auch nicht mit Tricks.

Nimm deinen Cutter, Fädeldraht, löte die Anschlüsse auf Timer 1 um.

Oliver

von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

Oliver S. schrieb:

> Nimm deinen Cutter, Fädeldraht, löte die Anschlüsse auf Timer 1 um.

Timer1 ist in Verwendung...

von chris (Gast)


Lesenswert?

Michael Reinelt schrieb:
> Ich möchte auf >100kHz kommen.

puhhhh mit jetzigen gegebenheiten schwierig. was schaltet denn der 
mosfet?

idee währe modus 1 des T0 nutzen bei 16Mhz,
teiler auf 1, vorladen mit z.b 100 bis der 1te aufruf der ISR kommt das 
währen dann nach ca. 6.25µs = 160Khz

in der ISR

test:        ;erst T0 neu laden minus ISR-Zeit
    sbic    portd,5
    rjmp    clr_bit
    sbis    portd,5
    rjmp    set_bit
    reti

clr_bit:        cbi      portd,5
    reti

set_bit:  sbi      portd,5
    reti

musst halt anpassen für zwei kanäle

von chris (Gast)


Lesenswert?

chris schrieb:
> währen dann nach ca. 6.25µs = 160Khz

Korrektur vorladewert 100 ist 9,75µs = 102,564Khz

von Peter D. (peda)


Lesenswert?

Michael Reinelt schrieb:
> Timer1 ist in Verwendung

Tausche T0 mit T1.

von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

Danke euch!

die beiden PWM bzw. deren MOSFETs treiben eine Art Step-Down. ich hab 
momentan zu hohen Ripple in der Spule (Auslegungsfehler meinerseits) den 
möchte ich mit höherem Takt reduzieren.

Timer tauschen wäre wahrscheinlich am vernünftigsten, ist aber nicht 
ganz einfach, doppelseitiges Layout umfädeln möcht ich vermeiden, und 
ich hätte gerne die 16bit von Timer1. Bevor ich mir das antue, bleib ich 
lieber bei meinen 62.5kHz und bestelle neue Spulen.

ABER: der Trick mit "von der anderen Seite betrachten" klingt 
interessant: Statt hinten zu begrenzen (also von 0..100 zählen zu 
lassen) begrenze ich von vorne, also von 156..255. Das scheint mir einen 
Versuch wert...

Allerdings sind dabei vermutlich ein paar Sachen zu beachten:

- die ISR müsste vermutlich so kurz wie möglich sein, immerhin wird die 
dann alle 100 Takte aufgerufen.

- zumindest einen Teil der Hardware-PWM müsste ich in der ISR machen: 
das Einschalten der Pins (weil normalerweise ja bei 0 eingeschaltet 
wird, 0 aber nie mehr auftritt).

Dürfte jedenfalls zumindest einen Versuch wert sein... (irgendwie muss 
ich ja sowieso die zeit überbrücken, bis die neuen Spulen da sind :-)

von Ulrich (Gast)


Lesenswert?

Die größere Induktivität ist der bessere Weg. Zur Not für die 
Zwischenzeit auch 2 Induktivitäten in Reihe. Die Leitungen zur 
Induktivität sind ausnahmsweise nicht so kritisch beim Schaltregler - 
die dürfen auch länger sein.

von Oliver S. (oliverso)


Lesenswert?

Michael Reinelt schrieb:
> Allerdings sind dabei vermutlich ein paar Sachen zu beachten:

Sowohl bei der reinen Softwarelösung als auch bei "CTC zu Fuß" hast du 
Rechenzeiten, die an beiden Enden der PWM ein paar Werte verhindern. 
"ganz kurz" und "fast ganz lang" geht damit nicht. Ich vermute aber mal, 
damit kannst du leben.

Oliver

von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

So, ich hab die bestehende Spule vermessen, die sättigt erst bei 12A. 
Und mir wurde von glaubhafter Seite (Falk) versichert, eine Erhöhung der 
Frequenz wäre dann nicht notwendig.

Trotzdem Danke an alle fürs Mitdenken!

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.