0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

RK平台PWM开发总结

jf_44130326 来源:Linux1024 2026-02-04 17:46 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

一、PWM基础原理与RK平台特性

(一)PWM核心原理

脉宽调制(PWMPulse Width Modulation)通过微处理器数字输出控制模拟电路,核心是调整输出波形的周期信号重复的时间间隔)和占空比(一个周期内高电平持续时间占比),实现对电压、亮度等物理量的精准调控,广泛应用于测量、通信、功率控制等领域。

(二)RK平台PWM关键特性

1.支持模式:共3种模式,不同模式用途差异显著

Continuous mode(连续模式):持续输出固定周期和占空比的波形,是最常用模式,主要用于背光控制、电机调速等场景

One-shot mode(单触发模式):仅输出一个完整波形后停止,适用于单次触发的控制场景(如单次脉冲信号触发)

Capture mode(捕获模式):用于捕获外部输入波形的高低电平宽度,典型应用是红外遥控解码(配合中断实现键值识别)

1.硬件配置:内置4通道,每个通道对应独立控制单元,支持多设备同时使用PWM功能

2.内核兼容性:覆盖Linux 3.104.4及以上(含4.19)内核版本,不同版本在驱动接口DTS配置上存在差异

二、RK平台PWM开发操作流程

(一)驱动相关配置

1.驱动文件路径与差异

统一路径:drivers/pwm/pwm-rockchip.c(所有内核版本通用)

wKgZO2kalr2AWbqsAAIO3PkO3mc787.png

内核版本差异:

Linux 3.10:使用原始接口(pwm_config()pwm_enable()pwm_disable()),仅支持Continuous mode

Linux 4.4及以上(含4.19:将参数配置与使能/禁用封装为pwm_apply_state()函数,支持一次修改多个参数(周期、占空比、极性),效率更高,同样仅支持Continuous mode

1.DTS节点配置:需根据内核版本调整参数数量,与“pwm-cells”值对应

wKgZO2kalr2AO7gpAAD5bCgmOyQ591.png

backlight: backlight {  compatible ="pwm-backlight";  pwms = <&pwm0 0250000>;  brightness-levels = <01...255>;// 256级亮度,0~255对应0%~100%占空比 default-brightness-level = <200>;// 默认亮度(第200级)  enable-gpios = <&gpio1 13GPIO_ACTIVE_HIGH>;// 背光使能引脚};

参数说明

参数1index(通道索引),默认0RK平台每个PWM芯片仅1个通道)

参数2:周期(单位:ns),如25000ns对应40KHz频率

参数3:极性(可选),PWM_POLARITY_INVERTED表示负极性,仅“pwm-cells=3”时需配置

版本差异示例

Linux 3.10pwm-cells=2):pwms = <&pwm 0 25000>;

Linux 4.4/4.19pwm-cells=3):pwms = <&pwm 0 25000 PWM_POLARITY_INVERTED>;

背光场景扩展配置:需添加亮度等级、默认亮度、使能引脚等参数,示例如下

(二)PWM工作流程(以Linux 4.4为例,Continuous mode

1.状态应用(Apply State:触发PWM参数配置流程,先判断是否需要加锁

需加锁:先执行Lock操作,避免配置过程中参数被篡改

无需加锁:直接进入参数配置

1.参数配置

必选:配置周期(Period)和占空比(Duty Cycle

可选:若支持极性配置(pwm-cells=3),设置极性(Normal/Inverted

1.锁操作:若之前加锁,配置完成后执行Unlock

2.使能/禁用控制

需使能(Enable PWM=yes):执行Enable操作,PWM开始输出波形

需禁用(Enable PWM=no):执行Disable操作,PWM停止输出

1.状态同步(Sync State:确保硬件状态与配置参数一致,完成流程

(三)用户空间使用(通过/sys/class/pwm接口)

1.导出PWM通道:进入/sys/class/pwm/pwmchip0/,执行echo 0 > export,生成pwm0目录(关闭通道执行echo 0 > unexport

2.配置参数:进入pwm0目录,通过文件写入配置

周期:echo 10000 > period10000ns=10μs,对应100KHz频率)

占空比:echo 5000 > duty_cycle5000ns,占空比50%

极性:echo normal > polaritynormal =正极性,inversed =负极性)

1.使能输出echo 1 > enable(禁用执行echo 0 > enable

三、RK平台PWM主要用途

(一)背光控制(最典型场景)

基于Continuous mode,通过调整PWM占空比控制背光亮度:

正极性:亮度等级0~255对应占空比0%~100%(等级越高越亮)

负极性:亮度等级与占空比反向(等级越高越暗)

应用:显示屏背光调节,如手机、平板、电视等设备

(二)红外遥控解码(基于Capture mode

1.原理PWM捕获红外接收头输出的高低电平宽度,触发中断后CPU读取寄存器值,根据NEC编码协议(RK平台仅支持NEC)解码用户码和键值码

2.操作流程

&remotectl {  handle_cpu_id = <2>;// 中断处理CPU核心(4核0~3,双核0~1)  ir_key1{    rockchip,usercode = <0x4040>;    rockchip,key_table = <0xf4KEY_UP>, <0xf1KEY_DOWN>;// 键值与功能映射  };};

打开调试开关:

echo1 > sys/module/rockchip_pwm_remotectl/parameters/code_print

记录键值:按下遥控器按键,通过打印获取usercode(如0x4040)和键值(如0xe9

添加键值到DTS:在&remotectl {}节点中配置usercodekey_table,示例

(三)其他用途

电机调速:通过调整PWM占空比控制电机转速(如风扇、小功率电机)

电压调节(PWM Regulator):配合电源管理模块,输出不同占空比的PWM信号实现电压动态调整

四、常见问题与解决方案

(一)U-BootKernel衔接问题

1.问题现象U-Boot中使用PWM调压后,进入Kernel阶段PWM失效(如电压不足死机)

2.原因

Kernel未同步U-Boot阶段的PWM硬件状态(如clock count

两者时钟源频率、极性、周期配置不一致

1.解决方案

更新驱动文件:drivers/pwm/pwm-rockchip.c

统一配置:U-BootKernelGPLL时钟频率(PWM时钟挂在GPLL下)、极性、周期保持一致;U-Boot频率通过开机log查看,Kernel频率通过cat /sys/kernel/debug/clock/clock_tree | grep gpll查看

(二)PWM Regulator引脚上下拉配置问题

1.问题现象:系统重启(reboot)后,PWM Regulator默认电压变化

2.原因:重启时GRF寄存器不复位,但PWM控制器复位,引脚上下拉配置为“none”导致状态异常

3.解决方案

// dtsi中定义pwm2_pin_pull_down: pwm2-pin-pull-down {  rockchip,pins = <119RK_FUNC_1 &pcfg_pull_down>;};// dts中覆盖&pwm2 {  status ="okay";  pinctrl-names ="active";  pinctrl-0= <&pwm2_pin_pull_down>;};

确认硬件默认上下拉:通过原理图查看引脚标识(“d”=下拉,“u”=上拉,如RK3399 PWM2引脚GPIO1_C3/PWM2_d为默认下拉)

DTS配置引脚上下拉:在dtsi中定义pinctrldts中覆盖配置,示例

(三)PWM波形示波器无法检测

1.第一步:检查PWM是否工作(通过Counter Register寄存器)

寄存器值变化:PWM工作正常,问题在引脚

可能原因:iomux配置错误(引脚功能未切换为PWM)、io-domain配置错误、外部硬件干扰

解决方案:重新配置iomuxio-domain,排查硬件接线或干扰源

寄存器值无变化:PWM工作异常,问题在核心配置

可能原因:时钟未使能、PWM未使能、duty>period(占空比配置无效)、RK3368未配置GRF_SOC_CON15寄存器bit12=1

解决方案:使能时钟和PWM,修正dutyperiod关系,RK3368额外配置GRF寄存器

五、思维导图总结

wKgZO2kalr2AdsqLAAIfT8nNExI298.png  

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • PWM
    PWM
    +关注

    关注

    116

    文章

    5894

    浏览量

    226597
  • 微处理器
    +关注

    关注

    11

    文章

    2440

    浏览量

    86149
  • 脉宽调制
    +关注

    关注

    3

    文章

    238

    浏览量

    39489
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    RK3588开发板(armsom-w3)之PWM实操

    RK3588开发板(armsom-w3) 之 PWM实操
    的头像 发表于 06-10 10:38 4245次阅读
    <b class='flag-5'>RK</b>3588<b class='flag-5'>开发</b>板(armsom-w3)之<b class='flag-5'>PWM</b>实操

    基于小凌派RK2206开发板:OpenHarmony如何使用IoT接口控制PWM外设

    1、案例简介本案例是在小凌派-RK2206开发板上使用IoT库PWM接口,进行PWM编程开发。例程将创建一个任务,每隔5秒将
    的头像 发表于 04-09 08:59 2992次阅读
    基于小凌派<b class='flag-5'>RK</b>2206<b class='flag-5'>开发</b>板:OpenHarmony如何使用IoT接口控制<b class='flag-5'>PWM</b>外设

    【瑞芯微RK1808计算棒试用体验】RK3399 平台使用RK1808 加速棒总结

    RK3399 平台使用RK1808 加速棒总结使用步骤1)将RK3399 与RK1808 通过u
    发表于 10-25 09:43

    ROC-RK3308-CC开发实例总结

    ROC-RK3308-CC开发实例总结--GPRS模块调试
    发表于 01-15 07:27

    基于RK3399 PWM驱动开发的过程是怎样的?

    基于RK3399 PWM驱动开发的过程是怎样的?
    发表于 03-07 07:16

    记录总结一下基于RK3128平台的LCD驱动调试步骤

    1、rk3128 lcd驱动调试记录  最近刚调试了基于rk3128平台的lcd驱动,顺便记录总结一下,有不足之处,望各位不吝赐教!  关于framebuffer(帧缓冲设备)的架构这
    发表于 09-23 16:28

    Firefly-RK3399--PWM介绍

    Firefly-RK3399 开发板上有 4 路 PWM 输出,分别为 PWM0 ~ PWM3,4路 P
    的头像 发表于 11-22 10:08 6436次阅读
    Firefly-<b class='flag-5'>RK3399--PWM</b>介绍

    Firefly-RK3288PWM输出介绍

    Firefly-RK3288 开发板上有 4 路 PWM 输出,分别为 PWM0 ~ PWM3, 本章主要描述如何配置
    的头像 发表于 11-25 10:31 3072次阅读

    Firefly-RK3128主板PWM输出介绍

    Firefly-RK3128 开发板上有 4 路 PWM 输出,分别为 PWM0 ~ PWM3
    的头像 发表于 11-28 16:56 3513次阅读
    Firefly-<b class='flag-5'>RK</b>3128主板<b class='flag-5'>PWM</b>输出介绍

    fireflyFace-RK3399主板PWM输出介绍

    Face-RK3399开发板上引出有 2 路 PWM 输出,
    的头像 发表于 12-04 09:35 5300次阅读

    迅为5G工业互联网方案RK3399开发平台

    迅为5G工业互联网方案RK3399开发平台
    的头像 发表于 03-11 15:21 1500次阅读
    迅为5G工业互联网方案<b class='flag-5'>RK</b>3399<b class='flag-5'>开发</b><b class='flag-5'>平台</b>

    OpenHarmony:如何使用HDF平台驱动控制PWM

    1、程序介绍本程序是基于OpenHarmony标准系统编写的平台驱动案例:PWM目前已在凌蒙派-RK3568开发板跑通。
    的头像 发表于 09-14 08:24 2115次阅读
    OpenHarmony:如何使用HDF<b class='flag-5'>平台</b>驱动控制<b class='flag-5'>PWM</b>

    rk3566-pwm内核驱动

    rk3566-pwm内核驱动
    发表于 01-05 09:18 0次下载

    迅为RK3576开发板高算力低成本工业级核心板卡开发平台

    迅为RK3576开发板高算力低成本工业级核心板卡开发平台
    的头像 发表于 06-09 15:13 2090次阅读
    迅为<b class='flag-5'>RK</b>3576<b class='flag-5'>开发</b>板高算力低成本工业级核心板卡<b class='flag-5'>开发</b><b class='flag-5'>平台</b>

    RK平台Linux IOMMU开发:从原理到实战

    显示(VOP)、编解码(VPU/HEVC)等场景。今天就从原理、驱动、实战、问题排查、Linux 内存管理支撑五个维度,带大家快速上手 RK 平台 IOMMU 开发
    的头像 发表于 02-04 16:24 2797次阅读
    <b class='flag-5'>RK</b><b class='flag-5'>平台</b>Linux IOMMU<b class='flag-5'>开发</b>:从原理到实战