STM32
直播中

杨杰

7年用户 1071经验值
私信 关注
[问答]

STM32F407控制器有几个通用定时器呢

PWM是什么?PWM有何优点?
STM32F407控制器有几个通用定时器呢?

回帖(1)

吴少杰

2021-11-15 15:47:30
  STM32 CubeIDE(八)通用定时器PWM
  通用定时器
  STM32F407 系列控制器有10 个通用定时器,所有通用定时器都是彼此独立的,不共享任何资源。
  APB1接口定时器(42MHz):
  TIM2、TIM5:32位计数器、支持向上计数、向下计数、向上向下计数,可生产DMA请求、四路捕获/比较通道,支持正交解码。
  TIM3、TIM4:16位计数器、支持向上计数、向下计数、向上向下计数,可生产DMA请求、四路捕获/比较通道,支持正交解码。
  TIM12:16位计数器、支持向上计数,两路捕获/比较通道。
  TIM13、TIM14:16位计数器、支持向上计数,一路捕获/比较通道。
  APB2接口定时器(84MHz):
  TIM9:16位计数器、支持向上计数,两路捕获/比较通道。
  TIM10、TIM11:16位计数器、支持向上计数,一路捕获/比较通道。
  输入/比较通道可用于:
  输入捕获
  输出比较
  PWM生产
  单脉冲输出
  PWM
  脉冲宽度调制,简称PWM,是利用微型处理器的数字信号输出来对模拟威廉希尔官方网站 进行控制的一种非常有效的技术,广泛应用于测量、通讯、功率控制与变换的许多领域中。
  在模拟威廉希尔官方网站 中,时间和值在幅度上几乎没有限制,基本上可以取任何实数值,所以电压和电流可以直接用来控制对象。
  而在数字威廉希尔官方网站 中,只能输出1和0两种状态,所以电压或电流会通过通断方式的重复脉冲序列加载到模拟负载。
  PWM波就是用数字信号对模拟信号的电平进行编码后的脉冲。
  PWM的优点是从处理器到被控系统信号都是数字形式的,无需进行数模转换,让信号保持为数字形式可将噪声影响降到最小。噪声只有在强到足以将逻辑 1 改变为逻辑 0 或将逻辑 0 改变为逻辑 1 时,也才能对数字信号产生影响。
  总之,PWM既经济、节约空间、抗噪性能强,是一种广大工程师在许多设计应用中使用的有效技术。
  
  
  通用定时器PWM原理
  以向上计数模式为例,除了定时器计数值CNT和自动重装载值ARR之外,还有一个计数比较值CCR,当CNT 》 CCR时,通道输出高电平,当CNT 《 CCR时,通道输出低电平,当CNT = ARR时,重新开始计时,至此就输出了一个PWM波。
  
  输出比较初始化结构体
  /**
  * @brief TIM Output Compare Configuration Structure definition
  */
  typedef struct
  {
  uint32_t OCMode; /*!《 输出比较模式 */
  uint32_t Pulse; /*!《 输出比较值 */
  uint32_t OCPolarity; /*!《 输出极性 */
  uint32_t OCNPolarity; /*!《 互补通道输出极性 */
  uint32_t OCFastMode; /*!《 PWM快速模式 */
  uint32_t OCIdleState; /*!《 空闲状态输出极性 */
  uint32_t OCNIdleState; /*!《 互补通道空闲状态输出极性 */
  } TIM_OC_InitTypeDef;
  PWM模式
  TIM_OCMODE_PWM1:在向上计数时,一旦CNT《CCR时通道为有效电平,否则为无效电平;在向下计数时,一旦CNT》CCR时通道为无效电平,否则为有效电平。
  TIM_OCMODE_PWM2:在向上计数时,一旦CNT《CCR时通道为无效电平,否则为有效电平;在向下计数时,一旦CNT》CCR时通道为有效电平,否则为无效电平。
  PWM函数
  HAL_TIM_PWM_Init(TIM_HandleTypeDef *htim); //PWM定时器初始化
  HAL_TIM_PWM_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef *sConfig, uint32_t Channel); //PWM通道初始化
  HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel); //开启定时器通道的PWM
  HAL_TIM_PWM_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel); //开启定时器通道的PWM和中断
  __HAL_TIM_SetCompare(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t Compare); //设置定时器通道比较值
  PWM输出实验
  本次实验基于野火STM32F407-霸天虎V2开发板实现,使用通用定时器14产生1KHz,占空比70%的PWM波,,并通过示波器进行观察。
  打开Cube,在Timers中激活TIM14,Channel1设置为PWM Generation CH1,设置分频系数83,向上计数模式,自动重装载值999,使能自动重装载,PWM模式1,比较值699,有效电平High。TIM14时钟频率为84MHz,84分频后为1MHz,即计数周期1us,计数值1000即PWM周期1ms,频率1KHz,比较值700,占空比70%。
  
  生成代码后,在main函数中相应位置添加以下代码开启PWM输出。
  int main(void)
  {
  /* USER CODE BEGIN 2 */
  HAL_TIM_PWM_Start(&htim14, TIM_CHANNEL_1);
  /* USER CODE END 2 */
  }
  
举报

更多回帖

发帖
×
20
完善资料,
赚取积分