AVR: FastPWM Frequenz erhöhen

(Firma: Brainit GmbH) #3602957
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?
Gast #3603020
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
(Firma: Brainit GmbH) #3603034
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 :-)
Gast #3603123
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren