天天看點

硬體控制入門之樹莓派PWM波生成----樹莓派硬體控制學習筆記(二)第二章 硬體控制入門之樹莓派PWM波生成前言一、什麼是PWM波二、樹莓派使用Python(RPi庫)生成PWM波三、樹莓派使用Python(pigpio庫)生成PWM波總結

第二章 硬體控制入門之樹莓派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波生成----樹莓派硬體控制學習筆記(二)第二章 硬體控制入門之樹莓派PWM波生成前言一、什麼是PWM波二、樹莓派使用Python(RPi庫)生成PWM波三、樹莓派使用Python(pigpio庫)生成PWM波總結

這是筆者用示波器檢測的一個pwm波,是一個頻率為50Hz,占空比為30%的PWM波。

使用pwm波可以:

1)控制電機的轉速

2)控制舵機角度

3)控制led呼吸燈,或者設定為隔幾秒閃爍一下。

4)其他底層硬體控制

二、樹莓派使用Python(RPi庫)生成PWM波

1.引入庫及測試

硬體控制入門之樹莓派PWM波生成----樹莓派硬體控制學習筆記(二)第二章 硬體控制入門之樹莓派PWM波生成前言一、什麼是PWM波二、樹莓派使用Python(RPi庫)生成PWM波三、樹莓派使用Python(pigpio庫)生成PWM波總結

首先我們打開樹莓派自帶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設定為低電平,然後釋放引腳

硬體控制入門之樹莓派PWM波生成----樹莓派硬體控制學習筆記(二)第二章 硬體控制入門之樹莓派PWM波生成前言一、什麼是PWM波二、樹莓派使用Python(RPi庫)生成PWM波三、樹莓派使用Python(pigpio庫)生成PWM波總結

點選運作,儲存好檔案,沒有報錯,說明一切正常,點選停止

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波生成----樹莓派硬體控制學習筆記(二)第二章 硬體控制入門之樹莓派PWM波生成前言一、什麼是PWM波二、樹莓派使用Python(RPi庫)生成PWM波三、樹莓派使用Python(pigpio庫)生成PWM波總結

總結

今天為大家帶來了兩種在樹莓派上生成pwm波的方法,其中第二種要比第一種穩定,具體我做過實驗,不過當時沒有記錄結果,具體穩定多少等我回到學校用示波器為大家詳細測試。後面的筆記将為大家帶來GPIO輸入模式的應用。