资源简介

//两相5、6线步进电机,分为四拍和八拍,这里介绍输出八拍方式:A-AC-C-CB-B-BD-D-DA

资源截图

代码片段和文件信息

//两相5、6线步进电机,分为四拍和八拍,这里介绍输出八拍方式:A-AC-C-CB-B-BD-D-DA
//四拍:A-C-B-D,因此在八拍的基础上减去中间的就可以了,不过步距角要大一倍
#include 
#include 

sbit la=P2^0; //定义两相电机的四组线,从板上设计来分配,选择P2口的低四位输出相应的输出也可以反应在LED灯上
//P2。0为A相,P2。1为B相,P2。2为C相,P2。3为D相
sbit lb=P2^1;
sbit lc=P2^2;
sbit ld=P2^3;

#define uchar unsigned char
code unsigned int lhj[]={1501001508011005001204003080050100
150120020080140020150130020090050150};
//定义电机动作的参数,每三个数为一组,第一个是方向(1、正转,0、反转)
//第二个是步进量,第三个是转速
unsigned char key();//键盘动作,这里的键盘扫描只用到四个按键有效(板上标的0,4,8,C)
unsigned char right(unsigned int Speedunsigned int road); //正转
unsigned char left(unsigned int Speedunsigned int road); //反转
void mDelay(unsigned int DelayTime); //延时函数


void main()
{  
uchar i=0;
while(1){
if(key()==0xde){//8的按键按下
for(i=0;i<34;i+=3){//循环输出我们定义好的动作数据
if(lhj[i]) //调入数组,先判断正反转
right(lhj[i+1]lhj[i+2]); //两个参数代表步进量和转速
else
left(lhj[i+1]lhj[i+2]);
if(key()==0xee)//C的按键按下
break;
}
}
}

}
unsigned char right(unsigned int Speedunsigned int road)//两个参数代表步进量和转速
{
//步进节拍:A-AC-C-CB-B-BD-D-DA
while(1){
if(!Speed) //判断步进量走完没?以下都是,每走一步,判断一次
break;
ld=1;
la=0; //a
mDelay(road);//这里的延时就可控制转速
if(!Speed--)
break;
lc=0; //ac
mDelay(road);
if(!Speed--)
break;
la=1; //c
mDelay(road);
if(!Speed--)
break;
lb=0; //cb
mDelay(road);
if(!Speed--)
break;
lc=1; //b
mDelay(road);
if(!Speed--)
break;
ld=0; //bd
mDelay(road);
if(!Speed--)
break;
lb=1; //d
mDelay(road);
if(!Speed--)
break;
la=0; //da
mDelay(road);
Speed--;
}
P3=P3|0x0f;//将四个脚输出置高
}
unsigned char left(unsigned int Speedunsigned int road)//两个参数代表步进量和转速
{
//步进节拍A-AD-D-DB-B-BC-C-CA
while(1){
if(!Speed)//判断步进量走完没?以下都是,每走一步,判断一次
break;
lc=1;
la=0; //a
mDelay(road);
if(!Speed--)
break;
ld=0; //ad
mDelay(road);
if(!Speed--)
break;
la=1; //d
mDelay(road);
if(!Speed--)
break;
lb=0; //db
mDelay(road);
if(!Speed--)
break;
ld=1; //b
mDelay(road);
if(!Speed--)
break;
lc=0; //bc
mDelay(road);
if(!Speed--)
break;
lb=1; //c
mDelay(road);
if(!Speed--)
break;
la=0; //ca
mDelay(road);
Speed--;
}
P3=P3|0x0f;//将四个脚输出置高
}
void mDelay(unsigned int DelayTime) //延时函数
{    
unsigned char j=0;
     while(DelayTime--){
  for(j=0;j<10;j++){}
 }
}
unsigned char key()//键盘扫描是否有键按下,这里只扫描一列四个键,其它不用
{   
uchar KeyV;
P0=0xfe;
KeyV=P0;
if(KeyV==0xfe)//只扫描一列
     return(0);
mDelay(100);
KeyV=P0;
if(KeyV==0xfe)
   return(0);
    else
   return(KeyV);
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       3147  2008-08-07 21:06  新建文件夹\两相5、6线步进电1.c

     文件       3249  2008-09-06 21:01  新建文件夹\两相5、6线步进电2.c

     目录          0  2010-06-27 21:51  新建文件夹

----------- ---------  ---------- -----  ----

                 6396                    3


评论

共有 条评论