PWM 相关知识整理
一、PWM 相关术语
概念 | 含义 |
---|---|
频率 | 1 秒钟内信号从高电平到低电平再回到高电平的次数,即 1 秒钟 PWM 的周期数,单位为 Hz |
周期 | 一个脉冲信号的时间,1 秒内的周期次数等于频率,周期 = 1 / 频率(T=1/f) |
脉宽时间 | 高电平持续的时间 |
占空比 | 一个脉冲周期内,高电平时间与整个周期时间的比例 |
举例:方波的占空比为 50%;若周期为 20ms,脉宽时间为 5ms,则占空比为 25%。
二、PWM 信号应用领域
- 调光电路:通过调节占空比可实现呼吸灯效果。
- 电机控制:利用占空比调节电机转速。
- 舵机控制:以固定频率搭配不同占空比来控制舵机的转角。
- 其他领域:还可用于直流斩波电路、蜂鸣器驱动、逆变电路、加湿机雾化量控制等。
三、Exynos 4412 PWM 特性
- 该芯片的 SCP 具备五个 32 位脉冲宽度调制(PWM)定时器。
- 有 2 个 8 位 PCLK 分频器用于一级预分频,5 个 2 级分频器对外部时钟进行预分。
- 支持可编程选择 PWM 独立通道,拥有 4 个独立的可编程控制且支持校验的 PWM 通道。
- 具备静态配置(PWM 停止)和动态配置(PWM 启动)两种模式。
- 支持自动重装模式及触发脉冲模式,设有一个外部启动引脚。
- 两个 PWM 输出可配备 Dead-Zone(死区)发生器,还具备中断发生器。
四、PWM 工作步骤
- 当时钟 PCLK 被使能后,定时器计数缓冲寄存器(TCNTBn)会将计数器初始值下载到递减计数器中。
- 定时器比较缓冲寄存器(TCMPBn)把其初始值下载到比较寄存器,并将该值与递减计数器的值进行比较,当两者值相同时,输出电平翻转。
- 递减计数器减至 0 后,输出电平再次翻转,完成一个输出周期。
- 当递减计数器计数值达到 0 时,产生定时器中断请求通知 CPU 定时器操作完成。若将定时器 0 设置为自动重载功能(TCONbit [3]=1),相应的 TCNTBn 的值会自动重载到递减计数器以继续下次操作。
- 若定时器停止工作(清除定时器控制寄存器 TCON 中的定时器使能位),则 TCNTBn 的值不会被重载到递减计数器。
- TCMPBn 的值用于脉冲宽度调制,当定时器递减计数器的值和比较寄存器的值相匹配时,定时器控制逻辑改变输出电平,比较寄存器决定 PWM 输出的开关时间。
四、PWM 工作流程(精简)
- 时钟使能:PCLK 开启后,计数缓冲寄存器(TCNTBn)将初始值加载到递减计数器。
- 比较触发:比较缓冲寄存器(TCMPBn)值与递减计数器值匹配时,输出电平翻转。
- 周期结束:计数器减至 0 时,输出电平再次翻转,完成一个周期,并触发中断(若启用)。
- 自动重载:若设置自动重载模式(TCON [3]=1),TCNTBn 值会重新加载到计数器,循环运行。
五、寄存器配置实例
目标:生成周期 159 个时钟周期、高电平 109 个时钟周期的 PWM 波形(低电平 50 周期)。
- 初始化寄存器:
TCNTBn = 159
(周期总时长),TCMPBn = 109
(高电平时长)。
- 启动定时器:
- 设置 TCON 寄存器使能位,TCNTBn 值加载到递减计数器,输出引脚初始化为低电平。
- 电平翻转逻辑:
- 计数器从 159 递减至 109 时,输出由低变高;递减至 0 时,输出由高变低,同时触发中断。
- 自动重载:若启用该模式,计数器自动重新加载 159,进入下一个周期。
六、时钟配置寄存器(TCFG0/TCFG1)
-
TCFG0 寄存器(预分频配置):
- 功能:设置一级预分频比(8 位,范围 1~255),公式为:预分频后时钟=预分频值+1PCLK
- 示例:若 PCLK=66MHz,预分频值 = 99,则预分频后时钟为 660kHz(66M/(99+1))。
-
TCFG1 寄存器(二级分频配置):
- 功能:选择二级分频比(1/1、1/2、1/4、1/8、1/16),决定最终输入定时器的时钟频率:定时器输入时钟=分频比预分频后时钟
- 配置示例:
c
运行
// 设置TCFG0预分频值为248(0xF9),TCFG1分频比为1/16(0x4) PWM.TCFG0 = (PWM.TCFG0 & ~0xFF) | 0xF9; // 预分频值=248,PCLK/(248+1)=66M/249≈265kHz PWM.TCFG1 = (PWM.TCFG1 & ~0xF) | 0x4; // 二级分频比1/16,最终时钟=265k/16≈16.5kHz
-
时钟计算与分辨率:
- 公式:ftimer=(prescaler+1)×dividerPCLK
- 人耳可识别频率:20Hz~20kHz,需据此配置时钟参数。
七、关键寄存器地址与功能
寄存器 | 地址(基址 + 偏移) | 功能 |
---|---|---|
TCNTB0 | 0x000C | 定时器 0 计数缓冲寄存器,存储周期总时长。 |
TCMPB0 | 0x0010 | 定时器 0 比较缓冲寄存器,决定高电平时长(占空比)。 |
注:所有配置需结合芯片手册具体地址和寄存器位定义,以上示例基于 Exynos 4412 架构。