标题: 求一个通过Arduino步进电机库 控制步进电机的程序 [打印本页]

作者: 测控系吴~    时间: 2019-8-30 19:22
标题: 求一个通过Arduino步进电机库 控制步进电机的程序
用常规的方法写Arduino程序,有一点没有解决,就是中断的问题,break 并不能起到预期跳出无限循环的功能;Arduino中本身有库函数,但是里面的语句还不熟,好像还要什么专门驱动板之类的东西,我用的是雷赛步进电机,有个驱动器(DIR-  DIR+ PUL- PUL+ ENA- ENA+ A- A+ B- B+ )希望有大佬能帮帮忙

作者: 测控系吴~    时间: 2019-8-30 19:23
希望这个程序能实现正反转加减速的功能
作者: devcang    时间: 2019-9-1 01:04
驱动板是肯定需要的,GPIO 电流有限。


arduino  IDE,文件、示例、Stepper、下边有几个例子,就是你需要的


作者: tyrl800    时间: 2019-9-1 08:44
void setup()
{
  //初始化电机驱动IO为输出方式
  pinMode(IN1, OUTPUT); // PIN 7
  pinMode(IN2, OUTPUT); // PIN 6
  pinMode(IN3, OUTPUT); // PIN 5
  pinMode(IN4, OUTPUT); // PIN 4
  pinMode(beep, OUTPUT); //PIN 3
  digitalWrite(beep, HIGH);
  Serial.begin(9600);//设置波特率为9600
}
/*******************************四相八拍***********************************/
void Coil_A()
{
  digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); digitalWrite(IN3, HIGH); digitalWrite(IN4, HIGH);
}
void Coil_AB()
{
  digitalWrite(IN1, LOW); digitalWrite(IN2, LOW); digitalWrite(IN3, HIGH); digitalWrite(IN4, HIGH);
}
void Coil_B()
{
  digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); digitalWrite(IN3, HIGH); digitalWrite(IN4, HIGH);
}
void Coil_BC()
{
  digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH);
}
void Coil_C()
{
  digitalWrite(IN1, HIGH); digitalWrite(IN2, HIGH); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH);
}
void Coil_CD()
{
  digitalWrite(IN1, HIGH); digitalWrite(IN2, HIGH); digitalWrite(IN3, LOW); digitalWrite(IN4, LOW);
}
void Coil_D()
{
  digitalWrite(IN1, HIGH); digitalWrite(IN2, HIGH); digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW);
}
void Coil_DA()
{
  digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW);
}
/*******************************************************************/

void beep_once()//蜂鸣器响一次
{
   digitalWrite(beep, LOW);
   delay(100);
   digitalWrite(beep, HIGH);
}

void loop()
{
  unsigned long now_time = micros(); //获取当前的系统运行时间长度
  while ((micros() - now_time) < 14648); //   60 000 000us/4096
  switch (i)
  {
    case 0: Coil_A(); i++; break;
    case 1: Coil_AB(); i++; break;
    case 2: Coil_B(); i++; break;
    case 3: Coil_BC(); i++; break;
    case 4: Coil_C(); i++; break;
    case 5: Coil_CD(); i++; break;
    case 6: Coil_D(); i++; break;
    case 7: Coil_DA(); i = 0; break;
    default: break;
  }
  count++;
  if (count == 68)//一秒计时,显示并蜂鸣器响一下
  {
    count = 0;
    time++;
    if (time == 60)
      time = 0;
    Serial.print("second: " ) ;
    Serial.print(time, DEC) ;
    Serial.println("s" ) ;
    beep_once();
  }
}
作者: 测控系吴~    时间: 2019-9-1 14:52
tyrl800 发表于 2019-9-1 08:44
void setup()
{
  //初始化电机驱动IO为输出方式

你是用L298N这个器件做驱动器的吧?可惜我不是,我是直接用的雷赛电机的驱动器,pul- pul+ dir+ dir- ena- ena+ A+ A- B- B+。。。。你懂吧?




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1