You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

树莓派3B使用pigpio库控制硬件PWM失效问题求助

树莓派3B pigpio硬件PWM失效排查思路

哥们,我帮你捋几个实际排查方向,都是玩树莓派3B硬件PWM时踩过的坑:

  • 先确认硬件PWM引脚的合法性:树莓派3B的硬件PWM引脚本来就少,而且PCM时钟模式下还有冲突——当你把时钟设为PCM时,GPIO18、GPIO19会被PCM音频通道占用,这俩引脚就没法用硬件PWM了。你得换成GPIO12(PWM0)或者GPIO13(PWM1)试试,别用错引脚。

  • 检查pigpio守护进程的启动参数:光启动sudo pigpiod没用,得指定PCM时钟源才行。正确的启动命令应该是:

    sudo killall pigpiod
    sudo pigpiod -t 0
    

    -t 0就是强制把时钟源设为PCM,不然默认的PWM时钟可能和你设置的模式冲突,导致硬件PWM不工作。

  • 验证代码的硬件PWM初始化逻辑:别光看import,得确认代码里有没有正确初始化引脚和设置参数。比如要先判断pigpio连接是否成功,再设置引脚为输出,然后设置频率和占空比:

    import pigpio
    
    pi = pigpio.pi()
    # 先确认连接成功,不然白忙活
    if not pi.connected:
        print("pigpio连接失败!")
        exit()
    
    # 用合法的硬件PWM引脚,比如GPIO12
    pi.set_mode(12, pigpio.OUTPUT)
    # PCM时钟是48MHz,设置的频率最好是48MHz的约数,比如1000Hz
    pi.set_PWM_frequency(12, 1000)
    # 占空比设为50%(原始值是时钟周期的一半,48000/2=24000)
    pi.set_PWM_dutycycle(12, 24000)
    

    另外,别把软件PWM的逻辑套到硬件PWM上,硬件PWM的占空比范围是0到时钟周期值,不是0-255(除非用set_PWM_range手动调整)。

  • 排查系统服务冲突:树莓派上的音频服务(比如alsa、pulseaudio)会占用PCM相关资源,直接抢硬件PWM的引脚。你可以临时关掉这些服务试试:

    sudo systemctl stop alsa-state
    sudo systemctl stop pulseaudio
    

    关完之后重启pigpio守护进程,再测试硬件PWM。

  • 用pigpio自带工具排除代码问题:直接用命令行工具pigs测试,能快速判断是代码问题还是系统/硬件问题:

    # 设置GPIO12为输出
    pigs m 12 w
    # 设置频率1000Hz
    pigs pfs 12 1000
    # 设置50%占空比(用0-255范围的话设128)
    pigs pd 12 128
    

    如果这个命令行操作后还是没PWM输出,那基本可以确定是系统配置或硬件的问题,不是代码的锅。

  • 更新pigpio版本:旧版本的pigpio对树莓派3B的PCM模式支持可能有bug,更新到最新版本试试:

    sudo apt update
    sudo apt install --reinstall pigpio python3-pigpio
    

内容的提问来源于stack exchange,提问作者Ikajiro

火山引擎 最新活动