grbl修改源码实现写字机和激光雕刻机

说明

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
grbl修改源码实现写字机和激光雕刻机_第1张图片
这里强调一下: 这里去除注释会影响最后的编辑文件的大小。默认情况注释文件编译的大小为项目使用了 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
}
...

下面是俺通过大神的资料做的
grbl修改源码实现写字机和激光雕刻机_第2张图片
grbl修改源码实现写字机和激光雕刻机_第3张图片
grbl修改源码实现写字机和激光雕刻机_第4张图片
grbl修改源码实现写字机和激光雕刻机_第5张图片
grbl修改源码实现写字机和激光雕刻机_第6张图片
这里的扩展板我使用的是cnc shield v3 雕刻机扩展板,因为价格便宜呀。再加上两个A4988驱动板,10多块钱就搞定了。

你可能感兴趣的:(Arduino,arduino)