01、PWM 简介
📢 PWM(脉宽调制)是一种常用的技术,可以通过调节信号的占空比来控制设备的工作状态。比如可以用PWM调节电机转速(如控制风扇快慢),或者调整LCD屏幕的背光亮度。
相关技术文档可参考:./Documentation/devicetree/bindings/pwm/pwm-rockchip.txt。
一、什么是PWM
PWM
全称是 Pulse Width Modulation
,也就是脉冲宽度调制,PWM
信号如图:
PWM 全称为 Pulse Width Modulation, 翻译成中文为脉冲宽度调制, 它是一种数字信号控制模拟电路的技术, 可以通过改变高/低电平的占空比来控制平均电压或功率,从而达到对模拟量的控制目的。
PWM 信号由一个矩形波组成,它包括高电平时间和低电平时间, PWM 信号可以由周期和占空比两个单位进行描述,两个单位的具体描述如下所示:
- 周期(T): 指一个完整的高低电平循环所需要的时间,而频率为周期的倒数, 指在 1 秒钟有多少个周期, 单位为 Hz, 例如一个周期是 20ms, 那么一秒钟就有 50 次 PWM 周期。
- 占空比(Duty Cycle): 是指高电平时间与周期的比例,通常以百分比表示, 例如周期为 20ms,高电平所占的时间为 10ms, 那占空比就是 50%。
案例:
例如 RK3568 IO 口高电平为 3.3V,低电平为 0V。 如果我们想要输出不同的模拟电压,就可以利用 PWM 的面积等效原理技术来实现, 通过改变 PWM 信号的占空比,可以调节输出信号的平均电压。
- 当占空比为 50%时,高电平时间和低电平时间相等,平均输出电压为 1.65V (3.3V × 50%)。
- 占空比为 75%时,高电平时间占总周期的 75%,平均输出电压为 2.47V (3.3V × 75%)。
二、瑞芯微 PWM
2.1、PWM 通道与引脚
在 数据手册中可以找到关于 PWM 接口的介绍, 具体如下所示:
这款芯片有16个独立的PWM信号输出口,每个口都能自己生成PWM波形。所有PWM功能都由硬件直接操控,能实时处理突发信号。
每个通道调节频率分两步:先设置基础时钟频率,再进一步调整细分频率。内部用了32位计时器,能精确控制时间参数。
这些通道不仅能发送信号,还能测量外部输入信号的脉冲宽度等参数。输出方式有两种:一种是持续循环发送,另一种是一次性完成发送。用户还能通过参考模式生成不同占空比的波形。
特别说明:3、7、11、15号这四个通道经过特殊优化,特别适合用来控制红外设备。
2.2、PWM 简介
RK3566芯片共有4个PWM模块,每个模块的功能相同,具体特性如下:
- 基础配置
每个PWM模块包含4个独立通道,可以同时控制4路PWM信号。 - 捕获模式功能
- 可测量输入信号的高电平和低电平持续时间(即周期)。
- 当输入信号电平(高低)发生变化时,会触发中断通知CPU。
- 内置32位寄存器分别记录高电平、低电平的捕获数据,以及当前计数值。
- 捕获的数据会暂存在FIFO缓存中(最多存8组数据),可通过CPU或DMA读取处理。
- 输出模式功能
支持连续输出或单次触发输出:
- 通过32位寄存器设置PWM周期和占空比参数。
- 可调节PWM波的高低电平输出极性(如默认高电平还是低电平)。
- 支持两种波形对齐方式:中心对称模式(占空比对称分布在周期中间)或左对齐模式(占空比从周期起点开始)。
每个通道的当前状态可通过32位寄存器实时查看。
2.3、PWM 设备节点
RK3566芯片的PWM设备树配置说明文档位于Documentation/devicetree/bindings/pwm/pwm-rockchip.txt
。以下是PWM节点的核心配置要点:
- 基础配置项:
compatible
:必须设置为"rockchip,rk3568-pwm",指定芯片型号reg
:定义PWM控制器的寄存器地址范围clocks
:列出PWM控制器所需的时钟源
- 可选配置项:
#pwm-cells
:通常设为3,表示PWM通道配置参数的格式pwms
:用于描述其他设备使用PWM时的引用方式status
:启用设备时设为"okay"
- 通道配置: 每个PWM通道需要单独配置,包含:
- 基准时钟频率
- 支持的最大占空比
- 引脚复用功能设置
这些配置项定义了PWM控制器的硬件资源和工作参数,确保系统能正确识别和控制PWM功能。
rk3568.dtsi
rk3568-pinctrl.dtsi
uart4m0_xfer
pwm9m0_pins
关注PWM 对应PIN 的复用冲突情况。
三、PWM 方案
3.1 硬件PWM
实现方式:硬件PWM通过专门的PWM芯片模块生成PWM信号。
优点:
- 省CPU资源:信号由硬件自动处理,CPU不用参与。
- 高频高精度:频率可达MHz级别,精度可到纳秒级。
- 稳定性强:信号不受CPU任务繁忙的影响。
缺点:
- 成本高:需要额外硬件支持。
- 接口限制:只能在特定引脚输出信号。
3.2 软件PWM(基于定时器的模拟方案)
实现方式:软件PWM通过程序控制实现。利用定时器触发中断或循环计数,手动切换GPIO的高低电平,生成PWM波形。
优点:
- 灵活通用:可在任意GPIO引脚生成PWM信号。
- 成本低:无需额外硬件,直接用现有GPIO即可。
缺点:
- 占用CPU资源多:需要CPU频繁处理中断或循环。
- 性能受限:频率和精度受CPU速度和任务响应时间限制。
- 实时性要求高:对CPU的即时反应能力要求严格。
补充说明:
如果硬件PWM接口不够用,可以用GPIO模拟PWM(即软件PWM)。但软件方案更适合低频、对精度要求不高的场景。