技术热线: 4007-888-234

如何使用89C51单片机控制步进电机?

更新时间: 2019-11-07
阅读量:6142

在本文中,英锐恩单片机开发工程师们将讲解如何使用89C51单片机控制步进电机。步进电机是当前自动化控制系统中应用最为广泛的电子原件之一,它的应用涉及到了电子、机械、电机、计算机等多个领域知识。下面是有关如何将步进电机与89C51单片机连接控制的简单教程。

QQ截图20191107164922.png

 
一、步进电机的运行

我将在该方案中使用四相的步进电机。通常,从四个线路的步进电机中引出5或6条导线。在5根线中,一根是我们的vcc(外部电压),四根重命名是阶梯线。在6线中,2是我们的vcc(外部电压),而重命名中的4是阶梯线。

步进电机工作在5伏到12伏。我在本文中使用的步进电机是NEMA17。它是双极步进电机。NEMA 17步进电机采取的每一步计数都增加了1.8度。因此,NEMA 17以200步完成一圈360(200 * 1.8 = 360)度的旋转。在本文中,我们只关注旋转步进电动机。

二、步进电机的功耗

在带负载的步进旋转过程中,步进电机消耗0.1到1安培的电流。单片机无法输出此电量。因此,我们无法将步进电机直接与89C51单片机之类的单片机接口,该单片机的引脚可以输出最大0.045安培的电流。
 
三、ULN2003驱动器用于步进电机

为了克服上述步进电动机的功率限制,我们需要一个外部电源,该电源可以驱动重负载并为步进电动机的运行提供足够的功率。ULN2003是一种包含达林顿晶体管对的集成电路。ULN2003接受低功率输入并输出更大功率的信号。我决定使用此驱动程序IC驱动步进电机。

uln2003-driver.jpg


四、如何使用8051单片机驱动步进电机


将8051(89C51)单片机端口1的低四位连接到ULN2003驱动程序IC。89C51单片机无法输出足够的电压或电流来驱动电动机,因此需要驱动器IC来满足电动机的电压和电流的要求。 ULN2003的输出连接到我们的步进电机。将ULN2003的引脚8接地。在ULN2003引脚9上施加与电动机相同的电压。

步进电机与89C51单片机的接口电路图如下。在下面的GIF图像中注意步进电机采取的步骤。对于每个步骤,我们都必须将每个步骤引脚设为高电平,并遵循GIF图像中显示的模式。步进电机的步进销/电线的颜色分别为黄色,棕色,黑色和绿色等。我们首先必须确认一下步进电线的图,NEMA 17步进电机模式如下GIF图中所示。

五、基于8051单片机的步进电机接口


5779890.gif

代码的编写很简单,使用ceil ide作为软件工具用c++语言编写,用于编写和编译代码。首先,包含必要的文件reg51.h。然后创建一个延迟函数,以逐步提供一些延迟。此延迟非常重要,可以避免电动机产生的反电动势,否则步进电动机产生的反电动势会损坏控制器。你还可以通过减少延迟时间来加快电机旋转速度。在主要功能中,我使用了一些命令来旋转步进电机。命令说明如下,这些命令采用十六进制格式。

P1 = 0x01第一步使端口1的位0高。二进制等效值 = 00000001
P1 = 0x00使端口1的所有位均为0,以进行下一步。二进制等效值 = 00000000
P1 = 0x02使端口1的位1高为第二步。二进制等效值 = 00000010
P1 = 0x00将端口1的所有位设置为0,以进行下一步。二进制等效值 = 00000000
P1 = 0x04第三步使端口1的位2高。二进制等效值 = 00000100
P1 = 0x00使端口1的所有位均为0,以进行下一步。二进制等效值 = 00000000
P1 = 0x08第四步将端口1的位3高电平。等效二值 = 00001000

你也可以单独声明这些位,并使它们的高电平和低电平足够长。while(1)循环一直沿顺时针方向运行电动机。你还可以通过仅反转命令来逆时针反转方向,将最后一个命令(0x08)放在第一位,然后以相同的方式反转其余命令的顺序。


五、基于8051单片机控制步进电机代码


#include<reg51.h>

void delay(){     //产生可变延迟的函数
unsigned int i,j;

for( i=0;i<=30;i++)
for(j=0;j<1000;j++);
}

void main() //项目主函数
{

while(1){

P1=0x01; delay(); //Take first step
P1=0x00; delay();
P1=0x02; delay(); //Take second step
P1=0x00; delay();
P1=0x04; delay(); //Take third step
P1=0x00; delay();
P1=0x08; delay(); //Take fourth step
P1=0x00; delay();
 }
}

以上就是英锐恩单片机开发工程师分享的使用89C51单片机控制步进电机方法。英锐恩专注单片机应用方案设计与开发,提供8位单片机、16位单片机、32位单片机