1.PWM简介
1.1 开发板PWM资源
1.2 查找PWM节点
rv1126b的pwm资源表如下:
【PWM1 CH0】对应pwm1_4ch_0,注册地址为20700000。
【PWM1 CH1】对应pwm1_4ch_1,注册地址为20710000。
pwm驱动加载成功后,会在文件系统/sys/class/pwm/下生成一个pwm节点(pwmchip*)。通过以下命令可以了解pwm节点与pwm资源的对应关系。
[PWM1 CH0]对应的节点为[pwmchip1]
[PWM1 CH1]对应的节点为[pwmchip2]
1.3 操作PWM节点
下面以[PWM1 CH0]的操作为例:
首先通过命令进入pwmchip1控制器(/sys/class/pwm/pwmchip1),可以看到如下内容:
cd /sys/class/pwm/pwmchip1 ls
export:用于导出pwm定时器设备
unexport:用于释放pwm定时器设备
向导出文件写入0 将打开pwm 定时器并生成pwm0 目录。
回显0 导出
进入pwm0定时器,可以设置其各种属性,如周期、占空比等。
脉宽调制0
echo 1000000 period ##设置定时器一个周期的脉冲数echo 500000 duty_cycle ##设置定时器一个周期的低电平脉冲数echo 1 enable ##启用pwm定时器echo 0 enable ##禁用pwm定时器
相反,向unexport 文件写入0 将关闭pwm 定时器,并且pwm0 目录将被删除。
cd . echo 0 取消导出
2. 快速上手
2.1 开发环境准备
如果您是初次阅读此文档,请阅读《入门指南/开发环境准备/Easy-Eai编译环境准备与更新》并按照其相关操作进行编译环境的部署。
在PC上的Ubuntu系统中执行run脚本,进入EASY-EAI编译环境,如下图。
cd ~/develop_environment ./run.sh
2.2 源码下载以及例程编译
首先在虚拟机后台终端中执行以下命令创建外设单例源码管理目录:
首先从【百度云盘】下载相关单例程序:
链接:https://pan.baidu.com/s/1Br608Hiff2Xs65PzWO_qWQ?pwd=1234
提取码:1234
例如,将单例程序下载到:本电脑\D:\百度网盘(无规定,用户可自主选择),如下图。
然后将下载的单实例复制到虚拟机的文件系统中。流程如下图所示。
最后进入相应的例程目录进行编译操作。具体命令如下:
cd EASY-EAI-Nano-TB/demo/10_PWM ./build.sh
注意:
* 由于板子上部署了依赖库,交叉编译过程中必须保持挂载/mnt。
编译成功后,会在Release目录下生成一个名为test-pwm的可执行程序,并自动部署到开发板的/userdata/目录下。
2.3 例程运行
通过串口调试或者ssh调试,进入板子后台,找到例程部署的位置,如下图:
cd /用户数据
执行以下命令运行PWM输出演示,如下所示。
sudo ./测试pwm
执行效果如下。
通过示波器捕获的波形如下图:
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:%d\n', ret); ret=pwm_set_attr('pwmchip1', '0', '周期', '1000000'); printf('set_period_ret:%d\n', ret); ret=pwm_set_attr('pwmchip1', '0', 'duty_cycle', '500000'); printf('set_duty_cycle_ret:%d\n', ret); ret=pwm_set_enable('pwmchip1', '0', '1'); printf('set_enable:%d\n', ret); ret=pwm_release('pwmchip1', '0'); printf('unexport_ret:%d\n', ret); //========================================================================ret=pwm_init('pwmchip2', '0'); printf('export_ret:%d\n',ret); ret=pwm_set_attr('pwmchip2', '0', '周期', '1000000'); printf('set_period_ret:%d\n',ret); ret=pwm_set_attr('pwmchip2', '0', 'duty_cycle', '500000'); printf('set_duty_cycle_ret:%d\n',ret); ret=pwm_set_enable('pwmchip2', '0', '1'); printf('set_enable:%d\n',ret); ret=pwm_release('pwmchip2', '0'); printf('unexport_ret:%d\n',ret); //==========================================================================返回0; }
其中,pwm_init()、pwm_set_attr()、pwm_set_enable()、pwm_release()是对系统调用的简单易用的封装。具体实现在10_PWM/test-pwm/main.c中
标题:瑞芯微(EASY EAI)RV1126B PWM使用
链接:https://yqqlyw.com/news/sypc/67829.html
版权:文章转载自网络,如有侵权,请联系删除!