
提示Linux驱动-PWM-使用sysfs接口控制pwm文章目录前言一、参考资料二、硬件环境1 工作原理2 硬件连接三、配置pwm 设备树底板原理图-核心板原理图分析配置完整设备树屏蔽已经复用的设备树复用需求功能pwm功能的设备树四、使用sysfs 接口控制pwm1、查看 PWM 子系统的全部状态- cat /sys/kernel/debug/pwm2、查看pwm 挂载点- cd /sys/class/pwm/3、查看pwm12 对应目录子目录-npwm子目录-export子目录-unexport子目录-device子目录-subsystem子目录-uevent子目录-power4、舵机G90 物理连线5、使用syfs 控制舵机导出 pwm12 所在的 pwmchip3 控制器的通道 0设置 pwm 周期为 20 ms设置 pwm 高电平持续时间为 2 ms设置 pwm 极性为正极性normal启用 pwm 输出总结前言使用sysfs接口控制pwm ,控制舵机。一、参考资料Linux驱动-串口-系统配置串口-配置8250 通用串口驱动主要配置设备树章节基本思路完全一致配置pmux 的gpio 复用功能。二、硬件环境使用的实验外设是 SG90 舵机。 SG90 舵机是一种广泛应用于机器人、 遥控飞机、遥控汽车等领域的小型伺服电机。 它以其小巧的尺寸、 轻便的重量、 低功耗和高性价比而备受青睐 外观类型如图1 工作原理SG90 舵机通过脉宽调制pwm 信号来控制位置。 其 pwm 信号周期固定为 20ms 通过高电平持续时间决定舵机的转动角度 如 0.5ms 对应 0° 2.5ms 对应 180°。 即通过改变高电平的持续时间 可以控制舵机在 0° 180° 范围内转动 具体控制关系如图2 硬件连接SG90 舵机有三根不同颜色的线 其中红色和棕色为电源线 分别表示电源的正极和负极而橙线为信号线 用于连接处理器的 pwm 输出引脚 SG90 舵机与 iTOP-RK3568 开发板连接方法如图三、配置pwm 设备树底板原理图-核心板原理图分析通过 sysfs 接口操作 pwm 首先需要将相关的 IO 引脚配置为 pwm 功能。 此处选用的是 iTOP-RK3568 开发板背板 20PIN GPIO 接口中的第 6 引脚我们看看实物图再所以直接在核心板原理图上面搜索UART9_TX_M1如下所以现在要做的就是把GPIOGPIO4_C5复用到PWM12_M1功能即可。那么接下来就是在kernel 设备树里面去找PWM 相关控制器然后pinctrl 复用一下不就可以了嘛。配置完整设备树屏蔽已经复用的设备树这个还要回到 Linux驱动-串口-系统配置串口-配置8250 通用串口驱动 章节中之前做串口时候将GPIO4_C5 已经复用位uart9 的串口功能 使用的通道是UART9_TX_M1,所以 凡是涉及到服用了GPIOC4_C5 就把它去掉或者disable 状态。那么 如下谁引用了就注释掉对应的pinctrl路径kernel/arch/arm64/boot/dts/rockchip/rk3568-evb1-ddr4-v10-linux.dts就是改一个地方status改为disableduart9{statusdisabled;pinctrl-namesdefault;pinctrl-0uart9m1_xfer;};复用需求功能pwm功能的设备树路径/kernel/arch/arm64/boot/dts/rockchip/rk3568-evb1-ddr4-v10.dtsi配置如下pwm12{statusokay;pinctrl-0pwm12m1_pins;};然后烧录内核或者固件。四、使用sysfs 接口控制pwm1、查看 PWM 子系统的全部状态-cat /sys/kernel/debug/pwm这个地址不就是设备树中 pwm 控制器中的地址嘛pwm12:pwmfe700000{compatiblerockchip,rk3568-pwm,rockchip,rk3328-pwm;reg0x0 0xfe700000 0x0 0x10;#pwm-cells3;pinctrl-namesactive;pinctrl-0pwm12m0_pins;clockscru CLK_PWM3,cru PCLK_PWM3;clock-namespwm,pclk;statusdisabled;};2、查看pwm 挂载点- cd /sys/class/pwm/3、查看pwm12 对应目录如上通过 pwm12 的寄存器可以确定 pwm12 对应目录为 pwmchip3 因此进入 pwmchip3 目录路径pwmchip3代表第 3 个 PWM 控制器芯片fe700000是该 PWM 控制器的物理寄存器基地址。sysfs 是内核向用户态暴露的虚拟文件系统不是磁盘真实文件。子目录-npwmcat npwm作用读取这个 pwmchip 一共有多少路 PWM 通道。例如输出4→ 此控制器下有 PWM0、PWM1、PWM2、PWM3 共 4 个通道。RK 芯片 16 路 PWM 会分到多个 pwmchippwmchip0/pwmchip1/pwmchip2/pwmchip3子目录-export只能写数字不能 cat 读取。echo0export含义导出第 0 号 PWM 通道给用户空间使用。执行成功之后当前目录会生成子文件夹pwm0/。注意如果该 PWM 已经被内核驱动占用比如背光驱动写 export 会报错。写入的数字是本 chip 内部通道号不是全局 PWM 编号。pwmchip3 的echo 0 export对应全局 PWM3‑0。子目录-unexportecho0unexport含义取消导出通道 0内核回收该 PWMpwm0文件夹会消失。用完 PWM 建议 unexport 释放资源子目录-device软链接指向父设备fe700000.pwm内核内部设备模型用用户一般不用操作。子目录-subsystem链接到/class/pwmsysfs 类子系统内部管理用户不用碰。子目录-uevent内核热插拔事件文件udev 读取用户几乎不用。子目录-power电源管理相关控制 PWM 控制器电源开关一般用户态不操作。4、舵机G90 物理连线通过 sysfs 控制 SG90 舵机 先按照图所示的连接方式把 SG90 舵机连接到 开发板上5、使用syfs 控制舵机舵机相关参数说明导出 pwm12 所在的 pwmchip3 控制器的通道 0echo0/sys/class/pwm/pwmchip3/export设置 pwm 周期为 20 msecho20000000/sys/class/pwm/pwmchip3/pwm0/period设置 pwm 高电平持续时间为 2 msecho2000000/sys/class/pwm/pwmchip3/pwm0/duty_cycle设置 pwm 极性为正极性normalecho normal/sys/class/pwm/pwmchip3/pwm0/polarity启用 pwm 输出echo1/sys/class/pwm/pwmchip3/pwm0/enable我们发现舵机旋转了90 °总结这里只是做了一个 pwm 的实验通过sysfs 虚拟文件系统进行了直接的控制有个pwm 的初步认识。后续继续讲解pwm 相关驱动的知识点。