极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 30458|回复: 10

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

[复制链接]
发表于 2015-8-11 21:08:34 | 显示全部楼层 |阅读模式
程序一



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 +杜邦线+跳线
回复 支持 反对

使用道具 举报

发表于 2015-8-11 23:15:07 | 显示全部楼层
俠歌无畏 发表于 2015-8-11 21:12
是用Microstep driver驱动的,12V开关电源+microstep driver驱动器+arduino uno +杜邦线+跳线

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

使用道具 举报

发表于 2015-8-11 23:34:40 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-8-12 16:59:00 | 显示全部楼层
rick_hou 发表于 2015-8-11 23:15
可以试试 micros() 这个函数来控制时间,或者使用定时器。我以前写过一个帖子就是控制步进电机的。

我回去试试   
回复 支持 反对

使用道具 举报

发表于 2015-8-12 21:15:47 | 显示全部楼层
arduino自带电机库,可能更简单
回复 支持 反对

使用道具 举报

发表于 2015-8-12 22:26:08 | 显示全部楼层
A4988也是这样驱动的,可以直接使用这个代码
回复 支持 反对

使用道具 举报

发表于 2015-12-18 14:47:01 | 显示全部楼层
不错,谢谢指导,收藏。
回复 支持 反对

使用道具 举报

发表于 2016-4-6 22:10:59 | 显示全部楼层
请问potpin指的是驱动器上的哪个引脚?  驱动器上不是只有PU+ PU- DR+ DR-  EN+  EN- 这六个引脚吗?并且都是数字量啊!  你这个potpin是模拟量,它是驱动器上的那个引脚?
回复 支持 反对

使用道具 举报

发表于 2016-4-7 12:49:14 | 显示全部楼层
频率多高?能去到1MHz么,或是30-50kHz?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-30 16:50:25 | 显示全部楼层
风清王 发表于 2016-4-6 22:10
请问potpin指的是驱动器上的哪个引脚?  驱动器上不是只有PU+ PU- DR+ DR-  EN+  EN- 这六个引脚吗?并且都是 ...

这个是模拟输入A0   接的是一个电位器
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-14 23:55 , Processed in 0.076831 second(s), 25 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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