运动控制器17:STM32的通用定时器

TIMx简介

  • 可编程预分频驱动
  • 16位
  • 自动装载计数器
  • 用于
    • 输入:测试脉冲宽度
    • 输出:产生输出波形(输出比较和PWM)
  • RCC预分频和定时器预分频,精度:nus级
  • 定时器完全独立

TIMx主要功能

  • 通用定时器包括TIM2 3 4 5
  • 16位向上,向下,向上/向下自动装载
  • 预分频
  • 4个通道:输入捕获,输出比较,PWM生成,单脉冲输出
  • 外部信号控制定时器实现同步
  • 中断:更新,触发事件(起停,初始化和外内触发)以及输入捕获和输出比较
  • 支持编码器和霍尔传感器
  • 触发输入可用于电流管理

TIMx功能描述

时基单元

  • 定时器组成为16位计数器和自动装载寄存器
  • 可向上,向下和上下双向计数
  • 三个重要寄存器:计数器,预分频,自动装载
  • 更新事件:UEV
  • 自动装载寄存器:ARR
  • 预装载寄存器:PSC

计数器模式,一共有三种

向上计数模式
  • 从0到ARR,产生UEV
  • 可以禁止更新,否则ARR的影子寄存器也会被更新
  • 更新时,所有的寄存器都更新
向下计数模式
  • 基本同上文,从ARR到0
双向计数模式
  • 基本同上文,有两次UEV产生

时钟选择

  1. 内部时钟最常用
  2. 外部时钟模式有两种,TIx和ETR
    流程如下:(相当于是计数)
    • 设置检测的通道
    • 选择滤波器带宽
    • 上升沿极性
    • 选择定时器时钟模式
    • 选择触发输入源
    • 启动定时器
      ETR模式时,设置滤波,分频,检测沿和开启模式和定时器即可,基本同TIX
  3. 内部触发IIRx,可以将两个定时器进行联动

捕获和比较通道

  • 包括比较寄存器
    • 输入为数字滤波,多路复用和预分频器
    • 输出为比较器和输出控制

输入捕获模式

  • 捕获的概念一定要搞懂:捕获模式下,当检测到某种边沿的信号时,计数器的当前值被锁存到CCR中,SR置位,产生中断或者DMA操作,这样的功能可以用来测试PWM的宽度。
  • 编程步骤如下:
  • 选择输入端
  • 配置滤波器的带宽
  • 设置有效边沿
  • 设置预分频
  • 允许捕获寄存器操作
  • 允许中断
PWM输入模式
  • 这个是输入捕获模式的一个特例,比如我们要测试PWM的占空比,CCR1用于保存周期,CCR2保存高电平事件,如下图:


    运动控制器17:STM32的通用定时器_第1张图片
    3.png
  • 操作如下:
  • 设置CCR1和CCR2的有效输入
  • 设置CCR1和CCR2有效极性
  • 设置有效的触发信号

输出比较模式

  • 比较输出功能用于控制一个输出的波形,或者指示一段时间已经到,将计数器与比较寄存器进行对比,相同时输出到设置的引脚,输出的电平同样可以设置。
  • 设置中断位,产生中断或者DMA操作
  • 输出比较模式的设置流程如下:
  • 选择时钟
  • 将数据写入ARR和CCR中
  • 如需要,设置中断和DMA
  • 设置输出模式(电平极性)
  • 启动


    运动控制器17:STM32的通用定时器_第2张图片
    4.png

PWM模式

比如要输出周期为8,高电平占3的PWM输出波形,则ARR为8,而CCRX为3,

  • ARR决定频率
  • CCRx决定占空比
  • 同样可以分为向上对齐,向下对齐和中央对齐的方式,下面是中央对齐方式的输出


    运动控制器17:STM32的通用定时器_第3张图片
    5.png

单脉冲模式

外部引脚接收到一个脉冲,比如按键,我们需要延时TDELAY以后,产生一个脉宽为TPULSE的脉冲。其中延时由CCR1来决定,脉冲由ARR-CCR1来决定.

在外部事件时清除OCXREF

这种方式下可以用于做电流控制,正常比较输出模式下,计数超过CCRX时,输出为低电平,如果CCRX固定,则输出的脉宽是固定的,但如果有外部引脚输入一个高电平(电流超出),则直接拉低输出。

编码器接口模式

这个在步进电机上会有用到,重点关注一下,图如下:


运动控制器17:STM32的通用定时器_第4张图片
6.png
  • 可以设置在T1和T2计数或者同时计数
  • 选择极性,这里为上升沿计数,同时可以设置滤波器
  • 通过两个输入的顺序,确定方向,这个方向值实时检测,相当于两个脉冲的顺序,为定时器增加了一个方向控制的信号,当然,定时器的其他功能都可以正常使用。
  • 增量编码器还有一个引脚为机械零点,我们可以设置成为外部中断,在中断服务程序中设置计数器进行复位。
  • 编码器输出给单片机建议使用比较器进行隔离,以提高抗干扰能力
  • 两个编码器输入事件的间隔信息,我们可以读取以后,从而转换成机械的动态信息(速度,加速度,减速度)

定时器输入异或功能

定时器和外部触发的同步

定时器和外部信号组合在一起,有三种模式

  1. 复位模式
    外部脉冲输入时,所有的寄存器重新读取,重新计时,同时触发标志,进行中断和DMA请求。
  2. 门控模式
    只在有外部信号时计数,其他事件计数器暂停。
  3. 触发模式
    有某个事件时,使能计数器
  4. 外部时钟模式+触发模式
    时钟由外部输入,同时用触发信号进行控制。

定时器同步

一个定时器处于主模式,对另外一个处于从模式的定时器进行复位,启动,停止和提供时钟等操作。

  1. 做为分频器

配置定时器1为主模式,每次中断时输出一个上升沿
上升沿连接到定时器2,配置定时器2为从模式
把定时器2用外部时钟模式1下,这样就连接起来了
最后启动两个定时器

  1. 使能从定时器

同样设置定时器1为主模式
设置定时器1的OC1REF波形,输出比较
配置定时器2的触发
定时器2为门控模式,也就是说,定时器1溢出以后,才控制定时器2开始计数
最后启动两个定时器

  1. 一个定时器去启动另一个定时器

有点类似于接力棒,一个定时器截至以后,另外一个接着计数,但是计数器1在重新计数

4.外部信号同步启动两个定时器

你可能感兴趣的:(运动控制器17:STM32的通用定时器)