STM32/GD32驱动步进电机芯片TM2160

官方概要

TMC2160是一款带SPI接口的大功率步进电机驱动IC。它具有业界最先进的步进电机驱动器,具有简单的步进/方向接口。采用外部晶体管,可实现高动态、高转矩驱动。基于TRINAMICs先进的spreadCycle和stealthChop切割机,驱动器确保绝对无噪音运行,并结合最高效率和最佳电机扭矩。高集成度,高能效和小尺寸使小型化和可扩展系统具有成本效益的解决方案。完全兼容的TMC5160提供了一个额外的运动控制器,使步进电机控制更加容易。
在这里插入图片描述

简单介绍

两种模式,简单步进和步进模式

与TM5160类似,5160有中文手册,可参考,

TMC2160相比于TM5160

模式只有两种

模式 1:脉冲和方向驱动器
像 TMC4361 这样的外部高性能 S-ramp 运动控制器或 CPU 产生与系统内其他部件(如电机) 同步的脉冲和方向信号。TMC5160 控制电流和运动模式,并反馈电机状态。 microPlyer 自动平滑运动。SD_MODE 接高电平使能此模式(SD_MODE=1,SPI_MODE=1)。在该模式下,用户通过 SPI 接口来配置 TMC5160 的寄存器。TMC5160 的功能和 DRV8825 类似,外界通过脉冲和方向引脚来控制步进电机运动。

模式 2:简单的步进和方向驱动器
TMC5160 根据步进和方向信号控制电机。microPlyer自动平滑运动,配置由硬件引脚完成。 静止保持电流控制由TMC 5160完成。可选的反馈信号作为错误检测和同步标志的输出。 SPI_MODE 接地,SD_MODE 接高电平使能此模式(SD_MODE=1,SPI_MODE=0)。在该模式下,SPI 接口失能,TMC5160 的工作状态由 CFG 引脚配置。TMC5160 可以完全独立工作,不需要接 CPU。

大体概括,一个是脉冲控制,配置由主控SPI配置,另一个就是指通过脉冲和方向引脚发PWM波控制。
在这里插入图片描述

本文 STM32或者GD32配置使用第二种。

整体架构流程

实际上程序十分简单,只需要配置一个方向信号和PWM脉冲即可
思路十分简单,可以不参考代码自己配置
1首先配置选择TM2150模式,配置控制芯片的IO口
2配置PWM输出,定时器中断模式或者只是PWM输出都可以
3使能,控制电机旋转

void TMC2160_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);      

} 

PWM输出配置TMC2160

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;

        }

    }

} 
GD32是一款基于ARM Cortex-M系列的微控制器,控制步进电机通常需要通过脉冲序列(通常是四相步进电机的常用接法:单线、双线或多线)来驱动。以下是使用GD32控制步进电机持续正向旋转的基本步骤: 1. **配置GPIO**: - 首先,你需要将GD32的一个或多个GPIO端口配置为推挽输出模式,用于发送步进电机驱动信号。 2. **生成脉冲序列**: - 对于连续旋转,通常使用“半步”模式(也叫“微步”),即快速发出一系列短促的脉冲。这可以通过计数器或者定时器来实现,设定周期并按特定频率发送高电平(代表电机前进)和低电平(停止)。 3. **设置方向**: - 如果你的步进电机有方向指示器,比如细分线,确保每次改变脉冲顺序时都是从当前电机位置开始,而不是立即反转。 4. **控制中断**: - 可能需要设置定时器溢出中断,以便在每个脉冲周期结束后自动切换到下一个状态,保持步进电机的连续运转。 5. **软件控制**: - 编写一个循环,在这个循环里不断更新定时器的值,并处理中断触发的事件。 ```c // 示例代码片段 void motor_forward(void) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_InitStructure; // 初始化GPIO为推挽输出 GPIO_InitStructure.GPIO_Pin = GPIO_PIN_0; // 替换为你实际使用的GPIO引脚 GPIO_InitStructure.GPIO_Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_FREQ_VERY_HIGH; HAL_GPIO_Init(GPIOA, &GPIO_InitStructure); // 初始化定时器 TIM_InitStructure.TIM_Prescaler = 8399; // 计算合适的预分频值 TIM_InitStructure.TIM_Period = 1000; // 设置周期等于脉冲宽度 TIM_InitStructure.TIM_ClockDivision = 0; TIM_InitStructure.TIM_CounterMode = TIM_COUNTERMODE_UP; HAL_TIM_Base_Init(&htim1, &TIM_InitStructure); while (1) { HAL_TIM_Base_Start_IT(&htim1); // 开始定时器 // 当定时器溢出时会触发中断,这里可以添加中断处理函数 } } // 中断服务程序示例 void HAL_TIM奧aseElapsedCallback(TIM_HandleTypeDef *htim){ GPIO_SetBits(GPIOA, GPIO_PIN_0); // 发送下一步的脉冲 HAL_Delay(1); // 短暂延时,等待脉冲结束 GPIO_ResetBits(GPIOA, GPIO_PIN_0); } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超级馒头神

看看谁给我第一个打赏。太感谢您

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值