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