广东湘恒智能科技有限公司
主营产品: 西门子PLC代理商,plc变频器,伺服电机,人机界面,触摸屏,线缆,DP接头
电机控制基础——定时器基础知识与PWM输出原理
发布时间:2024-11-26

单片机开发中,电机的控制与定时器有着密不可分的关系,无论是直流电机,步进电机还是舵机,都会用到定时器,比如最常用的有刷直流电机,会使用定时器产生PWM波来调节转速,通过定时器的正交编码器接口来测量转速等。

本篇先介绍定时器的基础知识,然后对照这些知识介绍一下定时器输出PWM的基本原理,以及编程实现与代码分析。

首先来看一下定时器的基础介绍。

11 定时器基础知识

1.1 定时器种类

以STM32F4为例,一共有14个定时器:

gaoji定时器(TIM1、TIM8)

通用定时器(TIM2~TIM5,TIM9~TIM14)

TIM2~TIM5(通用定时器里功能较多的)

TIM9/TIM12

TIM10/TIM11和TIM13/TIM14

基本定时器  (TIM6、TIM7)

1.2 各种定时器的特性1.2.1 gaoji定时器与通用定时器

这里列举gaoji定时器的特性,在此基础上,对比添加其与通用定时器的不同之处:

16 位递增、递减、递增/递减自动重载计数器(TIM2 和 TIM5为32位)

16 位可编程预分频器,用于对计数器时钟频率进行分频(即运行时修改),分频系数介于 1 到 65536 之间。

多达 4 个独立通道(TIM9/TIM12有2个,TIM10/TIM11,TIM13/TIM14只有1个),可用于:

输入捕获

输出比较

PWM 生成(边沿和中心对齐模式)(gaoji定时器和TIM2~TIM5特有,其它是只有边沿对齐模式)

单脉冲模式输出

带可编程死区的互补输出(gaoji定时器特有)。

使用外部信号控制定时器且可实现多个定时器互连的同步电路(TIM10/TIM11,TIM13/TIM14没有)。

重复计数器,用于仅在给定数目的计数器周期后更新定时器寄存器(gaoji定时器特有)。

用于将定时器的输出信号置于复位状态或已知状态的断路输入(gaoji定时器特有)。

发生如下事件时生成中断/DMA 请求:

更新:计数器上溢/下溢、计数器初始化(通过软件或内部/外部触发)

触发事件(计数器启动、停止、初始化或通过内部/外部触发计数)(TIM10/TIM11和TIM13/TIM14没有此功能)

输入捕获

输出比较

断路输入(gaoji定时器特有)

支持定位用增量(正交)编码器和霍尔传感器电路(gaoji定时器和TIM2~TIM5特有)。

外部时钟触发输入或逐周期电流管理(gaoji定时器和TIM2~TIM5特有)。

1.2.2 基本定时器

基本定时器  (TIM6、TIM7)的功能比较单一,所具有的功能如下:

16 位自动重载递增计数器

只能定时,没有外部 IO

16 位可编程预分频器,用于对计数器时钟频率进行分频(即运行时修改),分频系数介于 1 和 65536 之间

用于触发 DAC 的同步电路

发生如下更新事件时会生成中断/DMA 请求:计数器上溢

1.3 定时器使用配置

使用定时器,一般需要配置如下:

时基:也就是计数器的计数时钟

自动重装载值:每次计数的最大值

输出通道:当需要使用定时器输出某种波形时(如PWM)

输入通道:当需要使用定时器接收某种波形时(如电机编码器信号)

先来看一下定时器的原理框图,对定时器的内部原理有一个整体直观的感受:


1.3.1 时钟源

从上图可以看出,计数器的时钟源可以为:

由RCC的内部时钟分频得到

由定时器的TIMx_ETR引脚得到

由其他定时器通过TRGO输出得到

一般使用RCC的内部时钟CK_INT,也即定时器时钟TIMxCLK,经APB1或APB2预分频器后分频提供。

关于定时器时钟源的具体细节,可以来看一下STM32F4的时钟树:


从STM32F4的内部时钟树可知:

gaoji定时器timer1, timer8以及通用定时器timer9, timer10, timer11的时钟来源是APB2总线(84MHZ)

通用定时器timer2~timer5,通用定时器timer12~timer14以及基本定时器timer6,timer7的时钟来源是APB1总线(42MHZ)

另外:

当APB1和APB2分频数为1的时候,各定时器的时钟就是对应的APB1或APB2的时钟;

如果APB1和APB2分频数不为1,那么各定时器的时钟就是对应的APB1或APB2的时钟的2倍;

由于库函数中 APB1 预分频的系数默认是 2,所以,所以TIM1、TIM8~TIM11的时钟为APB2时钟的两倍即168MHz,TIM2~TIM7、TIM12~TIM14的时钟为APB1的时钟的两倍即84MHz。

1.3.2 计数器时钟

由于定时器时钟的提供的可以频率较高,计数器不需要这么高的频率来计数,所以会进行降频,使用一个合适的低频时钟来计数。

定时器时钟经过PSC 预分频器之后,即 CK_CNT,用来驱动计数器计数。PSC 是一个16 位的预分频器,可以对定时器时钟TIMxCLK 进行 1~65536 之间的任何一个数进行分频。

具体计算方式为:CK_CNT=TIMxCLK/(PSC+1)。

比如,使用STM32F4的通用定时器2(TIM2CLK为APB1的时钟的两倍即84MHz),PSC设置为83,则计数时钟为84MHz/(83+1)=1MHz,即1ms计一个数。

1.3.3 计数器

 计数器 CNT 是一个 16 位的计数器,只能往上计数,最大计数值为 65535。当计数达到自动重装载寄存器的时候产生更新事件,并清零从头开始计数。

1.3.4 自动重装载寄存器

 自动重装载寄存器 ARR 是一个 16 位的寄存器,这里面装着计数器能计数的最大数值。当计数到这个值的时候,如果使能了中断的,定时器就产生溢出中断。

2定时器输出PWM原理

如下图是PWM输出的原理示意图:

假设定时器工作模式设置为向上计数 PWM模式,且当 CNT

当 CNT 值小于 CCRx 的时候, IO 输出高电平 (1)

当 CNT 值大于等于 CCRx 的时候,IO 输出低电平 (0)

当 CNT 达到 ARR 值的时候,重新归零,然后重新向上计数,依次循环。

因此,改变 CCRx 的值,就可以改变 PWM 输出的占空比,改变 ARR 的值,就可以改变 PWM 输出的周期(频率),这就是利用定时器输出PWM 的基本原理。


展开全文
拨打电话 微信咨询 发送询价