TIM定时器

一、TIM

        TIM(Timer)定时器。定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断。

        时基单元:16位的计数器、预分频器和自动重装寄存器。

        定时器类型:高级定时器、通用定时器、基本定时器。

        STM32F103C8T6有TIM1、TIM2、TIM3、TIM4四个定时器。

二、定时器结构

1.基本定时器

        定时中断:只能选择内部时钟72MHz,直接连接到PSC(预分频器),PSC是16位(0-65535),连接到CNT(计数器),CNT是16位(0-65535),CNT的值与ARR(自动重装寄存器)设定的值比较,大于自动重装寄存器进入更新中断或更新事件,并且自动清零CNT。

        主模式触发DAC:进入更新事件直接连到TRGO,然后至DAC触发转换引脚。

2.通用定时器

        内外时钟源选择:内部时钟源72MHz;外部时钟源有TIMx_ETR、TRGI。其中TRGI输入有TIMx_ETR引脚、其他定时器、TIMx_CH1引脚边沿、TIMx_CH1引脚、TIMx_CH2引脚。

        主从触发模式:主模式将更新事件映射到TRGO上,连接至其他定时器或DAC/ADC。

3.高级定时器

三、定时中断基本结构

四、时序

1.预分频器时序

2.计数器时序

3.RCC时钟树

五、内外时钟源选择实验

1.定时器定时中断

①实验现象

        在OLED显示屏,第一行显示Number:数值,数值每隔1秒加1;第二行显示计数器的值。

②硬件设计

③软件设计

用到OLED模块。

Timer.c

Timer.h

main.c

④用到函数

外设时钟使能或失能:RCC_APB1PeriphClockCmd

配置内部时钟:TIM_InternalClockConfig

时基单元初始化:TIM_TimeBaseInit

时基单元结构体重命名:TIM_TimeBaseInitTypeDef

TIM中断标志位清零:TIM_ClearFlag

中断配置:TIM_ITConfig

NVIC优先级分组:NVIC_PrierityGroupConfig

NVIC初始化:NVIC_Init

NVIC结构体重命名:NVIC_InitStructure

定时器使能:TIM_Cmd

定时器是否触发中断:TIM_GetITStatus

定时器清除中断:TIM_ClearITPendingBit

2.定时器外部时钟

①实验现象

        OLED第一行显示Number:数值,第二行显示Counte:数值。Counte加到10,Number加1,然后Counte从零开始再加。

②硬件设计

③软件设计

用到OLED模块。

Timer.c

Timer.h

main.c

④用到函数

外设时钟使能:RCC_APB1PeriphClockCmd、RCC_APB2PreiphClockCmd

GPIO初始化:GPIO_Init

GPIO结构体重命名:GPIO_InitStructure

外部时钟模式2配置:TIM_ETRClockMode2Config

时基单元初始化:TIM_TimeBaseInit

时基单元结构体重命名:TIM_TimeBaseInitTypeDef

清除标志位:TIM_ClearFlag

中断配置:TIM_ITConfig

NVIC优先级分组配置:NVIC_PrierityGroupConfig

NVIC初始化:NVIC_Init

NVIC结构体重命名:NVIC_InitTypeDef

定时器使能:TIM_Cmd

定时器是否申请中断:TIM_GetITStatus

清除定时器申请中断:TIM_ClearITPendingBit

六、输出比较实验

1.输出比较简介

        OC(Output Compare)输出比较。输出比较可以比较CNT(计数器)和CCR(捕获/比较寄存器)的值,来对输出电平进行置1、置0或翻转操作,用于输出一定频率和占空比的PWM波形。

        每个高级定时器和通用定时器都有4个输出比较通道,高级定时器前三个通道额外拥有死区生成和互补输出功能。

2.PWM简介

        PWM(Pulse Width Modulation),脉冲宽度调制。在具有惯性系统中,可以通过对一系列脉冲宽度进行调制,来等效获得所需模拟参量。

        PWM参数:频率=1/Ts;占空比=Ton/Ts;分辨率=占空比步距变化。

3.捕获/比较通道的输出部分

        CNT(计数器)与CCR(捕获/比较寄存器)比较,CNT>=CCR,输出控制寄存器的REF(参考信号),可以至主模式控制器,也可以至从模式,CC1P进行极性选择,然后到输出使能电路,然后输出。

4.输出比较模式

        有效电平就是高电平,无效电平就是低电平。

5.PWM基本结构

6.PWM参数计算

7.舵机简介

        舵机是一种根据输入PWM信号占空比来控制输出角度的。输入PWM信号的要求周期为20ms,高电平宽度为0.5ms-2.5ms。

        舵机硬件电路,如下图所示:

        舵机使用说明,如下图所示:

8.直流电机及驱动简介

        直流电机是一种将电能转换成机械能的装置。有两个电极,正接正转,反接反转。直流电机属于大功率器件,GPIO口无法直接驱动,需要用到电机驱动电路。TB6612是一款双路H桥型直流电机驱动芯片,可以驱动两个电机的转速和方向。

        TB6612芯片硬件电路,如下图所示:

        TB6612使用说明,如下图所示:

9.PWM驱动LED呼吸灯

①实验现象

        LED灯先逐渐变亮,再逐渐变暗。

②硬件设计

③软件设计

用到Delay模块。

PWM.c

PWM.h

main.c

④用到函数

外设时钟使能:RCC_APB1PeriphClockCmd、RCC_APB2PeriphClockCmd

GPIO初始化:GPIO_Init

GPIO结构体重命名:GPIO_InitTypeDef

内部时钟配置:TIM_IniternalClockConfig

时基单元初始化:TIM_TimeBaseInit

时基单元结构体重命名:TIM_TimeBaseInitTypedef

时基单元结构体初始化:TIM_TimeBaseStructInit

输出比较单元初始化:TIM_OC1Init

输出比较单元结构体重命名:TIM_OCInitTypeDef

输出比较单元结构体初始化:TIM_OCStructInit

设置输出比较寄存器:TIM_SetCompear1

10.PWM驱动舵机

①实验现象

        按键按下,舵机旋转30°,当舵机旋转到180°时,舵机回到0°。在OLED上显示Angle:角度。

②硬件设计

③软件设计

用到OLED、Delay模块。

Key.c

Key.h

PWM.c

PWM.h

Servo.c

Servo.h

main.c

④用到函数

外设时钟使能:RCC_APB2PeriphClockCmd、GPIO_APB1PeriphClockCmd

GPIO初始化:GPIO_Init

GPIO结构体重命名:GPIO_InitTypeDef

读取输入数据:GPIO_ReadInputDataBit

内部时钟配置:TIM_InternalClockConfig

时基单元初始化:TIM_TimeBaseInit

时基单元结构体重命名:TIM_TimeBaseInitTypeDef

时基单元结构体初始化:TIM_TimeBaseStructInit

输出比较单元初始化:TIM_OC2Init

输出比较单元结构体重命名:TIM_OCInitTypeDef

输出比较单元结构体初始化:TIM_OCStructInit

定时器使能:TIM_Cmd

设置输出比较寄存器:TIM_SetCompear2

11.PWM驱动直流电机

①实验现象

        当按键按下,电机速度加20,到100时,电机反转;按键再按下速度也加20。OLED屏幕显示速度。

②硬件设计

③软件设计

用到OLED、Delay模块。

Key.c

Key.h

PWM.c

PWM.h

Motor.c

Motor.h

main.c

④用到函数

外设时钟使能:RCC_APB2PeriphClockCmd、RCC_APB1PeriphClockCmd

GPIO初始化:GPIO_Init

GPIO结构体重命名:GPIO_InitTypeDef

读取输入数据:GPIO_ReadInputDataBit

内部时钟配置:TIM_InternalClockConfig

时基单元初始化:TIM_TimeBaseInit

时基单元结构体重命名:TIM_TimeBaseInitTypeDef

时基单元结构体初始化:TIM_TimeBaseStructInit

输出比较单元初始化:TIM_OC3Init

输出比较单元结构体重命名:TIM_OCInitTypeDef

输出比较单元结构体初始化:TIM_OCStructInit

定时器使能:TIM_Cmd

设置输出比较寄存器:TIM_SetCompare3

设置GPIO高电平:GPIO_SetBits

设置GPIO低电平:GPIO_ResetBits

七、输入捕获实验

1.输入捕获简介

        IC(Input Capture)输入捕获。在输入捕获模式下,当通道输入引脚出现指定电平跳变时,当前CNT的值将被锁存在CCR中。可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数。

        高级定时器和通用定时器都有4个输入捕获通道。

2.频率测量

        测频法:闸门时间T内,对上升沿进行计次,得到N,则fx=N/T。适合高频信号。

        测周法:两个上升沿内,以标准频率fc计次,得到N,则fx=fc/N。时候低频信号。

        中界频率:测频法与测周法误差相等的频率点。fm=根号下fc/T。

3.输入捕获通道工作原理

        TIMx_CHx输入,经过异或(三相无刷电机)给TI1(通道1)。

        TIMx_CHx输入,给TIx至输入滤波器和边沿检测器,PWMI模式下可以单独设置输入滤波器和边沿测测器至两个通道,经过ICx至预分频器,产生一个更新事件,使捕获/比较寄存器所存CNT的值。

4.主从触发模式

        主模式TIM信号控制别的外设,从模式触发源选择控制自己。

5.输入捕获基本结构

6.PWMI基本结构

7.输入捕获模式测频率

①实验现象

        OLED上显示频率。

②硬件设计

③软件设计

用到OLED模块。

PWM.c

PWM.h

IC.c

IC.h

main.c

④用到函数

外设时钟使能:RCC_APB1PeriphClockCmd、RCC_APB2PeriphClockCmd

GPIO初始化:GPIO_Init

GPIO结构体重命名:GPIO_InitTypeDef

内部时钟配置:TIM_InternalClockConfig

时基单元初始化:TIM_TimeBaseInit

时基单元结构体重命名:TIM_TimeBaseInitTypeDef

时基单元结构体赋初值:TIM_TimeBaseStructInit

输出比较单元初始化:TIM_OC1Init

输出比较单元结构体重命名:TIM_OCInitTypeDef

输出比较单元结构体初始化:TIM_OCStructInit

输入捕获单元初始化:TIM_ICInit

输入捕获单元结构体重命名:TIM_ICInitTypeDef

触发源选择:TIM_SelectInputTrigger

从模式选择:TIM_SelectSlaveMode

TIM使能:TIM_Cmd

设置CCR:TIM_SetCompare1

PSC配置:TIM_PrescalerConfig

返回CCR的值:TIM_GetCapture1

8.PWMI模式测量频率和占空比

①实验现象

        在OLED上显示频率和占空比。

②硬件设计

③软件设计

用到OLED、PWM模块。

IC.c

IC.h

main.c

④用到函数

外设时钟使能:RCC_APB1PeriphClockCmd、RCC_APB2PeriphClockCmd

GPIO初始化:GPIO_Init

GPIO结构体重命名:GPIO_InitTypeDef

内部时钟配置:TIM_InternalClockConfig

时基单元初始化:TIM_TimeBaseInit

时基单元结构体重命名:TIM_TimeBaseInitTypeDef

时基单元结构体赋初值:TIM_TimeBaseStructInit

输入捕获单元初始化:TIM_ICInit

输入捕获单元结构体重命名:TIM_ICInitTypeDef

PWMI配置:TIM_PWMIConfig

触发源选择:TIM_SelectInputTrigger

从模式选择:TIM_SelectSlaveMode

TIM使能:TIM_Cmd

CCR值返回:TIM_GetCapture1、TIM_GetCapture2

八、编码器接口实验

1.编码器接口简介

        编码器接口(Encoder Interface),可以接收正交编码器信号,根据编码器旋转产生的正交信号脉冲,自动控制CNT自增或自减,从而指示编码器的位置、旋转方向和旋转速度。

        每个高级定时器和通用定时器都拥有1个编码器接口。两个输入引脚借用了输入捕获的通道1和通道2。

2.正交编码器

        正转时,A相提前B相90°;反转时,B相提前A相90°。

3.编码器接口工作原理

        TIMx_CH1、TIMx_CH2连接编码器A、B相接口输入;输出根据旋转方向使CNT自增或自减。

4.编码器接口基本结构

5.工作模式

        一共有三种计数模式。

6.实例

①均不反相

②TI1反相

7.TIM编码器接口测速

①实验现象

        OLED上显示旋转编码器速度。

②硬件设计

③软件设计

用到OLED模块。

Timer.c

Timer.h

Encoder.c

Encoder.h

main.c

④用到函数

外设时钟使能:RCC_APB1PeriphClockCmd、RCC_APB2PeriphClockCmd

GPIO初始化:GPIO_Init

GPIO结构体重命名:GPIO_InitTypedef

内部时钟配置:TIM_InternalClockConfig

时基单元初始化:TIM_TimeBaseInit

时基单元结构体重命名:TIM_TimeBaseInitTypeDef

时基单元结构体赋初值:TIM_TimeBaseStructInit

清除标志位:TIM_ClearFlag

中断配置:TIM_ITConfig

NVIC优先级分组:NVIC_PriorityGroupConfig

NVIC初始化:NVIC_Init

NVIC结构体重命名:NVIC_InitTypeDef

输入捕获初始化:TIM_ICInit

输入捕获结构体重命名:TIM_ICInitTypeDef

输入捕获结构体初始化:TIM_ICStructInit

编码器接口配置:TIM_EncoderInterfaceConfig

TIM使能:TIM_Cmd

是否申请中断:TIM_GetITStatus

清除中断:TIM_ClearITPendingBit

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值