搭建stm32电机控制代码框架(二)——Stm32CubeMx配置定时器

这篇具有很好参考价值的文章主要介绍了搭建stm32电机控制代码框架(二)——Stm32CubeMx配置定时器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

搭建了基础的环境,配置了一个简单的工程后,CubeMx的基本操作就会了。然后基于这个操作往下推进,开始对关键模块定时器的攻略,这个部分需要先熟悉一下Stm32的定时器基本原理。

《STM32参考手册》中仅对定时器的介绍就已经占了100多页,这里就不一一展开,挑一些关键的理解一下。

STM32一共有8个都为16位的定时器。其中TIM6、TIM7是基本定时器﹔TIM2、TIM3、TIM4、TIM5是通用定时器﹔TIM1和TIM8是高级定时器。这些定时器使STM32具有定时、信号的频率测量、信号的PWM测量、PWM输出、三相6步电机控制及编码器接口等功能,都是专门为电机控制领域量身定做的。


先说说基本定时器,特点:

  • 时钟源都是TIMxCLK,时钟经过PSC预分频输入至脉冲计数器TIMx_CNT
  • 只能够向上计数,只有向上计数模式
  • 工作的计数器TIMx_CNT直接由时钟触发,当TIMx_CNT的值等于重载寄存器TIMx_ARR中的值N时,产生溢出事件,可触发中断,或DMA请求,CNT的值重置为0,重新开始计数。

再看看通用定时器,特点:

  • 具备基础的定时功能外,还具备输入脉冲频率检测,输出PWM的功能
  • 具备编码器接口
  • 溢出时触发中断或DMA
  • 相对基本定时器具备脉冲捕获/比较寄存器,能够用于捕获外部输入的脉冲数量和脉宽

试试通用定时器的触发中断的功能。

第一步:选择时钟源,配置如下图所示,选择内部时钟。设置分频系数与触发中断计数器,在下图的PSC和Counter Period设置。

搭建stm32电机控制代码框架(二)——Stm32CubeMx配置定时器

第二步:撰写打开定时器中断的代码, 生成代码后,需要一个关键步骤,就是在用户代码编辑区域,打开定时器TIM3的使能。如下图所示,可以看到User code begin2 的字样,这里就是经过CubeMx生成代码之后,用户编程序的地方。

HAL_TIM_Base_Start_IT(&htim3);

搭建stm32电机控制代码框架(二)——Stm32CubeMx配置定时器

 然后在中断程序中输入我们需要执行的操作,中断程序在哪里呢?

搭建stm32电机控制代码框架(二)——Stm32CubeMx配置定时器

 第三步:增加执行函数。在下图函数的这个里面,因为CubeMX在配置了中断之后,就会自动生成专门的中断.c文件,这里TIM3_IRQHandler就是TIM3的中断执行函数,在其中加入我们个人需要执行的代码。

搭建stm32电机控制代码框架(二)——Stm32CubeMx配置定时器

 然后电机debug运行,得到如下结果,累加时间与分频时间相同。

搭建stm32电机控制代码框架(二)——Stm32CubeMx配置定时器

再试试中断生成一路PWM的功能

第一步:配置GPIO

搭建stm32电机控制代码框架(二)——Stm32CubeMx配置定时器

第二步:配置初始电平。如下图配置PA4的输出为输出模式, 并且设置初始输出电平为高电平。

搭建stm32电机控制代码框架(二)——Stm32CubeMx配置定时器

 第三步:配置中断执行函数,执行输出电平的翻转,生成占空比为50%的PWM。

void TIM3_IRQHandler(void)
{
  /* USER CODE BEGIN TIM3_IRQn 0 */
	g_main_count ++;
  HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_4);
  /* USER CODE END TIM3_IRQn 0 */
  HAL_TIM_IRQHandler(&htim3);
  /* USER CODE BEGIN TIM3_IRQn 1 */

  /* USER CODE END TIM3_IRQn 1 */
}

输出结果,输出周期为42ms。由于此时我的定时器时钟为18M,分频系数为18,counter period为20000,经过18分频后,定时器时钟为1M,电平反转周期等于 20000/1000000 = 1/50 = 0.02s,约为20ms,单个电平持续时间为20ms,两个电平则为40ms左右,因此基本符合。这里也有个问题就是为什么不是精确的20ms,而是21ms。

搭建stm32电机控制代码框架(二)——Stm32CubeMx配置定时器文章来源地址https://www.toymoban.com/news/detail-460104.html

到了这里,关于搭建stm32电机控制代码框架(二)——Stm32CubeMx配置定时器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 搭建stm32电机控制代码框架(四)——单路PWM生成

    STM32中单路PWM的生成一般是基于某一个通用定时器,本次小实验选取TIM2通用定时器,选择PA5作为PWM端口输出。配置步骤如下: 第一步:配置外部晶振与基本的时钟,如下图所示。 (1)选择外部晶振  (2)配置时钟树,如下图所示,TIM2的时钟总线挂在ABP1上,此时时钟源为

    2024年02月07日
    浏览(26)
  • 电机FOC控制(三)STM32 CUBEMX 配置ADC采样

    本文在电机FOC控制(二)STM32 CUBEMX 配置三相PWM互补输出基础上,继续讲述如何STM32 CUBEMX 配置ADC寄存器,使TIMER1 PWM互补输出CC4触发ADC注入采样的过程。 打开Clock Configuration界面,将ADC设置为42.5MHz。 设定ADC1通道7和通道8为单端输入: 设定ADC2通道6和通道7为单端输入: ADCs_Comm

    2024年04月23日
    浏览(20)
  • 【STM32】cubeMX配置HAL库驱动L298N控制直流有刷电机

    目录 1.电机为什么需要驱动板呢?为什么不能用控制器直接控制电机呢? 2.H桥电路介绍 3.L298N原理介绍 4.实物接线图 5.CUBEMX配置 6.代码 7. 演示视频 L298N是常用来驱动小型直流有刷电机(两个)和步进电机(一个)的电机驱动板,其电路原理就是两个H桥电路,控制原理是使用

    2024年02月16日
    浏览(19)
  • stm32cubemx hal学习记录:电机控制

    1、配置RCC、SYS,SYS的Timebase Source选择TIM6 2、配置USART1、时钟84MHz 3、激活FreeRTOS,选择CMSIS_V1,Config parameters种USE_TIMERS选择ENABLE 1、选用TIM3的编码器模式  2、驱动使用L298N,将PB6、PB7设置为输出模式  3、使用TIM2的CH1输出1kHz的PWM 1、设置两个软件定时器,一个用于总控制,一个

    2024年02月17日
    浏览(17)
  • 【STM32+CUBEMX】TMC5160电机驱动简要配置

    TMC5160简介                 1.1、引脚图          1.2、关键引脚                1.2.1 模式选择引脚                  1.2.2 时钟和SPI引脚                   1.2.3 驱动使能引脚  2.SPI发送数据结构         发送到 TMC5160 的每个数据报由一个地

    2024年02月06日
    浏览(23)
  • 野火STM32电机系列(三)Cubemx配置CAN通信

    CAN接口: PI9 PB9 1.配置CAN 通信参数 由于F4的 CAN外设挂载在APB1上,时钟配置后APB1的时钟速率为42MHz,目标通信速率为1000KHz,由公式: BaudRate = 1/NominalBitTime NominalBitTime = 1tq + tBS1 +tBS2 设置参数如下: CAN时钟分频参数为7,BS1为4,BS2为1,CAN模式为Nomal模式。 生成工程 在can.c中添加

    2024年02月11日
    浏览(21)
  • STM32CubeMX 直流电机串级PID位置速度控制、HAL库、cubemx、PID、串级PID、位置控制、速度控制、双环控制

    提示:本文章的串级PID位置速度控制,是在前两篇文章速度控制,位置控制的基础上实现的,这一章节中不需要额外的cubemx的配置,只需要写简单的代码即可,复杂的地方在于串级pid的调试过程。 pid是我们在学习单片机中首先要学会的控制算法,而串级pid又是在单pid的基础上

    2024年02月14日
    浏览(25)
  • 野火STM32电机系列(六)Cubemx配置ADC规则和注入通道

    前文已经配置了GPIO、编码器 本节讲解CubeMXADC规则和注入通道 本文adc注入通道采用定时器触发,因此在上文定时器配置的基础上进行 常规信号(温度等)使用带DMA的常规通道连续采样 注入采样由定时器触发,采集电机三相电流,并进入adc中断执行10khz的控制程序 ADC硬件接口

    2024年02月08日
    浏览(20)
  • 野火STM32电机系列(五)Cubemx配置高级定时器TIM1

    鸽了一段时间,放心不会断的哈,目前仅仅是显示屏坏了,不影响后面项目 前文已经配置了GPIO、编码器 本节讲解CubeMX高级定时器TIM1配置带死区的6路互补的PWM 同时配置信号触发后续ADC采集 板子引角的原理图如下 对应的: Motor1--U+--PA8--TIM1_CH1 Motor1--U---PB13--TIM1_CH1N Motor1--V+--

    2024年02月15日
    浏览(38)
  • STM32控制矩阵按键,HAL库,cubeMX配置

    我使用的是STM32F103RCT6这款单片机,HAL库,使用cubeMX配置。 使用矩阵按键实现功能的方法为轮询法 1.首先矩阵键盘原理图如下: 2.实物图 按照矩阵键盘接法,16个按键需要8个io口,我选择了PC口的0~7号引脚,前四个依次接矩阵键盘的行,后四个依次接矩阵键盘的列;矩阵键盘的

    2023年04月17日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包