基于51单片机的步进电机控制原理

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1步进电机设计模块

1.1步进电机的基本工作原理及选型

步进电机有三线式、五线式和六线式,但是其控制方式均相同,都要以脉冲信号电流来驱动,假设每转动一圈要200个脉冲信号来励磁,可以计算出每个励磁信号能使步进电机前进1.8°,其旋转的角度与脉冲的个数成正比。因为六线式四相步进电机控制简单,步进精确,因此我们选用六线式四相步进电机进行设计。他的控制等效电路如图1.1所示,他有四条励磁信号引线A,A*,B,B*, 通过控制这四条引线上的励磁脉冲产生的时刻,即可控制步进电机的转动,每出现一个脉冲信号,步进电机只走一步,因此,只要依照顺序不断地送出脉冲信号,步进电机就能实现连续转动。

A1

A2

B1B2A1A2

红红黑

B1B2

绿绿白

(a)等效电路(b)绕组说明

图1.1步进电机的控制等效电路

1.2励磁方式选择

步进电机的励磁方式主要分为全步励磁和半步励磁两种,其中全步励磁又有一相励磁和二相励磁之分:半步励磁又称一-二相励磁。

1.2.1一相励磁

在每一瞬间,步进电机只有一个线圈导通。每送出一个励磁信号,步进电机旋转1.8°,这是三种励磁方式中最简单的一种。

其特点是:精确度好、消耗电力小,但输出转矩小,震动较大。

1.2.2二相励磁

在每一瞬间,步进电机有两个线圈同时导通。每送一个励磁信号,步进电机旋转1.8°。其特点是:输出转矩大,振动小。

1.2.3一-二相励磁

为一相励磁与二相励磁交替导通的方式。每送一个励磁信号,步进电机旋转

0.9°。其特点是:分辨率高,运转平滑。

1.2.4 小结

本次设计中,步进电机的工作任务是带动载物台做精确的水平移动,综合考虑各种励磁方式的优点与缺点,最终选择一-二相励磁方式,励磁顺序见表1.1。

励磁顺序说明:1-2-3-4-5-6-7-8-1

1.3步进电机的驱动

步进电机的驱动可以选用专用的点击驱动模块,如L298,FT5754等,这类驱动模块接口简单,操作方便,它们既可以驱动步进电机,也可驱动直流电机。此外,还可以利用三极管搭建驱动电路,不过这样非常麻烦,可靠性也会降低。另外,还有一种方法就是用达林顿驱动器ULN2803,该芯片单片最多可以一次驱动八线步进电机,当然四线和六线也可驱动。本次设计选用达林顿ULN2803驱动步进电机。

1.4步进电机与单片机连接原理图分析

本实验采用的是六线制四相步进电机(*******),该电机与驱动器连接如图所示,JP1为点击六线接口,其中JP1的第3,4引脚连接在一起与电机的公共端相连,对应图1.1中黑白两条线,JP1的第1引脚对应步进电机的A1,JP1的第2引脚对应步进电机的B1,JP1的第5引脚对应步进电机的A2,JP1的第6引脚对应步进电机的B2。这4调驱动线通过ULN2803后与单片机的P1.0~P1.3引脚连接。原理如图1.2所示

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

图1.2步进电机和单片机连接原理图

1.5步进电机控制程序流程图

图1.3 程序流程图

1.6 电机控制模块源代码

本节给出的代码只是电机控制模块子程序代码。

#include

#define uchar unsigned char

bit flag=0;

uchar num=0,show_num=2,maichong=4,table_begin=0;

uchar code table1[]=

{0x01,0x02,0x04,0x08,0x08,0x04,0x02,0x01};//电机正反转IO口德高低电平对应表

void dispose() //速度选择子程序

{

switch(num)

{

case 0:

maichong=5;

break;

case 1:

maichong=4;

break;

case 2:

maichong=3;

break;

case 3:

maichong=2;

break;

}

If(flag==0)

{

table_begin=0; //flag为0,正传,从第一个码开始读取

}

else

table_begin=4; //flag为1,反转,从第五个码开始读取}

void qudong() //电机速度,和正反转控制(转动一周)。{

uchar i,j;

for(j=0+table_begin;j<4+table_begin;j++)

{

P1=table1[j];

for(i=0;i

{

delay(10); //延时函数,}

}

}

相关文档
最新文档