基于51单片机的步进电机控制原理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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); //延时函数,} } }