29. Lektion: Puls Weiten Modulation (PWM)Aus Attraktor WikiVersion vom 29. Januar 2024, 15:58 Uhr von Kapest (Diskussion | Beiträge) InhaltsverzeichnisPulsWeitenModulation (PWM) was ist das?PWM bedeutet, dass in regelmässigen Abständen ein Impuls definierter Länge ausgegeben wird. Diese Konzept wird z.B. zur Steuerung von Servos, aber auch zur Erzeugung analoger Spannungen eingesetzt. Eine Instanz von PWM erzeugenDie Parameter ändern# pwm_test_01.py from machine import Pin, PWM from time import sleep_ms led = Pin(22, Pin.OUT) pwm = PWM(led, freq=100000, duty_ns=9999) for i in range(0,10000): pwm.duty_ns(i) print(pwm.duty_ns()) sleep_ms(10) # Ausgabe: 3928 3928 3936 3936 3936 3936 3936 3936 3936 3936 3944 3944 3944 3944 3944 3944 3944 3944 3952 3952 Beschränkungen der PWMAufgrund der diskreten Natur der Computerhardware können nicht alle Frequenzen mit absoluter Genauigkeit erzeugt werden. In der Regel wird die PWM-Frequenz durch Teilung einer ganzzahligen Basisfrequenz durch einen ganzzahligen Teiler ermittelt. Wenn die Basisfrequenz beispielsweise 80 MHz beträgt und die gewünschte PWM-Frequenz 300 kHz ist, muss der Teiler eine nicht ganzzahlige Zahl sein 80000000 / 300000 = 266,67. Nach dem Runden wird der Teiler auf 267 gesetzt und die PWM-Frequenz ist 80000000 / 267 = 299625,5 Hz, nicht 300kHz. Wenn der Teiler auf 266 gesetzt wird, dann ist die PWM-Frequenz 80000000 / 266 = 300751,9 Hz, aber wieder nicht 300kHz. Einige Ports wie der RP2040 verwenden einen fraktionalen Teiler, der eine feinere Granularität der Frequenz bei höheren Frequenzen ermöglicht, indem er die PWM-Pulsdauer zwischen zwei benachbarten Werten umschaltet, so dass die resultierende Durchschnittsfrequenz näher an der beabsichtigten Frequenz liegt, allerdings auf Kosten der spektralen Reinheit. Das Tastverhältnis hat den gleichen diskreten Charakter und seine absolute Genauigkeit ist nicht zu erreichen. Auf den meisten Hardware-Plattformen wird das Tastverhältnis bei der nächsten Frequenzperiode angewendet. Daher sollten Sie mehr als "1/Frequenz" warten, bevor Sie das Tastverhältnis messen. Die Frequenz und die Auflösung des Tastverhältnisses sind in der Regel voneinander abhängig. Je höher die PWM-Frequenz ist, desto geringer ist die verfügbare Auflösung des Tastverhältnisses und andersherum. Bei einer PWM-Frequenz von 300 kHz kann die Auflösung des Tastverhältnisses beispielsweise 8 Bit betragen, nicht 16 Bit, wie man vielleicht erwarten würde. In diesem Fall sind die untersten 8 Bits von duty_u16 unbedeutend. Also: pwm=PWM(Pin(13), freq=300_000, duty_u16=2**16//2) und pwm=PWM(Pin(13), freq=300_000, duty_u16=2**16//2 + 255) erzeugt PWM mit dem gleichen 50% duty cycle.
Zurück zur "Micropython Kurs 2023 Teil 2" Startseite |