Forum: Mikrocontroller und Digitale Elektronik 100kHz PWM mit AVR?


von Christine R. (Gast)


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?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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.

von crazy horse (Gast)


Lesenswert?

Tiny25/45/85 kann das auch - Timertakt per PLL bis 64MHz.

von Andre (Gast)


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;

    }

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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...

von Matze (Gast)


Lesenswert?

Außerdem kann der µC dann nix anderes mehr machen. Was meist auch 
schlecht ist.

von Andre (Gast)


Lesenswert?

okay da haste wohl recht,da hab ich nich gut überlegt sry:-)

Ist aber vllt. dennoch ein einfacher weg für den anfang ...

von Christine R. (Gast)


Lesenswert?

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!

von wt (Gast)


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

von markus (Gast)


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.

von Thomas B. (yahp) Benutzerseite


Lesenswert?

markus wrote:
> Über den DAC des AVR eine Spannungsausgeben,

Der übliche DAC eines typischen AVR... Mmmh, was ist der Schwachpunkt 
des Plans?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Thomas B. wrote:

> Der übliche DAC eines typischen AVR...

...ist ein PWM. ;-)

von Stefan W. (wswbln)


Lesenswert?

Pssst! Markus (Gast) arbeitet wohl schon mit den Xmegas... ;-)

von Thomas B. (yahp) Benutzerseite


Lesenswert?

Jörg Wunsch wrote:
> Thomas B. wrote:
>
>> Der übliche DAC eines typischen AVR...
>
> ...ist ein PWM. ;-)

Wohl wahr. Den filtern und den ganzen externen Zinnober machen klingt 
nicht einfacher, als einen Controller finden, der ne hinreichend 
schnelle PWM selber kann.

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.