stm32f103定时器,STM32F103的11个定时器详解

发布时间:2023-09-20  

  STM32F系列属于中低端的32位ARM微控制器,该系列芯片是意法半导体(ST)公司出品,其内核是Cortex-M3。该系列芯片按片内Flash的大小可分为三大类:小容量(16K和32K)、中容量(64K和128K)、大容量(256K、384K和512K)。

  这篇文章主要谈谈STM32F103的11个定时器的详细介绍,一起来了解一下。


  STM32F103的11个定时器详解

  STM32F103系列的单片机一共有11个定时器,其中:2个高级定时器、4个普通定时器、2个基本定时器、2个看门狗定时器、1个系统嘀嗒定时器。

  出去看门狗定时器和系统滴答定时器的八个定时器列表:

  stm32f103定时器,STM32F103的11个定时器详解

  8个定时器分成3个组;TIM1和TIM8是高级定时器、TIM2-TIM5是通用定时器、TIM6和TIM7是基本的定时器,这8个定时器都是16位的,它们的计数器的类型除了基本定时器TIM6和TIM7都支持向上,向下,向上/向下这3种计数模式。

  计数器三种计数模式

  向上计数模式:从0开始,计到arr预设值,产生溢出事件,返回重新计时 向下计数模式:从arr预设值开始,计到0,产生溢出事件,返回重新计时 中央对齐模式:从0开始向上计数,计到arr产生溢出事件,然后向下计数,计数到1以后,又产生溢出,然后再从0开始向上计数。(此种技术方法也可叫向上/向下计数)

  基本定时器(TIM6,TIM7)的主要功能: 只有最基本的定时功能,。基本定时器TIM6和TIM7各包含一个16位自动装载计数器,由各自的可编程预分频器驱动。

  通用定时器(TIM2~TIM5)的主要功能: 除了基本的定时器的功能外,还具有测量输入信号的脉冲长度( 输入捕获) 或者产生输出波形( 输出比较和PWM)。

  高级定时器(TIM1,TIM8)的主要功能: 高级定时器不但具有基本,通用定时器的所有的功能,还具有控制交直流电动机所有的功能,你比如它可以输出6路互补带死区的信号,刹车功能等等。

  通用定时器的时钟来源; a:内部时钟(CK_INT);b:外部时钟模式1:外部输入脚(TIx);c:外部时钟模式2:外部触发输入(ETR);d:内部触发输入(ITRx):使用一个定时器作为另一个定时器的预分频器。

  通用定时期内部时钟的产生:

  从截图可以看到通用定时器(TIM2-7)的时钟不是直接来自APB1,而是通过APB1的预分频器以后才到达定时器模块。

  当APB1的预分频器系数为1时,这个倍频器就不起作用了,定时器的时钟频率等于APB1的频率;当APB1的预分频系数为其它数值(即预分频系数为2、4、8或16)时,这个倍频器起作用,定时器的时钟频率等于APB1时钟频率的两倍。

  自动装在寄存器arr值的计算: Tout= ((arr+1)*(psc+1))/Tclk;Tclk:TIM3的输入时钟频率(单位为Mhz)。 Tout:TIM3溢出时间(单位为us)。

  计时1S,输入时钟频率为72MHz,加入PSC预分频器的值为35999,那么: ((1+psc )/72M)*(1+arr )=((1+35999)/72M)*(1+arr)=1秒 则可计算得出自动窗装载寄存器arr=1999。

  通用定时器PWM工作原理

  以PWM模式2,定时器3向上计数,有效电平是高电平,定时器3的第3个PWM通道为例:

  定时器3的第3个PWM通道对应是PB0这引脚,三角顶点的值就是TIM3_ARR寄存器的值,上图这条红线的值就TIM3_CCR3 当定时器3的计数器(TIM3_CNT)刚开始计数的时候是小于捕获/比较寄存器(TIM3_CCR3)的值,此时PB0输出低电平,随着计数器(TIM3_CNT)值慢慢的增加。

  当计数器(TIM3_CNT)大于捕获/比较寄存器(TIM3_CCR3)的值时,这时PB0电平就会翻转,输出高电平,计数器(TIM3_CNT)的值继续增加,

  当TIM3_CNT=TIM3_ARR的值时,TIM3_CNT重新回到0继续计数,PB0电平翻转,输出低电平,此时一个完整的PWM信号就诞生了。

  PWM输出模式

  STM32的PWM输出有两种模式:

  模式1和模式2,由TIMx_CCMRx寄存器中的OCxM位确定的(“110”为模式1,“111”为模式2)。区别如下:

  110:PWM模式1,在向上计数时,一旦TIMx_CNT

  在向下计数时,一旦TIMx_CNT》TIMx_CCR1时通道1为无效电平(OC1REF=0),否则为有效电平(OC1REF=1)。

  111:PWM模式2-在向上计数时,一旦TIMx_CNTTIMx_CCR1时通道1为有效电平,否则为无效电平。 由以上可知:

  模式1和模式2正好互补,互为相反,所以在运用起来差别也并不太大。而从计数模式上来看,PWM也和TIMx在作定时器时一样,也有向上计数模式、向下计数模式和中心对齐模式

  PWM的输出管脚:不同的TIMx输出的引脚是不同(此处设计管脚重映射) TIM3复用功能重映射:注:重映射是为了PCB的设计方便。值得一提的是,其分为部分映射和全部映射

  PWM输出频率的计算:PWM输出的是一个方波信号,信号的频率是由TIMx的时钟频率和TIMx_ARR这个寄存器所决定的;输出信号的占空比则是由TIMx_CRRx寄存器确: 占空比=(TIMx_CRRx/TIMx_ARR)*100% PWM频率的计算公式为:

  其中F就是PWM输出的频率,单位是:HZ; ARR就是自动重装载寄存器(TIMx_ARR); PSC 就是预分频器(TIMx_PSC); 72M就是系统的频率;STM32 高级定时器PWM的输出。

  一路带死区时间的互补PWM的波形图

  STM32F103VC这款单片机一共有2个高级定时器TIM1和TIM8,这2个高级定时器都可以同时产生3路互补带死区时间的PWM信号和一路单独的PWM信号,具有刹车输入功能,在紧急的情况下这个刹车功能可以切断PWM信号的输出 还具有支持针对定位的增量(正交)编码器和霍尔传感器电路。

  高级控制定时器(TIM1 和TIM8) 由一个16位的自动装载计数器组成,它由一个可编程的预分频器驱动,它适合多种用途,包含测量输入信号的脉冲宽度( 输入捕获) ,或者产生输出波形(输出比较、PWM、嵌入死区时间的互补PWM等)。

  使用定时器预分频器和RCC时钟控制预分频器,可以实现脉冲宽度和波形周期从几个微秒到几个毫秒的调节。高级控制定时器(TIM1 和TIM8) 和通用定时器(TIMx) 是完全独立的,它们不共享任何资源。

  死区时间

  H桥电路为避免由于关断延迟效应造成上下桥臂直通,有必要设置死区时间,死区时间可有效地避免延迟效应所造成的一个桥臂未完全关断,而另一桥臂又处于导通状态,避免直通炸开关管。

  死区时间越大,电路的工作也就越可靠,但会带来输出波形的失真以及降低输出效率。 死区时间小,输出波形要好一些,但是会降低系统的可靠性,一般这个死区时间设置为us级。

  元器件死区时间是不可以改变的,它主要是取决于元器件的制作工艺和材料!原则上死区时间当然越小越好。设置死区时间的目的,其实说白了就是为了电路的安全。最佳的设置方法是:在保证安全的前提下,设置的死区时间越小越好。以不炸功率管、输出不短路为目的。

  STM32死区时间探究

  设置寄存器:就是刹车和死区控制寄存器(TIMx_BDTR),这个寄存器的第0—7位,这8个位就是用来设置死区时间的,使用如下:

  以TIM1为例说明其频率是如何产生的。定时器1适中产生路线:

  系统时钟-》 AHB预分频 -》 APB2预分频 –》 TIM1倍频器–》 产生TIM1的时钟系统

  流程图看可以看出,要想知道TIM1的时钟,就的知道系统时钟,AHB预分频器的值,还有APB2预分频器的值,只要知道了这几个值,即可算出TIM1的时钟频率?

  这些值从何来,在“SystemInit()”这个时钟的初始化函数中已经给我们答案了,在这个函数中设置的系统时钟是72MZ,AHB预分频器和APB2预分频器值都是设置为1,由此可算出:TIM1时钟频率:

  72MHZ了,TDTS=1/72MHZ=13.89ns

  Tdtg死区时间步进值,它的值是定时器的周期乘以相应的数字得到的。

  下面看看官方给的公式如何使用,如下:

  DTG[7:5]=0xx=》DT=DTG[6:0]×Tdtg,Tdtg=TDTS

  首先由DTG[7:5]=0xx可以知道的是:DTG的第7位必须为0,剩余的0~6这7位可配置死区时间,假如TIM1的时钟为72M的话,那么由公式Tdtg=TDTS可计算出:TDTS=1/72MHZ=13.89ns。

  有了这个值,然后通过公式DT=DTG[6:0]×Tdtg即可计算出DT的值。

  如果DTG的第0~6位均为0的话,DT=0

  如果DTG的第0~6位均为1的话,DT=127*13.89ns=1764ns 如果TIM1的时钟为72M的话,

  公式1可设置的死区时间0~1764ns,也就是说:

  如果你的项目需要输出的PWM信号要求的死区时间是0——1764ns的时候你就可以用公式1

  同样可计算出4个公式的死去区间,如下:

  公式1:DT=0~1764ns

  公式2:DT=1777.9ns~3528.88ns 公式3:DT=3555.84ns~7000.56ns 公式4:DT=7111.68ns~14001.12ns

  如何设置死区时间

  假如我们设计了一个项目要求输出的PWM信号中加入一个3us的死区时间因为3us这个值在第二个公式决定的死区范围之内所以选择第二个公式。3000/(13.89*2)=108, 所以DTG[5:0]=108-64=44

  所以DTG=127+44+32=203=0XCB,TIM1-》BDTR|=0Xcb

  这里为什么要在加上一个32那?在公式2中DTG的第5位是一个X,也就是说这一位可以设置为高电平,也可以设置为低电平,在这里我们将这一位设置为了高电平,所有要在加上一个32.如此而已!


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>