PWM应用
创始人
2025-05-30 05:25:46
0

目录

一、应用层操控 PWM

控制pwm

二、编写代码


一、应用层操控 PWM

        与 LED 设备一样, PWM 同样也是通过 sysfs 方式进行操控,进入到/sys/class/pwm 目录下,如下所示:

        这八个文件夹其实就对应了 I.MX6U的 8 个 PWM 控制器, I.MX6U 总共有 8 个 PWM 控制器

       以其中一个为例,进入到 pwmchip1 目录下:
① npwm: 这是一个只读属性,读取该文件可以得知该 PWM 控制器下共有几路 PWM 输出,如下所示:

         I.MX6U 每个 PWM 控制器只有 1 路 PWM 输出,所以总共有 8 路 PWM,分别对应 I.MX6U 的PWM1~PWM8 这 8 路输出(pwmchip0 对应 PWM1, pwmchip1 对应 PWM2,以此类推)需要注意的是板子对分配,比如这里使用的板子,开发板出厂系统中, PWM1 已经被用作 LCD 背光控制了, 应用层不能直接对它进行控制了;而其它 PWM 均不能使用,原因在于 I/O 资源不够,为了满足板子上其它外设对 I/O 引脚的需求。

 ②export: 与 GPIO 控制一样,在使用 PWM 之前,也需要将其导出,通过 export 属性进行导出

         0 表示一个编号,  每个 PWM 控制器(pwmchipX)下,使用 export 属性文件导出 PWM 时,编号都是从 0 开始;因为 I.MX6U 每个控制器都只有一路 PWM,所以都只能使用编号 0,导出成功后会在 pwmchipX(X 表示数字 0~7)目录下生成一个名为 pwm0 的目录

③导出成功后会在 pwmchipX(X 表示数字 0~7)目录下生成一个名为 pwm0 的目录

        写入到 unexport 文件中的编号与写入到 export 文件中的编号是相对应的;需要注意的是, export 文件和 unexport 文件都是只写的、没有读权限

控制pwm

        通过 export 导出之后,便会生成 pwm0 这个目录,进入到该目录下看看:

 ⚫ enable: 可读可写,写入"0"表示禁止 PWM;写入"1"表示使能 PWM。读取该文件获取 PWM 当前是禁止还是使能状态,通常配置好 PWM 之后, 再使能 PWM。

⚫ polarity: 用于设置极性,可读可写,可写入的值:"normal":普通;"inversed":反转;很多 SoC 的 PWM 外设其硬件上并不支持极性配置,所以对应的驱动程序中并未实现这个接口,应用
层自然也就无法通过 polarity 属性文件对 PWM 极性进行配置,这里使用的板子也是

⚫ period: 用于配置 PWM 周期, 可读可写;写入一个字符串数字值,以 ns(纳秒)为单位

⚫ duty_cycle: 用于配置 PWM 的占空比, 可读可写;写入一个字符串数字值, 也是 ns 为单位

二、编写代码

#include 
#include 
#include 
#include 
#include 
#include 
#include static char pwm_path[100];static int pwm_config(const char *attr, const char *val)
{char file_path[100];int fd, len = strlen(val);sprintf(file_path, "%s/%s", pwm_path, attr);if ((fd = open(file_path, O_WRONLY)) < 0){perror("open file_path error");return fd;}if (len != write(fd, val, len)){perror("open write error");close(fd);return -1;}close(fd);return 0;
}int main(int argc, char *argv[])
{if (argc != 4){fprintf(stderr, "usage: %s   \n", argv[0]);exit(-1);}printf("PWM config:id<%s>, period<%s>, duty<%s>\n", argv[1], argv[2], argv[3]);sprintf(pwm_path, "/sys/class/pwm/pwmchip%s/pwm0", argv[1]);if (access(pwm_path, F_OK)){char temp[100];int fd;sprintf(temp, "/sys/class/pwm/pwmchip%s/export", argv[1]);if ((fd = open(pwm_path, O_WRONLY)) < 0){perror("open error");exit(-1);}if (write(fd, "0", 1) != 1){perror("write error");close(fd);exit(-1);}close(fd);}if (pwm_config("period", argv[2]))exit(-1);if(pwm_config("duty_cycle",argv[3]))exit(-1);pwm_config("enable","1");exit(0);
}

        进入main函数,先判断一下传参是否相等,接着打印参数信息,把路径格式化在缓冲区中,用if判断pwm文件是否导出,没导出就进入if函数内容执行,进入后把导出文件路径格式化在temp缓冲区,然后打开文件,写入0,即是导出pwm0,然后关闭文件。最后利用pwm_config函数设置PWM 周期和 PWM 占空比,进入pwm_config函数,先打开period文件,然后写入传入第二个参数的值,同理, duty_cycle写入传入第三个参数的值,最后就是使能pwm

验证则需要找到pwm对应绑定的引脚和使用示波器

相关内容

热门资讯

新品上市推广方案 新品上市推广方案  一、方案的中文含义  方案是计划中内容最为复杂的一种。由于一些具有某种职能的具体...
读书活动线下创意方案 读书活动线下创意方案(精选12篇)  为有力保证活动开展的质量水平,我们需要提前开始活动方案制定工作...
中学跑操比赛活动方案 中学跑操比赛活动方案  为了确定工作或事情顺利开展,预先制定方案是必不可少的,方案是在案前得出的方法...
健康教育活动方案 健康教育活动方案范文(精选11篇)  为确保活动顺利开展,常常要根据具体情况预先制定活动方案,活动方...
Android 9.0系统源码... 前言 上一篇文章简单讲述了系统通知服务NotificationManagerService的启动流程...
【iOS开发-ARC实现-源码... 文章目录前言简单了解Clang 和 llvm关于查看Clang编译的源代码__strong** ...
微分中值定理 极值 目录 极值 费马引理 ​编辑  罗尔定理  拉格朗日中值定理  例题: 例2  ...
商品促销活动方案 关于商品促销活动方案(精选12篇)  为了确保活动得以顺利进行,就需要我们事先制定活动方案,活动方案...
中学教职工全民健身活动方案 中学教职工全民健身活动方案  为了确保事情或工作能无误进行,往往需要预先进行方案制定工作,一份好的方...
RocketMQ的基本概念、系... RocketMQ的基本概念、系统架构、单机安装与启动 文章目录RocketMQ的基本概念、系统架构、...
工会活动工作总结 工会活动工作总结(精选5篇)  经历了一次有意义的活动后,想必你学习了很多新知识,需要好好地写一份活...
国际助残日活动方案 2022国际助残日活动方案(精选13篇)  为了确保活动有序有效开展,时常需要预先制定一份周密的活动...
已解决java.lang.St... 已解决java.lang.String cannot be cast to java.lang.In...
Python+Yolov5跌倒... Python+Yolov5跌倒检测 摔倒检测 人物目标行为 人体特征识别如需安装运行环境或远...
【Python】Python ... 一、Python 背景知识 1、Python 的由来 吉多·范罗苏姆(Guido va...
职业病防治法宣传周活动方案2...   所谓职业病,是指企业、事业单位和个体经济组织(用人单位)的劳动者在职业活动中,因接触粉尘、放射性...
SAP 发出商品业务配置 SAP发出商品业务配置,即: 出具销售发票时结转成本  一、业务背景&#...
社群营销活动策划方案 社群营销活动策划方案(精选5篇)  为了保障活动顺利、圆满进行,通常需要预先制定一份完整的活动方案,...
树莓派搭建边缘网关环境 首先安装 jdk1.8 2 . sudo vim /etc/profile 编辑环境 JAVA_HO...
网上祭英烈活动总结 网上祭英烈活动总结(精选14篇)  在经历了某次活动以后,我们既增长了见识,也锻炼自身,是时候静下心...