STM32F103系列单片机中的定时器工作原理解析

发布者:陈书记最新更新时间:2020-02-06 来源: elecfans关键字:STM32F103系列  单片机  定时器 手机看文章 扫描二维码
随时随地手机看文章

STM32F103系列的单片机一共有11个定时器,其中:

2个高级定时器

4个普通定时器

2个基本定时器

2个看门狗定时器

1个系统嘀嗒定时器

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

8个定时器分成3个组;

TIM1和TIM8是高级定时器

TIM2-TIM5是通用定时器

TIM6和TIM7是基本的定时器

这8个定时器都是16位的,它们的计数器的类型除了基本定时器TIM6和TIM7都支持向上,向下,向上/向下这3种计数模式

STM32F103系列单片机中的定时器工作原理解析

计数器三种计数模式

向上计数模式:从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.如此而已!

关键字:STM32F103系列  单片机  定时器 引用地址:STM32F103系列单片机中的定时器工作原理解析

上一篇:基于STM32F4单片机USART寄存器控制的设计
下一篇:融性能、集成度和能效于一身,STM32H7系列问市

推荐阅读最新更新时间:2024-11-18 21:01

STC12单片机实现自动下载程序
在STC单片机中有两个程序区,用户程序区与ISP程序区。 单片机上电后(冷启动,并非外部手动复位或看门狗复位),先会运行ISP程序,检测是否有合法的下载命令流,占时几十毫秒到几百毫秒, 如果没有合法的下载命令流,则立即运行用户程序。 如果有合法的下载命令流,则ISP监控程序开始与ISP下载软件通信,软件也会进入编程模式,向监控程序发送程序码,监控程序接收程序码,并将其写入用户程序区中。 在编程完毕,对程序校验成功后,用户程序立即生效,开始运行用户程序。 若没有在软件通过串口配合上位机对IAP_CONTR寄存器进行设置(比如下面的程序),那么STC-ISP尝试与MCU握手连接的时候,是以“最低波特率”设置项中的波
[单片机]
STC12<font color='red'>单片机</font>实现自动下载程序
以PIC16C72单片机控制为核心的水温水位控制器设计
太阳能热水器因具有节能环保、使用费用低廉等优点正快速进入千家万户,与太阳能热水器配套的水温水位控制器十分方便用户的使用,产品市场前景好,被受到广泛重视和研究。但当前使用的水温水位控制器仍存在着许多缺馅,如按键功能设计不合理,需要复用按键,用户操作离不开说明书,操作仪表复杂,给用户带来了许多麻烦;选用的水温传感器参数和测量电路不合理,容易因热击穿损坏;水位传感 器容易结水垢或开裂故障多,使用寿命短,维修成本高。迄今为止,国内外还没有质量过关的水温水位控制仪。针对上述问题,为使控制器的功能更全面实用,操作更简便、直观,提高传感器的可靠性,降低维修成本,笔者结合PIC单片机和NTC热敏传感器技术,设计了一个适用于落水式太阳能热水器的
[单片机]
以PIC16C72<font color='red'>单片机</font>控制为核心的水温水位控制器设计
STM32单片机(三)-基本的工程文件介绍
stm32一个工程项目,需要有如下三个大类文件: cmsis files:Cortex Microcontroller Software Interface Standard cortex系列的微控制器接口标准文件,这是arm公司提供的最底层的文件,也是工程里最底层的层面。我们看到有stm32f0xx.h core_m0.h system_stm32f0xx.h system_stm32f0xx.c等。 peripheral‘s drivers files:外设驱动文件,这是st公司提供的,中间层面。常见的有misc,ppp,rcc等。这里注意下现在最新的库是V3.5,和以往的有所不同。因此这也是为什么我看别人的工程项目有
[单片机]
如何设计一个以AVR单片机为控制芯片的电子镇流器?
引言 电子镇流器是新型节能产品,不仅能带动一些照明灯具,还可以和一些紫外灯结合在一起,对于空气净化和水源净化都有着非常大的作用。当前,全世界都在大力提倡环境保护,电子镇流器间接地为环保提供了原动力。 AVR单片机是一款性价比较高的单片机,用这种单片机来对电子镇流器进行调光和时间采样非常合适,首先是AVR单片机本身较稳定,抗干扰能力比较强,其次是其本身的Harvard结构使得运行速度比较快,数据回读时间较快,可以实现实时在线控制。 1 AVR单片机介绍 1.1 AVR单片机的特点 与以往的8位单片机相比,AVR单片机采用Harvard结构,也就是程序总线和数据总线分开,并采用两级流水线,具备1MIPS/MHz的高速运行处理能
[单片机]
如何设计一个以AVR<font color='red'>单片机</font>为控制芯片的电子镇流器?
基于MC9S12DG128单片机的智能车控制系统设计
在智能车竞赛中,参赛队伍应在车模平台基础上,制作一个能够自主识别路线的智能车,然后在专门设计的赛道上自动识别道路并行驶。本文所设计的智能车,采用16位MC9S12DG128单片机作为数字控制器,由安装在车前部的黑白CMOS摄像头负责采集赛道信息,在单片机对信号进行判断处理后,由PWM发生模块发出PWM波对转向舵机进行控制,从而完成智能车的转向。智能车后轮上装有旋转编码器,可用来采集车轮速度的脉冲信号,然后由单片机使用PID控制算法处理后的控制量去改变电机驱动模块的PWM波占空比,从而控制智能车的行驶速度。 1 系统硬件电路组成 设计有效的智能车控制系统必须首先掌握控制对象的特性。根据对智能车特点的分析,可以认为,智能车转向控制
[单片机]
基于MC9S12DG128<font color='red'>单片机</font>的智能车控制系统设计
单片机传感器测量系统温度误差补偿的解决方案
  1 引言   对高精度传感器,温度误差已成为提高其性能的严重障碍,特别是在环境温度变化较大的应用场合更是如此。依靠传感器本身附加一些简单的硬件补偿措施是很困难的,目前对于一传感器测量系统已大量引入了单片机,实现自动检测和控制。因此用单片机自身的特点,利用软件来解决传感器温度误差难题是一条有效途径。   在一单片机传感器测量系统中,要解决传感器温度误差补偿问题,首先要测出传感器点的温度,该温度信号作为多路采样开关采集信号的一路送入单片机。测温元件通常是安装在传感器内靠近敏感元件的地方,用来测量传感器点的环境温度,测温元件的输出经放大及A/D转换送到单片机,单片机通过并行接口接收温度数据,并暂存温度数据。信号采样结束,单片机运
[单片机]
STC12C2052AD单片机AD转换C语言程序的实现
功能:STC12C2052AD AD转换C程序 +PWM输出功能 成功使用。 应用:AD检测电压进行过欠压保护(继电器控制)+PWM把直流电压斩波成脉动直流。 板子功能:给手机电池充电。 降压用的LM317,小电流应用应该够了。没时间去买开关管,就用的9013开关。 图纸: //以下是成功了的程序。如果你需要应用在你自己的项目中,您只需要更改io就能直接应用了 //程序的完整版本下载地址:http://www.51hei.com/ziliao/file/stc12c2052adde.rar #include stc12c2052ad.h //stc 单片机 专用的头文件 #include int
[单片机]
STC12C2052AD<font color='red'>单片机</font>AD转换C语言程序的实现
利用基于闪存的MCU实现用户数据存储
  采用微控制器的大多数设备还需要某种机制来存储在断电时仍要被记住的那些设置数据。例如,在更换电池后记不住预设电台的收音机肯定不会在市场上取得很大的成功。用户希望喜爱的电台、预设温度、参数选择和其他永久性信息能长久保存下来供每次开机时直接取用。   为了满足这种用户需求,设计师一般使用串行EEPROM。这些器件又小又便宜,具有很长的历史,设计工程师用起来得心应手。但在今天对成本极其敏感的市场下,即使这样一个廉价的器件也可能突破成本预算。因此许多设计师试图寻求并利用已经包含在微控制器芯片中的资源:程序闪存中剩余的空间。   过去,许多微控制器使用ROM或可紫外线擦除的EPROM来存储程序指令。但现在越来越多的微控制器转用闪存技术
[安防电子]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved