幻生幻灭 发表于 2020-2-5 22:43:02

Arduino CNC Shield v3 初探

本帖最后由 幻生幻灭 于 2020-2-5 22:43 编辑

特殊时期,呆着家里收拾,发现了陈年的Arduino CNC Shield v3。
16年买的中国山寨板,一直放灰到今日


在论坛里也没搜到有关帖子,于是整理至此
这不是一篇具体的应用,只是对于自己初次尝试CNC盾板的一个记录

模块简介
Arduino CNC Shield v3


CNC Shield V3.0可用作雕刻机,3D打印机等的驱动扩展板,板上一共有4路步进电机驱动模块的插槽,可驱动4路不进电机,而每一路步进电机都只需要2个IO口,也就是说,6个IO口就可以很好的管理3个步进电机,使用起来非常的方便,告别传统步进电机操作繁琐。将Arduino CNC Shield V3.0插到Arduino UNO上,并且安装GRBL固件就可以快速DIY一台CNC雕刻机出来。

材料清单

1、Arduino或兼容主控(例如:芒果,带USB下载线)
2、Arduino CNC Shield v3盾板
3、Reprap Stepper Driver 步进电机驱动器 A4988(国产,散热片可选,网上有绿板和红板基本一样,都是1A的)
4、步进电机(工作电流小于1A,受限于A4988)
5、12V开关电源(大于2A,实验用2A带动2个1A步进电机没问题,实际项目需根据硬件配置增大电流容量)
6、DC转接头(便于连接电源和CNC盾板)

实验步骤
1、先将Arduino CNC Shield v3盾板插入Arduino主控,并连接DC转换头(注意电源正负标识)


2、插上1个A4988电机驱动,和1个步进电机。注意接口插头方向!
这里右侧4P排针实际从上到下的顺序是2B、2A、1A、1B,与盾板标注的不符(标注为其他型号)
步进电机的线序要和端子的对上!然后盾板接上12V电源


3、先按照卖家的样例程序测试一下,

#define EN      8       //步进电机使能端,低电平有效
#define X_DIR   5       //X轴 步进电机方向控制
#define Y_DIR   6       //y轴 步进电机方向控制
#define Z_DIR   7       //z轴 步进电机方向控制
#define X_STP   2       //x轴 步进控制
#define Y_STP   3       //y轴 步进控制
#define Z_STP   4       //z轴 步进控制
/*
//函数:step    功能:控制步进电机方向,步数。
//参数:dir 方向控制, dirPin对应步进电机的DIR引脚,stepperPin 对应步进电机的step引脚, steps 步进的步数
//无返回值
*/

void step(boolean dir, byte dirPin, byte stepperPin, int steps)
{
digitalWrite(dirPin, dir);
delay(50);
for (int i = 0; i < steps; i++) {
    digitalWrite(stepperPin, HIGH);
    delayMicroseconds(800);
    digitalWrite(stepperPin, LOW);
    delayMicroseconds(800);
}
}

void setup(){//将步进电机用到的IO管脚设置成输出
pinMode(X_DIR, OUTPUT);
pinMode(X_STP, OUTPUT);
pinMode(Y_DIR, OUTPUT);
pinMode(Y_STP, OUTPUT);
pinMode(Z_DIR, OUTPUT);
pinMode(Z_STP, OUTPUT);
pinMode(EN, OUTPUT);
digitalWrite(EN, LOW);
}

void loop(){
step(false, X_DIR, X_STP, 200); //X轴电机 反转1圈,200步为一圈
step(false, Y_DIR, Y_STP, 200); //y轴电机 反转1圈,200步为一圈
step(false, Z_DIR, Z_STP, 200); //z轴电机 反转1圈,200步为一圈
delay(1000);
step(true, X_DIR, X_STP, 200); //X轴电机 正转1圈,200步为一圈
step(true, Y_DIR, Y_STP, 200); //y轴电机 正转1圈,200步为一圈
step(true, Z_DIR, Z_STP, 200); //z轴电机 正转1圈,200步为一圈
delay(1000);
}


编译和下载成功,但是步进电机纹丝没动。。。。。


好坑。。。经过一系列的排查后,发现USB插座和盾板的焊点短路了。。。
还好没烧板子,用红色胶布做了个隔离,步进电机就转起来了。
然后红色旗子会转来转去,大家脑补一下吧。


我尝试拔掉USB供电,发现不行。因为盾板是独立供电,没有给Arduino供电。盾板的VIN插针是悬空的!
所以最好用两路独立电源分别给主控和盾板供电,也是为了降低干扰。
顺便看了下Arduino自带的步进电机库,发现不支持这个驱动模块,只支持L293一类的驱动


4、然后下载GRBL库,并放入Arduino库文件夹下
..\\arduino-1.0.3\libraries\grblmain


5、打开GRBL样例程序


6、选择UNO和串口,并下载


7、下载GrblController
https://osoyoo.com/driver/GrblController361Setup.exe

8、安装并打开软件GrblController
在Port Name选择之前下载Arduino的端口号,确认波特率选择为9600,点击”Open”连接。
如果与Arduino UNO连接成功,”Open”会变成“Close/Reset”,背景为红色。然后就可以通过面板上的箭头控制步进电机了

关于界面操作请参考下面链接里的51hei那个,已经很详细了。
唯一需要注意的是下面这三个黄色标记的机械参数

它们的含义是步进电机带动滑块运动1mm控制器需要给出的脉冲个数。
公式如下   参数=((360/步进电机步距角)X驱动器选择细分数)/丝杆的螺距,例如下面这个步距角就是1.8度


这里顺便说下CNC盾板的针脚配置

MS0 , MS1 , MS2 跳线说明:(默认低电平,悬空或接地线,使用全步进模式)
表中分别是全步进,1/2步进,1/4步进,1/8步进,1/16步进模式。
例如本步进电机走一步是1.8度,一圈就是200步。如果使用1/16步进,则需要走3200步才等于一圈。
追求精度就细分,追求速度就全步进!
我做了个实验,当用跳帽设置成不同的细分后,在GrblController中点动轴,所移动的距离也是成比例缩放的。
例如下图X轴采用了1/8细分,在软件中点击轴移动的距离会是不用跳帽的Y轴的1/8


我还没做过实际的应用,也就下面一个实验视频。今天记录就到这里。



参考:
https://blog.protoneer.co.nz/arduino-cnc-shield-v3-00-assembly-guide/
https://osoyoo.com/zh/2017/04/07/arduino-uno-cnc-shield-v3-0-a4988/
http://www.51hei.com/bbs/dpj-47861-1.html
https://blog.csdn.net/liucheng_34/article/details/48048275
https://blog.csdn.net/ling3ye/article/details/47001251

幻生幻灭 发表于 2020-2-5 22:44:36

自己沙发,留着更新

方恨少 发表于 2020-2-16 19:48:02

驱动步进电机这个确实是好

方恨少 发表于 2020-5-7 13:43:04

好教程啊,写的详细

tom1234516 发表于 2020-5-10 21:27:33

谢谢楼主分享
页: [1]
查看完整版本: Arduino CNC Shield v3 初探