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

发布时间:2023-06-19  

poYBAGMTMm6AcdwyAAfxKLwYj9U002.png

首先先来了解一下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。把上面的参数设置好,再设置工作模式:速度模式和位置模式。最后再设置目标位置。

如果是速度模式运行,不需要设置目标位置,电机就会开始转动。如果是位置模式,则需要设置目标位置,且目标位置与电机当前位置值不同电机才会转动。下图中的红线是电机的实际速度,不管是速度模式还是位置模式,电机的运行过程会按照下图来进行。

pYYBAGMTMm6AOtS5AAH1UnCuk3c803.png

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的引脚对应如下表:

poYBAGMTMm-AUOxAAABMFdpW2XY717.png

先将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个脉冲。


电机转动的速度就由脉冲频率决定,可以根据细分及脉冲频率来换算电机实际转速。



文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>