STM32F103系列的单片机一共有11个守时器,其间:
2个高档守时器
4个一般守时器
2个根本守时器
2个看门狗守时器
1个体系嘀嗒守时器
除掉看门狗守时器和体系滴答守时器的八个守时器列表;
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.89nsTdtg死区时刻步进值,它的值是守时器的周期乘以相应的数字得到的
下面看看官方给的公式怎么运用,如下: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.如此而已!