使用Raspberry Pi 的GPIO library 去產生PWM,進而控制DC 直流馬達的工作電壓及速度,是我們經常拿來討論的方法及議題,使用方法很簡單
我們只要使用二個指令即可以設定工作頻率及工作週期,利用這二個指令就可以改變及控制PWM GPIO的工作電壓進而達到控制直流馬達速度的目地。
至於想了解PWM及工作原理及說明設定可以利用Google或參考下面的網站software PWM – How to use it說明,這不是本篇文章要說明的重點。
本篇要思考的重點是要如何設定PWM的工作頻率,很多文章都提到首先先利用這個指令設定頻率GPIO.PWM(GPIO接脚,頻率設定),但問題是我們要設定多少的工作頻率才可以,什麼是最小值和最大值,這個值的大小是否會改變PWM的輸出電壓。
- p = GPIO.PWM(25, 50) # create an object p for PWM on port 25 at 50 Hertz
- # you can have more than one of these, but they need
- # different names for each port
- # e.g. p1, p2, motor, servo1 etc.
- p.start(50) # start the PWM on 50 percent duty cycle
- # duty cycle value can be 0.0 to 100.0%, floats are OK
- p.ChangeDutyCycle(90) # change the duty cycle to 90%
- p.ChangeFrequency(100) # change the frequency to 100 Hz (floats also work)
- # e.g. 100.5, 5.2
- p.stop() # stop the PWM output
我尋找很多資料總是找不到答案,所以才會想要測試看看,我的問題是
(1)PWM頻率的最大值
(2)PWM頻率是否會影響輸出電壓
(3)PWM頻率如何影響散熱
問題一: PWM頻率的最大值
這個問題終於了答案,而且還真是令人想不到的測試結果。這個問題關連到你的硬體設備工作頻率及使用的語言及library。
當使用Raspberry Pi 時GPIO接脚的反應速度可以多快,
這篇文章是利用Raspberry Pi 來產生方波頻率Benchmarking Raspberry Pi GPIO Speed,其測試結果如下表所示
LANGUAGE | LIBRARY | TESTED / VERSION | SQUARE WAVE |
---|---|---|---|
Shell | /proc/mem access | 2015-02-14 | 2.8 kHz |
Shell / gpio utility | WiringPi gpio utility | 2015-02-15 / 2.25 | 40 Hz |
Python | RPi.GPIO | 2015-02-15 / 0.5.10 | 70 kHz |
Python | wiringpi2 bindings | 2015-02-15 / latest github | 28 kHz |
Ruby | wiringpi bindings | 2015-02-15 / latest gem (1.1.0) | 21 kHz |
C | Native library | 2015-02-15 / latest RaspPi wiki code | 22 MHz |
C | BCM 2835 | 2015-02-15 / 1.38 | 5.4 MHz |
C | wiringPi | 2015-02-15 / 2.25 | 4.1 – 4.6 MHz |
Perl | BCM 2835 | 2015-02-15 / 1.9 | 48 kHz |
所以當我們利用Python及RPi.GPIO去產生PWM時最高頻率可以設定至70KHZ,理論上工作頻率愈高,輸出的電壓會愈高但CPU會愈熱。
問題二:PWM頻率是否會影響輸出電壓
目前我正在測試,如果有數據資料再來討論結果。
參考資料:
(1)http://raspi.tv/2013/rpi-gpio-0-5-2a-now-has-software-pwm-how-to-use-it
(2)http://codeandlife.com/2012/07/03/benchmarking-raspberry-pi-gpio-speed/