***********************
从淘宝上买了光驱式激光雕刻机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
上面的示意图可以使用 Arduino设计助手来画,刚刚才搜到。
为什么这样连接,需要看easydriver 示意图
从上图可以看出,步进电机是4根线,选择2相4线类型,淘宝上非常多。接线顺序示意图很清晰很简单。
这里有个事项,easydriver的排针是没有焊接上,需要玩家自己焊接,这时就有两种选择:
1、仿照上面的示意图(使用面包板)
2、不使用面包板
需要仔细看,就是排针的方向,排针焊接在正面,就是使用面板板;焊接在反面,就不用面包板。
步进电机需要单独供电,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
- int Distance = 0; // Record the number of steps we've taken
-
- void setup() {
-
- pinMode(8, OUTPUT);
-
- pinMode(9, OUTPUT);
-
- digitalWrite(8, LOW);
-
- digitalWrite(9, LOW);
-
- }
-
-
- void loop() {
-
- digitalWrite(9, HIGH);
-
- delayMicroseconds(100);
-
- digitalWrite(9, LOW);
-
- delayMicroseconds(100);
-
- Distance = Distance + 1; // record this step
-
- // Check to see if we are at the end of our move
-
- if (Distance == 3600)
-
- {
-
- // We are! Reverse direction (invert DIR signal)
-
- if (digitalRead(8) == LOW)
-
- {
-
- digitalWrite(8, HIGH);
-
- }
-
- else
-
- {
-
- digitalWrite(8, LOW);
-
- }
-
- // Reset our distance back to zero since we're
-
- // starting a new move
-
- Distance = 0;
- // Now pause for half a second
- delay(500);
- }
- }
复制代码
代码清晰简洁,没有算法和绕弯,就像看说明书一样。
这段代码的执行效果比较好,正转一下(3600个脉冲)然后反转。
问题也是,半分钟easydriver就有些烫了,感觉不能适应功率稍微大一些的电机。下一个笔记试试TB6560。
*******************************
找到问题:easydriver 发烫
后面例子都不需要更换电路图
第三个例子使用了一个库,需要另外安装(非常简单,下载AccelStepper库,然后放到 arduino安装目录Arduinolibraries 下就可以了
AccelStepper-1.39.zip
(73.9 KB, 下载次数: 23)
|