一文搞懂STM32定时器翻转模式(产生多路频率、占空比的PWM)

这篇具有很好参考价值的文章主要介绍了一文搞懂STM32定时器翻转模式(产生多路频率、占空比的PWM)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在STM32定时器配置中,我们知道可以将定时器配置为PWM输出模式,也叫输出比较模式,通过修改ARR寄存器中的值可以改变PWM周期,通过修改CCR寄存器中的值可以修改,PWM的占空比,但是这种普通的PWM输出模式较为单一,能输出PWM的定时器有4个通道,这种方式只能够产生4路周期相等的PWM,也就是频率都一直,虽然可以改变CCR寄存器的值来调节不同占空比,但是在一些特殊应用上也会存在弊端。例如控制多台步进电机加减速等,这时候就需要多路不同频率的PWM来进行控制了,因此用普通的输出比较模式不能实现多路不同频率PWM波。

阅读过STM32官方手册的就知道,定时器还有一种模式,翻转模式,就是将定时器输出模式设置为TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle;

首先说一下TIM_OCMode_Toggle到底是什么,我们知道普通的PWM输出高低电平是根据CNT计数器中的值和CCR进行比较,若CNT<CCR则输出一种状态电平,当CNT介于CCR和ARR之间时,输出另一种状态电平。而TIM_OCMode_Toggle模式说白了就是当CNT=CCR时,输出引脚的电平会进行翻转,乍一看好像和普通的PWM输出没什么区别,但是可以通过TIM_OCMode_Toggle模式进入中断后重新设置CCR寄存器中的值,到这里可能会有点搞不懂了,为什么进入中断重新设置CCR寄存器中的值就可以改变PWM周期、占空比呢?这个中断又是什么时候进入的呢?

接下来逐一进行讲解,TIM_OCMode_Toggle模式什么时候进入中断,中断源又是什么?当CNT计数值=CCR时,会进入比较中断(在这里中断源是TIM_IT_CC1/2/3/4),也就是说当CNT计数值从0开始一直计数到CCR时,会触发TIM_IT_CC中断源,并进入中断,进入中断后我们该做的事情就是修改CCR寄存器中的值。我们先将此时的CCR寄存器中的值放入到一个变量中(TIM_GetCapture2(TIM2)),再在这个变量的基础上加上相同的数,同时赋给CCR寄存器中TIM_SetCompare3(TIM2),那么在下一次CNT=CCR时又会进行翻转电平。

我们举一个例子:若一开始定时器ARR为65535,CCR为9999,那么当CNT从0开始一直加到9999,我们假设电平为低电平,当加到9999时,会通过TIM_IT_CC中断源进入TIM中断(这个中断源只有当CNT计数值到CCR时才会触发)在中断服务函数中,我们将当前CCR的值放入capture这个变量中,再在capture值的基础上再加上相同的数(9999),同时作为新的CCR赋给定时器,这里叫CCR_NEW,CCR_NEW=9999+9999=19998。在CNT从9999计数19998时,此时CNT=CCR_NEM,又会进行翻转变为高电平,此时又会进入中断,在在CCR_NEW的基础上加上9999,以此类推,因此可以实现在一个周期内有多个脉冲出现,且占空比为50%。画一个图就更清楚了。

tim_ocmode_toggle,stm32,单片机,arm

 文章来源地址https://www.toymoban.com/news/detail-532564.html

 

 

到了这里,关于一文搞懂STM32定时器翻转模式(产生多路频率、占空比的PWM)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【STM32】- 定时器+DMA+ADC 双重模式

    目录   1 前言 2 ADC介绍 2.1 多重工作模式 2.2 多重ADC框图 2.3 规则同时模式 3 程序设计 3.1 时序图 3.2 初始化流程图 3.3 初始化代码 4 结论        关于ADC,相信大家都比较了解,关于STM32的学习教程都会有所讲解,但以查询方式、单通道讲解的较多,主要告诉大家基本的原理。

    2024年02月10日
    浏览(53)
  • STM32定时器的编码器接口模式

    MCU为STM32L431,通用定时器框图: 编码器接口模式一共有三种,通过TIMx_SMCR寄存器的SMS[3:0]位来选择。模式1计数器仅在TI1FP1的边沿根据TI2FP2的电平来判断向上/下计数;模式2计数器仅在TI2FP2的边沿根据TI1FP1的电平来判断向上/下计数;模式3计数器同时在TI1FP1和TI2FP2的边沿根据另

    2023年04月15日
    浏览(49)
  • STM32 学习笔记(六)定时器中断:内部时钟模式,外部时钟模式

    定时器是功能最强大,内容最复杂的32结构。 之前51用过的功能,定时产生中断。 输出比较,常用于产生 PWM 波形,驱动电机等。 输入捕获,测量方波频率。 编码器,读取正交编码器的波形。 最大定时时间:72M/65536/65536=中断频率,中断频率取倒数是最大定时时间。 定时器可

    2024年02月08日
    浏览(51)
  • 【STM32】【HAL库】定时器编码器模式测速

    目录 概述 HAL设置  定时器的编码器模式 定时器设置  常用函数 代码 电机AB相增量型编码器的介绍和解码方法在这里介绍过了 电机编码器 https://blog.csdn.net/m0_57585228/article/details/125791283 测速可以使用外部中断进行脉冲计数 很多型号的单片机中有专门的电路来计算脉冲的速度和

    2023年04月18日
    浏览(56)
  • STM32CubeMX | 使用STM32定时器的PWM输入模式测量脉冲宽度和周期

    本篇博客以STM32F103C8为例,其他系列MCU可能稍有不同,但原理一样。 相关链接博文: STM32CubeMX | STM32使用HAL库实现定时器PWM输出 STM32CubeMX | STM32使用HAL库进行脉冲宽度和周期测量 1、介绍 以前写过一篇博文,介绍的是如何使用定时器的输入捕获功能测量脉冲的宽度以及周期,适

    2024年02月13日
    浏览(50)
  • STM32定时器捕获编码器模式测速和方向测不准问题

    ** 问题概述 关于STM32编码器模式电机测速的资料网上一抓一大把,却发现真的拿过来用还是有问题的,比如刚刚做了个东西,是个个头比较大的麦克纳姆轮车,控制运动就需要精确的测量转速和方向,我用的是直流有刷、减速比90、11线霍尔编码器的减速电机。 原本想着用个

    2024年02月15日
    浏览(47)
  • STM32定时器的pwm1模式和pwm2模式的区别

    在向上计数时:一旦TIMx_CNTTIMx_CCR1时通道为有效电平,否则为无效电平。 在向下计数时:一旦TIMx_CNTTIMx_CCR1时通道为无效电平,否则为有效电平。 (总结:在PWM1模式下,无论是向上计数还是向下计数,TIMx_CNTTIMx_CCR1时通道为有效电平) 在向上计数时:一旦TIMx_CNTTIMx_CCR1时通道为

    2024年02月11日
    浏览(37)
  • STM32定时器编码器模式实现直流有刷电机测速(HAL库)

    最近在做一个单片机大作业,要用到直流有刷,在这里把学习编码器的知识记录一下,学习参考资料: 正点原子DMF407电机控制专题教程_V1.0 我所使用的编码器是市面上常见的 磁电增量式编码器 ,其有AB两相,用于输出电机转动时的 脉冲数 ,AB两相的先后顺序决定了电机的

    2023年04月24日
    浏览(64)
  • 初出茅庐的小李博客之STM32CubeMx配置定时器的编码器模式

    上次文章写了编码器是如何工作的,今天就来用STM32F103C8T6的TIM3的通道1跟通道2编写一个编码器识别程序。 话不多说,上教程! 选择外部高速时钟源HSE 选择中断模式触发下降沿有效 默认是上拉输入 添加用户标签为SWITCH 使能NVIC配置 选择编码器模式 分频值设置为2-1 计数值设

    2024年02月12日
    浏览(38)
  • 【单片机】STM32单片机读取旋转编码器,TIM定时器编码器模式捕获,程序

    旋转编码器简单来说,就是会输出2个PWM,依据相位可以知道旋转方向,依据脉冲个数可以知道旋转的角度。一般旋转一圈有一个固定数值的脉冲个数。 旋转编码器广泛用于电机、或者角度传感器,STM32的定时器可以直接接入这两个波形获取到信息。 前两个引脚(接地和Vcc)

    2024年02月13日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包