低压步进器电机驱动器STSPIN220开发(1)----驱动STSPIN220 STSPIN220 是一款步进电机驱动器,在一个小型 VFQFPN 3 x 3 x 1.0 mm 封装中集成了控制逻辑和低 RDS(开启)功率级。该套件提供一整套保护功能,包括过电流、过热和短路保护,并且可以强制进入零消耗状态,从而显著延长电池寿命。 本文档的目标是提供关于使用STM32CubeMX驱动低压步进电机驱动器STSPIN220的详尽信息和操作指南。通过本文档,将深入了解如何利用STM32CubeMX来配置电机驱动器,以及如何实现对步进电机的精确控制和运动。
最近在弄ST的课程,需要样片的可以加群申请:615061293 。 
[https://www.wjx.top/vm/PpC1kRR.aspx]
[https://www.bilibili.com/video/BV1Db8gzMEC7]
[https://download.csdn.net/download/qq_24312945/91621943]
首先需要准备一个开发板,这里我准备的是自己绘制的开发板,需要的可以进行申请。 主控为STM32H503CBT6,驱动器为STSPIN220

https://github.com/CoreMaker-lab/STSPIN220
https://gitee.com/CoreMaker/STSPIN220
STSPIN220 是一个集成了控制逻辑和功率级的微步进驱动芯片,用于驱动双极型步进电机。下图图展示了芯片如何接收指令并控制两相电机的四个输出端(OUTA1/A2,OUTB1/B2)。

STSPIN220作为一款专为步进电机而设计的芯片,具备多项卓越特性,为电机控制领域提供了高度可靠的解决方案: 宽范围工作电压: STSPIN220支持广泛的工作电压范围,从1.8V至10V,这意味着它适用于各种不同电源供应场景,从低电压到标准电压范围。 高输出电流能力: 最大输出电流1.3 Arms使STSPIN220能够驱动具有较高电流需求的步进电机,确保电机能够以足够的力量进行运动。 低RDS(ON)值: 芯片的高低侧电流传感器及MOSFET具有低RDS(ON)值,仅为0.4Ω(典型值)。这将减少功耗和热量损耗,提升电机的效率和性能。 精细的微步进控制: STSPIN220能够实现每次步进高达1/256的微步进,这使得步进电机的运动变得更加平滑和精准,适用于需要高精度控制的应用。 电流控制通过可编程关断时间: 芯片利用可编程关断时间来实现电流控制,这可以根据应用需求调整电机的电流,以获得最佳性能。 全套保护机制: STSPIN220提供全面的保护机制,包括非耗散性过电流保护、短路保护和热关断。这些保护机制确保在异常情况下电机驱动器和步进电机都能够安全运行。 极低待机耗电量: 该芯片的待机模式耗电量不足80 nA,这使得它非常适合在需要节能和延长电池寿命的应用中使用。
综上所述,STSPIN220以其广泛的工作电压范围、高输出电流能力、微步进控制、电流控制方式、保护机制以及低待机耗电量,为步进电机驱动提供了一种先进的解决方案。无论是在性能、效率还是电源管理方面,STSPIN220都为步进电机应用带来了出色的表现和可靠性。

对于小电流电机,R10改为10K以下,这里设置为5.1k

REF为参考电压,最大范围是-0.3-1V

下图有配置公式。

可以看到R_SNS为0.68R,若设置200mA,那么V_REF=0.68R*200MA=136mV,和上面说的V_REF=136mV相符。

STSPIN最高提供了256细分的操作,具体配置如下所示。

查看原理图,主要有6个IO需要配置。 分别是STBY、EN、MODE1、MODE2、MODE3、MODE4。


IO说明如下所示。 其中ENFAULT为使能管脚,需要配置为开漏输出。 使能高电平时候STSPIN220正常工作。



下图为设置细分示意图。


启动时序图如下所示,具体有如下几个步骤。

具体配置如下所示。 
用STM32CUBEMX生成例程,这里使用MCU为STM32H503CB。 配置时钟树,配置时钟为250M。

拉高 EN/FAULT 开始运行 。




初始阶段为 MODE3 微步设定,之后为 Step Clock 输入 。


STM32CUBEMX中,选择定时器1,并将其配置为PWM输出模式。确保选择了正确的定时器通道(通道1)。

配置定时器1的时钟源和预分频因子。根据应用的要求和系统时钟频率,选择适当的时钟源和预分频因子,以获得所需的脉冲频率。将定时器1的时钟源和预分频因子配置为适合您的应用的值。 PWM频率计算如下所示。

在上述配置中,将定时器1的预分频系数设置为250-1,自动重载值设置为1000-1。根据这些配置,PWM的频率可以计算为250,000,000 / ((250-1+1) * (1000-1+1)) = 1000Hz,即1kHz。 在定时器中,通道的 "pulse"(脉冲)是指定时器输出的信号的一种特性。每个定时器通道都可用于生成脉冲信号,而 "pulse" 通常指的是单个脉冲的持续时间。在这种设置中,我们将脉冲的占空比配置为50%,因此设置为500-1。

STSPIN220.c 和 STSPIN220.h 文件是用于控制 STSPIN220 步进电机驱动器的 HAL 底层驱动代码。

STSPIN220使能、低功耗、方向初始化如下所示。
//使能操作 1使能0失能
void STSPIN220_enable(uint8_t enable)
{
if(enable)
HAL_GPIO_WritePin(EN_GPIO_Port, EN_Pin, 1);
else
HAL_GPIO_WritePin(EN_GPIO_Port, EN_Pin, 0);
}
//方向设置 0反1正
void STSPIN220_setDirection(uint8_t direction)
{
if(direction)
HAL_GPIO_WritePin(MODE4_GPIO_Port, MODE4_Pin, 1);
else
HAL_GPIO_WritePin(MODE4_GPIO_Port, MODE4_Pin, 0);
}
//低功耗模式 1使能0失能
void STSPIN220_Stby(uint8_t stby)
{
if(stby)
HAL_GPIO_WritePin(STBY_GPIO_Port, STBY_Pin, 0);
else
HAL_GPIO_WritePin(STBY_GPIO_Port, STBY_Pin, 1);
}
在main.c中添加对应头函数。
/* USER CODE BEGIN Includes */
#include "STSPIN220.h"
/* USER CODE END Includes */
变量定义。
/* USER CODE BEGIN 0 */
// 初始化 MODE3 引脚(即 STCK),用作步进脉冲输出
void MX_GPIO_Init_mode3(void);
uint16_t STSPIN220_PwmNum; // 控制电机旋转步数(PWM脉冲数量)
uint8_t STSPIN220_flag = 0; // PWM计数完成标志
uint8_t STSPIN220_Dir_flag = 0; // 电机方向标志:0反向,1正向
/* USER CODE END 0 */
由于需要对mode进行初始化,主要操作为4个IO口,所以需要先对mode3管脚进行IO初始化为普通IO,后续切换为TIM模式。
/* USER CODE BEGIN 4 */
/**
* @brief 初始化 MODE3(STCK)引脚为输出模式,用于产生步进脉冲
*/
void MX_GPIO_Init_mode3(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
// 开启 GPIOA 时钟
__HAL_RCC_GPIOA_CLK_ENABLE();
// 设置初始电平为低
HAL_GPIO_WritePin(MODE3_GPIO_Port, MODE3_Pin, GPIO_PIN_RESET);
// 配置 MODE3 为推挽输出,无上拉下拉,低速
GPIO_InitStruct.Pin = MODE3_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(MODE3_GPIO_Port, &GPIO_InitStruct);
}
/* USER CODE END 4 */
同时定时器初始化需要关闭。

在初始化完毕mode3之后需要进行en和stby设置,具体如下所示。
/* USER CODE BEGIN 2 */
MX_GPIO_Init_mode3();
HAL_Delay(100);
STSPIN220_SetStepMode(0);//mode1-mode4都关闭
STSPIN220_enable(0);//使能操作 1使能0失能
STSPIN220_Stby(1);//低功耗模式 1开启低功耗0关闭低功耗
HAL_Delay(100);
STSPIN220_SetStepMode(2);//细分操作
STSPIN220_Stby(0);//低功耗模式 1开启低功耗0关闭低功耗,加载mode
HAL_Delay(100);//等待电平稳定
STSPIN220_setDirection(1);//0反1正
HAL_Delay(100);//等待电平稳定
STSPIN220_enable(1);//使能操作 1使能0失能
HAL_Delay(100);
MX_TIM1_Init();
HAL_TIM_PWM_Start_IT(&htim1, TIM_CHANNEL_1); // 启动 TIM1 通道1,PWM带中断
/* USER CODE END 2 */
审核编辑 黄宇
全部0条评论
快来发表一下你的评论吧 !