在当今的自动化世界中,步进电机和伺服电机是嵌入式系统中最常用的两种电机。两者均用于各种自动化机器中,例如机械臂,CNC机器,照相机等。在本教程中,我们将看到如何将步进电机与ARM7-LPC2148连接以及如何控制其速度。如果您不熟悉ARM7,那么请先学习ARM7-LPC2148及其编程工具。
步进电机
步进电机是无刷直流电机,可以以小角度旋转,这些角度称为步进。我们可以通过向其引脚提供数字脉冲来逐步旋转步进电机。步进电机价格便宜,设计坚固。可以通过改变数字脉冲的频率来控制电动机的速度。
根据定子绕组的类型,有两种类型的步进电机: UNIPOLAR 和 BIPOLAR。在这里,我们使用UNIPOLAR步进电机,这是最常用的步进电机。要旋转步进电机,我们需要按顺序给步进电机的线圈通电。根据旋转操作,它们分为两种模式:
- 全步模式:(4步顺序)
- 单相步进(波步进)
- 两阶段踩
- 半步模式(8步顺序)
要了解有关步进电机及其操作的更多信息,请单击链接。
使用ARM7-LPC2148旋转步进电机
在这里,我们将使用“全步:单相启动”或“波步进”模式来通过ARM7-LPC2148旋转步进电机
在这种方法中,我们一次只能激励一个线圈(LPC2148的一个引脚)。也就是说,如果第一线圈A通电一段时间,则轴将更改其位置,然后线圈B通电同时,轴将再次更改其位置。像这样,线圈C,然后线圈D通电,以进一步移动轴。通过使一次线圈通电,步进电动机的轴逐步旋转。
通过这种方法,我们通过依次激励线圈来逐步旋转轴。这称为四个步骤序列,因为它需要四个步骤。
您可以根据以下给出的值使用半步进方法(8序列方法)旋转步进电机。
步 |
线圈A |
线圈B |
线圈C |
线圈D |
1个 |
1个 |
0 |
0 |
0 |
2 |
1个 |
1个 |
0 |
0 |
3 |
0 |
1个 |
0 |
0 |
4 |
0 |
1个 |
1个 |
0 |
5 |
0 |
0 |
1个 |
1个 |
6 |
0 |
0 |
0 |
1个 |
7 |
1个 |
0 |
0 |
1个 |
8 |
1个 |
0 |
0 |
0 |
所需组件
硬件:
- ARM7-LPC2148
- ULN2003电机驱动器IC
- LED – 4
- 步进马达(28BYJ-48)
- 面包板
- 连接线
软件:
- Keil uVision5
- Flasic魔术工具
步进马达(28BYJ-48)
上图已经显示了28BYJ-48步进电机。它是 单极性步进 电机,需要5V电源。电机具有4线圈单极布置,每个线圈的额定电压为+ 5V,因此使用Arduino,Raspberry Pi,STM32,ARM等任何微控制器都相对容易控制。
但是我们需要像ULN2003这样的电机驱动IC来驱动它,因为步进电机会消耗大量电流,并且可能损坏微控制器。
下表提供了28BYJ-48的规格:
还要检查与其他微控制器的步进电机接口:
- 步进电机与Arduino Uno的接口
- Raspberry Pi的步进电机控制
- 步进电机与8051单片机的接口
- 步进电机与PIC单片机的接口
- 步进电机与MSP430G2的接口
步进电机也可以在没有任何微控制器的情况下进行控制,请参阅此步进电机驱动器电路。
ULN2003步进电机驱动器
大多数 步进电机 只能在驱动器模块的帮助下运行。这是因为控制器模块(在我们的情况下为LPC2148)将无法从其I / O引脚提供足够的电流来使电动机运行。因此,我们将使用外部模块(如 ULN2003 模块)作为 步进电机驱动器。
在本项目中,我们将使用 ULN2003电机驱动器IC。IC的引脚图如下:
引脚(IN1至IN7)是用于连接微控制器输出的输入引脚,而OUT1至OUT7是用于连接步进电机输入的相应输出引脚。COM给出了输出设备和外部电源输入源所需的正电源电压。
电路原理图
步进电机与ARM-7 LPC2148接口的电路图如下所示
带ULN2003电机驱动器IC的ARM7-LPC2148
LPC2148的GPIO引脚(P0.7至P0.10)被视为与ULN2003 IC的输入引脚(IN1-IN4)连接的输出引脚。
LPC2148引脚 |
ULN2003 IC的引脚 |
P0.7 |
IN1 |
P0.8 |
IN2 |
P0.9 |
IN3 |
第10页 |
IN4 |
5伏 |
通讯 |
地线 |
地线 |
ULN2003 IC与步进电机(28BYJ-48)的连接
ULN2003 IC的输出引脚(OUT1-OUT4)连接到步进电机引脚(蓝色,粉红色,黄色和橙色)。
ULN2003 IC引脚 |
步进电机销 |
输出1 |
蓝色 |
输出2 |
粉 |
输出3 |
黄色 |
输出4 |
橙子 |
通讯 |
红色(+ 5V) |
具有ULN2003的IN1至IN4的LED
ULN2003的引脚IN1,IN2,IN3和IN4分别连接有四个LED(LED1,LED2,LED4,LED 4)阳极引脚,LED的阴极与GND连接,以指示来自LPC2148的脉冲。我们可以注意到所提供脉冲的模式。模式显示在末尾的演示视频中。
为步进电机编程ARM7-LPC2148
要编程ARM7-LPC2148,我们需要keil uVision和Flash Magic工具。我们正在使用USB电缆通过微型USB端口对ARM7 Stick进行编程。我们使用Keil编写代码并创建一个十六进制文件,然后使用Flash Magic将HEX文件闪存到ARM7 Stick。要了解有关安装keil uVision和Flash Magic以及如何使用它们的更多信息,请单击链接ARM7 LPC2148微控制器入门并使用Keil uVision对其进行编程。
本教程的最后给出了使用ARM 7控制步进电机的完整代码,在这里我们解释了其中的几个部分。
1.要使用“完全第一步启动”方法,我们需要包括以下命令。所以我们在程序中使用以下行
顺时针无符号字符= {0x1,0x2,0x4,0x8}; //顺时针旋转命令 unsigned char逆时针旋转= {0x8,0x4,0x2,0x1}; //逆时针旋转的命令
2.以下行用于将PORT0引脚初始化为输出并将它们设置为低电平
PINSEL0 = 0x00000000; //设置PORT0引脚 IO0DIR-= 0x00000780; //将引脚P0.7,P0.8,P0.9,P0.10设置为OUTPUT IO0CLR = 0x00000780; //将P0.7,P0.8,P0.9,P0.10引脚OUTPUT设置为LOW
3.设置端口引脚根据(P0.7至P0.10)HIGH顺时针通过使用该命令 为 与延迟回路
对于(int j = 0; j
同为反时针
为(int z = 0; z
4.更改延迟时间以更改步进电机的旋转速度
延迟(0x10000); //更改此值以更改旋转速度 (0x10000)-全速 (0x50000)-变慢 (0x90000)-变慢。因此,通过增加延迟,我们降低了旋转速度。
5.完整的旋转步骤数可以通过以下代码更改
int no_of_steps = 550; //将此值更改为所需的旋转步数(550旋转一整圈)
对于步进电机,我有550步完整旋转,有225步半旋转。因此,请根据您的要求进行更改。
6.此功能用于创建延迟时间。
void delay(unsigned int value)//产生延迟的函数 { unsigned int z; 对于(z = 0; z
带有演示视频的完整代码 如下。