首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >瑞芯微RK3506开发板PWM输入捕获驱动调试记录

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

原创
作者头像
Industio_触觉智能
修改2025-09-18 17:24:33
修改2025-09-18 17:24:33
5900
代码可运行
举报
文章被收录于专栏:Linux嵌入式Linux嵌入式
运行总次数:0
代码可运行

本文演示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配置

修改一下代码:

代码语言:javascript
代码运行次数:0
运行
复制
&pwm1_8ch_0 {
	pinctrl-names = "active";
	pinctrl-0 = <&rm_io24_pwm1_ch0>;
	status = "okay";
};
  • Kernel配置
代码语言:javascript
代码运行次数:0
运行
复制
CONFIG_PWM_ROCKCHIP=y

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

配置测试环境

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

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

  • A开发板配置Capture模式

代码如下:

代码语言:javascript
代码运行次数:0
运行
复制
cd /sys/class/pwm/pwmchip0/
echo 0 > export
cd pwm0
  • B开发板配置Continous模式

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

代码语言:javascript
代码运行次数:0
运行
复制
cd /sys/class/pwm/pwmchip0/
echo 0 > export
cd pwm0
echo 20000 > period
echo 10000 > duty_cycle
echo normal > polarity
echo 1 > enable

进行测试

  • A开发板测试代码&结果
代码语言:javascript
代码运行次数:0
运行
复制
root@rk3506-buildroot:/sys/class/pwm/pwmchip0/pwm0# cat capture 
20000 10000

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

代码语言:javascript
代码运行次数:0
运行
复制

/**
* 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波形,会提示采集超时

代码语言:javascript
代码运行次数:0
运行
复制

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 interrupt
cat: read error: Connection timed out
root@rk3506-buildroot:/sys/class/pwm/pwmchip0/pwm0#

如需了解更多,可以关注深圳触觉智能腾讯开发者社区或公众号

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档