《电子技术应用》

步进电机加速-匀速-减速运行程序(C51源程序)

2016/12/16 9:00:00

步进电机加速-匀速-减速运行程序(C51)

ME300系列单片机开发系统+步进电机模块演示程序

功能:步进电机以加速方式启动,转速达到程序规定的最快速度后保持一段时间匀速运转,又开始以减速

方式运行直到步进电机停止转动。由K1键控制演示程序运行。步进电机模块上D1-D4可以指示工作状态。

/******************************************************************/
/*                                                                                                                                 */
/* ME300B单片机开发系统演示程序 - 步进电机加减速运行程序                                              */
/*                                                                                                                                 */
/* 步进电机启动时,转速由慢到快逐步加速。                                                                       */
/* 步进电机匀速运行                                                                                                        */
/* 步进电机由快到慢逐步减速到停止                                                                                                                           */
/* 网站http://www.elecfans.com                                                  */
 /******************************************************************/
   
#include        //51芯片管脚定义头文件
#include        //内部包含延时函数 _nop_();

#define uchar unsigned char
#define uint  unsigned int

sbit  K1=P1^4;
uchar code FFW[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9};
//uchar code REV[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1};
uchar rate ;       
/********************************************************/
/*                                                 
/* 延时
/* 11.0592MHz时钟,                                   
/*                                                     
/********************************************************/
void delay()
 {                          
   uchar k;
   uint s;
   k = rate;
   do
    {
       for(s = 0 ; s <500 ; s++) ;  
    }while(--k);
 }
/********************************************************/
/*
/*步进电机正转
/*
/********************************************************/
void  motor_ffw()
{
   uchar i;
 
    for (i=0; i<8; i++)      //一个周期转30度
    {
       P1 = FFW[i];          //取数据
       delay();                 //调节转速
    }
}

/********************************************************
*                                                      
*步进电机运行                                              
*                                                     
*********************************************************/
void  motor_turn()
{
   uchar x;
   rate=0x10;
   x=0xf0;
   do
     {
        motor_ffw();               //加速
        rate--;
     }while(rate!=0x01);

   do
     {    
        motor_ffw();               //匀速
       x--;
     }while(x!=0x01);
 
   do
     {
        motor_ffw();              //减速 
        rate++;
     }while(rate!=0x10);   
}

/********************************************************
*                                                      
*  主程序                                              
*                                                     
*********************************************************/
main()
{    
  
   P1=0xf0;

   while(1)
  {
      P1=0xf0;
      if(K1==0)
     {
       motor_turn();
     }
  }
}

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

继续阅读>>