Linux PWM 应用编程

Linux PWM 应用编程

嵌入式Linux应用开发中,系统经常会连接通过PWM方式控制的设备,例如控制电机转速、控制灯的亮度等。

要在Linux应用层控制PWM输出,与GPIO类似,有两种方式:

  1. 通过sysfs控制
  2. 通过API控制

通过sysfs控制PWM

与GPIO类似,sysfs中导出的与PWM控制相关的文件在/sys/class/pwm目录下,根据芯片不同,分为多个芯片子目录pwmchipN,例如在我使用的旭日X3pi中,有两个子目录pwmchip0pwmchip3

root@ubuntu:/sys/class/pwm# ls
pwmchip0  pwmchip3
root@ubuntu:/sys/class/pwm# 

pwmchipN目录中有类似GPIO的exportunexport等控制文件。

root@ubuntu:/sys/class/pwm/pwmchip0# ls
device  export  npwm  power  subsystem  uevent  unexport
root@ubuntu:/sys/class/pwm/pwmchip0# 

查看npwm,每个芯片有3个PWM,X3pi文档中,40pin引脚有两个PWM引脚PWM0PWM4,推断为pwmchip0的0号PWM和pwmchip3的1号PWM,使用官方的例程测试证明正是如此。

要通过sysfs控制PWM,首先也要知道PWM的编号,将PWM编号写入export文件来导出PWM,使控制相应的PWM的文件可见。

root@ubuntu:/sys/class/pwm/pwmchip0# echo 0 >export
root@ubuntu:/sys/class/pwm/pwmchip0# ls
device  export  npwm  power  pwm0  subsystem  uevent  unexport
root@ubuntu:/sys/class/pwm/pwmchip0# 

这里导出了pwmchip0的0号PWM,在pwmchip0目录下多出了一个子目录pwm0,子目录中就是控制PWM的接口文件。

root@ubuntu:/sys/class/pwm/pwmchip0# cd pwm0/
root@ubuntu:/sys/class/pwm/pwmchip0/pwm0# ls
capture  duty_cycle  enable  period  polarity  power  uevent
root@ubuntu:/sys/class/pwm/pwmchip0/pwm0# 

主要文件和功能:

  1. period: PWM周期,单位:ns;
  2. duty_cycle: 占空比,一个周期中高电平的时间,单位:ns;
  3. enable: 启用PWM,写入1启用,写入0禁用;
  4. polarity: 极性,可以控制正常还是反转高低电平,正常:写入"normal",反转:写入"inversed"。注意,并不是所有系统的硬件和驱动都实现了这个功能,使用前需结合文档或测试进行确认。

使用流程:

  1. export指定的PWM
  2. 设置PWM周期和占空比,设置极性(可选)
  3. 启动PWM
  4. 使用过程中调整占空比(可选)
  5. 禁用PWM
  6. unexport指定的PWM

通过API控制PWM

我使用的系统并没有发现类似/usr/include/linux/pwm.h的头文件和/dev/pwmchip0的设备节点,没有提供可以通过fcntl操作设备的接口,暂时没有找到用API控制PWM的方法。

注意:虽然内核头文件中有提供linux/pwm.h,但并不能直接在应用编程中使用,无法通过编译。

参考

  1. https://blog.csdn.net/qq_24330911/article/details/132235089
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞花丝雨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值