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

 

 

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

 

步进电机程序:

#include <reg51.h>       //51芯片管脚定义头文件
#include <intrins.h> //内部包含延时函数 _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<N;r++)
         { 
  motor_ffw();       //电机正转
    if(K3==0)
          {beep();break;}    //退出此循环程序
    }
      }
 else if(K2==0)
       { 
   beep();
for(r=0;r<N;r++)
         {
      motor_rev();       //电机反转
  if(K3==0)
          {beep();break;}    //退出此循环程序
}
       }
   else  
P1 = 0xf0;
    }
 }


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

 

  

 

  • 5
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要连接步电机到ESP8266 NodeMCU,需要使用一个驱动器模块来控制步电机。以下是连接步骤: 1. 将驱动器模块连接到NodeMCU的GPIO引脚。通常步电机使用4个引脚,其中2个用于控制方向,2个用于控制步。连接方式如下: - 将驱动器模块的DIR引脚连接到NodeMCU的GPIO引脚。 - 将驱动器模块的STEP引脚连接到NodeMCU的GPIO引脚。 - 将驱动器模块的GND引脚连接到NodeMCU的GND引脚。 - 将驱动器模块的VCC引脚连接到NodeMCU的3.3V引脚。 2. 连接步电机。将步电机的4个引脚连接到驱动器模块的相应引脚。 3. 在代码中使用相应的库来控制步电机。例如,使用AccelStepper库可以轻松地控制步电机旋转和速度。 下面是一个简单的示例代码来旋转步电机: ```c++ #include <AccelStepper.h> // 定义步电机接口引脚 #define DIR_PIN D5 #define STEP_PIN D6 // 创建步电机实例 AccelStepper stepper(AccelStepper::DRIVER, STEP_PIN, DIR_PIN); void setup() { // 设置步电机速度和加速度 stepper.setMaxSpeed(1000); stepper.setAcceleration(500); } void loop() { // 让步电机旋转1000个步长 stepper.moveTo(1000); stepper.runToPosition(); delay(1000); // 让步电机旋转-1000个步长 stepper.moveTo(-1000); stepper.runToPosition(); delay(1000); } ``` 在这个示例中,步电机连接到D5和D6引脚,并使用AccelStepper库来控制步电机旋转。setup()函数设置了步电机的速度和加速度,loop()函数中让步电机旋转1000步后暂停1秒,并再次旋转-1000步后再暂停1秒。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值