樹莓派的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()



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM