天天看點

解決 Rspberry Compute Module 4 使用Python的 RPi.GPIO 導緻PWM輸出頻率高于某個值,脈寬恒定1:1

使用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輸出的方波.

感謝您的閱讀,如果感覺可以的話,求個 贊贊 !