找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 15751|回复: 4
收起左侧

Arduino机械学习笔记1(从Easydriver开始)

[复制链接]
ID:112317 发表于 2016-4-9 22:52 | 显示全部楼层 |阅读模式
***********************
从淘宝上买了光驱式激光雕刻机DIY,目前还没有能力装上。相比安装要求,配套教程确实不够详细。虽然不需要知道原理,只知道步骤也可以完成雕刻机安装,但是步骤不清楚,另外自己对arduino和easydriver也不是很熟悉,所以难上加难。

为了不半途而废,所以打算边学基础边实践,最终完成对激光雕刻机的理解和实践。

***********************

选择easydriver作为起点,是因为它式连接 arduino 和 步进电机的 关键核心。

机械坊已经有两个例子,
*******
http://www.51hei.com/bbs/dpj-47861-1.html
微型CNC制作基于开源项目GRBL

这个例子就是最终要完成的,只是觉得该例子对于基础差的不够详细,而且步骤有跳跃,一上来就按照该教程失败率较高。

*******
http://www.51hei.com/bbs/dpj-47860-1.html
arduino当Gcode解释程序(CNC)

这个例子虽然有用,但对新手来说更不完整,新手无从下手。
********

直接找到easydriver的老家,
http://schmalzhaus.com/EasyDrive ... DriverExamples.html
果然提供新手的例子(并推荐进阶可以参考blogspot 上面的turorial,遗憾的是打不开,不知道是不是与长城有关)

第一个例子是 设置,怎样连线
***************************************
Example 1: Basic Arduino setup

101913v5bca93m5c55zd99.png
上面的示意图可以使用 Arduino设计助手来画,刚刚才搜到。

为什么这样连接,需要看easydriver 示意图
102042czv9e6r1jkkkpsy1.png

从上图可以看出,步进电机是4根线,选择2相4线类型,淘宝上非常多。接线顺序示意图很清晰很简单。

这里有个事项,easydriver的排针是没有焊接上,需要玩家自己焊接,这时就有两种选择:
1、仿照上面的示意图(使用面包板)
102626qo2cd87v3yvvyqc8.jpg

2、不使用面包板
102742ooi6tiuv4v6iikzn.jpg

需要仔细看,就是排针的方向,排针焊接在正面,就是使用面板板;焊接在反面,就不用面包板。

步进电机需要单独供电,6~30v。
******************************************

例子1的目的在于连线,代码反而很简单,

void setup() {               

  pinMode(8, OUTPUT);     

  pinMode(9, OUTPUT);

  digitalWrite(8, LOW);

  digitalWrite(9, LOW);

}


void loop() {

  digitalWrite(9, HIGH);

  delay(1);         

  digitalWrite(9, LOW);

  delay(1);         

}



pin8 是方向控制,pin9是脉冲控制,内容解释可以看原文,这里不翻译了。
除了这里
Well, with the STEP signal 1ms high and 1ms low, each complete pulse will take 2ms of time. Since there are 1000ms in 1 second, then 1000/2 = 500 microsteps/second.

脉冲信号是 1ms 高电平 1ms 低电平,所以一个完整的脉冲是 2ms。1秒 等于 1000ms,所以 1秒 / 2ms = 500 次脉冲 / 秒。

这样第一例子就完成了。

例子1的测试效果并不是很好,可能与我使用的步进电机有关,我是淘宝上买的12元一只的,个头比单片机配套的那种大很多。最大的问题是发热。

例子2
  1.     int Distance = 0;  // Record the number of steps we've taken
  2.      
  3.     void setup() {               
  4.      
  5.       pinMode(8, OUTPUT);     
  6.      
  7.       pinMode(9, OUTPUT);
  8.      
  9.       digitalWrite(8, LOW);
  10.      
  11.       digitalWrite(9, LOW);
  12.      
  13.     }
  14.      
  15.      
  16.     void loop() {
  17.      
  18.       digitalWrite(9, HIGH);
  19.      
  20.       delayMicroseconds(100);         
  21.      
  22.       digitalWrite(9, LOW);
  23.      
  24.       delayMicroseconds(100);
  25.      
  26.       Distance = Distance + 1;   // record this step
  27.      
  28.       // Check to see if we are at the end of our move
  29.      
  30.       if (Distance == 3600)
  31.      
  32.       {
  33.      
  34.         // We are! Reverse direction (invert DIR signal)
  35.      
  36.         if (digitalRead(8) == LOW)
  37.      
  38.         {
  39.      
  40.           digitalWrite(8, HIGH);
  41.      
  42.         }
  43.      
  44.         else
  45.      
  46.         {
  47.      
  48.           digitalWrite(8, LOW);
  49.      
  50.         }
  51.      
  52.         // Reset our distance back to zero since we're
  53.      
  54.         // starting a new move
  55.      
  56.         Distance = 0;
  57.         // Now pause for half a second
  58.         delay(500);
  59.       }
  60.     }
复制代码


代码清晰简洁,没有算法和绕弯,就像看说明书一样。
这段代码的执行效果比较好,正转一下(3600个脉冲)然后反转。
问题也是,半分钟easydriver就有些烫了,感觉不能适应功率稍微大一些的电机。下一个笔记试试TB6560。

*******************************
找到问题:easydriver 发烫

后面例子都不需要更换电路图

第三个例子使用了一个库,需要另外安装(非常简单,下载AccelStepper库,然后放到 arduino安装目录Arduinolibraries 下就可以了
AccelStepper-1.39.zip (73.9 KB, 下载次数: 23)
回复

使用道具 举报

ID:98618 发表于 2016-4-9 23:03 | 显示全部楼层
很不错的帖子,我也是被那个激光的雕刻机拉下水的,机器没做成,但是认识了arduino。哈哈

其实那个机器不做也罢,知道原理就行了。那个机器的精度真的是在是低的不能再。。。或者说是没有精度可言比较确切。

easydriver挺好,就是发热大了点。其实我们可以把easydriver看做是一个硬件的头文件,它有几个函数,我们只要调用函数就能比较精准的驱动步进电机了。 其实那种微型的步进电机完全可以用arduino直接驱动,但是需要占用4个口,并且需要更多的cpu资源。因为我们要不停的让那4个口high,low的来回调换。而且在程序中可能会有其他因素干扰,比如一些判断语句,会占用额外的cpu资源,可能驱动步进电机的方波就会有一些变形。这样以来电机的旋转就不是那么精准了。而easyd就不用考虑这些问题了,只要函数调用电机旋转(速度,时间,方向),其他的就不用我们操心了。

如果要驱动更大的电机,easyd就不行了,我感觉那个发热能把他自己烧死。 当然那个big easydriver也不行,太贵了要150¥而且也没见有几家卖的。 大电机直接用步进电机的驱动器就好了,原理、使用方法和easyd是完全一样的,只是那硕大的身躯和ardu的尺寸,有种猴骑骆驼的感觉。便宜的驱动器才50¥就够了。

前面这些东西都不是问题,都很容易掌握,最有技术含量的是,如何控制电机的加速和减速。让电机高速旋转只要一条指令就行了,但是电机所驱动的设备未必能承受的住这个启动过程。所以要有个加速的过程,才能平稳的运行。对于cnc的控制这点非常重要,如果是xy2个轴的运行就更复杂了,因为加速度不同,位置变化不同,运行轨迹都有变化。这些计算还是挺复杂的。很多cnc都有个硬件的“运动控制卡”来处理这些计算。一些工业级的运动控制卡起步就要4,5k,上万的也很正常。不过他们和软件一样都是计算,没什么特殊的地方,无非是速度快,运行稳定而已。

步进电机我也就只了解这些了,具体咋做我也迷迷糊糊的,随便聊一聊和大家分享一下而已。有兴趣的朋友可以仔细研究。
回复

使用道具 举报

ID:156302 发表于 2017-9-27 23:21 | 显示全部楼层
好好研究下,谢谢分享
回复

使用道具 举报

ID:237069 发表于 2017-10-4 17:47 | 显示全部楼层
新人加入,等级够了再来下载学习
回复

使用道具 举报

ID:282047 发表于 2018-2-3 22:14 | 显示全部楼层
为什么我接线正确,电机不转啊,电机卡住了,而且是一开始可以转,然后过一会就不能转了。
另外我用两节一样的9V电池供电,一个可以,一个不可以。
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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