樹莓派的PWM脈寬調製功能介紹
阿新 • • 發佈:2018-12-31
最近想用樹莓派控制航模的電調,於是研究了下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()