Raspberry Pi Pico und PWM

Elektronik-Labor  Projekte  Mikrocontroller  Raspberry     




Im Raspberry Pi Pico gibt es acht unabhängige PWM-Einheiten, die jeweils ihre eigene Frequenz ausgeben können. Jeweils zwei Ports sind einer Einheit zugeordnet. Im ersten Test wollte ich testen, wie genau die Frequenzausgabe ist. Dazu habe ich die ersten sechs PWMs an den Pins 0 bis 10  verwendet. Mit dem Frequenzzähler konnte ich dann sehen, welche Genauigkeit erreicht wird.

#PWM
import time
from machine import Pin, PWM

pwm0 = PWM(Pin(0))
pwm0.freq(1000)
pwm0.duty_u16(32000)

pwm1 = PWM(Pin(2))
pwm1.freq(10000)
pwm1.duty_u16(32000)

pwm2 = PWM(Pin(4))
pwm2.freq(100000)
pwm2.duty_u16(32000)

pwm3 = PWM(Pin(6))
pwm3.freq(1000000)
pwm3.duty_u16(32000)

pwm4 = PWM(Pin(8))
pwm4.freq(10000000)
pwm4.duty_u16(32000)

pwm5 = PWM(Pin(10))
pwm5.freq(30000000)
pwm5.duty_u16(32000)

Die Ergebnisse zeigen, das tiefe Frequenzen sehr genau erzeugt werden, sehr hohe aber zunehmend ungenauer:

 1 kHz > 999,998 Hz
10 kHz > 9,9992 kHz
100 kHz > 99,92 kHz
1 MHz > 992,1 kHz
10 MHz > 9,0909 MHz
30 MHz > 22,73 MHz

Mit den Abweichungen kann man leben, wenn man sie berücksichtigt. Irgendwelche brauchbaren Frequenzen dabei? 992 liegt auf Mittelwelle. Ein kleiner AM-Modulator sollte also möglich sein. Noch eine Möglichkeit: Wenn ich 3,6 MHz programmiere, kommt 3584,2 kHz raus. Das liegt im 80-m-Amateurfunkband und kann für CW oder für einen Fuchsjagtsender benutzt werden. Die Frequenz liegt nahe bei den häufig verwendeten 3579 kHz.





Einen AM-Prüfsender auf Mittelwelle  kann man leicht programmieren. Die Amplitude wird über den Duty-Wert zwischen 0 und 32000 eingestellt. Der unmodulierte Träger hat eine Amplitude von 16000. Die Endlosschleife erzeugt einen AM-Prüfton von 500 Hz bei einer Modulationstiefe von 50%.

#PWM Amplitudenmodulation auf 992 kHz
import time
from machine import Pin, PWM

pwm0 = PWM(Pin(0))
pwm0.freq(1000000)
pwm0.duty_u16(16000)

while (True):
    pwm0.duty_u16(8000)
    time.sleep(0.001)
    pwm0.duty_u16(24000)
    time.sleep(0.001)  

Das Signal ist mit einer induktiven Übertragung durch eine Drahtschleife (siehe Foto oben)  klar und deutlich in einem Mittelwellenradio auf 992 kHz zu empfangen.




Bei diesem Versuch fällt auf, dass das Signal auf zwei nahe beieinander liegenden Frequenzen im Mittelwellenbereich empfangen wird. Es gibt eine stärkere und eine schwächere Empfangsstelle. Am Scope sieht man ein leichtes Flattern des unmodulierten Rechtecksignals. Das liegt wohl am fraktionalen Vorteiler der PWM. Versuche haben gezeigt, dass zum Beispiel bei 650 kHz und bei 1300 kHz ein sauberes Signal entsteht. Ganz klar, in dem Fall wird die Taktfrequenz des Controllers von 130 MHz glatt durch 200 oder durch 100 geteilt. Wenn ich 1,3 MHz vorgebe, sagt der Frequenzzähler 1288,66 kHz. Das bedeutet, dass die Taktfrequenz tatsächlich bei 128,866 MHz liegt, weil aus der Quarzfrequenz von 12 MHz über die interne PLL keine genauen 130 MHz werden können.


Siehe auch: PWM-Motorsteuerung ohne Motortreiber: https://youtu.be/S4WyFo9TUiM


Elektronik-Labor  Projekte  Mikrocontroller  Raspberry