定时器输出比较原理及PWM配置研究

定时器输出比较原理及PWM配置研究

码字不易,点个赞在看吧(如果能关注就更好了)
文章如有错误,更欢迎各位大佬指出,谢谢啦

1. 定时器输出比较原理:

1.1 原理聚焦提问:

  1. 什么是定时器输出比较

1.2 原理聚焦回答:

  1. F103每个定时器的内部有一个计数器,其值为CNT,当在输出比较模式下,配置TIM_CounterMode = TIM_CounterMode_Up(向上计数)时,CNT的值会依次递增,直至达到ARR+1,然后归零,再从0依次递增,不断循环。
    这时,我们配置CCR(捕获 比较 寄存器),给CCR一个值,因而我们可以顾名思义输出比较可以通过比较CNT与CCR寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形
    输出比较就是比较CNT与CCR的值,在下图中,我们运用配置TIM_OCPolarity = TIM_OCPolarity_High,及当CNT(0~29)

定时器输出比较原理及PWM配置研究_第1张图片
红线为我们配置CCR(捕获 比较 寄存器)的一个值(30)
蓝线为CNT自增
黄色为ARR的值(99)


2. PWM配置及原理:

1. 原理

给一个惯性系统反复有规律的间断上电,那么它会匀速运行

2. 配置(以TIM_OCInitTypeDef TIM_OCInitStructure; 结构体配置为例讲解重要部分,所有配置代码见下篇文章,下列回答结合AI做出)

在 STM32 的 PWM(脉宽调制) 生成过程中,TIM_OCInitTypeDef 结构体用于配置 定时器的输出比较通道(OC,Output Compare),决定了 PWM 信号的输出特性。

1. 代码解析

TIM_OCInitTypeDef TIM_OCInitStructure;
  • TIM_OCInitTypeDefSTM32 标准外设库(StdPeriph Library)提供的一个结构体,专门用于 定时器输出比较(OC) 配置。
  • 这个结构体包含多个参数,用于设置 PWM 模式、极性、输出状态、占空比 等。

接下来,我们逐行解析结构体的各个参数:


(1) TIM_OCMode = TIM_OCMode_PWM1;

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
作用
  • 设置定时器通道的工作模式PWM 模式 1
  • STM32 的 PWM 模式 主要有:
    • TIM_OCMode_PWM1
      • 当计数值 < CCR(比较值)时,输出 高电平
      • 当计数值 CCR 时,输出 低电平
    • TIM_OCMode_PWM2
      • 当计数值 < CCR 时,输出 低电平
      • 当计数值 CCR 时,输出 高电平

总结

  • PWM1:高电平持续时间 = CCR,适用于常见的 占空比控制
  • PWM2:与 PWM1 相反,一般用于 反相 PWM 信号

(2) TIM_OCPolarity = TIM_OCPolarity_High;

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
作用
  • 设置 PWM 输出的极性(信号默认电平)。
  • STM32 提供 两种极性模式
    • TIM_OCPolarity_High(默认):
      • PWM1 模式:0 → 1 时输出高电平,1 → 0 时输出低电平(普通情况)。
    • TIM_OCPolarity_Low
      • PWM1 模式:0 → 1 时输出低电平,1 → 0 时输出高电平(反向)。

总结

  • TIM_OCPolarity_High正常 PWM默认)。
  • TIM_OCPolarity_Low反向 PWM(当需要反相信号时)。

(3) TIM_OutputState = TIM_OutputState_Enable;

TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
作用
  • 使能 PWM 输出,让 定时器的 OC 通道可以输出信号
  • 可选值:
    • TIM_OutputState_Enable开启输出
    • TIM_OutputState_Disable关闭输出

总结:如果 TIM_OutputState_Disable,即使定时器运行,PWM 信号也不会输出到 GPIO。


(4) TIM_Pulse = 50;

TIM_OCInitStructure.TIM_Pulse = 50;
作用
  • 设置 CCR(捕获/比较寄存器) 的初始值,即 PWM 的占空比
  • CCR 决定 PWM 信号高电平持续的时间
    • TIM_Pulse = CCR 代表 PWM 的高电平时间
    • 占空比计算公式:
       占空比 = CCR ARR × 100 %   \ \text{占空比} = \frac{\text{CCR}}{\text{ARR}} \times 100\% \  占空比=ARRCCR×100% 
      其中:
      • CCR(TIM_Pulse) → 高电平持续时间
      • ARR(自动重装值) → PWM 周期

例如:

  • 设定 ARR = 100CCR = 50,则:
    • 占空比 = 50%。
    • PWM 频率 = 由 ARRPSC(预分频器)决定。

总结

  • CCR 控制 PWM 占空比,调整 CCR 值可以 动态改变 PWM 输出强度(如 LED 亮度、电机速度)

2. 代码完整配置示例

TIM_OCInitTypeDef TIM_OCInitStructure;

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;      // PWM 模式 1
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; // 正常极性
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; // 使能 PWM 输出
TIM_OCInitStructure.TIM_Pulse = 50;                   // 占空比 50%(CCR = 50)

TIM_OC3Init(TIM2, &TIM_OCInitStructure);  // 这里是 TIM2 的通道 3
  • TIM_OC3Init(TIM2, &TIM_OCInitStructure);
    • TIM2 → 选择定时器 2
    • 通道 3(OC3) → 绑定到 GPIOA 2 号引脚
    • 输出 PWM 信号(50% 占空比)

3. 总结

配置项 作用 可能取值
TIM_OCMode 选择 PWM 模式 TIM_OCMode_PWM1(正向) / TIM_OCMode_PWM2(反向)
TIM_OCPolarity PWM 极性 TIM_OCPolarity_High(默认) / TIM_OCPolarity_Low
TIM_OutputState 是否使能 PWM 输出 TIM_OutputState_Enable(输出) / TIM_OutputState_Disable(关闭)
TIM_Pulse 控制 PWM 占空比 CCR(单位:计数值)

4. 典型应用

  • LED 亮度调节
    • 通过改变 TIM_PulseCCR),改变 LED 亮度:
      PWM_SetCompare3(80); // 80% 亮度
      
  • 舵机控制
    • 舵机通常接受 50Hz 的 PWM,CCR 设定角度:
      PWM_SetCompare3(7); // 舵机旋转至 90°
      
  • 电机调速
    • PWM 控制 MOSFET 驱动电机CCR 控制转速:
      PWM_SetCompare3(30); // 30% 占空比,低速运行
      

5. 结论

  1. TIM_OCInitTypeDef 是 STM32 定时器输出比较(OC) 结构体,专门用于 PWM 配置
  2. TIM_OCMode_PWM1 设定 正向 PWM,PWM 高电平时长 = CCR
  3. TIM_OCPolarity_High 设定 普通极性,否则 PWM 反向。
  4. TIM_OutputState_Enable 确保 PWM 信号真正输出
  5. TIM_Pulse(CCR) 决定 PWM 的占空比,从而控制 LED 亮度、电机转速等。

** 综上, TIM_OCInitStructure 结构体就是用于配置 STM32 PWM 信号的关键参数,确保定时器正确输出 PWM 波形。**

你可能感兴趣的:(stm32,单片机,嵌入式硬件,科技)