RT-Thread论坛
直播中

史晓明

8年用户 1012经验值
私信 关注
[问答]

PWM设备可以发现,但是波形没有输出怎么解决?




回帖(2)

乔丽娜

2025-9-19 17:09:44
那就得检查一下驱动代码是否正确了
举报

李桂英

2025-9-23 17:01:54

当PWM设备可以被检测到(例如通过ls /sys/class/pwm确认存在),但无波形输出时,请按以下步骤排查:




1. 检查PWM使能状态



  • 确认PWM通道是否已启用:
     cat /sys/class/pwm/pwmchip/pwm/enable  # 应返回1

  • 若返回0,启用PWM:
     echo 1 > /sys/class/pwm/pwmchip/pwm/enable




2. 验证周期和占空比配置



  • 周期(period)占空比(duty_cycle) 必须合法:

    • duty_cycleperiod

    • 值单位为纳秒(ns),例如1kHz波形需设置period=1000000(1ms)。


  • 重新配置参数(示例):
     echo 1000000 > /sys/class/pwm/pwmchip/pwm/period      # 设置周期为1ms
    echo 500000 > /sys/class/pwm/pwmchip/pwm/duty_cycle   # 设置占空比为50%
    echo 1 > /sys/class/pwm/pwmchip/pwm/enable            # 重新使能




3. 排查引脚复用冲突



  • PWM引脚可能被配置为其他功能(如GPIO):

    • 检查设备树(DTS):确保引脚已正确映射为PWM功能。
      &pwm {
         pinctrl-names = "default";
         pinctrl-0 = <&pwm_pins>;  // 确认pinctrl指向正确的引脚组
         status = "okay";
      };

    • 运行时检查:使用config-pin工具(部分平台如BeagleBone):
      config-pin -l   # 查看支持的功能
      config-pin pwm  # 设置为PWM模式


  • 示波器测量:确认硬件引脚无其他电平锁定。




4. 确认时钟源与驱动状态



  • 检查时钟使能

    • 某些SoC的PWM需依赖时钟(如CCU、CMU)。通过devmem2或寄存器工具确认时钟控制位已开启。


  • 驱动日志
     dmesg | grep pwm  # 检查驱动加载错误

  • 重新加载驱动
     sudo rmmod pwm_driver  # 替换为实际驱动名(如pwm-omap-dmtimer)
    sudo modprobe pwm_driver




5. 排除硬件问题



  • 更换引脚/通道:测试其他PWM通道是否正常。

  • 电路检查

    • 引脚是否接触不良?

    • 外部电路是否拉低电平(如上拉电阻配置错误)?


  • 示波器直接测量:跳过外部电路,测量SoC引脚输出。




6. 权限与用户空间访问



  • 确保有权限操作sysfs:
     sudo chmod 666 /sys/class/pwm/pwmchip/export   # 临时授权
    sudo chmod 666 /sys/class/pwm/pwmchip/pwm/*

  • 若使用库(如WiringPi),检查代码逻辑是否覆盖了配置。




7. 内核配置与更新



  • 确认内核支持PWM
     zcat /proc/config.gz | grep CONFIG_PWM  # 查看是否编译为Y或M

  • 更新内核/固件:旧版本驱动可能存在已知Bug。




总结步骤流程图


graph TD
    A[发现PWM设备] --> B{使能吗?}
    B -->|否| C[echo 1 > enable]
    B -->|是| D{周期/占空比有效?}
    D -->|否| E[重设period/duty_cycle]
    D -->|是| F{引脚复用正确?}
    F -->|否| G[配置设备树或pinctrl]
    F -->|是| H{驱动/时钟正常?}
    H -->|否| I[查dmesg/时钟寄存器]
    H -->|是| J{硬件故障?}
    J -->|是| K[更换引脚/通道]
    J -->|否| L[检查电路/示波器]

按顺序排查后,90%以上的问题可定位。重点依次为:使能状态→参数配置→引脚复用→驱动时钟

举报

更多回帖

发帖
×
20
完善资料,
赚取积分