Linux PWM 应用编程
2023-12-16 12:30:37
Linux PWM 应用编程
嵌入式Linux应用开发中,系统经常会连接通过PWM方式控制的设备,例如控制电机转速、控制等的亮度等。
要在Linux应用层控制PWM输出,与GPIO类似,有两种方式:
- 通过sysfs控制
- 通过API控制
通过sysfs控制PWM
与GPIO类似,sysfs中导出的与PWM控制相关的文件在/sys/class/pwm目录下,根据芯片不同,分为多个芯片子目录pwmchipN
,例如在我使用的旭日X3pi中,有两个子目录pwmchip0
和pwmchip3
:
root@ubuntu:/sys/class/pwm# ls
pwmchip0 pwmchip3
root@ubuntu:/sys/class/pwm#
pwmchipN目录中有类似GPIO的export,unexport等控制文件。
root@ubuntu:/sys/class/pwm/pwmchip0# ls
device export npwm power subsystem uevent unexport
root@ubuntu:/sys/class/pwm/pwmchip0#
要通过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#
主要文件和功能:
- period: PWM周期,单位:ns
- duty_cycle: 占空比,一个周期中高电平的时间,单位:ns
- enable: 启用PWM,写入1启用,写入0禁用
- polarity: 极性,可以控制正常还是反转高低电平,正常:吸入"normal",反转:写入"inversed"。注意,并不是所有系统的硬件和驱动都实现了这个功能,使用前需结合文档或测试进行确认。
使用流程:
- export指定的PWM
- 设置PWM周期和占空比,设置极性(可选)
- 启动PWM
- 使用过程中调整占空比(可选)
- 禁用PWM
- unexport指定的PWM
通过API控制PWM
我使用的系统并没有发现类似/usr/include/linux/pwm.h
的头文件,没有提供可以通过fcntl
操作设备的接口,暂时没有发现用API控制PWM的方法。
注意:虽然内核头文件中有提供linux/pwm.h
,但并不能直接在应用编程中使用,无法通过编译。
文章来源:https://blog.csdn.net/doushi/article/details/135018485
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!