PWM
Gitee 空间跳转:https://gitee.com/galoc/stm8.git
1 概述
PWM也叫脉冲宽度调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。频率、周期、占空比。
1.1 PWM 频率
是指在 1 秒钟内,信号从高电平到低电平再回到高电平的次数,也就是说 1 秒钟 PWM 有多少个周期,单位 Hz。PWM信号的频率决定PWM完成一个周期的速度。
1.2 PWM 周期
T = 1/f,T是周期,f是频率。
如果频率为 50 Hz,也就是说一周期是 20 ms,那么 1s 钟就有 50 次 PWM 周期。
1.3 占空比
是一个脉冲周期内,高电平的时间与整个周期时间的比例,单位是 %(0% - 100%)一个周期的长度,如下图所示:
2 PWM 是如何让工作的?
ARR:自动重装载寄存器的值
CRRx:捕获/比较寄存器 x 的值
由上图可知,PWM 的周期或频率由 ARR 决定,PWM 占空比由 CCRx 决定
3 通用定时器输出比较部分框图介绍
3.1 捕获/比较通道1的主电路—输出部分
在比较模式下,预装载寄存器的内容被复制到影子寄存器中,然后影子寄存器的内容和计数器进行比较。
3.2 捕获/比较通道的输出部分(通道1)
4 相关寄存器
- TIMx_CR1.CEN 计数器使能(Counter enable)
0:关闭计数器
1:使能计数器
- TIMx_CCMR1.CCIS[1:0] 捕获/比较 1 选择(Capture/Compare 1 selection)
00:CC1 通道被配置为输出;
01:CC1 通道被配置为输入,IC1 映射在 TI1 上;
10:CC1 通道被配置为输入,IC1 映射在 TI2 上;
11:CC1 通道被配置为输入,IC1 映射在 TRC 上。(此模式仅工作在内部触发器输入被选中时,由 TIMx_SMCR 寄存器的 TS 位选择)
作用:用于定义通道的方向(输入/输出),及输入脚的选择。
- TIMx_CCMR1.OC1M 输出比较 1 模式(Output compare 1 mode)
110:PWM 模式 1,在向上计数时,一旦 TIMx_CNT < TIMx_CCR1 时通道 1 为有效电平,否则为无效电平。在向下计数时,一旦 TIMx_CNT > TIMx_CCR1 时 通道 1 为无效电平,否则为有效电平。
111:PWM 模式 2,在向上计数时,一旦 TIMx_CNT < TIMx_CCR1 时通道 1 为无效电平,否则为有效电平。在向下计数时,一旦 TIMx_CNT > TIMx_CCR1 时 通道 1 为有效电平,否则为无效电平。
注:有/无效状态由 TIMx_CCER.CCxP 决定
作用:用于确定 PWM 输出模式
- TIMx_CCER.CC1P 捕获/比较 1 输出极性(Capture/Compare 1 output polarity)
CC1 通道配置为输出:
0:OC1 高电平有效
1:OC1 低电平有效
作用:用于配置输出极性
- TIMx_CCER.CC1E 捕获/比较 1 输出使能
CC1 通道配置为输出:
0:关闭 — OC1 禁止输出
1:开启 — OC1 信号输出到对应的输出引脚。
- TIMx_BKR.MOE OC 输出使能(Main output enable)
作用:CCxE 使能位被设置,OC输出被启用
- TIMx_ARR 自动重装载值 (Auto-reload value)
作用:用于设置自动重装载值,范围:0-65535
- TIMx_CCR 捕获/比较寄存器值(Capture/compare register value)
作用:用于设置捕获/比较寄存器值,范围:0-65535
5 通用定时器 TIM3_PWM 输出实验配置步骤
需求:PWM输出频率为 1KHz,占空比为 50%
配置:选择内部高速时钟 16MHz,不分频,定时器3向上计数模式、分频系数为 128,ARR 为 124。
- 配置 CLOCK、GPIO
- 配置定时器基础工作参数
- 配置 PWM 模式/比较值
- 使能输出并启动计数器
相关函数介绍如下表:
函数 |
主要寄存器 |
主要功能 |
Pwm_Clock_Config |
CLK_SWR.SWI、CLK_CKDIVR.CKM、CLK_PCKENR1.PCKEN11 |
配置时钟源并使能相关外设时钟 |
Pwm_GPIO_Config |
Px_DDR.DDR[7:0]、Px_ODR.ODR[7:0]、Px_CR1.C1[7:0],Px_CR2.C2[7:0] 、SYSCFG_RMPCR3 |
配置 GPIO 并复用为 TIM3_Chn |
Pwm_TimBase_Init |
TIMx_PSCR.PSC[2:0]、TIMx_CR1.DIR、TIMx_ARRH、TIMx_ARRL、TIMx_CCER.CC1E |
配置定时器基础工作参数 |
Pwm_Cfg_Init |
TIMx_CCMR1.OC1M、TIMx_CCR1H、TIMx_CCR1L 、TIMx_CCER.CC1P |
配置 PWM 模式/比较值 |
Pwm_Enable |
TIMx_BKR.MOE、TIMx_CR1.CEN、asm(“rim\n”) |
使能输出并启动计数器 |
7 结果
gPwmDuty = 62; gPwmFreq = 124;