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 > export
cd pwm0
B开发板配置Continous模式
周期为20us,占空比10us,代码如下:
cd /sys/class/pwm/pwmchip0/
echo 0 > export
cd pwm0
echo 20000 > period
echo 10000 > duty_cycle
echo normal > polarity
echo 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 interrupt
cat: read error: Connection timed out
root@rk3506-buildroot:/sys/class/pwm/pwmchip0/pwm0#
#RK3506 #RK3506J #瑞芯微 #Linux #PWM