全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 嵌入式技术 >

基于RK3576开发板的PWN使用说明

时间:2025-05-07 14:07

人气:

作者:admin

标签: 开发板  rk3576  PWN 

导读:RK3576开发板使用PWN教程及Demo...

1. PWM简介

1.1 EASY EAI Orin-Nano的PWM资源

wKgZO2ga_T6AP42rABBjd-_CCmc624.jpg

1.2 查找PWM节点

rk3576的pwm资源表如下:

wKgZPGga_T-AXIX5AAFwZdD51As337.png

【PWM2 CH3】对应的是pwm2_8ch_3,寄存地址为2ade3000。
【PWM2 CH6】对应的是pwm2_8ch_6,寄存地址为2ade6000。

pwm驱动加载成功后,在文件系统/sys/class/pwm/下会产生pwm节点(pwmchip*),通过下方命令,可得知pwm节点与pwm资源的对应关系。

wKgZO2ga_T-ACeJxAACEDo3HFNM579.png

【PWM2 CH3】对应的节点为【pwmchip1】

【PWM2 CH6】对应的节点为【pwmchip2】

1.3 操作PWM节点

下方以操作【PWM2 CH3】为例:

首先通过命令进入到pwmchip1控制器(/sys/class/pwm/pwmchip1),能看到以下内容:

cd /sys/class/pwm/pwmchip1 ls

wKgZPGga_T-AcggBAABJhz1LlVA767.png

export:用于导出pwm定时器设备

unexport:用于释放pwm定时器设备

向export文件写入0,就会打开pwm定时器,会产生一个pwm0目录。

echo 0 > export

wKgZO2ga_T-AVVbmAABUv8ojYho896.png

进入到pwm0定时器,就能设置它的各种属性,如周期、占空比等。

cd pwm0

wKgZPGga_T-AfbMnAABWdIYs5Q8329.png

echo 1000000 > period ##设置定时器1个周期内的脉冲个数 echo 500000 > duty_cycle ##设置定时器1个周期内低电平的脉冲个数 echo 1 > enable ##使能pwm定时器 echo 0 > enable ##禁能pwm定时器

相反往unexport文件写入0,就会关闭pwm定时器,同时pwm0目录会被删除。

cd .. echo 0 > unexport

wKgZO2ga_UCABIgLAABh9ZE7ZNE190.png

2. 快速上手

2.1 例程源码下载

到【百度网盘】上下载相关的单例程序:

链接:https://pan.baidu.com/s/1RXHMGpmGSEfFy0rb1VkXSg?pwd=1234

提取码: 1234

比如在windows环境中,就把单例程序下载到:此电脑D:BaiduNetdisk (无规定,用户可自主选择),如下图所示。

wKgZPGga_UCASLDpAACzc_7q9Qg802.png

然后把例程【复制粘贴】到nfs挂载目录中。(不清楚目录如何构建的,可以参考《入门指南/开发环境准备/nfs服务搭建与挂载》)

wKgZO2ga_UGAOtEyAAEDtOjRhig957.png

2.2 例程编译&运行

通过adb shell进入开发板环境(不清楚如何通过adb进行调试,可以参考《入门指南/开发板调试方式介绍/adb调试》),执行下方命令定位到demo目录,并且执行编译操作。

wKgZPGga_UGAHHPmAAE8QPvl6L0420.png

编译成功后,会生成1个叫test-pwm可执行程序在Release目录下。

运行例程命令如下所示:

sudo ./Release/test-pwm

执行效果如下所示。

wKgZO2ga_UGARAmjAABpYSMT5NA655.png

通过示波器抓取的波形,如下图所示:

wKgZPGga_UGAWrBfAADQcvdX7u8462.jpg

3. C语言使用案例

PWM的C语言使用案例,代码地址为10_PWM/test-pwm/main.c,供用户编码参考。以下代码展示了pwm控制器的初始化,调整周期,占空比,资源释放的操作流程:

int main(int argc, const char** argv) { int ret; ret = pwm_init("pwmchip1", "0"); printf("export_ret:%dn", ret); ret = pwm_set_attr("pwmchip1", "0", "period", "1000000"); printf("set_period_ret:%dn", ret); ret = pwm_set_attr("pwmchip1", "0", "duty_cycle", "500000"); printf("set_duty_cycle_ret:%dn", ret); ret = pwm_set_enable("pwmchip1", "0", "1"); printf("set_enable:%dn", ret); ret = pwm_release("pwmchip1", "0"); printf("unexport_ret:%dn", ret); //====================================================================== ret = pwm_init("pwmchip2", "0"); printf("export_ret:%dn",ret); ret = pwm_set_attr("pwmchip2", "0", "period", "1000000"); printf("set_period_ret:%dn",ret); ret = pwm_set_attr("pwmchip2", "0", "duty_cycle", "500000"); printf("set_duty_cycle_ret:%dn",ret); ret = pwm_set_enable("pwmchip2", "0", "1"); printf("set_enable:%dn",ret); ret = pwm_release("pwmchip2", "0"); printf("unexport_ret:%dn",ret); //====================================================================== return 0; }

其中pwm_init(),pwm_set_attr(),pwm_set_enable(),pwm_release()是对系统调用的易用化封装。具体实现于10_PWM/test-pwm/main.c

审核编辑 黄宇

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信