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.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.如此而已!