基于STM32CUBEMX驱动低压步进器电机驱动器STSPIN220----2.驱动STSPIN220
套件概述
本文档的目标是提供关于使用STM32CubeMX驱动低压步进电机驱动器STSPIN220的详尽信息和操作指南。通过本文档,将深入了解如何利用STM32CubeMX来配置电机驱动器,以及如何实现对步进电机的精确控制和运动。
最近在弄ST的课程,需要样片的可以加群申请:615061293 。
样品申请
https://www.wjx.top/vm/PpC1kRR.aspx
视频教学
https://www.bilibili.com/video/BV1Ju4y1R7mA/
基于STM32CUBEMX驱动低压步进器电机驱动器STSPIN220(1)----驱动STSPIN220
完整代码下载
https://download.csdn.net/download/qq_24312945/88184732
STSPIN220描述
STSPIN220是一款专为步进电机设计的高度集成型芯片,其独特的特性和功能使其在小型VFQFPN 3 x 3 x 1.0 mm封装中融合了控制逻辑和低RDS(on)功率级,为电机控制领域提供了出色的解决方案。
集成的控制逻辑和低RDS(on)功率级: STSPIN220集成了高效的控制逻辑和低RDS(on)功率级,这意味着它能够以高效的方式驱动步进电机,从而实现更低的能耗和更高的性能。
微步进分辨率和PWM电流控制: 该芯片内置的控制器充分利用了固定关断时间和高达1/256步进的微步进分辨率,以实现精准的PWM电流控制。这意味着可以实现更加精细的步进电机运动控制,从而满足不同应用的需求。
电池供电和零功耗模式: STSPIN220的设计兼顾了电池供电场景,可以强制进入零功耗状态,从而在电池供电情况下延长电池的使用寿命。这在移动设备和便携式应用中尤为有用。
全套保护机制: 该芯片提供了全面的保护机制,包括过电流保护、过温保护和短路保护等。这些保护机制能够确保步进电机在各种异常情况下保持稳定和安全运行,有效保护系统的可靠性。
综上所述,STSPIN220作为一款专为步进电机设计的芯片,在小型封装中融合了多种先进功能。它通过集成的控制逻辑、微步进分辨率和全套保护机制,为步进电机应用提供了高效、精确和安全的驱动解决方案,适用于各种应用领域,从工业自动化到便携式设备。无论是节能、精密控制还是延长电池寿命,STSPIN220都能够为项目带来可靠的性能和出色的效果。
STSPIN220所有功能
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
REF为参考电压,最大范围是-0.3-1V
电流配置
下图有配置公式。
可以看到R_SNS为0.68R,若设置200mA,那么V_REF=0.68R*200MA=136mV,和上面说的V_REF=136mV相符。
细分配置
STSPIN最高提供了256细分的操作,具体配置如下所示。
IO配置
查看原理图,主要有6个IO需要配置。
分别是STBY、EN、MODE1、MODE2、MODE3、MODE4。
IO说明如下所示。
其中EN\FAULT为使能管脚,需要配置为开漏输出。
使能高电平时候STSPIN220正常工作。
下图为设置细分示意图。STBY是STSPIN220驱动器中的一种状态,表示待机状态(Standby)。在待机状态下,驱动器可能会降低功耗,停止执行步进操作,以便在不需要进行步进电机运动时节省能源。当驱动器从待机状态退出时,会获取MODE输入的值。需要注意的是MODE1和MODE2都为低电平时候强制为全步模式。
启动时序图如下所示,具体有如下几个步骤。
- 上电:首先,将驱动器供电,即将VS供电电压连接到驱动器。但是保持STBY和EN/FAULT输入都处于低电平状态。
- 设置MODEx输入:根据目标步进分辨率(可以参考Table 1),设置MODEx输入引脚的状态。这些引脚决定了步进电机的微步运动模式。
- 等待:等待至少1微秒(t MODEsu 最小时间)。这个等待时间是确保MODEx输入被稳定设置的时间。
- 将STBY引脚置高:将STBY引脚设置为高电平。这将导致之前设置的MODEx配置在设备内部被锁存。
- 等待:再等待至少100微秒(t MODEho 最小时间)。这个等待时间是确保MODEx配置被正确锁存的时间。
- 启用电源级:释放EN/FAULT输入,使电源级开始工作。这意味着驱动器已经准备好执行步进操作。
通过按照这个推荐的上电顺序和设置过程,您可以确保在驱动器开始工作之前,各个输入的状态都稳定,并且微步模式配置正确地被锁存,从而实现步进电机的精确控制。这个过程有助于减少潜在的启动问题和不稳定性。
具体配置如下所示。
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);
}
定时器配置
STM32CUBEMX中,选择定时器1,并将其配置为PWM输出模式。确保选择了正确的定时器通道(通道4)。
配置定时器1的时钟源和预分频因子。根据应用的要求和系统时钟频率,选择适当的时钟源和预分频因子,以获得所需的脉冲频率。将定时器1的时钟源和预分频因子配置为适合您的应用的值。
PWM频率计算如下所示。
在上述配置中,将定时器1的预分频系数设置为48-1,自动重载值设置为1000-1。根据这些配置,PWM的频率可以计算为48,000,000 / ((48-1+1) * (1000-1+1)) = 1000Hz,即1kHz。
在定时器中,通道的 “pulse”(脉冲)是指定时器输出的信号的一种特性。每个定时器通道都可用于生成脉冲信号,而 “pulse” 通常指的是单个脉冲的持续时间。在这种设置中,我们将脉冲的占空比配置为50%,因此设置为500-1。
初始化mode
由于需要对mode进行初始化,主要操作为4个IO口,所以需要先对mode3管脚进行IO初始化为普通IO,后续切换为TIM模式。
/* USER CODE BEGIN 4 */
void MX_GPIO_Init_mode3(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
/* GPIO Ports Clock Enable */
__HAL_RCC_GPIOA_CLK_ENABLE();
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(mode3_GPIO_Port, mode3_Pin, GPIO_PIN_RESET);
/*Configure GPIO pins : PAPin PAPin PAPin PAPin
PAPin */
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(GPIOA, &GPIO_InitStruct);
}
/* USER CODE END 4 */
注意需要声明一下函数。
/* USER CODE BEGIN 0 */
void MX_GPIO_Init_mode3(void);
/* USER CODE END 0 */
同时定时器初始化需要关闭。
在初始化完毕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(&htim1,TIM_CHANNEL_4);
/* USER CODE END 2 */