使用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(我也不知道为何)
root@raspberrypi:~# /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输出的方波.
感谢您的阅读,如果感觉可以的话,求个 赞赞 !
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)