四相步进电机驱动程序及工作原理

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

四相步进电机驱动程序及工作原理

1、步进电机的工作原理

该步进电机为一四相步进电机,采用单极性直流电源供电。只要对步进电机的各相绕组按合适的时序通电,就能使步进电机步进转动。图1就是该四相反应式步进电机工作原理示意图。

开始时,开关SB接通电源,SA、SC、SD断开,B相磁极与转子0、3号齿对齐,同时,转子的1、4号齿就与C、D相

绕组磁极产生错齿,2、5号齿就与D、A相绕组磁极产生错齿。

当开关SC接通电源,SB、SA、SD断开时,由于C相绕组的磁力线与1、4号齿之间磁力线的作用,使转子转动,1、4号齿与C相绕组的磁极对齐。而0、3号齿与A、B相绕组产生错齿,2、5号齿就与A、D相绕组磁极产生错齿。依次类推,A、B、C、D四相绕组轮流供电,则转子会沿着A、B、C、D方向转动。

四相步进电机按照通电顺序的不同,可分为单四拍、双四拍、八拍三种工作方式。单四拍与双四拍的步距角相等,但单四拍的转动力矩小。八拍工作方式的步距角就是单四拍与双四拍的一半,因此,八拍工作方式既可以保持较高的转动力矩又可以提高控制精度。

单四拍、双四拍与八拍工作方式的电源通电时序与波形分别如图2、a、b、c所示:

驱动电路:

程序:

大家对照一下程序就知道,本程序采用了八拍工作方式

/*********************************************

**项目: 步进电机正反转(EE01学习板演示程序)

**作者:一线工人

**网站:电子工程师之家www、eehome、cn

*********************************************/

#include

#define uchar unsigned char

#define uint unsigned int

uchar code FFW[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9}; uchar code REV[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1};

/********************************************************/ /*

/* 延时t毫秒

/* 11、0592MHz时钟,延时约1ms

/*

/********************************************************/ void delay(uint t)

{

uint k;

while(t--)

{

for(k=0; k<123; k++)

{ }

}

}

/********************************************************/ /*

/*步进电机正转

/*

/********************************************************/ void motor_ffw(uint n)

{

uchar i;

uint j;

for (j=0; j<12*n; j++) //转1×n圈

{

for (i=0; i<8; i++) //一个周期转30度

{

P0 = FFW; //取数据

delay(15); //调节转速

}

}

}

/********************************************************/ /*

/*步进电机反转

/*

/********************************************************/ void motor_rev(uint n)

{

uchar i;

uint j;

for (j=0; j<12*n; j++) //转1×n圈

{

for (i=0; i<8; i++) //一个周期转30度

{

P0 = REV; //取数据

delay(15); //调节转速

}

}

}

/******************************************************** *

* 主程序

*

*********************************************************/ main()

{

while(1)

{

motor_ffw(5); //电机正转

delay(1000); //换向延时

motor_rev(5); //电机反转

delay(1000); //换向延时

}

}

相关文档
最新文档