#STM32定时器级联##CubeMX-HAL#定时器级联一篇通

成就更好的自己

在吉林省电赛A题中用到了步进电机的控制,由于需要对步进电机的转速和转动角度都进行控制,因此博主想到了一种比较新奇的方法。


目录

方法简介与分析

方法简介

优劣性

CubeMX的定时器级联配置

内部级联原理

级联配置方法


方法简介与分析

方法简介

步进电机的转速是由输入的PWM频率所决定的,步进电机的转动角度是由输入的PWM的脉冲数所决定的,由于需要对步进电机到转速和转动角度都进行控制,所以分别使用两个定时器。从定时器用作输出PWM控制电机,依靠改变PWM频率来控制转速;主定时器用来监测输出脉冲的数量,当输出的PWM脉冲数量达到目标数量时关闭从定时器的输出。

主从定时器根据级联关系,从定时器控制捕获比较通道输出的PWM的同时输出一路同步的时钟信号,主定时器将时钟源切换至从定时器输出的时钟即可完成配置;这样下来通过改变从定时器的各个寄存器值控制PWM的频率等参数,主定时器通过输入与PWM同步的时钟信号来完成对产生脉冲数的监控。

优劣性

这种方法充分利用了STM32各个定时器内部的联结关系,只用通过设置某几个寄存器的值即可对多个步进电机进行精确控制,这种方法及其适用于有多个的控制任务,处理队列,有GUI界面此外还要控制步进电机的项目。相比于传统的方法,这种级联方式达到了某种意义上的“并行处理”,对于CPU的占用率极低极低,可以有更多的时间处理其他的事情。

但是,相对的,软件和电路越复杂,系统的可靠性就越低;可靠性低主要表现在以下方面:

  • 在达到理想数量脉冲后的关脉冲动作执行不够迅速,由于程序与从定时器输出PWM是并行进行的,进入主定时器中断的时间加上执行到关从定时器PWM输出语句的时间之中很有可能会再多输出几个脉冲,造成一定量的超步。
  • 由于牵扯到定时器开关,通道开关,中断甚至中断嵌套,程序设计的逻辑会复杂相对复杂,容易出现一些意向不到的BUG。

CubeMX的定时器级联配置

内部级联原理

 

在定时器内部的电路设计中,当符合捕获比较寄存器的条件时,捕获比较通道可以进行一个中断或一次DMA输出(序号1);TRGO(序号2)是一个时钟输出,通过设置可以将时钟输出的信号源选择为OCnREF(序号1),则每次符合捕获比较寄存器的时候,通道会正常进行的PWM输出的电平翻转(假如某个通道被使能为PWM输出模式),同时会有一个同步脉冲输出至TRGO。以上是从定时器的原理。

从定时器从TRGO输出的时钟信号分到了不同的ITR时钟线上,每个主从定时器都有严格的对应关系(表在下面),主定时器只需将时钟源切换至对应从定时器的ITR时钟线上(序号3)即可使用从定时器输出的时钟。

级联配置方法

在怎样配置之前,先查一查准备使用的芯片的芯片手册,找到这么几张表格,不同系列的芯片表格对应关系不太一样,博主的是STM32H7XX的。

 

 

 

 

首先根据实际情况挑选需要级联的两个主从定时器,例如:TIM1为主定时器,TIM2为从定时器。

先配置从定时器:

 

 

剩下的正常设置定时器参数,是否间接修改影子寄存器,设置PWM参数。

根据表格,TIM1为主,TIM2为从,使用的是ITR0时钟线,接下来配置主定时器:

 

 

主定时器的PSC寄存器可以设为1,则ARR寄存器的值即为理想的脉冲数;开一下主定时器中断,到达理想脉冲数后及时关闭从定时器即可。

 

最后在说明一下主从定时器之分:博主是按照人的主观意念分的,因为TIM1负责检测脉冲数,且有权利关闭TIM2,所以TIM1为主定时器,TIM2为从定时器。但是,在STM32定时器的说明和考究中,由于TIM2为TIM1提供了时钟,所以在官方芯片说明和CubeMX的使用中,处处都显示着TIM2为主定时器,TIM1为从定时器。防止有些小伙伴学到深处发现不对劲,特此说明。

  • 11
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是关于STM32定时器级联的介绍: STM32定时器级联是指将多个定时器连接在一起,形成一个更长的计数器。这种级联方式可以扩展计数器的位数,从而扩展计时范围。在STM32中,定时器级联可以过将两个定时器(TIM)连接在一起来实现。 具体实现步骤如下: 1. 配置第一个定时器(TIM1)和第二个定时器(TIM2)的基本参数,包括时钟源、预分频器、计数模式等。 2. 配置第一个定时器(TIM1)的输出比较模式,使其输出一个特定的PWM波形。 3. 配置第二个定时器(TIM2)的输入捕获模式,使其可以捕获第一个定时器(TIM1)的PWM波形。 4. 将第二个定时器(TIM2)的时钟源设置为第一个定时器(TIM1)的输出,这样第二个定时器(TIM2)就可以根据第一个定时器(TIM1)的PWM波形进行计数。 5. 在程序中读取第一个定时器(TIM1)和第二个定时器(TIM2)的计数值,将它们相加即可得到一个更长的计数器。 下面是一个示例代码,演示了如何将两个定时器级联在一起: ```c #include "stm32f4xx.h" void TIM_Config(void); int main(void) { TIM_Config(); while (1) { uint32_t count1 = TIM_GetCounter(TIM1); uint32_t count2 = TIM_GetCounter(TIM2); uint32_t total_count = (count1 << 16) | count2; // 将两个计数器的值相加,得到一个更长的计数器 } } void TIM_Config(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1 | RCC_APB2Periph_TIM2, ENABLE); TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; TIM_ICInitTypeDef TIM_ICInitStructure; // 配置TIM1 TIM_TimeBaseStructure.TIM_Period = 999; // PWM周期为1000个时钟周期 TIM_TimeBaseStructure.TIM_Prescaler = 83; // 时钟预分频器为84 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = 499; // 占空比为50% TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC1Init(TIM1, &TIM_OCInitStructure); TIM_Cmd(TIM1, ENABLE); // 配置TIM2 TIM_TimeBaseStructure.TIM_Period = 0xFFFF; // 计数器最大值为65535 TIM_TimeBaseStructure.TIM_Prescaler = 0; TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); TIM_ICInitStructure.TIM_Channel = TIM_Channel_1; TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; TIM_ICInitStructure.TIM_ICFilter = 0x0; TIM_ICInit(TIM2, &TIM_ICInitStructure); TIM_SelectInputTrigger(TIM2, TIM_TS_TI1FP1); TIM_SelectSlaveMode(TIM2, TIM_SlaveMode_Reset); TIM_Cmd(TIM2, ENABLE); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值