ラズベリーパイのPWM(Pulse Width Modulation)の使い方の勉強と実験をしました。
Raspberry Pi3 MODEL Bでは、精度の高いPWMは、2チャンネルです。
どの程度の精度なのか、調べてみます。
Pythonプログラムでは、PWMの制御は次のように行います。
GPIO25から100Hzのパルスをデューティ比50%で出力するには
GPIO.setup(25,GPIO.OUT) #GPIO25を出力に設定
p=GPIO.PWM(25,100)#GPIO25,100Hz
p.start(50)#デューティ比50%の信号をスタート
PWM信号を止めるには
p.stop()
とします。
100Hzデューティ比50%の信号です。
100Hz デューティ比20%の信号です。
デューティ比は、0%~100%の間で設定できます。
PWMは、疑似アナログ出力として、モータの制御などに使われます。
周波数の精度は、どうでしょうか。
100Hzを周波数カウンタで測定してみました。
±2Hz程度で、比較的良い制度です。
1000Hzの設定での実測周波数です。
875±3Hz程度です。
誤差12.5%というところでしょうか。
周波数は、あまり正確とはいえませんが、制御は、大丈夫でしょう。
PWMの出力に圧電スピーカを接続すれば、音が出ます。
モールス練習機の出力をPWMにすれば、圧電スピーカを使ってモールス練習機ができます。
プログラムの一部を次のように変更すればOKです。
p=GPIO.PWM(25,700)#GPIO25,700Hz を加えます。
def dot()とdef dash()を次のように書き換えます。
def dot():
p.start(50)
sleep(dot_time)
p.stop()
def dash():
p.start(50)
sleep(dash_time)
p.stop()
圧電スピーカを接続した様子です。