当前位置: 首页 > news >正文

RK3506开发板PWM输入捕获驱动调试记录

本文演示PWM输入信号采集,基于触觉智能RK3506开发板,配置上为3核Cortex-A7+Cortex-M0多核异构处理器,支持2路CAN FD,5路串口,RGB、MIPI、音频、USB2.0 OTG等各类接口;板载双百兆网口+4G+星闪SLE+WiFi6+BLE5.2。

PWM信号简介

PWM全称为脉宽调制Pulse Width Modulation,是利用微处理器的数字输出,来对模拟电路进行控制的一种非常有效的技术,通过对一系列脉冲的宽度进行调制,来等效的获得所需要的波形(含形状和幅值),即通过改变导通时间占总时间的比例,也就是占空比,达到调整电压和频率的目的。

广泛应用在从测量、通信到功率控制与变换的许多领域中,用于调压调频,最突出的是针对各种类型的电机应用。

PWM输入信号采集说明

瑞芯微默认实现了状态获取和申请两个函数,并没有实现输入捕获相关的函数,要想在RK3506上实现PWM的输入捕获,则需通过DTS和内核进行相应配置:

  • 准备工作

根据引脚说明,这里我们选择配置PWM1,避免与屏幕背光控制(PWM0)冲突:

  • DTS配置

修改代码:

&pwm1_8ch_0 {	pinctrl-names = "active";	pinctrl-0 = <&rm_io24_pwm1_ch0>;	status = "okay";};

  • Kernel配置

CONFIG_PWM_ROCKCHIP=y

完成配置后对源码进行编译,并烧录至开发板。

配置测试环境

使用2块触觉智能RK3506开发板搭建环境,以下简称A和B开发板(2个板准备工作一致),A开发板进行PWM信号捕获,B开发板发出PWM信号。

以正常输入模式输出,将波形发生接到的PWM1引脚进行测试:

  • A开发板配置Capture模式

代码如下:​​​​​​​

cd /sys/class/pwm/pwmchip0/echo 0 > exportcd pwm0

  • B开发板配置Continous模式

周期为20us,占空比10us,代码如下:​​​​​​​

cd /sys/class/pwm/pwmchip0/echo 0 > exportcd pwm0echo 20000 > periodecho 10000 > duty_cycleecho normal > polarityecho 1 > enable

进行测试

  • A开发板测试代码&结果

root@rk3506-buildroot:/sys/class/pwm/pwmchip0/pwm0# cat capture 20000 10000

获取到的值分别是PWM周期 和占空比 (period,duty_cycle) 单位是ns。可以看到结果为20000ns和10000ns,正好对应配置的20us和10us数据,表示测试成功。

​​​​​​​

/*** struct pwm_capture - PWM capture data* @period: period of the PWM signal (in nanoseconds)* @duty_cycle: duty cycle of the PWM signal (in nanoseconds)*/struct pwm_capture {    unsigned int period;    unsigned int duty_cycle;};
  • FAQ

若配置Capture模式,没有采集到pwm波形,会提示采集超时​​​​​​​

root@rk3506-buildroot:/# cd /sys/class/pwm/pwmchip0/root@rk3506-buildroot:/sys/class/pwm/pwmchip0# echo 0 > export root@rk3506-buildroot:/sys/class/pwm/pwmchip0# cd pwm0/root@rk3506-buildroot:/sys/class/pwm/pwmchip0/pwm0# root@rk3506-buildroot:/sys/class/pwm/pwmchip0/pwm0# root@rk3506-buildroot:/sys/class/pwm/pwmchip0/pwm0# cat capture [  961.782711] rockchip-pwm ff170000.pwm: Failed to wait for LPR/HPR interrupt[  962.783876] rockchip-pwm ff170000.pwm: Failed to wait for LPR/HPR interruptcat: read error: Connection timed outroot@rk3506-buildroot:/sys/class/pwm/pwmchip0/pwm0#​​​​​​​

  #RK3506 #RK3506J #瑞芯微 #Linux #PWM

http://www.dtcms.com/a/330718.html

相关文章:

  • 网络通信全过程:sk_buff的关键作用
  • 算法基础 第3章 数据结构
  • DBSCAN 算法的原理
  • 使用DevEco Studio运行鸿蒙项目,屏蔽控制台无关日志,过滤需要的日志
  • 鸿蒙NEXT如何通过userAgent区分手机端和pc端
  • uni.setStorage 详解
  • MySQL客户端命令
  • pygame的帧处理中,涉及键盘的有`pg.event.get()`与`pg.key.get_pressed()` ,二者有什么区别与联系?
  • LT3045EDD#TRPBF ADI亚德诺 超低噪声LDO稳压器 电子元器件IC
  • Trae x Figma MCP一键将设计稿转化为精美网页
  • Docker build创建镜像命令入门教程
  • Redis (REmote DIctionary Server) 高性能数据库
  • 【cmake】编译cpp文件,安装MinGW
  • 《Leetcode》-面试题-hot100-动态规划
  • 《嵌入式 C 语言编码规范个人笔记》参考华为C语言规范标准
  • 标贝科技「十万音色·自然语音数据集」 重构AI语音训练基础设施
  • 机器视觉之图像处理篇
  • OpenCV Python——报错AttributeError: module ‘cv2‘ has no attribute ‘bgsegm‘,解决办法
  • 63w+有小程序注册的企业汇总数据(2024.2)
  • 阿里云TranslateGeneral - 机器翻译SDK-自己封账单文件版本—仙盟创梦IDE
  • CSS中实现一个三角形
  • 哪些对会交由SpringBoot容器管理?
  • Unity中的神经网络遗传算法实战
  • 【数据可视化-89】基孔肯雅热病例数据分析与可视化:Python + pyecharts洞察疫情动态
  • UE小:编辑器模式下「窗口/鼠标不在焦点」时仍保持高帧率
  • Flask中ORM的使用
  • 论郑和下西洋元素融入课件编辑器的意义与影响​
  • docker使用指定的MAC地址启动podman使用指定的MAC地址启动
  • 同创永益 IStorM CNBR云原生业务韧性管理平台 v3.3.0重磅发布:告别备份烦恼,云原生数据保护再升级!
  • 深度学习——03 神经网络(4)-正则化方法价格分类案例