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

2022-9-3 19:24 1632 6 6 分类: MCU/ 嵌入式 文集: 德国Trinamic电机驱动芯片
首先先来了解一下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数据手册根据自己的需求进行设置。初始化程序如下:
  1. void TMC5160_Init3(void) //模式三独立模式
  2. {
  3. GPIO_InitTypeDef GPIO_Initure;
  4. __HAL_RCC_GPIOB_CLK_ENABLE(); //开启GPIOB时钟
  5. __HAL_RCC_GPIOA_CLK_ENABLE(); //开启GPIOA时钟
  6. GPIO_Initure.Pin=GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8;
  7. GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP; //推挽输出
  8. GPIO_Initure.Pull=GPIO_PULLUP; //上拉
  9. GPIO_Initure.Speed=GPIO_SPEED_FREQ_HIGH; //高速
  10. HAL_GPIO_Init(GPIOA,&GPIO_Initure);
  11. GPIO_Initure.Pin=GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;
  12. GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP; //推挽输出
  13. GPIO_Initure.Pull=GPIO_PULLUP; //上拉
  14. GPIO_Initure.Speed=GPIO_SPEED_FREQ_HIGH; //高速
  15. HAL_GPIO_Init(GPIOB,&GPIO_Initure);
  16. HAL_GPIO_WritePin(GPIOA,GPIO_PIN_6|GPIO_PIN_5,GPIO_PIN_SET);
  17. HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_RESET);
  18. HAL_GPIO_WritePin(GPIOB,GPIO_PIN_14|GPIO_PIN_13|GPIO_PIN_12|GPIO_PIN_1,GPIO_PIN_SET);
  19. HAL_GPIO_WritePin(GPIOB,GPIO_PIN_15|GPIO_PIN_2|GPIO_PIN_0,GPIO_PIN_RESET);
  20. }

然后PA8需要输出PWM方波,方波的频率决定电机转动速度,可以用PWM通道的方式搞定,也可以用定时器中断来做,这边采用定时器中断的方法,

例如,STM32F103的时钟频率为72M,分频设为72,装载值设为500,每0.5ms中断一次,PA8电平取反,1KHZ的方波就完成了。频率可以改变。程序如下:
  1. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
  2. {
  3. if(htim==(&TIM3_Handler))
  4. {
  5. COUNT++;
  6. A8=~A8;
  7. if(COUNT>=6400)
  8. {
  9. //HAL_NVIC_DisableIRQ(TIM3_IRQn);
  10. LED=1; //转一圈,停2s后继续
  11. delay_ms(2000);
  12. LED=0;
  13. COUNT=0;
  14. }
  15. }
  16. }
实现的功能是让电机转1圈后停2s后继续。
采用四相电机,脉冲数控制电机转多少,电机步距角位1.8°,一个脉冲转1.8°,200个脉冲一圈,采用16细分,那么一圈就需要3200个脉冲。
电机转动的速度就由脉冲频率决定,可以根据细分及脉冲频率来换算电机实际转速。

作者: Trinamic_TMC曹工, 来源:面包板社区

链接: https://mbb.eet-china.com/blog/uid-me-4003478.html

版权声明:本文为博主原创,未经本人允许,禁止转载!

文章评论0条评论)

登录后参与讨论
我要评论
0
6
关闭 站长推荐上一条 /2 下一条