M5-PWM als DAC: Unterschied zwischen den Versionen

Aus Attraktor Wiki

Wechseln zu: Navigation, Suche
(Messungen)
K (Fazit)
Zeile 117: Zeile 117:
  
 
== Fazit ==
 
== Fazit ==
 +
 +
Die Messungen zeigen, dass die Erzeugung einer analogen Spannung mit der PWM des ESP32 mit einer Genauigkeit von besser 0,1% möglich ist. Dazu ist es aber erforderlich, die Spannung bei 90% PWM möglichst genau zu mesen und dem Programm als Referenz einzugeben.
  
 
== Downloads ==
 
== Downloads ==

Version vom 9. Juni 2020, 17:19 Uhr

Von Peter (peter@attraktor.org)

Bilderprefix: M5-HW-PWM1-...

Kpst-Baustelle.jpg

Übersicht

Ich war auf der Suche nach einer programmierbaren Spannungsquelle um den ADC des ESP32 automatisch zu testen. Der eingebaute DAV ist nur 8-bit breit. Es gibt keine Angaben zu DNL und INL, so dass sich seine Genauigkeit nicht abschätzen lässt. Er dürfte für diesen Zweck nicht geeignet sein. Immerhin ist der zu testende ADC 12-Bit breit.

In µControllern ohne DAC, wie z.B. dem Arduino werden analoge Spannungen mittels PWM erzeugt. Die PWM-Impulse werden mittels Tiefpass in eine analoge Spannung umgesetzt. Die Auflösung hängt dann nur noch von den Bits ab die zur Erzeugung der PWM eingesetzt werden.n Das wollte ich ausprobieren.

Als Programmiersprache habe ich wieder Blockly eingesetzt. Leider akzeptiert Blockly nur ganze Prozente beim Tastverhältnis. Es können zwar beliebige Werte eingegeben werden, es kommt dann aber zu einem Laufzeitfehler! Dieses Verhalten zeigt sich auch bei sowohl bei 10kHz als auch bei 1kHz. Nach weiteren Tests kann ich definitiv sagen, dass nur ganzzahlige Werte für das Tastverhältnis zulässig sind. Wie es sich bei Micropython verhält werde ich später einmal ausprobieren.

Messaufbau

M5-HW-PWM1-01.jpg

Der Messaufbau besteht aus einem M5-Stick C mit 4x4-Tastatur zur Eingabe des Tastverhältnis in %.

Das PWM-Signal wurde im ESP32 erzeugt. Programmiert wurde mit Blockly. Die Taktfrequenz des PWM wurde auf 10kHz eingestellt. Die Stromversorgung erfolgte über ein USB-Kabel vom PC.

Das PWM-Signal liegt auf GPIO 26. Von dort geht es in ein erstes Tiefpassfilter (1k0 & 10µF || 100nF ker., fg = 100Hz) und auf ein zweites Tiefpassfilter (1k0 & 10µF ker.). Das PWM-Signal wird mit dem Oszilloscope Rigol MSO1104Z, das Ausgangssignal des Filters ebenfalls mit dem Oszilloscope und dem Multimeter Rigol DM3068 gemessen.

Messungen

Das Multimeter zeichnet 5000 Messungen auf und errechnet daraus das Maximum, Minimum, Durchschnitt und Standardabweichung. Diese Werte habe ich im Folgenden aufgeschrieben.

Zuerst habe ich eine Testmessung vorgenommen um die grundsätzliche Funktion meines Testaufbaues zu überprüfen:

Messungen mit Rigol DM3068: 5000

  • Umax: 2,183192 V => 0,04%
  • Umin: 2,138123 V => -2,0%
  • Uavg: 2,182286 V
  • SDEV: 758,1760 µV

Dann habe ich gezielte Messungen durchgeführt.

Messungen mit Rigol DM3068:

  • PWM: abgetrennt --> leider keine Aufzeichnung durch das Multimeter
  • Umax: V => % Spannungen um die 500µV gemessen
  • Umin: V => -% mit starken Schwankungen.
  • Uavg: V
  • SDEV: µV

Messungen mit Rigol DM3068: 5000

  • PWM: 100%
  • Umax: 3,302355V => 0,032%
  • Umin: 3,299042V => -0,068%
  • Uavg: 3,301300V
  • SDEV: 418,8879µV

Messungen mit Rigol DM3068: 5000

  • PWM: 70%
  • Umax: 2,315021V => 0,037%
  • Umin: 2,312164V => -0,087%
  • Uavg: 2,314156V
  • SDEV: 323,3050µV

Messungen mit Rigol DM3068: 5000

  • PWM: 50%
  • Umax: 1,656013V => 0,043%
  • Umin: 1,654131V => -0,071%
  • Uavg: 1,655301V
  • SDEV: 233,7657µV

Messungen mit Rigol DM3068: 5000

  • PWM: 51%
  • Umax: 1,688115V => 0,035%
  • Umin: 1,686198V => -0,078%
  • Uavg: 1,687521V
  • SDEV: 223,0432µV

Messungen mit Rigol DM3068: 5000

  • PWM: 25%
  • Umax: 0,8300434V => 0,041%
  • Umin: 0,8292528V => -0,055%
  • Uavg: 0,8297056V
  • SDEV: 94,73960µV

Messungen mit Rigol DM3068: 5000

  • PWM: 10%
  • Umax: 0,333044V => 0,044%
  • Umin: 0,327292V => -1,68%
  • Uavg: 0,3328968V
  • SDEV: 47,29652µV

Messungen mit Rigol DM3068: 5000

  • PWM: 0%
  • Umax: 3,108839mV => %
  • Umin: 2,539462mV => -%
  • Uavg: 2,724854mV
  • SDEV: 58,06827µV

Leider sind alle obigen Messungen mit USB-Stromversorgung aus dem PC erfolgt. Nun musste ich feststellen, dass dadurch erhebliche Störspannungen auf der gemessenen Spannung lagen. Also alles wieder auf Anfang!

Testmessung mit Betrieb aus Powerbank. Störspannung nur ca. 20mVpp statt 200mVpp:

Messungen mit Rigol DM3068: 5000

  • PWM: 50%
  • Umax: 1,655476V => 0,038%
  • Umin: 1,653261V => -0,096%
  • Uavg: 1,654842V
  • SDEV: 243,8869µV

Die Störspannungen haben offensichtlich keinen Einfluss auf die Gültigkeit der obigen Messungen. Die Abweichung der mittleren Spannung beträgt -0,028%, die Abweichungen der Messung liegen im großen und ganzen im Bereich der ersten Messungen.

Also kann ich mit den obigen Werten weiter arbeiten. Ich habe dann noch eine Messreihe mit 90% PWM aufgenommen. Die habe ich oben nicht eingefügt, weilich nur den Mittelwert für die Tabelle unten benötigte. Die Tabelle habe ich aufgestellt, weil ich wissen wollte bei welcher Einstellung ich am besten eine Referenzmessung durchführe. Die dann vom Programm herangezogen werden kann um die genaue Spannung dieses M5-Stack Gerätes zu ermitteln.

M5-HW-PWM1-10.jpg

Die Tabelle zeigt, dass die geringsten Abweichungen des Mittelwertes der ausgegbenen Spannung entsteht wenn die Referenzspannung bei 90% PWM gemessen wird. Die Abweichungen sind dann < 0,06% - damit kann ich gut leben!

Modifikationen

  • Flanken des PWM-Signals mit Besselfilter verrunden. Welche Auswirkungen hat das auf die Genauigkeit der Ausgangsspannung und die Streuung der Messwerte?
  • Speisung des M5-Stick C mit analoger Spannungsquelle (HM8040).

Fazit

Die Messungen zeigen, dass die Erzeugung einer analogen Spannung mit der PWM des ESP32 mit einer Genauigkeit von besser 0,1% möglich ist. Dazu ist es aber erforderlich, die Spannung bei 90% PWM möglichst genau zu mesen und dem Programm als Referenz einzugeben.

Downloads

Zum Download des Programms bitte mit der rechten Mousetaste auf den Link klicken und dann auf "Ziel speichern unter ..." mit der linken Mousetaste klicken. (Ich habe leider keine bessere Möglichkeit gefunden.)

PWM-Test-01.m5f

PWM_als_DAC.ods