俠歌无畏 发表于 2015-8-11 21:08:34

arduino控制42步进电机(工业级)转向转速

程序一



int dirPin = 6;
int stepperPin = 5;
int potpin=0;
int val;

void setup()
{
pinMode(dirPin, OUTPUT);
pinMode(stepperPin, OUTPUT);
Serial.begin(9600);
   }

void step(boolean dir,int steps)//Boolean 变量以 16 位(2 个字节)的数值形式存储,但只能是 True 或是 False
{
digitalWrite(dirPin,dir);
for(int i=0; i < steps; i ++)
   {
      val=analogRead(potpin);//判断语句,用于对电位器模拟值的分类
      if(val<512)
      {
          val=map(val,0,512,200,800);
      }
      else
      {
          val=map(val,512,1023,800,200);
      }
    digitalWrite(stepperPin, HIGH);
    delayMicroseconds(50);
    digitalWrite(stepperPin, LOW);
    delayMicroseconds(50);//生成周期为100的方波

    // speed control
    delayMicroseconds(val);//(改变这个值可以改变和改变对应的细分,可以变相应的转速)
   }
}

void loop()
{
val = analogRead(potpin);
if(val < 512)
{
step(true,200 * 16);//每步趋近1.8度,例如(200*1)也就是指电机走一圈(360度),可以利用(200*n)来走n圈
}
else
{
step(false,200*16);
}
Serial.println(val);
}





程序二

int dirPin = 6;
int stepperPin = 5;
int potpin=0;
int val;

void setup()
{
pinMode(dirPin, OUTPUT);
pinMode(stepperPin, OUTPUT);
Serial.begin(9600);
   }

void step(boolean dir,int steps)//Boolean 变量以 16 位(2 个字节)的数值形式存储,但只能是 True 或是 False
{
digitalWrite(dirPin,dir);
for(int i=0; i < steps; i ++)
   {
      val=analogRead(potpin);
      int a=abs(val-512);
          a=map(a,0,512,1000,200);
    digitalWrite(stepperPin, HIGH);
    delayMicroseconds(50);
    digitalWrite(stepperPin, LOW);
    delayMicroseconds(50);//生成周期为100的方波

    // speed control
    delayMicroseconds(a);//(改变这个值可以改变和改变对应的细分,可以变相应的转速)
   }
}

void loop()
{
val = analogRead(potpin);
if(val < 512)
{
step(true,200 * 16);//每步趋近1.8度,例如(200*1)也就是指电机走一圈(360度),可以利用(200*n)来走n圈
}
else
{
step(false,200*16);
}
Serial.println(val);
}



以上两个程序原理上面一样,只是在数值对比时做了不同的变化。

俠歌无畏 发表于 2015-8-11 21:12:06

是用Microstep driver驱动的,12V开关电源+microstep driver驱动器+arduino uno +杜邦线+跳线

rick_hou 发表于 2015-8-11 23:15:07

俠歌无畏 发表于 2015-8-11 21:12 static/image/common/back.gif
是用Microstep driver驱动的,12V开关电源+microstep driver驱动器+arduino uno +杜邦线+跳线

可以试试 micros() 这个函数来控制时间,或者使用定时器。我以前写过一个帖子就是控制步进电机的。

dedewow 发表于 2015-8-11 23:34:40

谢谢分享:):)

俠歌无畏 发表于 2015-8-12 16:59:00

rick_hou 发表于 2015-8-11 23:15 static/image/common/back.gif
可以试试 micros() 这个函数来控制时间,或者使用定时器。我以前写过一个帖子就是控制步进电机的。

我回去试试   

suoma 发表于 2015-8-12 21:15:47

arduino自带电机库,可能更简单

Ansifa 发表于 2015-8-12 22:26:08

A4988也是这样驱动的,可以直接使用这个代码

gxfup 发表于 2015-12-18 14:47:01

不错,谢谢指导,收藏。

风清王 发表于 2016-4-6 22:10:59

请问potpin指的是驱动器上的哪个引脚?驱动器上不是只有PU+ PU- DR+ DR-EN+EN- 这六个引脚吗?并且都是数字量啊!你这个potpin是模拟量,它是驱动器上的那个引脚?

lesterlai 发表于 2016-4-7 12:49:14

频率多高?能去到1MHz么,或是30-50kHz?

俠歌无畏 发表于 2016-4-30 16:50:25

风清王 发表于 2016-4-6 22:10 static/image/common/back.gif
请问potpin指的是驱动器上的哪个引脚?驱动器上不是只有PU+ PU- DR+ DR-EN+EN- 这六个引脚吗?并且都是 ...

这个是模拟输入A0   接的是一个电位器
页: [1]
查看完整版本: arduino控制42步进电机(工业级)转向转速