极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 28892|回复: 15

步进机28BYJ-48 arduino学习

[复制链接]
发表于 2013-4-2 11:35:32 | 显示全部楼层 |阅读模式
不懂用arduino的stepper库,在网上找资料学习,以下是我的学习笔记---------这只是个人理解,希望有人指出不对的地方
     步进机28BYJ-48的步距脚为5.626/64,就是电机要64个脉冲才转一圈,减速比1:64,就是电机要转64圈,输出的轴才转一圈,所以转一圈要64*64=2096个脉冲
下边的程序是步进机每个1秒转一圈的程序:
//定义引脚
int Pin0 = 8;
int Pin1 = 9;
int Pin2 = 10;
int Pin3 = 11;

int _step = 0;

boolean dir = false;//正反转

int stepperSpeed = 1;//电机转速,1ms一步
//脉冲总数,或者说步的总数
int stepsum=0;
void setup()

{

  pinMode(Pin0, OUTPUT);
  pinMode(Pin1, OUTPUT);
  pinMode(Pin2, OUTPUT);
  pinMode(Pin3, OUTPUT); }



void loop()
{
//进步机的驱动方式,有八种
switch(_step){
    case 0:
      digitalWrite(Pin0, LOW);
      digitalWrite(Pin1, LOW);
      digitalWrite(Pin2, LOW);
      digitalWrite(Pin3, HIGH);
    break;
    case 1:
      digitalWrite(Pin0, LOW);
      digitalWrite(Pin1, LOW);
      digitalWrite(Pin2, HIGH);
      digitalWrite(Pin3, HIGH);
    break;

    case 2:
      digitalWrite(Pin0, LOW);
      digitalWrite(Pin1, LOW);
      digitalWrite(Pin2, HIGH);
      digitalWrite(Pin3, LOW);
    break;

    case 3:
      digitalWrite(Pin0, LOW);
      digitalWrite(Pin1, HIGH);
      digitalWrite(Pin2, HIGH);
      digitalWrite(Pin3, LOW);
    break;

    case 4:
      digitalWrite(Pin0, LOW);
      digitalWrite(Pin1, HIGH);
      digitalWrite(Pin2, LOW);
      digitalWrite(Pin3, LOW);
    break;

    case 5:
      digitalWrite(Pin0, HIGH);
      digitalWrite(Pin1, HIGH);
      digitalWrite(Pin2, LOW);
      digitalWrite(Pin3, LOW);
      break;

      case 6:
      digitalWrite(Pin0, HIGH);
      digitalWrite(Pin1, LOW);
      digitalWrite(Pin2, LOW);
      digitalWrite(Pin3, LOW);
    break;

    case 7:
      digitalWrite(Pin0, HIGH);
      digitalWrite(Pin1, LOW);
      digitalWrite(Pin2, LOW);
      digitalWrite(Pin3, HIGH);
    break;

    default:
      digitalWrite(Pin0, LOW);
      digitalWrite(Pin1, LOW);
      digitalWrite(Pin2, LOW);
      digitalWrite(Pin3, LOW);
    break;
  }


//判断是正转还是反转
  if(dir)
  {
    _step++;

  }else{

    _step--;
  }

//每八步一个驱动方式的循环
  if(_step>7){
   
    _step=0;

  }

  if(_step<0){
   
    _step=7;

  }
  
  delay(stepperSpeed);

//计算脉冲数,每4096个脉冲停1秒
  stepsum++;
  if(stepsum==4096)
  {
    Serial.println(stepsum);
    stepsum=0;
    delay(1000);
  }

}
回复

使用道具 举报

 楼主| 发表于 2013-4-2 11:37:55 | 显示全部楼层
有时间用C++做类库就可以重用这代码了
回复 支持 反对

使用道具 举报

发表于 2013-4-2 13:07:37 | 显示全部楼层
不错 不错 很详细了!
回复 支持 反对

使用道具 举报

发表于 2013-4-2 14:25:59 | 显示全部楼层
不知道控制伺服电机是不是一样呢。
回复 支持 反对

使用道具 举报

发表于 2013-4-2 19:36:19 | 显示全部楼层
本帖最后由 bacon6581 于 2013-4-2 19:37 编辑
shellcode 发表于 2013-4-2 14:25
不知道控制伺服电机是不是一样呢。


我买的工业用伺服电机带驱动器,驱动器的其中一种控制方式是方向脉冲+步进脉冲。

方向脉冲:高电平往一个方向转,低电平往另一个方向转
步进脉冲:一个脉冲(如10μs高电平+10μs低电平)电机旋转一步。

使能信号两个端口可以不用连

个人觉得伺服电机相对于步进电机的优点:
转速快,3000转/分钟。发热小。没什么噪声。误差不累计。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2013-4-3 00:08:35 | 显示全部楼层
是的,伺服贵了点,你用来控制什么呢?
回复 支持 反对

使用道具 举报

发表于 2013-4-6 08:15:30 | 显示全部楼层
shellcode 发表于 2013-4-3 00:08
是的,伺服贵了点,你用来控制什么呢?

做个自动化装置,还在研究中
回复 支持 反对

使用道具 举报

发表于 2013-4-10 02:01:35 | 显示全部楼层
bacon6581 发表于 2013-4-6 08:15
做个自动化装置,还在研究中

加油好好研究。
回复 支持 反对

使用道具 举报

发表于 2013-5-28 17:35:44 | 显示全部楼层
能给个硬件电路吗
回复 支持 反对

使用道具 举报

发表于 2014-2-5 11:25:13 | 显示全部楼层
不错不错不错不错
回复 支持 反对

使用道具 举报

发表于 2014-5-16 13:27:33 | 显示全部楼层

case里面要按照顺序写吧?AB-B-BC-C-CD-D-DA-A,对应的接口给HIGH。
我用了你的代码测试,电机发抖,但是不转。我用的是UNO+ULN2003APG驱动板,5V供电,所有的接线顺序都试过了,可是不行。 用的10、11、12、13口,这个问题很头疼!附上代码:
//步进机每个1秒转一圈的程序:
//定义引脚
int Pin0 = 10;
int Pin1 = 11;
int Pin2 = 12;
int Pin3 = 13;


int _step = 0;

boolean dir = false;//正反转

int stepperSpeed = 1;//电机转速,1ms一步
//脉冲总数,或者说步的总数
int stepsum=0;
void setup()

{
  pinMode(Pin0,OUTPUT);
  pinMode(Pin1,OUTPUT);
  pinMode(Pin2,OUTPUT);
  pinMode(Pin3,OUTPUT);
}


void loop()
{
//进步机的驱动方式,有八种
switch(_step){
    case 0://******************AB
      digitalWrite(Pin0, HIGH);
      digitalWrite(Pin1, HIGH);
      digitalWrite(Pin2, LOW);
      digitalWrite(Pin3, LOW);
    break;
    case 1://******************B
      digitalWrite(Pin0, LOW);
      digitalWrite(Pin1, HIGH);
      digitalWrite(Pin2, LOW);
      digitalWrite(Pin3, LOW);
    break;

    case 2://******************BC
      digitalWrite(Pin0, LOW);
      digitalWrite(Pin1, HIGH);
      digitalWrite(Pin2, HIGH);
      digitalWrite(Pin3, LOW);
    break;

    case 3://******************C
      digitalWrite(Pin0, LOW);
      digitalWrite(Pin1, LOW);
      digitalWrite(Pin2, HIGH);
      digitalWrite(Pin3, LOW);
    break;

    case 4://******************CD
      digitalWrite(Pin0, LOW);
      digitalWrite(Pin1, LOW);
      digitalWrite(Pin2, HIGH);
      digitalWrite(Pin3, HIGH);
    break;

    case 5://******************D
      digitalWrite(Pin0, LOW);
      digitalWrite(Pin1, LOW);
      digitalWrite(Pin2, LOW);
      digitalWrite(Pin3, HIGH);
    break;

    case 6://******************DA
      digitalWrite(Pin0, HIGH);
      digitalWrite(Pin1, LOW);
      digitalWrite(Pin2, LOW);
      digitalWrite(Pin3, HIGH);
    break;

    case 7://******************A
      digitalWrite(Pin0, HIGH);
      digitalWrite(Pin1, LOW);
      digitalWrite(Pin2, LOW);
      digitalWrite(Pin3, LOW);
    break;

    default:
      digitalWrite(Pin0, LOW);
      digitalWrite(Pin1, LOW);
      digitalWrite(Pin2, LOW);
      digitalWrite(Pin3, LOW);
    break;
  }

//判断是正转还是反转
  if(dir)
  {
    _step++;
  }
  else
  {
    _step--;
  }

//每八步一个驱动方式的循环
  if(_step>7)
  {
    _step=0;
  }

  if(_step<0)
  {
    _step=7;
  }
  
  delay(stepperSpeed);

//计算脉冲数,每4096个脉冲停1秒
  stepsum++;
  if(stepsum==4096)
  {
    Serial.println(stepsum);
    stepsum=0;
    delay(1000);
  }

}
回复 支持 反对

使用道具 举报

发表于 2014-8-8 23:07:32 | 显示全部楼层
64*64=4096
回复 支持 反对

使用道具 举报

发表于 2015-3-15 17:25:58 | 显示全部楼层
测试了下,次转动要大于360度,几分钟后就多转了半圈,请教楼主为什么
回复 支持 反对

使用道具 举报

发表于 2015-9-23 14:53:12 | 显示全部楼层
朋友,我刚接触步进机,用arduino如何控制步进机的正反转,
回复 支持 反对

使用道具 举报

发表于 2015-11-21 20:18:07 | 显示全部楼层
请教一下 我这样按楼主的程序做,4096 个脉冲后 ,步进电机会转 两圈 。这的电机难道是1:16的减速,但我的电机照片 就是淘宝那种很常见的28BYJ-28 啊,不知道为何 两个电机烧写楼主的程序都会 转满2圈
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-28 04:34 , Processed in 0.042842 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表