Angeregt durch: Beitrag "Attiny85 mit 64Mhz PLL mehr als 8 bit Halb-Hardware PWM?" Eine ganz dumme Frage: Warum haben die meisten Microcontroller nur Timer mit PWM-Funktion und keine Sigma-Delta-Einheit? Der Unterschied im Hardwareaufwand ist marginal, der Sigma-Delta Wandler erzeugt aber bei gleichem Takt einen hochfrequentigeren Störanteil. Bei Anwendungen wie der Ansteuerung von LEDS macht sich dieses z.B. durch weniger Flackern bemerkbar. Infineon sind mit dem XMC1000 die Einzigen(?), die hier Alternativen anbieten. Was übersehe ich?
Hallo Tim, der MSP430F2013 von TI hat zumindest einen 16-bit Sigma Delta ADC. http://www.ti.com/product/msp430f2013-ep Gruss Klaus.
Gast
#3267841
Der Hardware Unterschied ist nicht minimal, sowie bei gleicher Output Frequenz muss die OSC Frequenz höher sein. Ev. auch interessant: www.ti.com/lit/an/slyt076/slyt076.pdf
chris schrieb: > Der Hardware Unterschied ist nicht minimal, sowie bei gleicher Output > Frequenz muss die OSC Frequenz höher sein. Ja, beim PWM muss sie höher sein als beim sigma-delta Wandler. Bei der Hardware sehe ich eigentlich kein Problem, das gibt sich nicht viel. PWM: Zähler + Comparator Sigmal-Delta: Register + Addierer > Ev. auch interessant: www.ti.com/lit/an/slyt076/slyt076.pdf Moment, das ist ein ADC und kein DAC...
Die Application Note im erwähnten PDF beschreibt einen Sigma-Delta-DAC... und der Algorithmus müsste sich auch in einem AVR umsetzen lassen. So vom Überfliegen werden 8 Bits für die Ausgabe berechnet und dann per SPI in einem fixen Zeitraster hintereinander ausgegeben. Was für eine Taktrate erzielbar ist müsste man mal ausrechen... (Sorry, ist schon spät und ich bin etwas müde, sonst würde ich das gleich umsetzen)
Gast
#3267917
Ansonsten kannst du es auch in SW machen, hier ein oft kopierter Code, natürlich an sizeof long bzw long long anzupassen. Dieser Code geht auch auf einem little endian cpu wie AVR und Cortex M3, dabe muss aber get[0] anstelle von get[1] verwendet werden. // A 1st-order sigma-delta modulator. This returns a value that // is shifted down by the number of bits in a short int. Note // that this code will only work on a machine that fits two or // more short ints into a long int, and that it assumes // big-endian addressing. typedef union USigDelt { short int get[2]; long int put; } USigDelt; short int sigDelt(long int in; USigDelt * state) { state->get[1] = 0; state->put += in; return get[1]; }
Thomas K. schrieb: > Die Application Note im erwähnten PDF beschreibt einen > Sigma-Delta-DAC... und der Algorithmus müsste sich auch in einem AVR > umsetzen lassen. Stimmt - ich hatte eben den falschen Link angeschaut. > So vom Überfliegen werden 8 Bits für die Ausgabe berechnet und dann per > SPI in einem fixen Zeitraster hintereinander ausgegeben. Was für eine Netter Trick. Das müsste auch auf dem AVR funktionieren. > Taktrate erzielbar ist müsste man mal ausrechen... (Sorry, ist schon > spät und ich bin etwas müde, sonst würde ich das gleich umsetzen) Für das Erzeugen eines 8 Bit Worts benötigt man 16 Taktzyklen. Wahrscheinlich begrenzt der SPI Takt.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
chris schrieb: > Ansonsten kannst du es auch in SW machen, hier ein oft kopierter Code, > natürlich an sizeof long bzw long long anzupassen. Ja, nur das kostet natürlich eine Menge CPU-Zeit. Die Frage ist, warum mit viel Aufwand der Timer-Takt hochgetrieben wird, wenn ein Sigma-Delta DAC in Hardware in vielen Fällen eine elegantere Lösung wäre. > Dieser Code geht auch auf einem little endian cpu wie AVR und Cortex M3, > dabe muss aber get[0] anstelle von get[1] verwendet werden. Netter Trick.
Um das Problem zu illustrieren habe ich etwas herumgespielt: http://www.youtube.com/watch?v=4pKUmcIKV0A Sowohl PWM als auch Delta-Sigma Wandler werden mit der gleichen Taktfrequenz betrieben. Wie man sieht, führt PWM zu unansehlichem Flackern, welchen bei dem Delta-Sigma Wandler nur bei sehr geringen Helligkeiten zu sehen ist. In der Realität ist der Effekt noch dramatischer. Warum wird dieses PWM Geflacker der relative einfachen Delta-Sigma-Lösung vorgezogen? Selbst die dedizierten LED-Treiber wie WS2811 können es nicht besser. Gibt es darauf eine rationale Antwort? Wer es selbst nachvollziehen will: Hier ist der Code.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
Gast
#3269140
>Selbst die dedizierten LED-Treiber wie WS2811 können es nicht besser.
Meine LPD8806 z.B. flackern nicht. Und das ist auch nur einfaches PWM.
Allerdings mit 1.2MHz.
holger schrieb: >>Selbst die dedizierten LED-Treiber wie WS2811 können es nicht besser. > > Meine LPD8806 z.B. flackern nicht. Und das ist auch nur einfaches PWM. > Allerdings mit 1.2MHz. Klar, wenn man genug Oversampling betreibt, verschwindet das Flackern. Alerdings handelt man sich damit deutlich höheren Energieverbrauch ein und erzeugt unnötige Störfrequenzen.
Tim . schrieb: > Um das Problem zu illustrieren habe ich etwas herumgespielt: > > http://www.youtube.com/watch?v=4pKUmcIKV0A Aha. Und was willst du damit belegen? Daß 7800Hz/256 = 30.5Hz PWM-Frequenz flackert? Daß es noch mehr flackert, wenn es mit einer Handy-Cam mit 30Hz Bildwiederholfrequenz aufgenommen wird? Nimm eine PWM-Frequenz oberhalb 100Hz und da flackert nix mehr. Das macht ein AVR @ 8MHz noch für 8 LED in Software nebenher. > Warum wird dieses PWM Geflacker der relative einfachen > Delta-Sigma-Lösung vorgezogen? Weil das ständige Ein- und Ausschalten zu höheren Schaltverlusten führt? Weil die höheren Frequenzen auf Kabeln (nicht nur zur LED, auch vom Netzteil) zu mehr Störstrahlung führt? XL
Gast
#3269263
vielleicht auch interessant: http://www.cypress.com/psoc/
@Axel Schwenke (a-za-z0-9) >Weil das ständige Ein- und Ausschalten zu höheren Schaltverlusten führt? >Weil die höheren Frequenzen auf Kabeln (nicht nur zur LED, auch vom >Netzteil) zu mehr Störstrahlung führt? Im Prinzip ja, aber man muss nicht immer den Teufel an die Wand malen. Für kleine Leistungen und Verbraucher wie LEDs, DAC etc. ist Sigma Delta schon sehr vorteilhaft. Dass man keine großen Motoren etc. damit betreibt ist klar.
Axel Schwenke schrieb: > Tim . schrieb: >> Um das Problem zu illustrieren habe ich etwas herumgespielt: >> >> http://www.youtube.com/watch?v=4pKUmcIKV0A > > Aha. Und was willst du damit belegen? Daß 7800Hz/256 = 30.5Hz > PWM-Frequenz flackert? Daß es noch mehr flackert, wenn es mit einer > Handy-Cam mit 30Hz Bildwiederholfrequenz aufgenommen wird? Dass ein Delta-Sigma Converter bei gleichem Takt deutlich überlegen ist. > Nimm eine PWM-Frequenz oberhalb 100Hz und da flackert nix mehr. Das > macht ein AVR @ 8MHz noch für 8 LED in Software nebenher. Das Argument ist unverständlich. Es gibt genug Anwendungen, bei denen 100 Hz noch nicht ausreichen. Bei LEDS m.M. nach auch nicht - bei 100Hz sieht man das Flackern bei jeder Bewegung. >> Warum wird dieses PWM Geflacker der relative einfachen >> Delta-Sigma-Lösung vorgezogen? > > Weil das ständige Ein- und Ausschalten zu höheren Schaltverlusten führt? Das mag sicherlich vom Verbraucher abhängen. z.B. LEDs haben eine niedrige Kapazität und einen niedrigen Innenwiederstand, so dass sich die Schaltverluste in Grenzen halten. Bei einem Motor wird das durch die hohe Induktivität anders aussehen. > Weil die höheren Frequenzen auf Kabeln (nicht nur zur LED, auch vom > Netzteil) zu mehr Störstrahlung führt? Die Argumentation ist mir nicht ganz klar. Man wird den Wandler immer so anpassen, dass das Frequenzspektrum am Ausgabepin nach den gegebenen Kriterien optimiert ist. Der Vorteil beim Sigma-Delta Wandler ist in dem Fall, dass man für die gleiche Ausgabefrequenz intern einen deutlich geringeren Takt benötigt.
Hier übrigens die Produktseite von Infineons XMC1100/1200. Die Microcontroller haben einen Delta-Sigma Wandler mit vorgeschalteter Gamma-Korrektur zur Ansteuerung von LEDs integriert. http://www.infineon.com/cms/en/product/microcontrollers/32-bit-industrial-microcontrollers-based-on-arm-registered-cortex-tm-m/32-bit-xmc1000-industrial-microcontrollers-arm-registered-cortex-tm-m0/channel.html?channel=db3a30433c1a8752013c1aa35a6a0029&tab=2
Tim . schrieb: > Axel Schwenke schrieb: >> >> .. was willst du damit belegen? Daß 7800Hz/256 = 30.5Hz >> PWM-Frequenz flackert? Daß es noch mehr flackert, wenn es mit einer >> Handy-Cam mit 30Hz Bildwiederholfrequenz aufgenommen wird? > > Dass ein Delta-Sigma Converter bei gleichem Takt deutlich überlegen ist. Überlegen bezüglich welcher Metrik? Wenn die PWM-Periode kurz genug gewählt wird (was du wohlweislich nicht getan hast) dann ist in der Praxis kein Unterschied. >> Nimm eine PWM-Frequenz oberhalb 100Hz und da flackert nix mehr. Das >> macht ein AVR @ 8MHz noch für 8 LED in Software nebenher. > > Das Argument ist unverständlich. Es gibt genug Anwendungen, bei denen > 100 Hz noch nicht ausreichen. Dann nimm halt 200Hz. Oder 500. Du hast ja noch nicht mal Anforderungen spezifiziert, sondern einfach einen Test bei 30.5Hz gemacht. Was nach jeder Spezifikation zu wenig ist. Und genau deswegen hat dein Experiment keinerlei Aussagekraft. Genau genommen löst du ein "Problem" das gar nicht existiert. >>> Warum wird dieses PWM Geflacker der relative einfachen >>> Delta-Sigma-Lösung vorgezogen? >> >> Weil das ständige Ein- und Ausschalten zu höheren Schaltverlusten führt? > > Das mag sicherlich vom Verbraucher abhängen. z.B. LEDs haben eine > niedrige Kapazität und einen niedrigen Innenwiederstand, so dass sich > die Schaltverluste in Grenzen halten. Die Schaltverluste entstehen nicht an der LED (allein). Wenn die LED über einen FET angeschaltet wird (heute wahrscheinlicher als alles andere) dann ist jeder Schaltvorgang eine Umladung der Gate-Kapazität und damit ein Verlust. >> Weil die höheren Frequenzen auf Kabeln (nicht nur zur LED, auch vom >> Netzteil) zu mehr Störstrahlung führt? > > Die Argumentation ist mir nicht ganz klar. Man wird den Wandler immer so > anpassen, dass das Frequenzspektrum am Ausgabepin nach den gegebenen > Kriterien optimiert ist. Der Vorteil beim Sigma-Delta Wandler ist in dem > Fall, dass man für die gleiche Ausgabefrequenz intern einen deutlich > geringeren Takt benötigt. Wen interessiert denn der interne Takt? Mit Leistung versehen und auf einer zumindest potentiell langen Leitung ist nur das Ausgangssignal. Und da macht der dS Wandler keine so tolle Figur. Beispiel mit 8 Bit Auflösung und 10kHz (=100µs) Basistakt: 1/256 -> PWM 1 Impuls 100µs, dS 1 Impuls 100µs 2/256 -> PWM 1 Impuls 200µs, dS 2 Impulse 100µs 3/256 -> PWM 1 Impuls 300µs, dS ~3 Impulse 100µs ... Das Oberwellenspektrum ist bei 1/256 noch gleich. Danach wird es für die PWM freundlicher. Ganz extrem ist es bei 128/256 wo die PWM ein Rechteck mit 50% Tastverhältnis liefert (2 Umschaltungen pro Periode) und dS statt dessen alle 100µs umschaltet (256 mal pro Periode!). Umschaltverluste 1:128. Und das bei gerade mal 8 Bit. Realiter will man eher 10-12 Bit (nach der Gammakorrektur). Keine Frage, wenn die Anwendung verlangt das PWM/dS Signal zu einer Gleichspannug zu filtern, dann ist dS von Vorteil. Denn dann will man ja daß das auszufilternde Störsignal möglichst hochfrequent ist. Aber davon hast du ja nicht geredet. XL
Gast
#3270747
Axel Schwenke schrieb: > Umschaltverluste 1:128. Und das bei gerade mal 8 Bit. Die häufigere Taktung hat noch einen anderen Effekt: Wird die PWM für einen LED-Treiber eingesetzt, hackt hier die Turn-On-Zeit rein. Mal angenommen, wir haben 280Hz PWM mit 8Bit, benötigen wir einen PWM-Takt von etwa 14µsec. Mal angenommen, unsere getaktete KSQ hat eine Turn-On-Zeit von 8µsec und eine Turn-Off-Zeit von 1µsec (das sind relativ realistische Werte, die ich letztens mal vermessen habe).
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
Bei kleinen PWM-Werten ist die Dauer des fließenden Stromes durch die Turn-On-Zeit der KSQ kürzer als der PWM-Puls und verursacht einen Helligkeitsverlust, der mit steigender PWM schnell nachlässt. Ab einem PWM-Wert von 10 ist der eigentlich nicht mehr wahrnehmbar.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
Bei Delta-Sigma tritt bei jedem Puls ein Helligkeitsverlust ein, der sich bis in hohe Werte durchzieht. Im Beispiel ist bei 50% (Wert 128) durch den Fehler von 50% die Helligkeit nur 25% vom Endwert. Ausserdem hängt die Helligkeit stark von der Pulsfolge ab, wie man im Beispiel aus der oben angegebenen AN für einen 3bit-DAC sieht:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
Die Helligkeit ist bis 50% vom Sollwert deutlich verringert, und steigt dann nichtlinear an. Während sich die Turn-On-Zeit bei PWM nur bei geringen PWM-Werten bemerkbar macht, schlägt sie bei delta-Sigma über den gesamten Wertebereich zu, was den Einsatz von schnell schaltenden KSQ mit Turn-On-Zeiten von weniger als 1µsec erfordern würde. Mit den steilen Schaltflanken steigen natürlich wieder die Umschaltverluste und die Störausstrahlung.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.