首页 > 其他分享 >6.9物联网RK3399项目开发实录-驱动开发之PWM的使用(wulianjishu666)

6.9物联网RK3399项目开发实录-驱动开发之PWM的使用(wulianjishu666)

时间:2024-04-08 22:30:42浏览次数:10  
标签:PWM struct int ns RK3399 device pwm wulianjishu666

嵌入式实战开发例程,珍贵资料,开发必备:

链接:https://pan.baidu.com/s/1149x7q_Yg6Zb3HN6gBBAVA?pwd=hs8b

======================================================================

PWM 使用

前言

AIO-3399J 开发板上有 4 路 PWM 输出,分别为 PWM0 ~ PWM3,4 路 PWM 分别使用在 EDP 背光、MIPI 背光、VDDLOG 供电、红外 IR。

本章主要描述如何配置 PWM。

AIO-3399J 的 PWM 驱动为:kernel/drivers/pwm/pwm-rockchip.c

DTS配置

配置 PWM 主要有以下三大步骤:配置 PWM DTS 节点、配置 PWM 内核驱动、控制 PWM 设备。

配置 PWM DTS节点

在 DTS 源文件 kernel/arch/arm64/boot/dts/rockchip/rk3399-firefly-demo.dtsi 添加 PWM DTS 配置,如下所示:

pwm_demo: pwm_demo {
    status = "okay";
    compatible = "firefly,rk3399-pwm";
    pwm_id = <1>;
    min_period = <0>;
    max_period = <10000>;
    duty_ns = <5000>;
};
  • pwm_id:需要申请的 PWM 通道数。

  • min_period:周期时长最小值。

  • max_period:周期时长最大值。

  • duty_ns:PWM 的占空比激活的时长,单位 ns。

接口说明

用户可在其它驱动文件中使用以上步骤生成的 PWM 节点。具体方法如下:

(1)、在要使用 PWM 控制的设备驱动文件中包含以下头文件:

#include <linux/pwm.h>

该头文件主要包含 PWM 的函数接口。

(2)、申请 PWM

使用

struct pwm_device *pwm_request(int pwm_id, const char *label);

函数申请 PWM。 例如:

struct pwm_device * pwm1 = NULL;pwm0 = pwm_request(1, “firefly-pwm”);

(3)、配置 PWM

使用

int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns);

配置 PWM 的占空比,例如:

pwm_config(pwm0, 500000, 1000000);

(4)、使能PWM函数

int pwm_enable(struct pwm_device *pwm);

用于使能 PWM,例如:

pwm_enable(pwm0);

(5)控制 PWM 输出主要使用以下接口函数:

  • 功能:用于申请 PWM

struct pwm_device *pwm_request(int pwm_id, const char *label);
  • 功能:用于释放所申请的 PWM

void pwm_free(struct pwm_device *pwm);
  • 功能:用于配置 PWM 的占空比

int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns);
  • 功能:使能 PWM

int pwm_enable(struct pwm_device *pwm);
  • 功能:禁止 PWM

void pwm_disable(struct pwm_device *pwm);

参考例子: kernel/drivers/pwm/pwm-firefly.c

调试方法

通过内核丰富的 debug 接口查看 PWM 注册状态,adb shell 或者串口进入 Android 终端执行:

cat  /sys/kernel/debug/pwm

查看注册是否成功,成功则返回接口名和寄存器地址。

FAQs

PWM 无法注册成功:

  • dts 配置文件是否打开对应的 PWM。

  • PWM 所在的 IO 口是否被其他资源占用,可以根据报错的返回值去查看原因。

标签:PWM,struct,int,ns,RK3399,device,pwm,wulianjishu666
From: https://blog.csdn.net/weixin_39804904/article/details/137526153

相关文章

  • 如何使用单片机 pwm 控制 mos 管?
    目录选择适合的硬件连接电路编写代码参考示例程序一程序二测试与调试注意事项        使用单片机(如常见的Arduino、STM32等)通过PWM(脉冲宽度调制)控制MOS管(金属氧化物半导体场效应管)是一种常见的电路控制方法。以下是一个基本的设计步骤指南:选择适合的硬......
  • 基于SVPWM控制策略实现三相两电平的逆变器Simulink仿真
    本设计使用simulink实现三相两电平逆变器的SVPWM控制策略,其运行完美,FFT分析时拥有较小的谐波:基波537.7,THD仅为0.35%。获取链接:基于SVPWM控制策略实现三相两电平的逆变器Simulink仿真......
  • PWM原理及其应用
    什么是PWM   PWM(PulseWidthModulation)简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在测量、通信、工控等方面。PWM的频率    是指在1秒钟内,信号从高电平到低电平再回到高电平的次数,也就是说一秒钟PWM有多少个周期,单位H......
  • 6.7物联网RK3399项目开发实录-驱动开发之Camera摄像头的使用(wulianjishu666)
    90款行业常用传感器单片机程序及资料【stm32,stc89c52,arduino适用】链接:https://pan.baidu.com/s/1M3u8lcznKuXfN8NRoLYtTA?pwd=c53f ========================================================Camera使用简介AIO-3399J开发板分别带有两个MIPI,MIPI支持最高4K拍照......
  • 6.8物联网RK3399项目开发实录-驱动开发之RTC实时时钟的使用(wulianjishu666)
    90款行业常用传感器单片机程序及资料【stm32,stc89c52,arduino适用】链接:https://pan.baidu.com/s/1M3u8lcznKuXfN8NRoLYtTA?pwd=c53f ========================================================RTC使用简介AIO-3399J开发板上有一个集成于RK808上的RTC(RealTime......
  • FOC算法中为啥用PWM触发ADC中断
    在FOC(FieldOrientedControl,场向量控制)算法中,为什么要使用PWM(PulseWidthModulation,脉宽调制)触发ADC(Analog-to-DigitalConverter,模数转换器)中断呢?在FOC中,PWM被用来控制电机的相电流,以实现精确的控制。通过改变PWM信号的占空比,可以调节电机的转速和转矩。而为了实现精确的控......
  • RK3588平台开发系列讲解(PWM开发篇)
    目录前⾔驱动文件DTS节点配置PWM流程PWM使⽤常⻅问题PWM在U-Boot与kernel之间的衔接问题PWMRegulator时PWMpin脚上下拉配置问题前⾔脉宽调制(PWM,PulseWidthModulation)功能在嵌⼊式系统中是⾮常常⻅的,它是利⽤微处理器的数字输出来对模拟电路进......
  • 6.1物联网RK3399项目开发实录-驱动开发之ADC驱动(wulianjishu666)
    物联网嵌入式开发源码例程:链接:https://pan.baidu.com/s/1B3oqq5QBhN-VmTFt9CI-7A?pwd=2ihg *******************************************************************************************ADC使用简介AIO-3399J开发板上的AD接口有两种,分别为:温度传感器(Temperatur......
  • [RK3399-Android10] 关于USB触摸屏休眠状态无法唤醒设备的一种情况
    问题描述RK3399Android10平台上,USB触摸屏在系统按键休眠之后,无法触摸唤醒设备。查看内核日志,发现休眠之后,USB设备直接断开,lsusb发现不了设备。休眠之后host接口没有断开电源,使用USB鼠标插在同一个接口上,USB鼠标可以正常唤醒设备。问题描述之前遇到这样的问题一般是修改s......
  • Xilinx ZYNQ 7000+Vivado2015.2系列(八)ARM+FPGA的优势,PS控制PL产生需要的PWM波(基于AXI
    上一节我们观察了AXI总线的信号,了解了基于AXI总线读写的时序,这一节我们继续探索基于AXI总线的设计,来看一看ZYNQ系列开发板的独特优势,PS可以控制PL产生定制化的行为,而不需要去动硬件代码。这次实验是产生频率和占空比可调的PWM(PulseWidthModulation)信号,调用8次,产生8路PWM......