Hallo, gibt es die Möglichkeit, mit einem Mikrocontroller (z. B. ATmega) eine 16-Bit-PWM zu erzeugen, wobei die PWM-Frequenz im Bereich von 10 bis 100 kHz liegen soll? Wenn ich einen normalen ATmega (getaktet mit 20 MHz) nehme, dann komme ich bei 16 Bit nur auf eine PWM-Frequenz von ca. 305 kHz (prescaling deaktiviert). Und soweit ich weiß kann ich den externen Takt für den PWM-Timer nicht größer machen als die Hälfte des Taktes vom µC, oder? Also wenn es eine andere Möglichkeit gibt, evtl. auch mit Hilfe eines 32-Bit Controllers, dann bin ich für jeden Hinweis dankbar. Vielen Dank schon mal :-) Grüße Cyberfuzzy
Cyberfuzzy schrieb: > gibt es die Möglichkeit, mit einem Mikrocontroller (z. B. ATmega) eine > 16-Bit-PWM zu erzeugen, wobei die PWM-Frequenz im Bereich von 10 bis 100 > kHz liegen soll? Tja, die Mathematik läßt sich nicht überlisten: 100kHz * 65536 = 6,6GHz PWM ist also der falsche Ansatz. Peter
16Bit PWM erfordert, dass der µC von 0 bis 2^16 zählt. die 100kHz-vorgabe erfordert, dass er das 100.000 mal pro Sekunde tut. Also brauchst du eine Zähl-Frequenz von ~6.5 GHz. Viel Glück bei der Suche. Alternative: PWM analog erzeugen.
@Cyberfuzzy (Gast) >gibt es die Möglichkeit, mit einem Mikrocontroller (z. B. ATmega) eine >16-Bit-PWM zu erzeugen, wobei die PWM-Frequenz im Bereich von 10 bis 100 >kHz liegen soll? Nein. >Wenn ich einen normalen ATmega (getaktet mit 20 MHz) nehme, dann komme >ich bei 16 Bit nur auf eine PWM-Frequenz von ca. 305 kHz (prescaling >deaktiviert). Jo. > Und soweit ich weiß kann ich den externen Takt für den > PWM-Timer nicht größer machen als die Hälfte des Taktes vom µC, oder? Eben. >32-Bit Controllers, dann bin ich für jeden Hinweis dankbar. Siehe Netiquette. Sag uns, was du INSGESAMT machen willst. 16 Bit PWM bei 100 KHz brauchen die allerwenigsten Menschen. MFG Falk
@ Εrnst B✶ (ernst) >Also brauchst du eine Zähl-Frequenz von ~6.5 GHz. Viel Glück bei der >Suche. Gibt es, z.B Piccolo von TI. Dort hat man aber keine 6,5 GHz sondern Delay Lines. >Alternative: PWM analog erzeugen. Schöne Illusion, dort 16 Bit Auflösung und Genauigkeit halbwegs rauscharm hinzubekommen. MFG Falk
Falk Brunner schrieb: > Schöne Illusion, dort 16 Bit Auflösung und Genauigkeit halbwegs > rauscharm hinzubekommen. um dich selber zu zitieren: Falk Brunner schrieb: > 16 Bit > PWM bei 100 KHz brauchen die allerwenigsten Menschen. Oliver
Falk Brunner schrieb: > Schöne Illusion, dort 16 Bit Auflösung und Genauigkeit halbwegs > rauscharm hinzubekommen. Ja, das ist sportlich. Allein einen Sägezahn/Dreieck so verzerrungsfrei hinzukriegen würd ich mir nicht zutrauen. Aber vielleicht braucht der TE das ja nicht. Meine Glaskugel sagt: Er will eine LED mit PWM dimmen, ohne Flackern und außerhalb des hörbaren Bereichs. Um auch den "dunklen" Anfang sauber und stufenlos hinzukriegen, wünscht er sich 16 Bit.
Ich hab mal einen 16Bit Analogwert mit 2*8Bit PWM erzeugt. Beide Ausgänge über 1k und 255k addiert und dann auf den Tiefpaß. Funktionierte sehr gut. Peter
Natuerlich kann man mit einen AVR einen 16 bit PWM mit 50_100kHz erzeugen. Dazu benoetigt man einen Trick. Das MSB wird in den 8bit PWM geladen. So laeuft der PWM ab 16MHz mit 67kHz. Mit dem LSB zaehlt man beim Timeroverflow die Zyklen und schaltet dann zwischen MSB und MSB+1 um. Dh die Subzyklen laufen mit 256 Hz oder so.
@ Peter Dannegger (peda) >Ich hab mal einen 16Bit Analogwert mit 2*8Bit PWM erzeugt. Beide >Ausgänge über 1k und 255k addiert und dann auf den Tiefpaß. >Funktionierte sehr gut. Glaubst du. Hast du es SOLIDE nachgemessen? Ist hier das gleiche Problem wie wenn man glaubt mit einfachen 1% Widerständen einen 8 Bit R2R DAC bauen zu können. Ist nicht möglich. Ebensowenig wie 16 Bit PWM durch einfache gewichtete Addition zwei 8 Bit PWMs. Denn die MSB-PWM muss die GLEICHE absolute Genauigkeit haben wie deine LSB PWM, sonst bekommt deine Kennlinie Unstetigkeiten und Knicke. MfG Falk
Falk Brunner schrieb: > Denn die MSB-PWM muss die GLEICHE absolute Genauigkeit haben wie > deine LSB PWM, sonst bekommt deine Kennlinie Unstetigkeiten und Knicke. Aber das lässt sich relativ einfach abgleichen. Solange der TO jedoch nicht herausrückt, was er machen möchte, ist eine weitere Diskussion unnötig. Vielleicht benötigt er einen richtigen 16 Bit DAC, vielleicht bringt ihn auch eine PDM weiter. Gruß Jobst
weg mit dem Trog schrieb: > Natuerlich kann man mit einen AVR einen 16 bit PWM mit 50_100kHz > erzeugen. Dazu benoetigt man einen Trick. Das MSB wird in den 8bit PWM > geladen. So laeuft der PWM ab 16MHz mit 67kHz. Mit dem LSB zaehlt man > beim Timeroverflow die Zyklen und schaltet dann zwischen MSB und MSB+1 > um. Dh die Subzyklen laufen mit 256 Hz oder so. Sowas wie Bresenham für PWM. Ist halt keine 16-Bit-PWM die einen Wechsel 1001/65535 auf 1002/65535 innerhalb eine Zyklus astrein abbilden würde. Für die allermeisten Fälle funktioniert das aber einwandfrei. Mit wechselnden Periodendauern lässt sich des Ideal besser annähern. Für 1001/65535 und 1001/65535 z.B. Sprünge zwischen 1/65 und 1/66, max 2 Zyklen ohne Wechsel. Am oberen und unteren Ende läufts aber wieder auf Deine Logik raus. Praktisch sind 16Bit bei 100kHz Unfug. Alleine die Ein-/Ausschaltzeiten des Portpins werden mit ein paar Grad Temperaturänderung schon um mehr als die 1,5ns auseinanderdriften. Von nachfolgenden Schaltern und Bauteilstreuung ganz zu schweigen. Ohne Ausregelung macht das keinen Sinn.
Guten Morgen, vielen Dank schon mal für die vielen Antworten. Ich konnte sie leider erst jetzt lesen. Falk Brunner schrieb: > Siehe Netiquette. Sag uns, was du INSGESAMT machen willst. 16 Bit > PWM bei 100 KHz brauchen die allerwenigsten Menschen. Also es geht um eine Stromregelung für ein Batterieladegerät. Die Batteriezelle (z. B. eine 3,6 Volt Zelle) hängt in Serie mit einem Widerstand (0,1 Ohm) am Ausgang eines Abwärtswandlers. Strombereich ist 1 mA bis 25 A. (Ich weiß, dass es sportlich klingt bei 25 A noch um 1 mA genau zu regeln, aber möglich sein sollte es doch, oder?) Eingangsspannung des Wandlers = 7,5 Volt. Über das Tastverhältnis kann die Ausgangsspannung eingestellt werden. Bei einer 8-Bit-PWM könnte ich die Ausgangsspannung also auf 7,5 V / 2^8 = 29,3 mV genau einstellen. Bei 29,3 mV ändert sich der Strom bei einem Widerstand von 0,1 Ohm (Innenwiderstand der Batteriezelle vernachlässigt) aber schon um 293 mA. -> unbrauchbar Wenn ich das Ganze mit einer 16-Bit-PWM mache, dann kann ich die Ausgangsspannung auf ca. 144 µV genau einstellen. Der Strom ist somit auf 1,14 mA genau einstellbar. Das wäre ein guter Wert. Das Problem ist hier nur, dass ich bei geringen PWM-Frequenzen sehr große Induktivitäten einsetzen müsste, die auch noch einen großen Strom (bis etwas über 25 A) aushalten müssen. So etwas ist sehr schwer zu finden. Mit einer hohen PWM Frequenz wäre das alles einfacher. Ich hoffe ich konnte einigermaßen rüber bringen, was ich machen will. Gibt es für mein Vorhaben vielleicht bessere Ansätze?
@Cyberfuzzy (Gast) >Also es geht um eine Stromregelung für ein Batterieladegerät. Aha. >Die Batteriezelle (z. B. eine 3,6 Volt Zelle) hängt in Serie mit einem >Widerstand (0,1 Ohm) am Ausgang eines Abwärtswandlers. Strombereich ist >1 mA bis 25 A. (Ich weiß, dass es sportlich klingt bei 25 A noch um 1 mA >genau zu regeln, aber möglich sein sollte es doch, oder?) SEHR Sportlich und praktisch unsinnig. Einen Ladestrom von 25A braucht man bestenfalls auf 0,1 A genau, real reicht vielleicht 1A Toleranz. Und an 0,1 Ohm fallen bei 25A satte 62,5W verlustleistung ab. Das willst du nicht wirklich. Eher Faktor 10 kleiner, ggf noch weniger. >Bei einer 8-Bit-PWM könnte ich die Ausgangsspannung also auf 7,5 V / 2^8 >= 29,3 mV genau einstellen. Theoretisch ja, praktisch baut man meist eher einen Stromregler und misst die Spannung. >Bei 29,3 mV ändert sich der Strom bei einem Widerstand von 0,1 Ohm >(Innenwiderstand der Batteriezelle vernachlässigt) aber schon um 293 mA. >-> unbrauchbar Für 25A mehr als genau genug. >Wenn ich das Ganze mit einer 16-Bit-PWM mache, dann kann ich die >Ausgangsspannung auf ca. 144 µV genau einstellen. Theoretisch. Wenn nix rauscht, Offsets etc. > Der Strom ist somit auf 1,14 mA genau einstellbar. Das wäre ein guter > Wert. Das ist akademischer Unsinn fernab jeglicher praktischer Machbarkeit und vor allem Notwendigkeit. Wenn du schon einen derartig großen Strombereich abdecken willst, nimm mehrere Messbereiche, z.B. 2,5A und 25A. Dann reicht auch 8-10 Bit PWM locker. >Ich hoffe ich konnte einigermaßen rüber bringen, was ich machen will. Ja >Gibt es für mein Vorhaben vielleicht bessere Ansätze? Ja. MFG Falk
Ach Falk.... wir sind hier ein Hobbybastlerforum. Ob technisch oder betriebswirtschaftlich sinnvoll - ist doch erst mal ziemlich nebensächlich. Ob es machbar ist - auch erst mal nicht so wichtig. Wenn sich der Cyberfuzzy an einem unrealisierbaren Projekt die Hörner abstoßen möchte - warum nicht. Vielleicht sucht sich der gute Mann nachher einen seriösen Nickname. Grüße an alle Hobbybastler, die ihre verrückten Ideen noch nicht verloren haben.
Anbei ein Pseudocode, wie man mit einem AVR eine 16-Bit PWM mit hoher Ausgangsfrequenz erzeugen kann: ungetestet + qick&dirty! Beim Aufruf der Interrupt-Routine mit 100kHz, wird beispielsweise mit dem Wert 0x8000 ein Signal mit 50kHz ausgegeben. Dieses läßt sich leicht filtern. Für andere PWM-Werte werden 10µs Impulse gleichmäßig verteilt über das Gesamtintervall ausgegeben. Zum besseren Verständnis verweise ich auf meine Seite, wo die Beispiele 2 und 3 die Funktion für 8-Bit-PWM besser erklären. Vielleicht hilft es Dir weiter. http://www.mino-elektronik.de/soft-pwm/pwm_software.htm
Wobei so ein Schaltregler mit dickem Ausgangselko und Akku dahinter ein sehr träges System sind. Für die Regelung auf 1mA brauchst du also garkeine 16Bit PWM: es reicht, wenn sich die Einschaltdauer über z.B. 1 Sekunde, 10 Sekunden, ... gemittelt auf deine 16, 20, 24, ... Bit genau einstellen lässt. Und das wiederum ist überhaupt kein Problem, das macht dir ein Tiny25 so nebenbei. (Tiny{2,4,8}5 wegen der PLL auf 64MHz, mit der der PWM-Timer laufen kann) Damit sind wir wieder beim Bresenham für PWM, auf den ja weiter oben schon verwiesen wurde.
Stephan schrieb: > wie Bresenham für PWM. Ich hab google benutzt, bin aber nicht so richtig fündig geworden. Wie kann ich unter der Verwendung des Hardware-PWMs eines zum Bsp. Atmega die Auflösung des 8Bit PWMs, bei maximaler Frequenz, durch Verwendung von Bresenham verbessern, bei gleicher PWM-Frequenz? würde mich über eine Erklärung freuen. Danke
Cyberfuzzy schrieb: > Wenn ich einen normalen ATmega (getaktet mit 20 MHz) nehme, dann komme > ich bei 16 Bit nur auf eine PWM-Frequenz von ca. 305 kHz (prescaling > deaktiviert). Denke eher, dass du 305Hz meinst oder? Sonst hätteste ja mehr als du willst. Ich denke auch, dass da 16bit reichlich ist. Vorallem hörts ja beim/nach dem DAC nicht auf. Dann brauchst du eine genaue Spannungsreferenz, genaue Widerstände, wobei diese bei Wärme (die du bei 62,5W bestimmt hast) auch ihren Widerstandswert ändern. Dazu wie gesagt keine einstreuende und/oder induzierte Spannung. Lästermaul schrieb: > Ach Falk.... > > wir sind hier ein Hobbybastlerforum. > > Ob technisch oder betriebswirtschaftlich sinnvoll - ist doch erst mal > ziemlich nebensächlich. Ob es machbar ist - auch erst mal nicht so > wichtig. Naja.. Das Forum soll helfen, Leute kommen her um Hilfe zu bekommen oder zu geben. Und wenn ein Vorhaben nur unter enormen umständen, wenn überhaupt möglich, realisiert werden kann, dann würde mich es persönlich interessieren, wenn ich da an etwas nicht gedacht habe. Und jeden zu sagen "Ja mach mal", wo man es ziemlich genau weiß, dass da nicht das gewünschte Ziel rauskommt, bringt auch nichts. Dann kann man es auch sein lassen und jeden einfach machen lassen. Was ich jedoch gesehen habe ist beim dsPIC33 die High-Speed 16bit PWMs. Section 43: High-Speed PWM - http://ww1.microchip.com/downloads/en/DeviceDoc/70323D.pdf Auf Seite 49 ist ein Configurations- bzw. Rechenbeispiel für 100kHz.
m.n. schrieb: > Anbei ein Pseudocode, wie man mit einem AVR eine 16-Bit PWM mit hoher > Ausgangsfrequenz erzeugen kann Das ist aber keine PWM, sondern die von mir schon angesprochene PDM (Puls-Dichte-Modulation) Je höher der Wert, desto höher die Anzahl der einsen. Im mittleren Wertebereich ist die Ausgangsfrequenz am höchsten, zu beiden Enden nimmt sie sehr schnell ab. Gruß Jobst
Vielen Dank schon mal für die vielen guten Hinweise! Michael Skropski schrieb: > Cyberfuzzy schrieb: >> Wenn ich einen normalen ATmega (getaktet mit 20 MHz) nehme, dann komme >> ich bei 16 Bit nur auf eine PWM-Frequenz von ca. 305 kHz (prescaling >> deaktiviert). > > Denke eher, dass du 305Hz meinst oder? Sonst hätteste ja mehr als du > willst. Ja richtig, ich meinte 305Hz.
Warum immer so ein rumgehampel mit der PWM um eine Referenzspannung zu erzeugen? Für knapp 5€ gibt es einen MCP4922 mit 2 12-Bit DACs. (mit URef-Eingang!) Im Datenblatt gibt es einen Abschnitt "6.7 Designing A Double-Precision DAC Using A Dual DAC" - da kann man aus 2x12Bit einen mit 24Bit basteln. (Wofür man das auch immer braucht). Copy&Paste aus dem Datenblatt: • 12-Bit Resolution • ±0.2 LSB DNL (typ) • ±2 LSB INL (typ) • Single or Dual Channel • Rail-to-Rail Output Mirko
@MirkoB (Gast) >Warum immer so ein rumgehampel mit der PWM um eine Referenzspannung zu >erzeugen? Das will keiner. Beitrag "Re: 16-Bit-PWM mit 10 bis 100 kHz" "Eingangsspannung des Wandlers = 7,5 Volt. Über das Tastverhältnis kann die Ausgangsspannung eingestellt werden."
Lästermaul schrieb: > Ach Falk.... > > wir sind hier ein Hobbybastlerforum. > > Ob technisch oder betriebswirtschaftlich sinnvoll - ist doch erst mal > ziemlich nebensächlich. Ob es machbar ist - auch erst mal nicht so > wichtig. Wenn man ein 5stelliges Budget hat, lässt sich das sicher machen. Wenn man dann noch Herrn von Klitzing wegen der Genauigkeit als technischen Berater engagiert, wird das Budget aber sicherlich sechsstellig. Gruss Harald
> "Eingangsspannung des Wandlers = 7,5 Volt. Über das Tastverhältnis kann > die Ausgangsspannung eingestellt werden." > Das Problem ist hier nur, dass ich bei geringen PWM-Frequenzen sehr > große Induktivitäten einsetzen müsste, die auch noch einen großen Strom > (bis etwas über 25 A) aushalten müssen. ...irgendwie konfus... Klingt für mich wie ein Step-Up, der komplett im AVR laufen soll. Vielleicht sollte man den Regelteil auslagern und den AVR nur zum steuern benutzen?
MirkoB schrieb: > Im Datenblatt gibt es einen Abschnitt "6.7 Designing A Double-Precision > DAC Using A Dual DAC" - da kann man aus 2x12Bit einen mit 24Bit basteln. Wers glaubt... > Copy&Paste aus dem Datenblatt: > • ±0.2 LSB DNL (typ) Deshalb geht das nicht! Wenn der ADC fürs "Grobe" bestenfalls auf 0,2% genau ist, dann können im Idealfall noch 2 Bits dazugewonnen werden. Ist leider so. Denn sonst würde ja jeder einen teuren 16-Bit Wandler durch 2 Stück 8-Bit Wandler ersetzen, oder?
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.