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

RK3588平台开发系列讲解(PWM开发篇)

目录

前⾔

驱动文件

DTS 节点配置

PWM 流程

PWM 使⽤

常⻅问题

PWM 在 U-Boot 与 kernel 之间的衔接问题

PWM Regulator 时 PWM pin 脚上下拉配置问题


前⾔

脉宽调制( PWM , Pulse Width Modulation )功能在嵌⼊式系统中是⾮常常⻅的,它是利⽤微处理器的数 字输出来对模拟电路进⾏控制的⼀种⾮常有效的技术,⼴泛应⽤在从测量、通信到功率控制与变换的许 多领域中。 Rockchip PWM ⽀持三种模式 : Continuous mode 、 One-shot mode 和 Capture mode, 4 通道 built-in

驱动文件

驱动⽂件所在位置: drivers/pwm/pwm-rockchip.c

3.10 和 4.4 及以上版本内核下驱动⽂件名字是同⼀个, pwm-rockchip.c 可以⽀持 Continuous mode 和 One shot mode ,但是⾥⾯的代码有些差别。 4.4 及以上内核版本将 pwm_config() , pwm_enable() 和 pwm_disable() 包装在 pwm_apply_state() 函数⾥⾯,这样做的好处是可以⼀次改变⼏个 PWM 参数, 3.10 内核的 PWM 驱动还是原来的接口。

DTS 节点配置

内核 3.10 版本和 4.4 及以上版本的 DTS 节点,略有不

bl: backlight {pwms = <&pwm 0 25000 PWM_POLARITY_INVERTED>;pwm-names = "backlight";};

同的地⽅在配置的参数个数上,内核 3.10 版本配 置的参数数⽬为 2 ,内核 4.4 及以上版本配置的参数数⽬为 2 或者 3 ;参数数⽬与 PWM 节点中的 “pwm cells” 对应,如果 “pwm-cells” 配置是 3 ,则需要配置可选的极性;如果是 2 ,就不需要配置极性。 DTS 配置参考⽂档 Documentation/devicetree/bindings/pwm/pwm.txt ,主要⼏个参数说明下 : 参数 1 ,表⽰ index (per-chip index of the PWM to request) ,⼀般是 0 ,因为我们 Rockchip PWM 每个 chip 只有⼀个。 参数 2 ,表⽰ PWM 输出波形的时间周期,单位是 ns ;例如下⾯配置的 25000 就是表⽰想要得到的 PWM 输出周期是 40K 赫兹。 参数 3 ,表⽰极性,为可选参数;下⾯例⼦中的配置为负极性。

PWM 流程

PWM 驱动流程在不同内核版本上⼤致是⼀样的,

PWM 使⽤

对于 PWM 的 kernel 和 user space 使⽤说明在 Documentation/pwm.txt 有说明,下⾯重点提下 user space 部 分。就像 pwm.txt ⽂档⾥⾯说的, PWM 提供了⽤⼾层的接口,在 /sys/class/pwm/ 节点下⾯, PWM 驱动 加载成功后,会在 /sys/class/pwm/ ⽬录下产⽣ pwmchip0 ⽬录;向 export ⽂件写⼊ 0 ,就是打开 pwm 定 时器 0 ,会产⽣⼀个 pwm0 ⽬录,相反的往 unexport 写⼊ 0 就会关闭 pwm 定时器了,同时 pwm0 ⽬录会 被删除 , 该⽬录下有以下⼏个⽂件:

enable :写⼊ 1 使能 pwm ,写⼊ 0 关闭 pwm ;

polarity :有 normal 或 inversed 两个参数选择,表⽰输出引脚电平翻转;

duty_cycle :在 normal 模式下,表⽰⼀个周期内⾼电平持续的时间(单位:纳秒),在 reversed 模 式下,表⽰⼀个周期中低电平持续的时间(单位:纳秒 ) ;

period :表⽰ pwm 波的周期 ( 单位:纳秒 ) ;

oneshot_count :表⽰ one-shot 模式的 pwm 波形个数,数值不能超过 255 ;

常⻅问题

PWM 在 U-Boot 与 kernel 之间的衔接问题

U-Boot 如果有⽤ PWM 调压功能,到了 kernel 阶段,此时 PWM 仍然是⼯作状态, 需要根据当前 PWM 的硬件状态,将 PWM clock count 调整与当前 PWM 状态⼀致。否则可能会出现 clock 架构发 现⽆⼈使⽤的 PWM clock ,将其关闭后,导致 PWM ⽆法⼯作,出现类似 PWM 调压电压不够导致 的死机问题等。以上的补丁已经修正,确保 PWM 驱动 : drivers/pwm/pwm-rockchip.c ,更新到下⾯的 提交点 : 1. kernel-4.4: commit e6f2796ef5b660a70102c02d6c15f65ff8701d76 2. kernel-3.10: commit 5a3d9257d5e379391eb02457ccd70f28a8fb188b U-Boot 与 kernel PWM 所⽤的时钟源的频率不同,也会导致中间出现切换 , 可能会导致 PWM 占空⽐ 发⽣变化,出现类似 PWM 调压电压不够导致的死机问题等,所以要保持 U-Boot 与 kernel 的时钟 源或时钟源的频率⼀致。确保 U-Boot 的 GPLL 频率与 kernel 保持⼀致,因为 PWM 的时钟现在都 是挂在 GPLL 下⾯; U-Boot 的 GPLL 频率通过 U-Boot 的开机打印 log 可以看到, kernel 的频率通过 查看 clock tree, cat /sys/kernel/debug/clock/clock_tree | grep gpll 。 U-Boot 与 kernel 所配置的极性和周期不⼀致,也会导致中间出现切换,可能会导致 PWM 占空⽐发 ⽣变化,出现类似 PWM 调压电压不够导致的死机问题等,所以要保持 U-Boot 与 kernel 的极性和 周期⼀致。

PWM Regulator 时 PWM pin 脚上下拉配置问题

由于在做 reboot 的时候,很多情况是不复位 GRF ⾥⾯的寄存器,而 PWM 控制器会发⽣复位,这就会在 reboot 起来后改变 PWM Regulator 的默认电压,所以要在 kernel 中配置 PWM pin 脚上下拉与默认的上下 拉⼀致,不能配置为 none 。该问题只针对 PWM 作为调压时才需要修改,作为其他功能可以不需要关 注。 通过硬件原理图确认该 PWM pin 的默认上下拉。例如 RK3399 挖掘机板⼦ PWM2 作为调压功能, 在原理图上找到 PWM2 pin 脚 : GPIO1_C3/PWM2_d ,其中的 "d" 表⽰ down 为默认下拉;如果 是 "u" 表⽰ up 默认上拉。

相关文章:

RK3588平台开发系列讲解(PWM开发篇)

目录 前⾔ 驱动文件 DTS 节点配置 PWM 流程 PWM 使⽤ 常⻅问题 PWM 在 U-Boot 与 kernel 之间的衔接问题 PWM Regulator 时 PWM pin 脚上下拉配置问题 前⾔ 脉宽调制&#xff08; PWM &#xff0c; Pulse Width Modulation &#xff09;功能在嵌⼊式系统中是⾮常常⻅的…...

宝塔面板操作一个服务器域名部署多个网站

此处记录IP一样&#xff0c;端口不一样的操作方式&#xff1a; 宝塔面板操作&#xff1a; 1、创建第一个网站&#xff1a; 网站名用IP地址&#xff0c;默认80端口。 创建好后&#xff0c;直接IP访问就可以了。看到自带的默认首页 2、接下来部署第二个网站&#xff1a; 仍然是…...

surfer绘制等值线图

surfer介绍 Surfer软件&#xff0c;是美国Golden Software公司编制的一款以画三维图的软件。该软件具有强大的插值功能和绘制图件能力&#xff0c;可用来处理XYZ数据&#xff0c;是地质工作者常用的专业成图软件&#xff08;来源于百度百科&#xff09;。 surfer可以用来绘制…...

免费开源的 AI 绘图工具 ImgPilot

免费开源的 AI 绘图工具 ImgPilot 分类 开源分享 项目名: ImgPilot -- 通过提示词及涂鸦生成图片 Github 开源地址&#xff1a; GitHub - leptonai/imgpilot: Turn the draft into amazing artwork with the power of Real-Time Latent Consistency Model 在线地址&#xff…...

Java系统架构设计:构建稳定高效的软件基石

在当今数字化时代&#xff0c;软件系统的稳定性、可扩展性和性能至关重要。Java作为一种广泛应用的编程语言&#xff0c;其系统架构设计对于软件的成功实施具有决定性的影响。本文将探讨Java系统架构设计的重要性以及设计过程中的关键要素。 首先&#xff0c;Java系统架构设计…...

【IntermLM2】学习笔记

微调方式 在大模型的下游应用中&#xff0c;可以有两种微调方式 增量续训 即无监督的方式&#xff0c;让模型学习一些新知识&#xff0c;比如某些垂直领域的新知识 使用的数据有&#xff1a;书籍&#xff0c;文章&#xff0c;代码等有监督微调 为了让模型学会理解指令进行对话…...

【二叉树】Leetcode 230. 二叉搜索树中第K小的元素【中等】

二叉搜索树中第K小的元素 给定一个二叉搜索树的根节点 root &#xff0c;和一个整数 k &#xff0c;请你设计一个算法查找其中第 k 个最小元素&#xff08;从 1 开始计数&#xff09;。 示例1&#xff1a; 输入&#xff1a;root [3,1,4,null,2], k 1 输出&#xff1a;1 解…...

JS中常用的几种事件

在js中分为多种事件&#xff0c;比如点击事件&#xff0c;焦点事件&#xff0c;加载事件&#xff0c;鼠标事件等等... ... 点击事件 onclick点击事件&#xff0c;ondblclick双击事件 焦点事件 onblur元素失去焦点&#xff0c;onfocus元素获取焦点 加载事件 onload一个页面…...

Android WebView的使用与后退键处理

目录 前言首先&#xff0c;我们需要在布局文件中添加webView组件在Activity中获取webView实例&#xff0c;并加载网页内容 前言 webView是Android中常用的组件之一&#xff0c;用于展示网页内容。它可以加载HTML文件、URL链接等网页内容&#xff0c;并提供交互功能。在使用webV…...

【备忘录】Docker 2375远程端口安全漏洞解决

最近为了项目需要&#xff0c;把docker 的远程端口2375 给开放了。不出意外出意外了。没多久&#xff0c;网站报流量告警&#xff0c;第一反应就是开放2375这个端口问题导致&#xff0c;毫不迟疑直接切换服务器。关闭该台服务器的docker服务&#xff0c;并逐步清理掉挖矿进程&a…...

343. 整数拆分(力扣LeetCode)

文章目录 343. 整数拆分题目描述动态规划 343. 整数拆分 题目描述 给定一个正整数 n &#xff0c;将其拆分为 k 个 正整数 的和&#xff08; k > 2 &#xff09;&#xff0c;并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 示例 1: 输入: n 2 输出: 1 解释:…...

Spring面试题系列-3

Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而&#xff0c;Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言&#xff0c;绝大部分Java应用都可以从Spring中受益。 Spring的属性…...

【比特币】比特币的奥秘、禁令的深层逻辑与风云变幻

导语&#xff1a; 比特币(Bitcoin)&#xff0c;这个充满神秘色彩的数字货币&#xff0c;自诞生以来便成为各界瞩目的焦点。它背后所蕴含的Mining机制、禁令背后的深层逻辑以及市场的风云变幻&#xff0c;都让人欲罢不能。今天&#xff0c;我们将深入挖掘比特币的每一个角落&…...

【情感分析概述】

文章目录 一、情感极性分析概述1. 定义2. 情感极性的类别3. 应用场景 二、情感极性分析的技术方法1. 基于规则的方法a. 关键词打分b. 情感词典的使用 2. 基于机器学习的方法a. 监督学习方法b. 深度学习方法 三、Python进行情感极性分析 一、情感极性分析概述 情感极性分析&…...

【御控物联】JavaScript JSON结构转换(12):对象To数组——键值互换属性重组

文章目录 一、JSON结构转换是什么&#xff1f;二、核心构件之转换映射三、案例之《JSON对象 To JSON数组》四、代码实现五、在线转换工具六、技术资料 一、JSON结构转换是什么&#xff1f; JSON结构转换指的是将一个JSON对象或JSON数组按照一定规则进行重组、筛选、映射或转换…...

5.6 物联网RK3399项目开发实录-Android开发之U-Boot 编译及使用(wulianjishu666)

物联网入门到项目实干案例下载&#xff1a; https://pan.baidu.com/s/1fHRxXBqRKTPvXKFOQsP80Q?pwdh5ug --------------------------------------------------------------------------------------------------------------------------------- U-Boot 使用 前言 RK U-B…...

Python版【植物大战僵尸 +源码】

文章目录 写在前面&#xff1a;功能实现环境要求怎么玩个性化定义项目演示&#xff1a;源码分享Map地图:Menubar.py主菜单 主函数&#xff1a;项目开源地址 写在前面&#xff1a; 今天给大家推荐一个Gtihub开源项目&#xff1a;PythonPlantsVsZombies&#xff0c;翻译成中就是…...

【明道云】如何让用户可以新增但不能修改记录

【背景】 遇到一个需求场景&#xff0c;用户希望新增数据后锁住数据不让更改。 【分析】 在设计表单时直接将字段设置只读是不行的。字段设置只读将会直接让界面上此字段的前端组件不可编辑。包括新增时也无法填入。显然是不符合需求的。 需要既能新增&#xff0c;新增后又不…...

GPT-1原理-Improving Language Understanding by Generative Pre-Training

文章目录 前言提出动机模型猜想模型提出模型结构模型参数 模型预训练训练的目标训练方式训练参数预训练数据集预训练疑问点 模型微调模型输入范式模型训练微调建议微调疑问点 实验结果分析GPT-1缺陷 前言 首先想感慨一波 这是当下最流行的大模型的的开篇之作&#xff0c;由Op…...

web3.0入门及学习路径

Web3是指下一代互联网的演进形式&#xff0c;它涉及一系列技术和理念&#xff0c;旨在实现去中心化、开放、透明和用户主导的互联网体验。Web3的目标是赋予用户更多的控制权和数据所有权&#xff0c;并通过区块链、加密货币和分布式技术来实现。 一、特点 去中心化&#xff1…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

ios苹果系统,js 滑动屏幕、锚定无效

现象&#xff1a;window.addEventListener监听touch无效&#xff0c;划不动屏幕&#xff0c;但是代码逻辑都有执行到。 scrollIntoView也无效。 原因&#xff1a;这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作&#xff0c;从而会影响…...

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...

Git常用命令完全指南:从入门到精通

Git常用命令完全指南&#xff1a;从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...

PHP 8.5 即将发布:管道操作符、强力调试

前不久&#xff0c;PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5&#xff01;作为 PHP 语言的又一次重要迭代&#xff0c;PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是&#xff0c;借助强大的本地开发环境 ServBay&am…...

ubuntu系统文件误删(/lib/x86_64-linux-gnu/libc.so.6)修复方案 [成功解决]

报错信息&#xff1a;libc.so.6: cannot open shared object file: No such file or directory&#xff1a; #ls, ln, sudo...命令都不能用 error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory重启后报错信息&…...

链式法则中 复合函数的推导路径 多变量“信息传递路径”

非常好&#xff0c;我们将之前关于偏导数链式法则中不能“约掉”偏导符号的问题&#xff0c;统一使用 二重复合函数&#xff1a; z f ( u ( x , y ) , v ( x , y ) ) \boxed{z f(u(x,y),\ v(x,y))} zf(u(x,y), v(x,y))​ 来全面说明。我们会展示其全微分形式&#xff08;偏导…...