100kHz PWM mit AVR?

Gast #1042874
Lesenswert?

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 #1042886
Lesenswert?

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 #1042909
Lesenswert?

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 #1042920
Lesenswert?

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 #1043386
Lesenswert?

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 #1043402
Lesenswert?

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

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