1892|7

255

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

【Luckfox幸狐 RV1106 Linux 开发板】3-PWM测试__控制舵机任意旋转 [复制链接]

 
本帖最后由 qiao--- 于 2024-1-29 02:03 编辑

前言:

本次测评的是测评板子的PWM输出功能。有兴趣的可以结合我以前另外一个Linux板卡的测评一起来看,大家应该可以找到些相同之处。

我之前两期Linux板卡的PWM测评:

【STM32MP135F-DK】3-舵机驱动与pwm脉冲宽度调制功能测试 https://bbs.eeworld.com.cn/thread-1265432-1-1.html

【STM32MP135F-DK】4-舵机应用代码编写分享 https://bbs.eeworld.com.cn/thread-1266084-1-1.html

测评Luckfox的PWM功能,我们分为以下几个步骤

  1. 检查系统是否有可用的pwm节点。
  2. 如果有查看对应的引脚,如果没有修改设备树
  3. 编写舵机控制代码
  4. 查看现象和波形图

1.检查系统是否有可用的pwm节点

我们到l/sys/class/pwm目录下看看是否有支持的PWM通道。

 

可以看到是有4个pwm节点是可用的。

但是虽然说有4个节点可用,但是我们并不知道这4个节点中的pwm通道的引脚都是对应对的什么那我们自然也无法用引脚来控制舵机。所以接下来如论如何还是需要看看设备树,因为设备树可以详细的记录这些信息。如果这里没有可用的节点更要看设备树,因为我们需要修改设备树来获取可用的pwm节点。

 

2.查看设备树/修改设备树

我们打开虚拟机,来到我们之前拉取的SDK。设备树文件在我们之前拉取SDK目录下的luckfox-pico/sysdrv/source/kernel/arch/arm/boot/dts下面。我们找到该板子的设备树文件rv1106g-luckfox-pico-pro-max.dts。我们找到记录着PWM信息的节点。

   

可以看到这些都记录着PWM节点信息,但是被打开的只有PWM5、PWM6、PWM10、PWM11。而这些刚好对应着我们系统中的pwmchip5、pwmchip6、pwmchip10、pwmchip11。

我用PWM5(pwmchip5)举例子,比如我想用这个节点,该怎么来找通道的引脚呢。我们看到PWM5节点下面有一个pinctrl-0,这个是描述设备的电气属性,一般是有引脚,引脚的上下拉等等。

 

我们看到它引用了一个节点pwm5m1_pins,这中pinctrl节点一般在pinctrl.dtsi文件下面,我们找到rv1106-pinctrl.dtsi文件下面找到这个节点,如下图:

 

可以看到我们需要用的引脚为PB0。如果我们要把这个pwm通道改为其他的通道,我们直接引用pinctrl.dtsi文件下PWM5的其他节点,比如我用pwm5m0_pins节点。如下图

 

我们光改这里还不行,我们还需要将其他引用这个信息的节点注释掉才行,然后把它编译替换掉原来的设备树。这个过程我之前的测评讲过,大家可以看看我前言中提到的两个文章。

 

找到对应的引脚后我们先简单的测试一下是不是能够正常的输出波形。我们进入系统输入下面的代码看看波形对不对

cd /sys/class/pwm/pwmchip5
echo 0 > export
echo 20000000 > pwm0/period
echo 10000000 > pwm0/duty_cycle
echo 1 > pwm0/enable

 

可以看的出来波形是正确的,说明我们操作没有错。

 

3.编写舵机控制代码

我在之前的测评中有讲过这个控制代码的思路。大家不懂的可以留言,也可以看看以前的测评,这里就把我之前写的截图下来放上。

 

代码如下(我把代码文件放在附件):

int main(int argc,char *argv[]){
    int fd;
    int angle;
    long duty_cycle;
    if(argc != 2){
        printf("use err,please use %s + -90 / -45 / 0 / 45 / 90\n",
        argv[0]);
    }
    if(access(file_path,F_OK)){
        fd = open("/sys/class/pwm/pwmchip5/export",O_WRONLY);
        if(fd <=0){
            perror("open error");
            exit(-1);
            return fd;
        }
        if(1!=write(fd,"0",1)){
            perror("write error");
            close(fd);
            exit(-1);
        }
        close(fd);
    }
    angle = atoi(argv[1]);
    duty_cycle = 2000000.0/180.0*angle+500000;
    char duty_cycle_str [10];
    sprintf(duty_cycle_str,"%d",duty_cycle);
    if(pwm_config("period","20000000"))
        exit(-1);
    if(pwm_config("duty_cycle",duty_cycle_str))
        exit(-1);
    if(pwm_config("enable","1"))
        exit(-1);
    return 0;
}

 

4.查看现象和波形图

我们把写好的代码交叉编译一下拷贝到板子系统上运行看看现象。

IMG_8329

 

总结:通过编写程序可以控制舵机转向0到180度的任意角度,pwm输出的波形很稳定,该板子的pwm脉冲宽度的稳定性较好。

 

附件:

streering.c (1.39 KB, 下载次数: 11)

最新回复

为啥我的舵机一接上,就一直自己转呢,pwm都没有使能   详情 回复 发表于 2024-12-9 10:45
点赞 关注
 
 

回复
举报

698

帖子

0

TA的资源

纯净的硅(高级)

沙发
 

看楼主这分析的DTS挺简单的啊!

为什么我一看DTS就难,就这也找不到,那也找不到啊

点评

重头分析一遍一个芯片的设备树,把每个设备树dtsi文件都看一遍,以后任何芯片的设备树都不怕了  详情 回复 发表于 2024-1-29 18:29
 
 
 

回复

255

帖子

0

TA的资源

纯净的硅(初级)

板凳
 
jobszheng5 发表于 2024-1-29 14:15 看楼主这分析的DTS挺简单的啊! 为什么我一看DTS就难,就这也找不到,那也找不到啊

重头分析一遍一个芯片的设备树,把每个设备树dtsi文件都看一遍,以后任何芯片的设备树都不怕了

 
 
 

回复

698

帖子

0

TA的资源

纯净的硅(高级)

4
 

有道理!

我和楼主貌似只差了一个 沉下心认真学习一遍一个芯片的设备树的过程。但貌似又差了很多

 
 
 

回复

365

帖子

0

TA的资源

版主

5
 

哈哈哈,这个示波器还挺可爱

点评

最近新买的  详情 回复 发表于 2024-2-1 22:28
 
 
 

回复

255

帖子

0

TA的资源

纯净的硅(初级)

6
 
LitchiCheng 发表于 2024-1-30 10:31 哈哈哈,这个示波器还挺可爱

最近新买的

 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

7
 

为啥我的舵机一接上,就一直自己转呢,pwm都没有使能

点评

自己用示波器看下就知道了  详情 回复 发表于 2024-12-11 14:19
 
 
 

回复

255

帖子

0

TA的资源

纯净的硅(初级)

8
 
xfliu11 发表于 2024-12-9 10:45 为啥我的舵机一接上,就一直自己转呢,pwm都没有使能

自己用示波器看下就知道了

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表