工作と競馬2

電子工作、プログラミング、木工といった工作の記録記事、競馬に関する考察記事を掲載するブログ

pigpio(のPythonモジュール)を使ってPWM波形を出力する

概要

pigpioを使って、Pythonから簡単にPWM波形が出力できた。


背景と目的

Pythonを使って、PWM波形の出力を試す。


詳細

0.参考

abyz.me.uk


1.インストール

以下を実行すれば、インストール完了。

sudo apt-get update
sudo apt-get install pigpio python-pigpio python3-pigpio

そしたら、pigpiodというデーモンを立ち上げる。基本的にこのデーモンに対して、通信を行って制御するという仕組みらしい。

sudo pigpiod

これで準備はOK.


2.実装

2.1 基本の確認

pigpioモジュールをインポートし、pigpio.piオブジェクトを作成。このpiのメソッドを呼び出して制御していく。

import pigpio
pi = pigpio.pi()


2.2 Hardware PWMの出力

ここでは、Hardware PWMというものを使う。Raspberry Piでは、使用できるGPIOが12,13,18,19に限られるが時間精度の高い信号が生成できる。
設定値は、周波数[Hz]とデューティ。周波数は、整数値。デューティは%で指定ではなく、1,000,000を100%と考えて数値を指定。止めるには、GPIOにLOWを書き込めばよい。

# 設定
PWM_GPIO = 18 # 12,13,18,19のどれか
PWM_DUTY = 33.3 # デューティ比[%]
PWM_FREQ = 38000 # 周波数[Hz]

# 引数用に変換
gpio = PWM_GPIO
dutycycle = int(PWM_DUTY * 1000000 / 100.)
frequency = int(PWM_FREQ)

# 出力開始
pi.hardware_PWM(gpio, frequency, dutycycle)

# 止める場合
pi.write(gpio, 0)


2.3 実動作確認

波形を確認したところ、設定通り、周波数38kHz(=周期26.3us)とデューティ33.3%の波形がバシッと出て、揺らぎはない。ちなみに、ソフトウェアPWMだとこうはいかない。

f:id:dekuo-03:20191130215620p:plain

まとめと今後の課題

pigpioを使って、Pythonから簡単にPWM波形が出力できた。