微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 步进电机程序问题

步进电机程序问题

时间:10-02 整理:3721RD 点击:











求大神帮我看看程序,网上找的步进电机程序

为什么上电,除了p0口其他io口都是高电平 ,上电蜂鸣器直接响.我把at的程序写在了stc的51单片机上了,还有我的步进电机接了ULN2003A的驱动芯片,然后连接了P1口。帮我看看是我程序问题还是硬件接错还是我的电路有问题。万分感谢!



#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^2;  //反转按键  

sbit K2=P3^3;  //正转按键  

sbit K3=P3^4;  //停止按键  

sbit FMQ=P3^6; //蜂鸣器     

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=!FMQ;   //产生脉冲

   }   

   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;

     delaynms(10);   //调节转速

  }

   }

}   

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;

     delaynms(2);   //调节转速

  }

   }

}     

void main(void)

{

   uchar r;

   uchar N=64;          //因为步进电机是减速步进电机,减速比的1/64 ,

        //所以N=64时,步进电机主轴转一圈

  while(1)

  {

   if(K1==0)

    {

      beep();

    for(r=0;r<N;r++)

   {

      motor_ccw();  //电机逆转

      if(K3==0)

     {

       beep();

    break;

     }

   }

    }

     else if(K2==0)

    {

      beep();

          for(r=0;r<N;r++)

   {

      motor_cw();    //电机反转

     if(K3==0)

     {

       beep();

    break;

     }

   }

    }

    else     P1=0xf0;    //电机停止

  }

}


奖励4积分

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top