你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

硬件机制实现固定个数的 PWM 脉冲输出

[复制链接]
STMCU小助手 发布时间:2022-8-2 18:26
前言
STM32 高级定时器提供了丰富可调的功能。应用中,需要输出固定个数 PWM 脉冲时,可以利用 STM32 高级定时器的硬件机制,实现在不占用 CPU 资源的情况下,输出固定 PWM 脉冲数。本文利用 STM32CubeMX,介绍如何利用 STM32 高级定时器实现固定个数 PWM 脉冲的输出。


一 实现机制
利用 STM32 定时器的 PWM 模式和单脉冲模式,结合高级定时器独有的重复计数(TIMx_RCR 寄存器)功能,实现固定个数 PWM 脉冲的输出。实现机制如下图所示。





根据应用需要,利用自动装载寄存器(TIMx_ARR)、预分频寄存器(TIMx_PSC)等配置对应的 PWM 周期;利用自动装载寄存器(TIMx_ARR)、TIMx_CCRx 配置需要的占空比;利用 TIMx_RCR 配置需要的脉冲个数,TIMx_RCR 的范围0~255,所以利用这种机制,输出 PWM 脉冲的个数在 1~256 范围内。
在启动 PWM 前,开启单脉冲模式(单脉冲模式会在更新事件发生时,停止计数器),高级定时器在输出对应个数的PWM 脉冲后自动停止,实现输出固定个数 PWM 的需求。更多关于配置细节的介绍请参考文档 RM0090


二 实现例
首先利用 STM32CubeMX 生成 PWM 输出的初始化工程,然后介绍如何通过简单的添加,实现固定个数 PWM 脉冲的输出。
本文中例程基于 STM32F4xG-Eval 板和 HAL 驱动库,利用高级定时器 1 的通道 3 输出 PWM 脉冲。为简化演示环节,本文中不对 STM32 时钟、PWM 周期等配置来源做细节讨论,具体实现可参考 STM32 参考手册中定时器章节,以及 ST 提供的PWM 例程。实现步骤如下(开发者也可以直接在 PWM 例程上做修改实现,从而省略 STM32CubeMX 生成工程的步骤):
1. 利用 STM32CubeMX 获取 PWM 输出的初始化工程。
a. 选择对应的目标微控制器(本文采用 STM32F407IG),选择调试接口、外部时钟(根据硬件平台情况)、
高级定时器 1 通道 3 选择‘PWM Genration CH3’(其他通道也支持)。


53HTX`WFHZLX1HM}GQ]Y{ZM.png


b. 切换至‘Configuration’标签页,单击‘TIM1’打开 TIM1 配置界面。配置如下。


@07V]R6OU5`1S14P_9MNE.png

QSV76)5WMMC494@[[PSWW7K.png
Repetition Counter 决定了 PWM 脉冲个数(Repetition 值 + 1)。更多详细介绍请参考对应 STM32 的参考
手册中定时器章节。

2. 在生成工程的 main.c 中,添加单脉冲模式的支持,实现固定个数 PWM 脉冲的输出。
下述指令,产生固定个数的 PWM 脉冲,然后 PWM 输出自动停止。注:停止时,电平对应为 CH Polarity 设置状态。
  1. <font face="Tahoma"><font size="3"><font color="#000000">/* USER CODE BEGIN 2 */ </font></font></font>
  2. <font face="Tahoma"><font size="3"><font color="#000000"> /* Reset the OPM Bit */</font></font></font>
  3. <font face="Tahoma"><font size="3"><font color="#000000"> htim1.Instance->CR1 &= ~TIM_CR1_OPM;</font></font></font>
  4. <font face="Tahoma"><font size="3"><font color="#000000"> /* Configure the OPM Mode */</font></font></font>
  5. <font face="Tahoma"><font size="3"><font color="#000000"> htim1.Instance->CR1 |= TIM_OPMODE_SINGLE;</font></font></font>
  6. <font face="Tahoma"><font size="3"><font color="#000000"> </font></font></font>
  7. <font face="Tahoma"><font size="3"><font color="#000000"> if(HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3) != HAL_OK)</font></font></font>
  8. <font face="Tahoma"><font size="3"><font color="#000000"> {</font></font></font>
  9. <font face="Tahoma"><font size="3"><font color="#000000"> /* PWM Generation Error */</font></font></font>
  10. <font face="Tahoma"><font size="3"><font color="#000000"> Error_Handler();</font></font></font>
  11. <font face="Tahoma"><font size="3"><font color="#000000"> }</font></font></font>
  12. <font face="Tahoma"><font size="3"><font color="#000000"> /* USER CODE END 2 */</font></font></font>
复制代码

按照上述配置及调用,输出 PWM 脉冲如下图所示。
另外,在再次启动时,如果需要更改 PWM 脉冲个数,仅需更改重复计数器参数即可,如下方式所示(输出 10 个 PWM脉冲)。
  1. <font face="Tahoma"><font size="3"><font color="#000000">htim1.Init.RepetitionCounter = 9;</font></font></font>
  2. <font face="Tahoma"><font size="3"><font color="#000000"> if (HAL_TIM_PWM_Init(&htim1) != HAL_OK)</font></font></font>
  3. <font face="Tahoma"><font size="3"><font color="#000000"> {</font></font></font>
  4. <font face="Tahoma"><font size="3"><font color="#000000"> /* PWM Generation Error */</font></font></font>
  5. <font face="Tahoma"><font size="3"><font color="#000000"> Error_Handler();</font></font></font>
  6. <font face="Tahoma"><font size="3"><font color="#000000"> } </font></font></font>
  7. <font face="Tahoma"><font size="3"><font color="#000000"> if(HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3) != HAL_OK)</font></font></font>
  8. <font face="Tahoma"><font size="3"><font color="#000000"> {</font></font></font>
  9. <font face="Tahoma"><font size="3"><font color="#000000"> /* PWM Generation Error */</font></font></font>
  10. <font face="Tahoma"><font size="3"><font color="#000000"> Error_Handler();</font></font></font>
  11. <font face="Tahoma"><font size="3"><font color="#000000"> } </font></font></font>
复制代码


三 小结
通过使用高级定时器独有的重复计数器,能够在不占用 CPU 资源的情况下,实现固定 PWM 脉冲数的输出。如果没有额外高级定时器可用,可以利用普通定时器,通过在比较中断中计算产生 PWM 脉冲数,到达指定的 PWM 脉冲数时关闭定时器实现,这种方式会占用少量 CPU 资源处理中断服务。


完整版请查看:附件





R@71EGPVOH}JLB1@~LJF5)9.png

Output the specified number of PWM pulses.pdf

下载

920.81 KB, 下载次数: 39

收藏 评论0 发布时间:2022-8-2 18:26

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版