100kHz PWM mit AVR?

Gast #1042874
Hallo!

Ich möchte eine PWM erzeugen mit 100kHz. Am liebsten würde ich einen AVR 
nehmen. 8Bit sollten ausreichen.
Doch ist dies mit den AVR überhaupt möglich?
Denn bei 16Mhz Takt erreicht man mit dem 8Bit Timer maximal 62,5kHz. 
Gibts einen anderem Weg?

Ich hatte mal einen 8051 der hatte eine PLL für die Peripherie, also 
konnten die Timer höher getaktet werden. Gibts auch einen AVR der das 
kann?
Moderator Persönliche Seite
Christine R. wrote:

> Ich möchte eine PWM erzeugen mit 100kHz. Am liebsten würde ich einen AVR
> nehmen.

Welchen AVR?

> 8Bit sollten ausreichen.
> Doch ist dies mit den AVR überhaupt möglich?
> Denn bei 16Mhz Takt erreicht man mit dem 8Bit Timer maximal 62,5kHz.

Bei neueren AVRs kann man den oberen Zählwert der 8-bit-Timer in
einem Register angeben, damit kannst du den auf 160 setzen.  Das sind
dann aber nicht mehr 8 bit, sondern nur noch 7,5 bit.

Ansonsten kannst du dir die ATtiny261/461/861 angucken, die haben
einen Highspeed-PWM-Modus, bei dem der Timer über eine PLL höher
getaktet wird als der Systemtakt.
Gast
Hi,
soweit ich weiss muss man nicht umbedingt mit Timern arbeiten! Du kannst 
auch deine PWM in eine Endlosschleife setzen,inder noch eine interne 
schleife läuft die immer einen Schritt bis 255 hochzählt und mit einem 
vorgegebenen wert abgleicht.Sobald der vorgegebene Wert erreicht 
ist,setzt oder löscht du in der Schleife ( je nachdem ob invertierendes 
Verhalten gewünscht ist oder nicht) z.B. einen PortPin.Habe das ganze 
schon öfters mit einem PIC gemacht,je nachdem wieviele PWM -Ausgänge du 
betreiben möchtest und was du sonst noch mit dem Mikrocontroller vorhast 
kommst du mit deinen 100kHz hin.

hier mal ein Beispiel für eine PWM in C zur ansteuerung einer RGB-LED:

  while(1)
    {
      i++;

      if(i>=Val_Blau) Pin_Blau=1;
      else Pin_Blau=0;
      if(i>=Val_Gruen) Pin_Gruen=1;
      else Pin_Gruen=0;
      if(i>=Val_Rot) Pin_Rot=1;
      else Pin_Rot=0;

      //if(i==255) i=1;

    }
Moderator Persönliche Seite
Andre wrote:

> soweit ich weiss muss man nicht umbedingt mit Timern arbeiten! Du kannst
> auch deine PWM in eine Endlosschleife setzen,inder noch eine interne
> schleife läuft die immer einen Schritt bis 255 hochzählt und mit einem
> vorgegebenen wert abgleicht.

Hast du mal nachgerechnet, auf welche Frequenzen du damit kommst?

Nur als Vergleich: der Timer zählt bei jedem CPU-Takt um 1 hoch.
Das mach mal in Software, ganz zu schweigen vom Vergleichen...
Gast
Ich brauch nur einen PWM Kanal, und das in Hardware.
Soft PWM geht nicht, der µC hat noch andere Aufgaben.

Ich werd mir also den ATtiny261 und 25 anschaun.

Danke!
Gast
Tiny26 ist gute Wahl, wenn du PWM Verhältnis variiren möchtest(z.B. 
20/80% u.ä.) Alternativ kannst Du auch AT90PWM3 nutzen.
Wenn Du eher in richtung 50/50 PWM schilst, dann hast du leichtes Spiel. 
Suche bei AVR's nach 'Fast PWM' gibt's genug!

gruß
wt
Gast
Mein Vorschlag:

Über den DAC des AVR eine Spannungsausgeben, die Spannung auf einen 
Komperator, zweites Eingangssignal des Komperators ein Dreiecksignal und 
schon hat man ein ein PWM-Signal :)

Die Maximalfrequenz ist aber über die Voreinstellungen des 
Dreiecksignals gegeben.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.