<Raspberry Pi-43>
GPIOのPWMは<Raspberry Pi-39>でも紹介しましたが、ここではpython3を使ったやり方を
紹介します。

下の3つのプログラムは、p = GPIO.PWM(outpin, 100)で周波数を100Hzにする(オシロで確認 T=10ms f=1/Tで100Hz)
デューティ比は、1がp.start(10)で10%、2がp.start(50)で50%、3がp.start(90)で90%です。
オシロの波形を見れば分かるように、周波数一定でパルス巾が変化していることが分かります。

従って、p.start(10)のデューティ比を連続で変化させれば、LEDの明るさを可変、またモーターの
回転速度などを可変することが出来ます。

取り合えずPWMのプログラム1
-------------------------------------------------
# coding: utf-8                                  #1

import RPi.GPIO as GPIO                          #2

GPIO.setmode(GPIO.BCM)                           #3
outpin = 14                                      #4

GPIO.setup(outpin, GPIO.OUT, initial=GPIO.LOW)   #5
p = GPIO.PWM(outpin, 100)                        #6
p.start(10)                                      #7
-------------------------------------------------



取り合えずPWMのプログラム2
-------------------------------------------------
# coding: utf-8

import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM)
outpin = 14

GPIO.setup(outpin, GPIO.OUT, initial=GPIO.LOW)
p = GPIO.PWM(outpin, 100)
p.start(50)
-------------------------------------------------



取り合えずPWMのプログラム3
-------------------------------------------------
# coding: utf-8

import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM)
outpin = 14

GPIO.setup(outpin, GPIO.OUT, initial=GPIO.LOW)
p = GPIO.PWM(outpin, 100)
p.start(90)
-------------------------------------------------



<上記プログラム1について>

#1 文字コードの指定

#2 GPIOを制御するモジュールのインポート

#3 GPIOポートの指定をGPIO番号にする

#4 outpin=14 outpin変数に14を代入(GPIO14用)

#5 GPIO14を出力モードにして初期値をL(0)にする。

#6 PWMオブジェクトのインスタンスを生成、GPIO14を100Hzにする

#7 PWMをデューティ比10%で出力する。

<LEDの明るさの連続可変> (プログラムの中の<は半角にして下さい)
-------------------------------------------------
# coding: utf-8

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
outpin = 14

GPIO.setup(outpin, GPIO.OUT, initial=GPIO.LOW)
p = GPIO.PWM(outpin, 100)

def  dc1():
    global dc
    dc=dc+10
    return

def dc2():
    global dc
    dc=dc-10
    return

p.start(0)

dc=0
flug=0
while True:
    p.ChangeDutyCycle(dc)
    time.sleep(1)
    if dc<100 and flug==0:
        dc1()
    if dc==100:
        flug=1
    if flug==1 and dc<=100:
        dc2()
    if dc==0:
        flug=0
-------------------------------------------------

下の動画はLEDの明るさが変化しているのですが、光の関係で動画では分かりませんが
オシロを見ればデューティ比が変化しているのが分かります。
(0%→10%ステップで100%→10%ステップで0%までの繰り返し)

 

<PWMオブジェクトについて>

PWMオブジェクトのインスタンス作成をする
p=GPIO.PWM(port,frq) port:GPIOピン frq:周波数 p:任意の名前

PWM信号を出力する
p.start(dc) dc:デューティ比

周波数を変更
p.ChangeFrequency(frq)  frq:周波数

デューティ比を変更
p.ChangeDutyCycle(dc)   dc:デューティ比

PWM信号停止
p.stop()


周波数100Hz、デューティ比50%のPWMをGPIO番号14に出力させて、3秒後周波数を200Hz、デューティ比10%に
変更、そして5秒後に停止させるプログラム
-------------------------------------------------
# coding: utf-8

import RPi.GPIO as GPIO

import time

GPIO.setmode(GPIO.BCM

outpin = 14

GPIO.setup(outpin, GPIO.OUT, initial=GPIO.LOW)


# PWM オブジェクトのインスタンスを作成(出力ピン:14 番、周波数:100Hz)
p = GPIO.PWM(outpin, 100)

p.start(50)                # PWM信号を出力(デューティ比50%)

time.sleep(3)

p.ChangeFrequency(200)     # 周波数を200Hzに変更

p.ChangeDutyCycle (10)     # デューティ比を10%に変更

time.sleep(5)

p.stop()                   # PWM信号の停止

GPIO.cleanup()             # GPIOの開放
-------------------------------------------------

 


Raspberry Pi-44に続く・・・


Raspberry メニューに戻る