第二章 硬體控制入門之樹莓派PWM波生成
第一章 樹莓派硬體控制入門之GPIO口的操作
第二章 硬體控制入門之樹莓派PWM波生成
文章目錄
- 第二章 硬體控制入門之樹莓派PWM波生成
- 前言
- 一、什麼是PWM波
- 二、樹莓派使用Python(RPi庫)生成PWM波
-
- 1.引入庫及測試
- 2.編寫生成PWM波的程式
- 3.更改頻率及占空比
- 三、樹莓派使用Python(pigpio庫)生成PWM波
-
- 1.啟動守護程序
- 2.編寫程式
- 總結
前言
上篇文章介紹了三種GPIO的操控方式,今天則為大家帶來pwm波的生成方法,pwm波是硬體控制中一種很重要的波形,接下來我先介紹一下它
一、什麼是PWM波
PWM的英文全稱是"Pulse Width Modulation",中文翻譯為"脈沖寬度調制"。PWM的波形是一種周期固定的、寬度可調的方波。
pwm波有兩個重點參數:
1)PWM方波的周期
2)PWM方波的占空比
用這兩個參數即可表示任意一個pwm波
這是筆者用示波器檢測的一個pwm波,是一個頻率為50Hz,占空比為30%的PWM波。
使用pwm波可以:
1)控制電機的轉速
2)控制舵機角度
3)控制led呼吸燈,或者設定為隔幾秒閃爍一下。
4)其他底層硬體控制
二、樹莓派使用Python(RPi庫)生成PWM波
1.引入庫及測試
首先我們打開樹莓派自帶Python IDE——mu
import RPi.GPIO as GPIO #注意這裡的i是小寫=.=
GPIO.setmode(GPIO.BOARD) #指定為BOARD編号
GPIO.setwarnings(False)
pins_1=12
GPIO.setup(pins_1,GPIO.OUT)
GPIO.output(pins_1, 0)
GPIO.cleanup()
輸入上一篇學習筆記的第二章講解過的代碼,這些代碼将12号引腳也就是GPIO.1設定為低電平,然後釋放引腳
點選運作,儲存好檔案,沒有報錯,說明一切正常,點選停止
2.編寫生成PWM波的程式
注意這次的程式為了延時,我們多引用了一個time庫,這也是系統鏡像自帶的
import RPi.GPIO as GPIO #注意這裡的i是小寫=.=
import time
GPIO.setmode(GPIO.BOARD) #指定為BOARD編号
GPIO.setwarnings(False) #去除警告
pins_1=12
GPIO.setup(pins_1,GPIO.OUT)#設定12針腳為輸出模式
pwm = GPIO.PWM(pins_1,1)#在12号針腳上建立一個1Hz的PWM波
pwm.start(10)#以占空比為百分之十的模式啟動pwm波
time.sleep(5)#延時5秒
pwm.stop()#停止pwm波
GPIO.cleanup()#釋放引腳
程式運作效果為12号針腳保持0.1秒的高電平,然後是0.9秒的低電平,循環5次自動停止。
3.更改頻率及占空比
pwm.ChangeFrequency(freq) # 更改頻率
pwm.ChangeDutyCycle(dc) # 更改占空比
大家可以使用這兩行代碼在程式運作時自動更改頻率及占空比,如下
import RPi.GPIO as GPIO #注意這裡的i是小寫=.=
import time
GPIO.setmode(GPIO.BOARD) #指定為BOARD編号
GPIO.setwarnings(False) #去除警告
pins_1=12
GPIO.setup(pins_1,GPIO.OUT)#設定12針腳為輸出模式
pwm = GPIO.PWM(pins_1,1)#在12号針腳上建立一個1Hz的PWM波
pwm.start(10)#以占空比為百分之十的模式啟動pwm波
time.sleep(5)#延時5秒
pwm.ChangeFrequency(2) # 更改頻率為2Hz
pwm.ChangeDutyCycle(50) # 更改占空比為50
time.sleep(5)#延時5秒
pwm.stop()#停止pwm波
GPIO.cleanup()#釋放引腳
程式運作效果為12号針腳保持0.1秒的高電平,然後是0.9秒的低電平,循環5次接着自動變為0.25秒高電平,0.25秒低電平,循環10次。
更進階的操作可以使用循環語句實作,大家可以自己嘗試下。
三、樹莓派使用Python(pigpio庫)生成PWM波
1.啟動守護程序
啟動Linux終端,輸入這條指令
sudo pigpiod
2.編寫程式
注意pigpio庫的編碼模式是BCM(詳見第一章第一節)
import pigpio#引入庫
import time#引入庫
pi = pigpio.pi()#執行個體化對象
gpio=21
pi.set_PWM_frequency(gpio,50)#設定頻率為50Hz
pi.set_PWM_range(gpio,100)#将一個周期分為100份
pi.set_PWM_dutycycle(gpio,50)#高電平占其中50份也就是占空比為50%
print("frequencypi",pi.get_PWM_frequency(gpio),"Hz")#檢測并輸出21針腳上的頻率
print("dutycycle:",pi.get_PWM_dutycycle(gpio),"%")#檢測并輸出21針腳上的占空比
time.sleep(5)#延時5秒
這個程式在21号陣腳上輸出了一個50Hz,占空比50%的pwm波,程式運作結果如下
總結
今天為大家帶來了兩種在樹莓派上生成pwm波的方法,其中第二種要比第一種穩定,具體我做過實驗,不過當時沒有記錄結果,具體穩定多少等我回到學校用示波器為大家詳細測試。後面的筆記将為大家帶來GPIO輸入模式的應用。