ラズパイでPWM制御!(ソフトウェア方式編)

ラズパイでPWM制御!(ソフトウェア方式編) RaspberryPi
スポンサーリンク

こんにちは。駆け出しエンジニアのまっきーです。

ラズパイを使って、PWM制御を行っていきたいと思います。

PWMとは

PWMはPulse Width Modulationの略で、パルス波のデューティー比を変化させて変調する変調方法です。

そもそも、パルス波とは、ある状態から急激に変化し、元に戻る波形のことをいいます。

こちらの図を見てください。

(引用元https://yahoo.jp/jpwh77)

このような波形をパルス波といいます。

そして、デューティ比とは、周期Tに対するパルスON(オレンジ色)の割合です。

式で表すと、次のようになります。

周期をT、パルスONをTon、デューティ比をDとすると

D = Ton/T

このデューティー比を調節することにより、

入力電圧を変えずに電圧を制御できます。この見かけ上の電圧のことを実効電圧といいます。

(引用元https://dotstud.io/docs/pulse-width-modulation/

何となくイメージしていただけたでしょうか?

このPWM制御を用いることによって、照明の明るさ、モーターの回転速度、角度の調整、圧電サウンダを用いて音を鳴らすなど、様々なことが行えます。

目的

今回は、LEDの明るさを徐々に変えるということをゴールとします。

PWM制御(ソフトウェア)の設定

RaspberryPiでは、2種類のPWMの設定があります。

①ソフトウェア方式

②ハードウェア方式

の2つです。①はCPUからの制御、②はラズパイのハード側からの制御ということですね。

今回はソフトウェア方式を用いてLEDの明るさ調節を行います。

使う関数は次の2つです

①softPwmCreate(ピン番号、パルスONの初期値、range(階調))

②softPwmWrite(ピン番号、パルスONの長さ) 注 パルスONの長さは0~rangeまでで指定

目的の周波数に合わせてrange(階調)の計算を行う必要があります。今回は100HzのPWM信号を作成します。

式は以下の通りです。

T = 100us * range

f = 1 / T = 1 / 100us * range

T    PWM信号の周期

f     PWM信号の周波数

range     階調(1周期を何個に分割するかを表す)

100us  最小変化幅(ソフトウェアの場合は100usで固定でいいと思います)

上の式に当てはめて計算すると、rangeは100となります。

例えば、softPwmCreate()関数のパルスONの初期値を50に設定すると、デューティー比50%のPWM信号を作成することができます。(range=100に対しての50のため)

それでは、回路図を見ていきましょう。

回路図

基本的なLED点灯回路と同様です。

プログラム

パルスONの初期値(value)は0にし、徐々にデューティ比を変えていくことでLEDの明るさが変わっていきます。

まとめ

ソフトウェア方式PWMの設定手順

  1. 設定する周波数を決める
  2. 周波数に合わせてrangeの値を計算する
  3. softPwmCreate(pin,pulseOn初期値,range)関数を使ってPWM信号を作成
  4. softPwmWrite(pin,pulseOnの長さ)を使ってPWM信号を出力

ソフトウェア方式のPWM出力はもう大丈夫そうですね。

次回はハードウェア方式のPWM制御に取り組んでいきたいと思います!

参考書籍(C言語ではじめる RaspberryPi 徹底入門)

Amazon.co.jp: C言語ではじめるRaspberry Pi徹底入門 eBook: 菊池 達也, 実践教育訓練学会: Kindleストア
Amazon.co.jp: C言語ではじめるRaspberry Pi徹底入門 eBook: 菊池 達也, 実践教育訓練学会: Kindleストア
タイトルとURLをコピーしました