MCU——步进电机

步进电机是一种将电脉冲转化为角位移的执行机构。通俗一点讲:当步进驱动器接受到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(既步进角)。您可以通过控制脉冲个数来控制角位移量,从而达到精确定位的目的。同时您可以通过控制脉冲频率来控制电机转动的速度和角速度,从而达到调速的目的。

24BYJ48型四相八拍步进电机。电压为5V-12V。当步进电机是在一系列连续不断的控制脉冲时,它可以连续不断的转动。每一个脉冲信号对应步进电机的某一相或者两相绕组的通电状态改变一个,也就对应转子转过一定的角度(一个步距角)。当通电状态的改变完成一个循环时,转子转过一个齿距。四相步进电机可以在不同的通电方式下运行,常见的通电方式有单相四拍(A-B-C-D-A....),双相四拍(AB-BC-CD-DA-AB...),八拍(A-AB-B-BC-C-CD-D-DA-A...)等。

参数:

相数:4;电压  5V;电流 92mA;电阻 130Ω;步距角  5.625°  减速比:1/64 ,牵入转矩: >=78.4m N.m  

空载牵入频率:600pps   空载牵出频率:900 pps。

一个步距角为5.625°,八拍则45°,一周360°,则需要八组。则电机转动一圈,需要64个脉冲。

接线提示:A(橙)B(黄)C(蓝)D(灰)E(红+5V)

步进电机共5根线,其中4根为控制线(A-~A-B-~B)另外一根为+5V。

四相八拍的相序图如下:

3 2 1 0          对应A口输出值

1 0 0 0 1 01H

2 0 0 1 1 03H

3 0 0 1 0 02H

4 0 1 1 0 06H

5 0 1 0 0 04H

6 1 1 0 0 0CH

7 1 0 0 0 08H

8 1 0 0 1 09H

 

给他这个相序可以转一圈,反向则相反。

 

步进电机驱动电路:

ULN2003

MCU——步进电机_第1张图片

 

 

步进电机需要4个IO接口。

 

步进电机程序:

#include       //51芯片管脚定义头文件
#include //内部包含延时函数 _nop_();
#define uchar unsigned char
#define uint  unsigned int
uchar code FFW[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};
uchar code REV[8]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};
sbit  K1   = P3^2;       //正转
sbit  K2   = P3^3;       //反转
sbit  K3   = P3^4;       //停止
sbit  BEEP = P3^6;       //蜂鸣器


/********************************************************/
/*                                                  
/* 延时t毫秒 
/* 11.0592MHz时钟,延时约1ms                                     
/*                                                      
/********************************************************/
void delay(uint t)
{                           
   uint k;
   while(t--)
   {
     for(k=0; k<125; k++)
     { }
   }
}


/**********************************************************/
void delayB(uchar x)    //x*0.14MS
 {
   uchar i;
   while(x--)
   {
     for (i=0; i<13; i++)
     { }
   }
 }


/**********************************************************/
void beep()
 {
   uchar i;
   for (i=0;i<100;i++)
    { 
     delayB(4);
     BEEP=!BEEP;                 //BEEP取反
    } 
     BEEP=1;                    //关闭蜂鸣器
 }


/********************************************************/
/*
/*步进电机正转
/*
/********************************************************/
void  motor_ffw()
 { 
   uchar i;
   uint  j;
   for (j=0; j<8; j++)         //转1*n圈 
    { 
   if(K3==0)
        {break;}                //退出此循环程序
      for (i=0; i<8; i++)       //一个周期转45度
        {
          P1 = FFW[i];          //取数据
          delay(2);            //调节转速
        }
    }
 }


/********************************************************/
/*
/*步进电机反转
/*
/********************************************************/
void  motor_rev()
{
     uchar i;
uint  j;
for (j=0; j<8; j++)       //转1×n圈
      {
   if(K3==0)
         {break;}               //退出此循环程序
        for (i=0; i<8; i++)     //一个周期转45度
        {
          P1 = REV[i];          //取数据
          delay(2);            //调节转速
        }
      }
 }


/********************************************************
*                                                       
*  主程序                                               
*                                                      
*********************************************************/


main()
 { 


      uchar r,N=64;             //N 步进电机运转圈数 因为我们的步进电机是减速步进电机 减速比是1/64 所以这里N=64时 步进电机外部的主轴转1圈
   while(1)
    {  
      if(K1==0)
 {
        beep();
for(r=0;r          { 
  motor_ffw();       //电机正转
    if(K3==0)
          {beep();break;}    //退出此循环程序
    }
      }
 else if(K2==0)
       { 
   beep();
for(r=0;r          {
      motor_rev();       //电机反转
  if(K3==0)
          {beep();break;}    //退出此循环程序
}
       }
   else  
P1 = 0xf0;
    }
 }


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

 

  

 

你可能感兴趣的:(MCU学习,步进电机)