首页 > 其他分享 >使用STM32控制TMC5160驱动步进电机

使用STM32控制TMC5160驱动步进电机

时间:2022-09-03 19:22:35浏览次数:83  
标签:PIN 电机 模式 STM32 TMC5160 MODE 步进 GPIO

 

 

首先先来了解一下TMC5160的3种工作模式 TMC5160通过两个引脚来控制它的工作模式:SD_MODE和SPI_MODE。 1、当SD_MODE接地,SPI_MODE拉高,TMC5160即工作在模式1(SPI控制模式)。在该模式下,用户通过SPI接口来设置TMC5160的寄存器。 TMC5160使用自己的梯形曲线发生器来控制步进电机转动,用户需要设置:开始运动速度VSTART、第一段折线末速度V1、最大速度VMAX、停止速度VSTOP、第一段折线的加速度A1、第二段折线加速度AMAX、第四段折线的减速度DMAX、第五段折线的减速度D1。把上面的参数设置好,再设置工作模式:速度模式和位置模式。最后再设置目标位置。 如果是速度模式运行,不需要设置目标位置,电机就会开始转动。如果是位置模式,则需要设置目标位置,且目标位置与电机当前位置值不同电机才会转动。下图中的红线是电机的实际速度,不管是速度模式还是位置模式,电机的运行过程会按照下图来进行。 2、当SD_MODE接高电平,SPI_MODE拉高,TMC5160工作在模式2(SPI+S/D)。在该模式下,用户通过SPI接口来设置TMC5160的寄存器。TMC5160的功能和DRV8825类似,外界通过脉冲和方向引脚来控制步进电机运动。 3、当SD_MODE接高电平,SPI_MODE接地,TMC5160工作在模式3(S/D独立模式)。在该模式下,SPI接口失能,TMC5160的工作状态由CFG引脚配置,外界通过脉冲和方向引脚来控制步进电机运动。TMC5160可以完全独立工作,不需要接CPU。   目前是实现电机的简单转动,下面将用模式三来控制电机。 该模式下不需要通过SPI通讯,配置相关GPIO引脚和发送频率一定的正弦波即可。TMC5160的GPIO和STM32的引脚对应如下表: 先将SD_MODE接地,SPI_MODE拉高(PB1=1,PB=0),进入独立模式。 其它引脚的参数可以参考TMC5160数据手册根据自己的需求进行设置。初始化程序如下:
void TMC5160_Init3(void)                 //模式三独立模式
{
    GPIO_InitTypeDef GPIO_Initure;

    __HAL_RCC_GPIOB_CLK_ENABLE();                   //开启GPIOB时钟
    __HAL_RCC_GPIOA_CLK_ENABLE();                   //开启GPIOA时钟
      
    GPIO_Initure.Pin=GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8;                                
    GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;          //推挽输出
    GPIO_Initure.Pull=GPIO_PULLUP;                  //上拉
    GPIO_Initure.Speed=GPIO_SPEED_FREQ_HIGH;    //高速
    HAL_GPIO_Init(GPIOA,&GPIO_Initure);

    GPIO_Initure.Pin=GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;                       
    GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;          //推挽输出
    GPIO_Initure.Pull=GPIO_PULLUP;                  //上拉
    GPIO_Initure.Speed=GPIO_SPEED_FREQ_HIGH;    //高速
    HAL_GPIO_Init(GPIOB,&GPIO_Initure);
      
    HAL_GPIO_WritePin(GPIOA,GPIO_PIN_6|GPIO_PIN_5,GPIO_PIN_SET);
    HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_RESET);      
    HAL_GPIO_WritePin(GPIOB,GPIO_PIN_14|GPIO_PIN_13|GPIO_PIN_12|GPIO_PIN_1,GPIO_PIN_SET);
    HAL_GPIO_WritePin(GPIOB,GPIO_PIN_15|GPIO_PIN_2|GPIO_PIN_0,GPIO_PIN_RESET);      
}
然后PA8需要输出PWM方波,方波的频率决定电机转动速度,可以用PWM通道的方式搞定,也可以用定时器中断来做,这边采用定时器中断的方法, 例如,STM32F103的时钟频率为72M,分频设为72,装载值设为500,每0.5ms中断一次,PA8电平取反,1KHZ的方波就完成了。频率可以改变。程序如下:
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    if(htim==(&TIM3_Handler))
    {
        COUNT++;
        A8=~A8;

        if(COUNT>=6400)
        {
            //HAL_NVIC_DisableIRQ(TIM3_IRQn);
            LED=1;                  //转一圈,停2s后继续
            delay_ms(2000);
            LED=0;
            COUNT=0;
        }
    }
}
实现的功能是让电机转1圈后停2s后继续。 采用四相电机,脉冲数控制电机转多少,电机步距角位1.8°,一个脉冲转1.8°,200个脉冲一圈,采用16细分,那么一圈就需要3200个脉冲。 电机转动的速度就由脉冲频率决定,可以根据细分及脉冲频率来换算电机实际转速。

标签:PIN,电机,模式,STM32,TMC5160,MODE,步进,GPIO
From: https://www.cnblogs.com/xing2/p/16653368.html

相关文章

  • STM32CubeIDE和ITM SWV实现printf调试信息的打印
    STM32CubeIDE+ITMSWV实现printf调试信息的打印STM32开发时,使用printf函数来打印信息是一种方便的调试方法。不需要像使用断点来中断程序运行即可方便地查看想要的信息......
  • STM32串口乱码问题
    1:修改文件stm32f4xx.h中的HSEVALUE;defineHSE_VALUE((uint32_t)25000000)---#defineHSE_VALUE((uint32_t)8000000)2:修改完还有乱码,则修改system_stm32f4xx.......
  • 逐步进入BERT
    逐步进入BERTBERT,代表双向编码器表示来自变形金刚.BERT由两部分组成:预训练和微调G。BERT旨在通过联合调节所有层的左右上下文,从未标记的文本中预训练深度双......
  • STM32F769NI-Discovery开发笔记(二)UART
    开发环境:开发板:STM32F769NI-DiscoveryKEIL版本:5.33STM32CubeMX版本:6.3.0 本篇主要讲STM32F769NI的串口实现STM32F769NI-Discovery开发板的usb接口带有stlink与串口,......
  • stm32c8t6的定时器中断
    采用的定时器为TIM3(TIM1和TIM2已经被用于产生PWM波了),TIM3对应的是APB1Timerclocks,时钟频率Tclk为72MHz。溢出时间\(Tout=\frac{(arr+1)*(psc+1)}{Tclk}\)......
  • 兼容树莓派引脚定义,适配多种模块--米尔百变STM32MP1开发板演示
    大家好,我是米尔的工程师,今天给大家带来一款全新的米尔板卡标杆产品:MYD-YA15XC-T。今天的文章将分成两部分来介绍这块基于STM32MP1处理器开发的板卡。一、百变开发板MYD-Y......
  • 电机的反电动势了解及步进电机的基本特性
    电动势,是导体内电子运动的必要条件,也是电子运动趋势的一种表现,因而具有一定的方向性。电动势的方向,规定为从电源的负极,经过电源内部指向电源的正极,即与电源两端电压的......
  • stm32 在arduino平台上开启非默认外设
    起初原因是我试图编译fsmc,但始终无法编译。在C:\Users\kyo\.platformio\packages\framework-arduinoststm32\system\STM32F1xx\stm32f1xx_hal_conf_default.h里看到这个 ......
  • stm32学习|cubemx配置通用定时器
    stm32学习|cubemx配置通用定时器使用cubemx配置定时器时,存在internalclock和ETR2,后面编程的时候一直没办在在中断函数中处理数据,最后发现应该选择internalclock.Clock......
  • TMC2209步进驱动芯片基本配置及使用
    TMC2209是用于两相步进电机的超静音电机驱动器IC。TMC2209与许多传统驱动器以及TMC2208引脚兼容。TRINAMICs先进的StealthChop2斩波器可确保电机无噪音运行,实现最......