步进电动机是无刷直流电动机,可以以小角度旋转,这些角度称为步进。通常,步进电机使用200步来完成360度旋转,这意味着其每步旋转1.8度。步进电机用于许多需要精确旋转运动的设备,例如机器人,天线,硬盘驱动器等。我们可以通过给出适当的说明将步进电机旋转到任何特定角度。主要有两种类型的步进电机, 单极 和 双极。单极型更易于操作,控制和获取。在本教程的此处,我们将 步进电机与STM32F103C8(蓝色药丸)板连接。
所需材料
- STM32F103C8(蓝色药丸)
- 步进马达(28BYJ-48)
- ULN2003 IC
- 电位器10k
- 面包板
- 跳线
步进马达(28BYJ-48)
28BYJ-48是单极性步进电机,需要5V电源。电机具有4线圈单极布置,每个线圈的额定电压为+ 5V,因此相对容易通过Arduino,Raspberry Pi和STM32等任何微控制器进行控制。但是我们需要ULN2003之类的电机驱动IC来驱动它,因为步进电机消耗大电流,并且可能损坏微控制器。
另一个需要注意的重要数据是 步幅角:5.625°/ 64。 这意味着,当电动机以8步顺序运行时,每一步将移动5.625度,并且将需要64步(5.625 * 64 = 360)来完成一个完整的旋转。其他规格在下面的数据表中提供:
还要检查与其他微控制器的步进电机接口:
- 步进电机与Arduino Uno的接口
- Raspberry Pi的步进电机控制
- 步进电机与8051单片机的接口
- 步进电机与PIC单片机的接口
步进电机也可以在没有任何微控制器的情况下进行控制,请参阅此步进电机驱动器电路。
ULN2003电机驱动器IC
它用于根据从微控制器接收到的脉冲来驱动电动机。下图是ULN2003的示意图:
引脚(IN1至IN7)为输入引脚,引脚(OUT 1至OUT 7)为对应的输出引脚。为COM提供输出设备所需的正电源电压。步进电机的其他连接在下面的电路图部分中给出。
电路图和连接
以下是以上电路图的连接说明。
STM32F103C8(蓝色药丸)
如下图所示,PWM引脚以波形格式(〜)表示,其中有15个此类引脚可用于脉冲输出到步进电机。我们只需要使用四个引脚(PA0至PA3)即可。
具有ULN2003电机驱动器IC的STM32F103C8
引脚(PA0至PA3)被视为与ULN2003 IC的输入引脚(IN1-IN4)连接的输出引脚。
STM32F103C8的引脚 |
ULN2003 IC的引脚 |
PA0 |
IN1 |
PA1 |
IN2 |
PA2 |
IN3 |
PA3 |
IN4 |
5伏 |
通讯 |
地线 |
地线 |
带步进电机的ULN2003 IC(28BYJ-48)
ULN2003 IC的输出引脚(OUT1-OUT4)连接到步进电机引脚(橙色,黄色,粉红色和蓝色)。
ULN2003 IC的引脚 |
步进电机销 |
输出1 |
橙子 |
输出2 |
黄色 |
输出3 |
粉 |
输出4 |
蓝色 |
通讯 |
红 |
带有电位计的STM32F103C8
电位器用于设置步进电机的速度。
电位计 |
STM32F103C8 |
左(输入) |
3.3 |
中心(输出) |
PA4 |
右(GND) |
地线 |
带有STM32F103C8的旋转步进电机
以下是操作步进电机的几个步骤:
- 通过改变电位器来设置步进电机的速度。
- 然后通过ARDUINO IDE中的SERIAL MONITER(工具->串行监视器)或CTRL + SHIFT + M手动输入顺时针(+值)或逆时针方向(-值)旋转的步骤。
- 根据串行监视器中给出的输入值,步进电机会发生某些旋转步骤。
例如
串行显示器赋予的价值 |
回转 |
2048 |
(360)CLK明智 |
1024 |
(180)CLK明智 |
512 |
(90)CLK明智 |
-2048 |
(-360)反时钟明智 |
-1024 |
(-180)安蒂CLK WISE |
-512 |
(-90)安蒂CLK WISE |
步进电机编程STM32
像上一教程一样,我们通过Arduino IDE通过USB端口对STM32F103C8进行了编程,而无需使用FTDI编程器。要了解使用Arduino IDE编程STM32的信息,请点击链接。我们可以像Arduino一样进行编程。 完整的代码 在项目末尾给出。
首先,我们必须包含步进库文件 #include
#包括
然后我们定义否。旋转完成的步骤数,这里我们使用32,因为我们使用的是全步(4步序列),所以(360/32 = 11.25度)。因此,对于一步,轴将移动11.25度(即步幅角)。在4步序列中,一个完整的旋转需要4步。
#define步骤32
我们还可以使用半步模式,其中有8个步序(360/64 = 5.625)步幅角。
每转的步数= 360 /步距角
在设置速度时,必须从连接到电位计的PA4中获取模拟值。所以我们必须为此声明pin
const int speedm = PA4
然后,通过将这些值存储在整数类型的变量中,将这些模拟值转换为数字值,此后,我们必须映射ADC值以设置速度,因此我们使用以下语句。在此处了解有关将ADC与STM32结合使用的更多信息。
int adc = AnalogRead(speedm ); int结果= map(adc ,0,4096,1,1023);
要设置速度,我们使用 stepper.setSpeed(result); 我们的速度范围是(1-1023)。
我们必须创建如下所示的实例来设置连接到电机的引脚。请谨慎执行这些步骤,因为大多数步骤都会在此模式中犯错。它们给出了错误的图案,因此线圈无法通电。
步进步进器(STEPS,PA0,PA2,PA1,PA3);
下面的语句用于从串行监视器获取步骤的值。例如,一整圈我们需要2048个值(32 * 64 = 2048),即64是齿轮比,32是半步序列。
旋转= Serial.parseInt();
下面的代码用于调用实例并运行电动机。如果 旋转 值为1,则调用函数stepper一次并完成一步。
stepper.step(rotate);
演示视频的完整代码如下。还要在此处检查所有与步进电机相关的项目,并与其他各种微控制器进行接口