PWM
概述
bk7236 共有两组 PWM 控制器,PWM0 与 PWM1,每个PWM控制器下有3个TIM定时器,每个定时器有2个channel。
以 PWM0 来说,TIM 与 PWM channel 对应关系如下:
TIM Index |
Channel Index |
---|---|
TIM1 |
0 |
1 |
|
TIM2 |
3 |
4 |
|
TIM3 |
5 |
6 |
因此,每个 PWM 控制器有6个 channel,bk7236共支持12个 channel,对应软件中的 PWM_ID_0
到 PWM_ID_11
。
工作模式
定时器可以工作在3种模式下:
独立输出模式
互补输出模式
输入捕获模式
功能框图

时钟源
PWM 控制器 有两个时钟源可选:
clk_32K
XTAL
可通过 SYSTEM_REG0x8
配置。
PSC
预分频器,对输入时钟(clk_32K或XTAL)进行分频,输出CLK_CNT用来驱动计数器TIM计数。
PSC的设置可通过 PWM_REG_0xE
来配置,可实现1-256分频。
例如:
当我们时钟源选择XTAL=26MHz,配置PSC1=25时,计数器TIM1时钟则为1MHz,若计数器+1,则+1us。
备注
如果 PWM0 或 PWM1 的 CH1 配置为独立模式,那么其对应的 PSC 通过 PWM_REG_0x33
来配置。
CCR
当计数器CNT的值跟比较寄存器CCR的值相等时,输出参考信号OCxREF的信号的极性就会改变,并且会产生CCxI中断,相应的标志位CCxIF(REG_0x8寄存器中)会置位。 然后OCxREF再经过一系列的控制之后输出PWM信号。
BK7236 每个TIM 对应3个 CCR
,即在一个周期内,信号的极性可以翻转3次,其中
CCR1,CCR2,CCE3(REG_0x15-REG_0x17)对应TIM1
CCR4,CCR5,CCE6(REG_0x18-REG_0x1a)对应TIM2
CCR7,CCR8,CCE9(REG_0x1b-REG_0x1d)对应TIM3
当用作PWM输出模式时,输出方波信号的占空比由CCR决定。
备注
CCRx 需设置大于1的值。
ARR
自动重载寄存器ARR用来存放与计数器CNT比较的值,可以理解为计数器计数的 end_value。
PWM输出方波信号的频率由ARR值决定。
Deadtime Generator
在生成的参考信号OCxREF的基础上,可以插入deadtime,用于生成两路互补的输出信号。
死区时间的大小具体由 REG_0x1E
的 DTx 配置。
PWM 输出模式
输出单路方波信号
每组 PWM 的 CH0, CH1, CH2, CH4 可用作独立输出。
备注
CH1 动态修改配置频率占空比时,硬件默认为立即生效,无法配置为下一周期生效,且极性、翻转模式等无法配置,因此仅可用作固定频率占空比输出。
示例: 独立输出5路 PWM 信号,频率为1KHz,占空比动态变化:从0%到100%,再从100%到0%。
具体示例代码详见 projects/example/peripherals/pwm/pwm_set_period_duty/main.c
输出互补带死区PWM
关于互补输出,可分为硬件实现的互补模式与软件互补模式:
硬件:每组 PWM 可实现3个互补输出,如概述中的表格所示,仅可配置 PWMx 的 CH0与CH1, CH2与CH3, CH4与CH5 作为互补输出,有相应的死区相关的寄存器可配置,较为精准,但通道固定
软件:使用 PWM1 的 CH0, CH2, CH4 与 PWM2 的 CH0, CH2, CH4 任意两通道组成互补输出,软件实现互补功能,较为灵活,但精度不及硬件实现的方式
示例: CH0 与 CH4 输出不带死区的互补波形;CH6 与 CH8 输出带死区的互补波形。
具体示例代码详见 projects/example/peripherals/pwm/complementary_outputs/main.c
Q&A
什么是 PWM 独立模式?
如上面框图所示, CH0 与 CH1 共同使用 TIM1 计数,因此它们只能输出与参考信号OCxREF极性相同或相反的信号,为了让CH1能独立输出,可配置CH1为独立模式,可独立配置频率和占空比,对应寄存器
PWM_REG2f
。关于独立模式的使用限制?
2.1. 独立模式相关的配置对应寄存器
PWM_REG2f
到PWM_REG39
2.2. 只有 PWM CH1 可配置为独立模式,CH3 与 CH5 独立模式不生效
2.3. 独立模式下仅可配置ARR与CCR(频率与占空比),OCM 固定为
0b011
(OCxREF碰到CCRx时翻转,碰到AAR也翻转),PWM输出极性固定为正极性,仅可用作较为简单的波形输出,无法实现动态配置频率和占空比。
哪些通道可独立输出?
PWM0 的 CH0,CH1,CH2,CH4;PWM1 的 CH0,CH1,CH2,CH4。对应软件上的下标为 PWM_ID_0, PWM_ID_1, PWM_ID_2, PWM_ID_4, PWM_ID_6, PWM_ID_7, PWM_ID_8, PWM_ID_10。 其中 PWM_ID_1, PWM_ID_7 不能动态更改频率和占空比。