1. 程式人生 > >樹莓派的PWM脈寬調製功能介紹

樹莓派的PWM脈寬調製功能介紹

       最近想用樹莓派控制航模的電調,於是研究了下PWM,貌似控制電調比較麻煩,因為電調需要傳送幾個特定的訊號啟動,然後才能進入控制模式,今天先弄明白PWM,慢慢折騰。下面的程式親測可用,我用的樹莓派model B,12GPIO口是外面第6個針。
      脈寬調製(PWM)是指用微處理器的數字輸出來對類比電路進行控制,是一種對模擬訊號電平進行數字編碼的方法。在樹莓派上,可以通過對GPIO的程式設計來實現PWM。

建立一個 PWM 例項:

GPIO.PWM(channel, frequency)

啟用 PWM:

p.start(dc)   # dc 代表佔空比(範圍:0.0 <= dc >= 100.0)

更改頻率:
p.ChangeFrequency(freq)   # freq 為設定的新頻率,單位為 Hz

更改佔空比:
p.ChangeDutyCycle(dc)  # 範圍:0.0 <= dc >= 100.0

停止 PWM:
p.stop()

注意,如果例項中的變數“p”超出範圍,也會導致 PWM 停止。

以下為使 LED 每兩秒鐘閃爍一次的示例:

importRPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(12, GPIO.OUT)
  
p =GPIO.PWM(12, 0.5)
p.start(1)
input('點選回車停止:')   # 在 Python 2 中需要使用 raw_input
p.stop()
GPIO.cleanup()

以下為使 LED 在亮/暗之間切換的示例:

import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(11, GPIO.OUT)
GPIO.setup(12, GPIO.OUT)

p = GPIO.PWM(12, 50)
p11 = GPIO.PWM(11, 38)

p.start(0)
p11.start(0)

try:
    while 1:
        for dc in range(0, 101, 5):
            p.ChangeDutyCycle(dc)
            p11.ChangeDutyCycle(dc)
            time.sleep(0.1)
        for dc in range(100, -1, -5):
            p.ChangeDutyCycle(dc)
            p11.ChangeDutyCycle(dc)
            time.sleep(0.1)
except KeyboardInterrupt:
    pass

p11.stop()
GPIO.cleanup()