使用Rspberry Compute Module 4 使用Python的 RPi.GPIO 導緻PWM輸出頻率高于某個值,脈寬恒定1:1,測試時,脈寬設定1:4,在頻率大于5khz時候,脈寬開始逐漸趨向1:1,在10khz時候幾乎達到1:1
我懷疑可能是python 庫底層有封裝,導緻的問題!
解決辦法:
選擇使用raspberry 終端直接操作PWM:
1.在/boot/config.txt中添加:
dtoverlay=pwm,pin=12,func=2
若是有多個pwm,則:
dtoverlay=pwm-2chan,pin=12,func=4,pin2=13,func2=4
(根據實際情況修改pin)
2.重新開機,檢查pwm
lsmod | grep pwm
#pwm_bcm2835 2631 2
3.系統配置
首先安裝librpip
librpip 下載下傳連結: Download | librpip
librpip 安裝教程: librpip-pwm-init | librpip
4.啟動pwm-init.service
systemctl enable pwm-init.service
(若提示失敗,未找到服務,沒有關系,我們用以下的指令啟動, 建議運作兩次)
usr/local/bin/librpip-util/librpip-pwm-init
如下圖,即啟動成功,雖然有很多error(我也不知道為何)
[email protected]:~# /usr/local/bin/librpip-util/librpip-pwm-init
[pwmclk INFO] Mem Base is 0x0
[pwmclk INFO] Mem Size is 0xfe000000
[pwmclk ERROR] Clock Not Set. Error reading memory settings from /sys/firmware/devicetree/base/soc/ranges: Success
/usr/local/bin/librpip-util/librpip-pwm-init: 10: echo: echo: I/O error
/usr/local/bin/librpip-util/librpip-pwm-init: 11: echo: echo: I/O error
chgrp: invalid group: ‘pwm’
也可以使用一以下查詢
ls -l /sys/class/pwm/pwmchip0/pwm*
4.使用以下指令,測試pwm
#20000對應25khz,200000對應250khz
echo 20000 > /sys/class/pwm/pwmchip0/pwm0/period
# 5000對應1:4,關系由5000/20000得到,且值不能大于20000
echo 5000 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle
# 開始PWM輸出,若想關閉,則将1變為0
echo 1 > /sys/class/pwm/pwmchip0/pwm0/enable
至此,問題已解決,
你可以嘗試使用示波器觀測PWM輸出的方波.
感謝您的閱讀,如果感覺可以的話,求個 贊贊 !