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?
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.
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; }
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...
Außerdem kann der µC dann nix anderes mehr machen. Was meist auch schlecht ist.
okay da haste wohl recht,da hab ich nich gut überlegt sry:-) Ist aber vllt. dennoch ein einfacher weg für den anfang ...
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!
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
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.
markus wrote: > Über den DAC des AVR eine Spannungsausgeben, Der übliche DAC eines typischen AVR... Mmmh, was ist der Schwachpunkt des Plans?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.