将步进电机与STM32F103C8T6接口

在本教程中,我将向您展示将步进电机与STM32F103C8T6 MCU基于STM32蓝色药丸板接口的程序。我将首先简要概述步进电机,其类型,其驾驶技术以及最后如何与STM32连接步进电机。

介绍

步进电动机是工业和商业应用中使用的重要类型。它们是简单的无刷电动机,可将数字脉冲转换为角旋转。

步进电机的独特功能是,每次革命通常分为不同的相等步骤,通常为200个。由于360有200个步骤0旋转,每个步骤将导致旋转1.80。为了从一个步骤移到另一个步骤,必须发送一个单独的脉冲,并且旋转速度与脉冲频率成正比。

关于步进电动机的另一个重要了解是,有两种类型的步进电动机。它们是单极步进电动机和双极步进电动机。这两者之间的主要区别在于,在单极步进电动机中,每个阶段在双极步进电动机中都有一个带中心水龙头的绕组,每个相中只有一个绕组。

双极单极步进电动机

另一个区别是这些电动机的驱动方式。由于线圈中磁铁的极性可以以单极类型的形式逆转,而无需切换电流方向,因此驱动它们非常容易。例如,您只需要一个简单的基于晶体管的电机驱动器,例如ULN2003 IC。

但是,在双极步进电动机的情况下,由于每个相只有单个绕组,因此很难直接逆转磁极。我们通常需要专用的H桥型电动机IC,例如L293D或L298N IC来驱动双极步进电机。

将步进电机与STM32F103C8T6接口

在这个项目中,我将使用一个简单的5V单极步进电动机,在该电动机中,两个绕组的中心水龙头都很普遍。这意味着电动机只有5条电线而不是六根电线。

28ByJ-48是一种非常受欢迎且便宜的业余爱好者单极步进电动机的常见类型。如果您参考该电动机的数据表,则提到它的齿轮比为64,步行角为5.6250。这意味着一个旋转需要的数字是360 / 5.625,等于64。

同样,由于齿轮比为64,因此输出轴的有效步骤是每革命的步骤乘以齿轮比,即64 * 64 = 4096。

在这个项目中,我将与ULN2003驱动器IC一起使用此步进电机,并使用STM32 MCU控制它。该项目将是沿顺时针方向和逆时针方向的旋转扫描。

需要组件

  • STM32F103C8T6基于MCU的STM32蓝色药丸板
  • 5V单极步进电动机(5线)
  • ULN2003驱动器IC
  • 连接电线
  • USB到uart转换器(如果通过UART编程)

电路原理图

下图显示了将步进电机与STM32F103C8T6 MCU接口的电路图。

与STM32F103C8T6电路图的接口步进电机

连接解释了

首先,步进电动机的红线连接到5V。接下来,ULN2003 IC的前四个输入In1至In4 IN与PA0连接到PA3。ULN2003的前四个输出即以下顺序连接到步进电动机线:

  • OUT1 - >蓝色
  • out2 - >粉红色
  • out3 - >黄色
  • OUT4 - >橙色

另外,连接ULN2003,STM32和5V电源的GND端子。

用于步进电机控制的STM32编程

首先,选择PA0至PA3作为ULN2003的输入,并将其初始化为STM32的输出。

现在使用变量将最大步骤表示为4095。这代表的是一个完整旋转的计数。现在,将初始方向顺时针置,并使用半步进技术启动步进电机。

一旦步骤计数达到0,这意味着电动机已经完成了一个旋转。现在,给出一秒钟或两秒钟的较小延迟,然后将方向更改为逆时针。将步骤计数重置为最大值,即4095,并以相反顺序开始序列。步进电动机将开始沿相反的方向旋转。在循环中重复此过程。

本代码中无需任何库,您甚至可以修改代码以接受用户输入以选择方向和步骤数。

如果您有不同的步进电动机,请参考其数据表并计算一个旋转所需的步长,齿轮比和总数。

代码

#define in1 pa0
#define in2 pa1
#define in3 pa2
#define in4 pa3
int步骤= 0;
布尔方向= true;
未签名的长期前期;
未签名的长期米利斯;
int stepsleft = 4095;
很久;
void setup()
{
pinmode(in1,输出);
pinmode(in2,输出);
pinmode(in3,输出);
pinmode(in4,输出);
}
void loop()
{
while(stepsleft> 0)
{
CurrentMillis = micros();
if(CurrentMillis-PrevTime> = 1000)
{
步进(1);
时间=时间 + micros() - previme;
PrevTime = micros();
步长 - ;
}
}
延迟(2000);
方向=!方向;
stepleft = 4095;
}

void步进(int x)
{
for(int i = 0; i {
开关(步骤)
{
情况0:
DigitalWrite(1,低);
DigitalWrite(In2,低);
DigitalWrite(In3,低);
DigitalWrite(In4,高);
休息;
情况1:
DigitalWrite(1,低);
DigitalWrite(In2,低);
DigitalWrite(In3,高);
DigitalWrite(In4,高);
休息;
案例2:
DigitalWrite(1,低);
DigitalWrite(In2,低);
DigitalWrite(In3,高);
DigitalWrite(In4,低);
休息;
案例3:
DigitalWrite(1,低);
DigitalWrite(In2,高);
DigitalWrite(In3,高);
DigitalWrite(In4,低);
休息;
案例4:
DigitalWrite(1,低);
DigitalWrite(In2,高);
DigitalWrite(In3,低);
DigitalWrite(In4,低);
休息;
案例5:
DigitalWrite(1,高);
DigitalWrite(In2,高);
DigitalWrite(In3,低);
DigitalWrite(In4,低);
休息;
案例6:
DigitalWrite(1,高);
DigitalWrite(In2,低);
DigitalWrite(In3,低);
DigitalWrite(In4,低);
休息;
案例7:
DigitalWrite(1,高);
DigitalWrite(In2,低);
DigitalWrite(In3,低);
DigitalWrite(In4,高);
休息;
默认:
DigitalWrite(1,低);
DigitalWrite(In2,低);
DigitalWrite(In3,低);
DigitalWrite(In4,低);
休息;
}
setDirection();
}
}
void setDirection()
{
如果(方向== 1)
{
步骤++;
}
如果(方向== 0)
{
脚步-;
}
如果(步骤> 7)
{
步骤= 0;
}
如果(步骤<0)
{
步骤= 7;
}
}

结论

这里实施了一个简单的项目,以证明步进电机与基于STM32F103C8T6 MCU的STM32蓝色药丸板的接口。

发表评论

您的电子邮件地址不会被公开。

电子豪华粉丝
<\/i>","library":""}}" data-widget_type="nav-menu.default">
Baidu
map