极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14581|回复: 0

Arduino和L298N控制步进电机的源程序

[复制链接]
发表于 2013-10-19 16:14:55 | 显示全部楼层 |阅读模式
       看了别人的程序,却不能让步进电机正常运转,经过查找原因,发现是接线问题,根据两相四线步进电机的四拍工作方式,其各相通电顺序为A-AB-B-BA’-A’-A’B’-B’-B’A)。接线方式别的资料都有,可以去找,我是分别接到8、9(一相),10、11(另一相),这样程序需要进行适当修改。当然,我仅仅是为了测试步进电机好坏,可以看到速度的变化。如果实际运行,还要完善程序。程序中(digitalWrite(Pin2, LOW); digitalWrite(Pin3, HIGH);)定义为A;( digitalWrite(Pin0, LOW); digitalWrite(Pin1, HIGH);)定义为B,A’和B’相反就可以。程序如下(程序修改于网上找到的程序):
int Pin0 = 8;
int Pin1 = 9;
int Pin2 = 10;
int Pin3 = 11;
int _step =0 ;
boolean dir = false;//正反转
int stepperSpeed = 1;//电机转速,1ms一步
void setup()
{
  pinMode(Pin0, OUTPUT);
  pinMode(Pin1, OUTPUT);
  pinMode(Pin2, OUTPUT);
  pinMode(Pin3, OUTPUT);
}

void loop()
{
  switch(_step){
    case 0:
    stepperSpeed++;
      digitalWrite(Pin0, LOW);
      digitalWrite(Pin1, LOW);
      digitalWrite(Pin2, LOW);
      digitalWrite(Pin3, HIGH);//32A
    break;
    case 1:
      digitalWrite(Pin0, LOW);
      digitalWrite(Pin1, HIGH);//10B
      digitalWrite(Pin2, LOW);
      digitalWrite(Pin3, HIGH);
    break;
    case 2:
      digitalWrite(Pin0, LOW);
      digitalWrite(Pin1, HIGH);
      digitalWrite(Pin2, LOW);
      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, LOW);
      digitalWrite(Pin2, HIGH);
      digitalWrite(Pin3, LOW);
    break;
    case 5:
      digitalWrite(Pin0, HIGH);
      digitalWrite(Pin1, LOW);
      digitalWrite(Pin2, HIGH);
      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);

}

回复

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-8 12:23 , Processed in 0.048613 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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