arduino雕刻机程序

2020-05-19 21:26:43 sunxdd 阅读数 602

说明

grbl目前分两个版本

  1. Arduino Uno等版本https://github.com/gnea/grbl
  2. Arduino Mega2560的版本https://github.com/gnea/grbl-Mega

目前我只是研究了Arduino Uno这个版本。下面就介绍一下我怎么通过修改源码来分别实现写字和激光雕刻两种功能的。这次我们拿grbl(v1.1h (2019-08-25) Release) 这个版本来修改。下载地址:https://github.com/gnea/grbl/releases

grbl修改

  1. 方向设置
    打开grbl源码中config.h这个文件,找到如下代码。
//#define COREXY // Default disabled. Uncomment to enable.

如果你的机器的方向是下图这样的,就让取消注释。

#define COREXY // Default disabled. Uncomment to enable.

http://corexy.com/theory.html
在这里插入图片描述
这里强调一下: 这里去除注释会影响最后的编辑文件的大小。默认情况注释文件编译的大小为项目使用了 29762 字节!去除注释文件编译的大小为项目使用了 31344 字节!别看就增加了这么一点大小。最后会让编译的程序无法上传到Nano板上。

  • Arduino Uno这个板子的储存空间为32k(引导程序占用0.5KB),剩余31.5k。
  • Arduino Nano这个板子的储存空间为32k(引导程序占用2KB),剩余30k。
    所以去除注释编译的程序只能更新到Uno的板子上,而无法更新到Nano的板子上。
  1. 实现写字
    打开grbl源码中spindle_control.c这个文件,修改内容如下
//只要通过注释#define PEN_SERVO这一行,就可以实现激光雕刻机和写字机两个版本的切换了。不注释就是写字机,注释了就是激光雕刻机
#define PEN_SERVO
//这个舵机控制抬笔和落笔的角度参数。根据自己的机器来设置
#define PEN_SERVO_DOWN     31
#define PEN_SERVO_UP       23
...
//下面两个函数我进行了修改。其实的代码没有动。大家可以对比一下进行修改。
void spindle_init()
{
  #ifdef VARIABLE_SPINDLE
    // Configure variable spindle PWM and enable pin, if requried. On the Uno, PWM and enable are
    // combined unless configured otherwise.
    SPINDLE_PWM_DDR |= (1<<SPINDLE_PWM_BIT); // Configure as PWM output pin.
    #ifndef PEN_SERVO
	  SPINDLE_TCCRA_REGISTER = SPINDLE_TCCRA_INIT_MASK; // Configure PWM output compare timer
	  SPINDLE_TCCRB_REGISTER = SPINDLE_TCCRB_INIT_MASK;
	  #ifdef USE_SPINDLE_DIR_AS_ENABLE_PIN
	    SPINDLE_ENABLE_DDR |= (1<<SPINDLE_ENABLE_BIT); // Configure as output pin.
	  #else
	    #ifndef ENABLE_DUAL_AXIS
	  	  SPINDLE_DIRECTION_DDR |= (1<<SPINDLE_DIRECTION_BIT); // Configure as output pin.
	    #endif
	  #endif
	  pwm_gradient = SPINDLE_PWM_RANGE/(settings.rpm_max-settings.rpm_min);
	#else  
	  SPINDLE_TCCRA_REGISTER = (1<<COM2A1) | ((1<<WGM20) | (1<<WGM21));
      TCCR2B = (1<<CS22) | (1 <<CS21) | (1<<CS20);
	#endif
  #else
    SPINDLE_ENABLE_DDR |= (1<<SPINDLE_ENABLE_BIT); // Configure as output pin.
    #ifndef ENABLE_DUAL_AXIS
      SPINDLE_DIRECTION_DDR |= (1<<SPINDLE_DIRECTION_BIT); // Configure as output pin.
    #endif
  #endif

  spindle_stop();
}
...
void spindle_stop()
{
  #ifndef PEN_SERVO
    #ifdef VARIABLE_SPINDLE
      SPINDLE_TCCRA_REGISTER &= ~(1<<SPINDLE_COMB_BIT); // Disable PWM. Output voltage is zero.
      #ifdef USE_SPINDLE_DIR_AS_ENABLE_PIN
        #ifdef INVERT_SPINDLE_ENABLE_PIN
          SPINDLE_ENABLE_PORT |= (1<<SPINDLE_ENABLE_BIT);  // Set pin to high
        #else
          SPINDLE_ENABLE_PORT &= ~(1<<SPINDLE_ENABLE_BIT); // Set pin to low
        #endif
      #endif
    #else
      #ifdef INVERT_SPINDLE_ENABLE_PIN
        SPINDLE_ENABLE_PORT |= (1<<SPINDLE_ENABLE_BIT);  // Set pin to high
      #else
        SPINDLE_ENABLE_PORT &= ~(1<<SPINDLE_ENABLE_BIT); // Set pin to low
      #endif
    #endif
  #else
    SPINDLE_OCR_REGISTER = PEN_SERVO_UP;
  #endif
}
...

下面是俺通过大神的资料做的
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里的扩展板我使用的是cnc shield v3 雕刻机扩展板,因为价格便宜呀。再加上两个A4988驱动板,10多块钱就搞定了。

2019-12-20 11:15:18 acktomas 阅读数 1748

光驱diy画图仪

0. 硬件清单

Arduino UNO R3、CNC shield V3、A4988(2个)、Micro Servo 9g、光驱(2个)、12V1A电源适配器、结构件材料(自制)、线材、热熔胶等。

CNC shield V3 直接买这个扩展板对没基础的maker来说,接线会方便很多,不需要用面包板或洞洞板焊接线。购买时要注意买“跳帽”,这个也不能忘记。
在这里插入图片描述
在这里插入图片描述
Arduino CNC shield原理图:
在这里插入图片描述
A4988 购买时,一般都会配有散热片,给A4988上的芯片散热。

在这里插入图片描述

Micro Servo 9g 这个要注意,常见的有180度和360度两种旋转的舵机,我们要买180度的舵机。
在这里插入图片描述
光驱 因为光驱上有安装好的微型步进电机、光杆和滑台,我们可以直接用它作为一个方向的运动平台。
在这里插入图片描述

  1. 接线
    a. 微型步进电机焊接
    先将光驱上多余的部分卸掉,然后从微型步进电机的四个焊点焊接引出四根线,方便和控制板连接。
    在这里插入图片描述
    在这里插入图片描述
    b.控制板安装
    在这里插入图片描述
    CNC shield直接扣到Arduino UNO板上。
    将2个A4988扣到X、Y插座上,注意看图中它们的方向。散热片直接贴再芯片上。
    将步进电机引出的四根线连接到A4988旁的引针上。步进电机四个引脚分别是两个绕组的两端,两两相连。我们使用万用表的蜂鸣器测出互相连接的两个引脚。相连的两个引脚接到控制板上相邻的两个针脚上就行。
    舵机的三根线分别是信号线、电源正极和地线。电源正极和地线接到下图左边两个针脚上,信号线接右侧的针脚上。
    在这里插入图片描述

1. 硬件

Arduino Uno + CNC Shield V3 + GRBL v1.1固件.

  1. CNC shield直接扣到Arduino UNO板上。

  2. 将2个A4988扣到X、Y插座上,注意看图中它们的方向。散热片直接贴再芯片上。将步进电机引出的四根线连接到A4988旁的引针上。步进电机四个引脚分别是两个绕组的两端,两两相连。我们使用万用表的蜂鸣器测出互相连接的两个引脚。相连的两个引脚接到控制板上相邻的两个针脚上就行。

  3. CD/DVD 机械部件:通常光驱的电机是18度(每圈20步),行程是3毫米。所以当驱动设置在1/32细分时,GRBL的$100参数是(20 * 32) / 3 = 213.33 (步/毫米). 搜索关键词:“DIY光驱丝杆滑台”

2. 软件

2.1. java runtime

下载地址:https://www.java.com/inc/BrowserRedirect1.jsp?locale=zh_CN

2.2. Inkscape

InkScape 下载网址: https://inkscape.org
首先正常安装好软件后,我们还要给它装一个插件,解压MI Inkscape Extension.zip(文尾处直接下载)到inkscape的安装文件夹C:\Program Files (x86)\Inkscape\share\extensions文件夹内

2.2.1 G代码简介以及如何使用Inkscape生成G代码

https://www.norwegiancreations.com/2015/08/an-intro-to-g-code-and-how-to-generate-it-using-inkscape/

2.3 Universal-G-Code-Sender

下载地址:https://github.com/winder/builds/tree/master/UniversalGCodeSender
UGS 下载网址: https://winder.github.io/ugs_website/download/

2.4 SourceRabbit GCode Sender

SourceRabbit GCode Sender is a GRBL compatible, cross platform CNC control software.
It features a highly optimized and asynchronous (event-driven) UI and USB-to-Serial communication and can be also used on computers with small amount of RAM and CPU.
https://github.com/nsiatras/sourcerabbit-gcode-sender

2.5 LaserGRBL

下载地址:https://github.com/arkypita/LaserGRBL
Official website http://lasergrbl.com

LaserGRBL is a Windows GUI for GRBL. Unlike other GUI LaserGRBL it is specifically developed for use with laser cutter and engraver. In order to use all of LaserGRBL feature, your engraver must supports laser power modulation through gcode “S” command. LaserGRBL is compatible with Grbl v0.9 and Grbl v1.1

All downloads available at https://github.com/arkypita/LaserGRBL/releases

2.6 CuraEngine

下载地址:https://github.com/Ultimaker/CuraEngine
CuraEngine是一个强大,快速且强大的引擎,用于将3D模型处理为Ultimaker和其他基于GCode的3D打印机的3D打印指令。它是大型开源项目“ Cura”的一部分。https://ultimaker.com/en/products/cura-software
CuraEngine
The CuraEngine is a C++ console application for 3D printing GCode generation. It has been made as a better and faster alternative to the old Skeinforge engine.

The CuraEngine is pure C++ and uses Clipper from http://www.angusj.com/delphi/clipper.php Furthermore it depends on libArcus by Ultimaker, which can be found at http://github.com/Ultimaker/libArcus

This is just a console application for GCode generation. For a full graphical application look at https://github.com/Ultimaker/Cura which is the graphical frontend for CuraEngine.

The CuraEngine can be used seperately or in other applications. Feel free to add it to your application. But please take note of the License.

2.7 grbl

下载地址:https://github.com/gnea/grbl/releases

2.4 可视化G代码

下载:https://camotics.org/download.html

注意问题:

  1. A4988模块上的可调电位器,需要调整好电流大小,控制步进电机运动之后,由于流经步进电机的电流较大,会出现电机运行时噪声大、过热等现象,可以通过调节A4988上的旋钮减小电流。逆时针调小电流,顺时针增大电流。调节之后可以在电机运行时用手触摸判断是否过热。正常情况电机只是微热,没有噪音。
  2. 控制部分: 注意,现在国内卖的CNC Shield大多是V3, 使用GRBL v1.1版(最新版,v0.9也是)时,要把Spindle EN接到Z+上来控制激光功率。

脉冲计算

计算每毫米的脉冲数
光驱特点:每步18度(一圈20步),丝杆直径一般为3mm,丝杆螺距为3mm,也就是步进电机每转一圈,移动距离为3毫米,
咱主要修改“脉冲数”脉冲/mm这个参数
首先你必须知道你买的滑台的以下参数

  • 步进电机每转一圈前进的距离:3mm
  • 每转一圈全部的脉冲:20
    光驱的步进电机一般为18度,所以
    =3601820步数(脉冲数)=\frac{角度}{每步度数}=\frac{360}{18}=20
    即每转一圈需要20个脉冲(步)
  • 驱动每一步的微步数:16,驱动选择多少细分就是多少
    这个参数计算方法如下
    \frac{每圈步数*微步}{每圈移动距离}
    按照上面给出的计算公式
  • 不细分: (20×1)÷3=6.666
  • 2细分: (20×2)÷3=13.333
  • 4细分: (20×4)÷3=26.666
  • 8细分: (20×8)÷3=53.333
  • 16细分: (20×16)÷3=106.666

参考网址

  1. DF创客社区–DIY绘图仪:http://mc.dfrobot.com.cn/thread-37159-1-1.html
  2. 如何使用 Arduino 制作一个绘图仪: https://linux.cn/article-9714-1.html
    3.激光雕刻切割机使用100问 https://www.jianshu.com/p/6afda0c18b96
  3. 如何使用GRBL控制伺服:https://www.instructables.com/id/How-to-Control-a-Servo-Using-GRBL/
2014-03-09 14:20:17 u013474552 阅读数 14961

        最近做了一个基于Arduino的桌面激光雕刻机,照片如下:

       

 

        这个雕刻机的尺寸大约:150mm x 110mm x 135mm ,雕刻范围大概是 60mm X 60mm ;

        使用的材料包括:

        1、激光头;

        2、亚克力板材;

        3、步进电机;

        4、arduino电路板;

        5、步进电机电机驱动板;

        6、继电器;

        7、CPU风扇

       

        基本原理就是:

        1、在PC上将图片转换为矢量图;

        2、编辑矢量图并将其转换为该激光雕刻机可以使用的G代码;

        3、发送G代码至arduino,arduino上运行G代码解释程序控制步进电机与激光头进行雕刻

 

        下面是雕刻的视频:

         视频1 ( 木板雕刻 ) :

         http://v.youku.com/v_show/id_XNjgyNzU2MDc2.html   

         视频2(木板雕刻):

         http://v.youku.com/v_show/id_XNjgyNzU3NTI0.html

         视频3(硬纸板雕刻):

         http://v.youku.com/v_show/id_XNjgyNzU3MTgw.html

         视频4(木板雕刻):

         http://v.youku.com/v_show/id_XNjgyNzU2NjA0.html

 

          一些雕刻的成果展示:

          图片1:

         

 

          图片2:

         

 

          图片3:

         

 

          图片4:

         

 

          图片5:

         

 

          图片6:

         

 

          图片7:

         

         

          如果对该激光雕刻机感兴趣,可以加qq:1924767283。或者在淘宝:http://item.taobao.com/item.htm?spm=686.1000925.1000774.13.lP9X5e&id=37704930284购买整套配件来自制!

2018-05-19 16:36:31 liujiandu101 阅读数 13767
初识Arduino,有什么错漏的地方请指正.

学会使用A4988驱动电机对于DIY3D打印机,雕刻机很有帮助。

6线一般是两组,先用万用表接其中一根线,然后一次点其他线,凡是不同的都是另外一组,每一组有三根线,两两测试,电阻最大的是线圈的两头抽头,剩下一根是中心抽头。

实验目的:Arduino与A4988驱动42步进电机


材料如下:

Arduino uno *1
A4988            *1
42步进电机    *1
面包板            *1
9V外接电源    *1
导线               若干

step 1:接线

关于接线更详细的相关资料:http://fritzing.org/projects/a4988-single-stepper-test/


MS1 , MS2 , MS3 跳线说明:(例子里是低电平,悬空或接地线,使用全步进模式)

分别是全步进,1/2步进,1/4步进,1/8步进,1/16步进模式。

步进电机走一步是1.8度,一圈就是200步。例如使用1/16步进,则需要走3200步才等于一圈。




step 2:测试程序程序

网盘下载程序


[objc] view plain copy
  1. int x;  
  2.   
  3.   
  4. void setup()  
  5. {  
  6.   pinMode(6,OUTPUT); // Enable  
  7.   pinMode(5,OUTPUT); // Step  
  8.   pinMode(4,OUTPUT); // Dir  
  9.   digitalWrite(6,LOW); // Set Enable low  
  10. }  
  11.   
  12.   
  13. void loop()  
  14. {  
  15.     
  16.   digitalWrite(4,HIGH); // Set Dir high  
  17.     
  18.   for(x = 0; x < 200; x++) // Loop 200 times  
  19.   {  
  20.       digitalWrite(5,HIGH); // Output high  
  21.       delayMicroseconds(800); // Wait 1/2 a ms  
  22.       digitalWrite(5,LOW); // Output low  
  23.       delayMicroseconds(800); // Wait 1/2 a ms  
  24.     }  
  25.   delay(1000); // pause one second  
  26.     
  27.   digitalWrite(4,LOW); // Set Dir low  
  28.     
  29.   for(x = 0; x < 200; x++) // Loop 2000 times  
  30.   {  
  31.       digitalWrite(5,HIGH); // Output high  
  32.       delayMicroseconds(800); // Wait 1/2 a ms  
  33.       digitalWrite(5,LOW); // Output low  
  34.       delayMicroseconds(800); // Wait 1/2 a ms  
  35.     }  
  36.     delay(1000); // pause one second  
  37. }  


ps后记学习:


*脚6(-en) 低电平为启动电机(enable),貌似也可以不接,试过一样能运行.但如果要控制电机的启动关闭还是要用上

*脚4(-dir) 用高低电平控制方向.

*脚5(-step) 用高低电平驱动电机转动.注意中间间隔等待的微秒值,如果太快会导致电机有声响不转动.



4988步进电机驱动板常见问题

1、4988驱动板可以驱动57电机吗?
4988可以驱动的电机跟尺寸关系不大,主要与工作电流有关,理论上电流小于2A的步进电机都是可以驱动的,不论是42还是57电机。

2、可以驱动多大的电流?
如果4988芯片上没有加散热片,电流最好在1.2A以下。如果加散热片,电流可以达到2A。

3、步进电机的连接方式是什么?
正如4988板子背面所标识的,连接方式是依次连接步进电机的1B-1A-2A-2B,或者反向为2B-2A-1A-1B,或者1A-1B-2B-2A,其它的方式一次类推。如果你的电机线是标准的红蓝绿黑的颜色,可以按照颜色连接为:红-蓝-绿-黑,或相反:黑-绿-蓝-红。

4、如何调节相电流?
相电流的大小跟步进电机的扭力有直接关系,如果感觉你的步进电机扭力不足,可以加大4988板子的电流配置。驱动板是通过一个小的电位器来实现对输出电流的配置的。可以通过用万用表测量电位器中间管脚的电位。电位和电流的关系满足下面的公式:Vref = A*0.8.也就是如果你想配置电机工作电流为1A,则电位应该配置在0.8V。默认的元件配置可以将电流调节到1.5A,如果需要更大电流需要修改电路中的R1,将30K的阻值改为20K(左右),就可以将电流调节到2A左右。

5、4988板子的细分如何配置?
4988板子细分配置需要ramps或其它相似板子的短路块来配置。ramps上对应每个4988驱动都有ms1,ms2,ms3三个短路块来调节细分(需要取下4988板子才可以看到),
ms1 | ms2 | ms3
no | no | no |全细分
yes | no | no |1/2(2细分)
no | yes | no | 1/4 (4细分)
yes | yes | no |1/8(8细分)
yes | yes | yes | 1/16(16细分)

6、接上电机后,电机不能正常运行,在左右抖动,是什么原因?
电机出现抖动一般有两个原因,
一是缺相:可能是4988板子没有焊接好或因为外力导致4988的输出端某一相断开,造成电机缺相从而抖动。也有可能是步进电机接线只用一相没有连接好;
而是两相接错:如果步进电机没有按照正确的顺序进行连接,电机也会出现抖动的情况,请按照问题3进行正确的连接。

7、4988可以驱动两相六线或两相无线的电机吗?
可以,两相连线按照问题3连接,将中间抽头悬空即可。

8、电机停止转动时会有滋滋的电流声。
首先说明的是这是正常现象。步进电机的特点是走特定的角度而不是一直转,所以步进电机都有一个参数,步距角。如果通过细分,可以最小走 步距角/细分数的角度,比如步距角为1.8度的步进电机,采用16细分,最小可以走的角度是1.8/16=0.1125度。但由于这个角度非常小,并且不一定在电机物理所在的位置(1.8度为一个物理位置),所以步进电机停止时也需要通电,从而保证电机不会自动跳到物理步距角上。因为这个特性使得步进电机在静止时会有电流声,这属于正常现象,不用担心。




2016-09-27 15:44:47 qq_21078557 阅读数 1659

arduino激光雕刻机的所有资料和代码包括例程都在这个附属文件夹里面,有兴趣的火鸡可以下载自己摆弄摆弄。还是们阔以的哈。


链接:https://yunpan.cn/ck9fahG6Dz8eW  访问密码 f2c9

三轴控制雕刻机

阅读数 1974