04、使用 sysfs 接口操作 pwm
一、查看 pwm 设备信息
cat /sys/kernel/debug/pwm
二、使用 PWM 节点
在Linux系统中,可以通过sysfs接口控制PWM(脉宽调制)。所有相关文件和设置都存放在/sys/class/pwm/目录里。这个目录让用户能直接操作PWM控制器,调整PWM信号的周期、占空比、输出极性等参数。接下来简单说明pwmchipX目录下几个重要文件的作用。
/sys/class/pwm/pwmchipX
下的文件:
- device:指向该PWM控制器对应的设备路径。
- export:通过写入该文件可以启用某个PWM通道。
- npwm:显示这个PWM控制器支持的PWM通道数量(例如显示"4"代表有4个可用通道)。
- power:用来控制PWM控制器的电源开关状态。
- subsystem:显示该PWM控制器所属的子系统类别(通常与驱动程序相关)。
- uevent:用于系统事件通知。
- unexport:通过写入该文件可以关闭已启用的PWM通道(与export功能相反)。
2.1、npwm
作用:这是一个只读文件,用来查看当前PWM控制器有多少可用通道。例如,如果文件显示值为4
,就说明这个PWM控制器有4个可使用的PWM输出通道。
如何使用:直接读取这个文件就能知道通道数量。比如执行命令 cat /sys/class/pwm/pwmchip0/npwm
,就能看到具体数字。
2.2、export
作用:启用某个PWM通道前,必须先通过这个文件“激活”它。写入通道编号即可开始使用该通道。
如何使用:例如,要启用第0号通道,执行命令 echo 0 > /sys/class/pwm/pwmchip0/export
。完成后,系统会在对应目录下生成一个子文件夹(如 /sys/class/pwm/pwmchip0/pwm0/
),表示该通道已准备好。
2.3、unexport
作用:当不再需要某个已启用的PWM通道时,通过这个文件“关闭”它。写入通道编号即可释放资源。
如何使用:例如,要关闭第0号通道,执行命令 echo 0 > /sys/class/pwm/pwmchip0/unexport
。完成后,系统会删除对应的子文件夹(如 /sys/class/pwm/pwmchip0/pwm0/
),通道不再可用。
2.4、**/sys/class/pwm/pwmX/**
下的文件
PWM通道配置指南(以pwm0
为例)
导出PWM通道后(如pwm0
),系统会在/sys/class/pwm/pwmchip0/
目录下生成对应的文件夹(如/sys/class/pwm/pwmchip0/pwm0/
)。通过修改该文件夹中的四个关键文件,可以完全控制PWM信号:
2.4.1、polarity(极性设置)
作用:定义PWM信号的高低电平有效方式
可选值:
normal
:高电平为有效信号(默认)inversed
:低电平为有效信号
如何设置:
# 设置为高电平有效(正常模式)
echo normal > /sys/class/pwm/pwmchip0/pwm0/polarity
# 设置为低电平有效(反转模式)
echo inversed > /sys/class/pwm/pwmchip0/pwm0/polarity
2
3
4
5
2.4.2、period(周期设置)
作用:设置PWM信号的周期(即频率)
单位:纳秒(ns)
计算公式:频率(Hz)= 1,000,000,000 / period
示例:
# 设置周期为1毫秒(即1,000,000纳秒),对应频率1kHz
echo 1000000 > /sys/class/pwm/pwmchip0/pwm0/period
2
2.4.3、duty_cycle(占空比设置)
作用:设置高电平持续时间(占空比 = duty_cycle / period)
单位:纳秒(ns)
示例:
# 周期设为1ms(1,000,000ns)时,设置占空比50%:
echo 500000 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle
# 设置占空比25%(250,000ns):
echo 250000 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle
2
3
4
5
2.4.4、enable(启用/禁用PWM)
作用:控制PWM信号输出开关
可选值:
1
:启用PWM输出0
:禁用PWM输出
示例:
# 启用PWM输出
echo 1 > /sys/class/pwm/pwmchip0/pwm0/enable
# 禁用PWM输出
echo 0 > /sys/class/pwm/pwmchip0/pwm0/enable
2
3
4
5
:::
使用流程总结:
配置极性(polarity)
设置周期(period)
设置占空比(duty_cycle)
最后启用(enable)即可输出信号
注意:所有数值单位均为纳秒,需根据需求计算后填写。 :::
三、实验
然后根据 SG90 高电平持续时间和转动角度对应表对 PWM 进行设置。
- 0.5ms → 0°
- 1.0ms → 45°
- 1.5ms → 90°
- 2.0ms → 135°
- 2.5ms → 180°
例如可以通过以下命令让舵机转动 135 度:
顺序强依赖:
#将pwm导出到用户空间
echo 0 > /sys/class/pwm/pwmchip1/export
#设置pwm周期 20ms
echo 20000000 > /sys/class/pwm/pwmchip1/pwm0/period
#设置占空比 2ms
echo 2000000 > /sys/class/pwm/pwmchip1/pwm0/duty_cycle
#设置pwm极性
echo "normal" > /sys/class/pwm/pwmchip1/pwm0/polarity
#使能pwm
echo 1 > /sys/class/pwm/pwmchip1/pwm0/enable
#取消将pwm导出到用户空间
echo 0 > /sys/class/pwm/pwmchip1/unexport
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17