打印

步进电机原理及测试程序--24byg

[复制链接]
1300|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
269152492|  楼主 | 2012-6-6 12:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<AT89X52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int

uchar code CCW[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};   //逆时钟旋转相序表
uchar code CW[8]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08};    //正时钟旋转相序表
sbit K1=P3^5;  //反转按键
sbit K2=P3^6;  //正转按键
sbit K3=P3^4;  //停止按键
sbit FMQ=P2^3;  //  蜂鸣器

void delaynms(uint aa)
{
  uchar bb;
  while(aa--)
  {
   for(bb=0;bb<115;bb++)     //1ms基准延时程序
   {
    ;
   }
  }

}
void delay500us(void)
{
  int j;
  for(j=0;j<57;j++)
  {
   ;
  }
}
void beep(void)
{
  uchar t;
  for(t=0;t<100;t++)
  {
   delay500us();
FMQ=1;   //产生脉冲
  }
  FMQ=1;    //关闭蜂鸣器
}
void motor_ccw(void)
{
  uchar i,j;
  for(j=0;j<8;j++)                 //电机旋转一周,不是外面所看到的一周,是里面的传动轮转了一周
  {
   if(K3==0)
{
   break;   //如果K3按下,退出此循环
}
for(i=0;i<8;i++)  //旋转45度
{
   P1=CCW[i];
   delaynms(1);   //调节转速
}
  }
}
void motor_cw(void)
{
  uchar i,j;
  for(j=0;j<8;j++)
  {
   if(K3==0)
{
   break;   //如果K3按下,退出此循环
}
for(i=0;i<8;i++)  //旋转45度
{
   P1=CW[i];
   delaynms(1);   //调节转速
}
  }
}

void main(void)
{
uchar r;
uchar N=64;          //因为步进电机是减速步进电机,减速比的1/64 ,
                      //所以N=64时,步进电机主轴转一圈
while(1)
{
   if(K1==0)
   {while(1)
{
    beep();
  for(r=0;r<N;r++)
  {
    motor_ccw();  //电机逆转
   
  }
   }}
   else if(K2==0)
   {
    beep();
        for(r=0;r<N;r++)
  {
    motor_cw();    //电机反转
    if(K3==0)
    {
     beep();
   break;
    }
  }
   }
//else
//beep();
}
}

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

35

帖子

1

粉丝