Difference between revisions of "Grbl"

From ShapeOko
Jump to: navigation, search
(Copying from "GRBL" (step one of redirect move))
(Downloading: added source edits section)
Line 25: Line 25:
 
*You can download a tested hex file [http://www.shapeoko.com/wp-content/uploads/grbl.zip here].
 
*You can download a tested hex file [http://www.shapeoko.com/wp-content/uploads/grbl.zip here].
 
*The complete set of hex files are available from the [https://github.com/grbl/grbl GRBL project on github], but you'll need to [https://github.com/grbl/grbl/wiki/Compiling-Grbl compile] the hex file yourself.
 
*The complete set of hex files are available from the [https://github.com/grbl/grbl GRBL project on github], but you'll need to [https://github.com/grbl/grbl/wiki/Compiling-Grbl compile] the hex file yourself.
 +
 +
==Editing for ShapeOko==
 +
To work on the ShapeOko, make these edits to the source (this is taken from around Grbl 0.8, posted by Edward on the mailing list):
 +
 +
Config.h:
 +
<nowiki>
 +
#define STEPPERS_DISABLE_DDR    DDRB
 +
#define STEPPERS_DISABLE_PORT    PORTB
 +
#define STEPPERS_DISABLE_BIT        0
 +
 +
#define STEPPERS_ENABLE_DDR    DDRB
 +
#define STEPPERS_ENABLE_PORT    PORTB
 +
#define STEPPERS_ENABLE_BIT    0
 +
#define STEPPERS_ENABLE_VAL    0  // 0=low 1=high
 +
 +
#define STEPPING_DDR      DDRD
 +
#define STEPPING_PORT      PORTD
 +
#define X_STEP_BIT          2
 +
#define Y_STEP_BIT          4
 +
#define Z_STEP_BIT          6
 +
#define X_DIRECTION_BIT      3
 +
#define Y_DIRECTION_BIT      5
 +
#define Z_DIRECTION_BIT      7
 +
 +
#define LIMIT_DDR      DDRB
 +
#define LIMIT_PIN    PINB
 +
#define X_LIMIT_BIT          1
 +
#define Y_LIMIT_BIT          4
 +
#define Z_LIMIT_BIT          5
 +
 +
#define SPINDLE_ENABLE_DDR DDRB
 +
#define SPINDLE_ENABLE_PORT PORTB
 +
#define SPINDLE_ENABLE_BIT 2
 +
 +
#define SPINDLE_DIRECTION_DDR DDRB
 +
#define SPINDLE_DIRECTION_PORT PORTB
 +
#define SPINDLE_DIRECTION_BIT 3
 +
</nowiki>
 +
 +
Stepper.c (insert this text on line 276):
 +
<nowiki>
 +
// set enable pin
 +
  if (STEPPERS_ENABLE_VAL)
 +
    STEPPERS_ENABLE_DDR &= 1<<STEPPERS_ENABLE_BIT;  // bit low is enable
 +
  else
 +
    STEPPERS_ENABLE_PORT |= 1<<STEPPERS_ENABLE_BIT; // bit high is enable
 +
</nowiki>
  
 
==Installation and configuration==
 
==Installation and configuration==

Revision as of 13:21, 19 February 2012

Overview

(from https://github.com/simen/grbl) Grbl is a no-compromise, high performance, low cost alternative to parallel-port-based motion control for CNC milling. It will run on a vanilla Arduino (Duemillanove/Uno) as long as it sports an Atmega 328.

The controller is written in highly optimized C utilizing every clever feature of the AVR-chips to achieve precise timing and asynchronous operation. It is able to maintain more than 30kHz of stable, jitter free control pulses.

It accepts standards-compliant G-code and has been tested with the output of several CAM tools with no problems. Arcs, circles and helical motion are fully supported – but no support for tool offsets, functions or variables as these are apocryphal and fell into disuse after humans left G-code authoring to machines some time in the 80s.

Grbl includes full acceleration management with look ahead. That means the controller will look up to 20 motions into the future and plan its velocities ahead to deliver smooth acceleration and jerk-free cornering.

Important note for Atmega 168 users: Grbl used to be compatible with both the older Ardunios running atmega 168 and the newer with 328p. The full version of Grbl now compiles without support for circles/arcs if you target 168. If you need arcs, but not acceleration-management I am still maintaining Grbl 0.51 in the branch called ‘v0_51’.

Note for users upgrading from 0.51 to 0.6: The new version has new and improved default pin-out. If nothing works when you upgrade, that is because the pulse trains are coming from the wrong pins. This is a simple matter of editing config.h – the whole legacy pin assignment is there for you to uncomment.

The project was initially inspired by the Arduino GCode Interpreter by Mike Ellery

Downloading

There are two different files to download.

  1. Hex file - The code that'll run on the Arduino.
  2. XLoader - A program that will upload the hex file to your Arduino.


There are many hex files available for your use.

  • You can download a tested hex file here.
  • The complete set of hex files are available from the GRBL project on github, but you'll need to compile the hex file yourself.

Editing for ShapeOko

To work on the ShapeOko, make these edits to the source (this is taken from around Grbl 0.8, posted by Edward on the mailing list):

Config.h:

#define STEPPERS_DISABLE_DDR     DDRB
#define STEPPERS_DISABLE_PORT    PORTB
#define STEPPERS_DISABLE_BIT         0

#define STEPPERS_ENABLE_DDR     DDRB
#define STEPPERS_ENABLE_PORT    PORTB
#define STEPPERS_ENABLE_BIT     0
#define STEPPERS_ENABLE_VAL     0  // 0=low 1=high

#define STEPPING_DDR       DDRD
#define STEPPING_PORT      PORTD
#define X_STEP_BIT           2
#define Y_STEP_BIT           4
#define Z_STEP_BIT           6
#define X_DIRECTION_BIT      3
#define Y_DIRECTION_BIT      5
#define Z_DIRECTION_BIT      7

#define LIMIT_DDR      DDRB
#define LIMIT_PIN     PINB
#define X_LIMIT_BIT          1
#define Y_LIMIT_BIT          4
#define Z_LIMIT_BIT          5

#define SPINDLE_ENABLE_DDR DDRB
#define SPINDLE_ENABLE_PORT PORTB
#define SPINDLE_ENABLE_BIT 2

#define SPINDLE_DIRECTION_DDR DDRB
#define SPINDLE_DIRECTION_PORT PORTB
#define SPINDLE_DIRECTION_BIT 3

Stepper.c (insert this text on line 276):

// set enable pin
  if (STEPPERS_ENABLE_VAL)
    STEPPERS_ENABLE_DDR &= 1<<STEPPERS_ENABLE_BIT;  // bit low is enable
  else
    STEPPERS_ENABLE_PORT |= 1<<STEPPERS_ENABLE_BIT; // bit high is enable
 

Installation and configuration

Windows

Flashing a hex file to your arduino is simple with windows.

Xloader.jpg

(For information on how to compile grbl from scratch on windows, see this page)

  • Download and extract xloader.
  • Open xloader and select your arduinos COM port from the drop down menu on the lower left
    • To Determine your arduino's COM port:
      • Windows XP: Right click on "My Computer", select "properties", select "device manager".
      • Windows 7: Start -> Right Click Computer -> Select Manage -> Select Device Manager from left pane
    • In the tree, expand "Ports (COM & LPT)"
    • your arduino will be the USB Serial Port (COMX), where the “X” represents the COM number.
    • * If there are multiple USB serial ports, right click each one and check the manufacturer, the arduino will be FTDI. (Mine is Com6)
  • After your COM port has been determined, set the BAUD Speed to 57600.
  • Select the appropriate device from the dropdown list titled "Device"
  • Now use the browse button on the top right of the form to browse to your hex file.
  • Once your hex file is selected, click "upload"


After clicking upload, you'll see the rx/tx lights going wild on your arduino. The upload process generally takes about 10 seconds to finish. Once completed, a message will appear in the bottom left corner of xloader telling you how many bytes were uploaded. If there was an error, it would show instead of the total bytes uploaded. Steps should be similar and may be done through the command prompt.

Linux

  • Linux use avrdude (Tested on Arduino Duemlianove and Arduino UNO)
    • Download latest release from http://arduino.cc/hu/Main/Software and extract files on Desktop.
    • Download one of the prebuilt .hex-files from the Github downloads-page.
    • Locate avrdude inside the Arduino IDE folder. It will be something like this:
  /home/[user name]/Desktop/arduino-1.0/hardware/tools/avrdude
    • Connect the arduino to you computer.
    • Discover the name of the Arduino serial port. Duemilanove boards appear like ttyUSBX where X is a number. Uno boards appear like ttyACMX where X is a number. You can use the command:
  ls /dev/tty*
    • In case you have more than one ttyUSBX or ttyACMX, unplug the board, run the command again, and compare the two lists.
    • For versions previous to Arduino 1.0 go to the avrdude location and run this command:
  ./avrdude -C avrdude.conf -pm328p -cstk500 -P/dev/[port name] -D -Uflash:w:[hex-file location and name].hex
    • For Arduino 1.0 the command is:
  ./avrdude -C avrdude.conf -pm328p -carduino -P/dev/[port name] -D -Uflash:w:[hex-file location and name].hex
    • You should see something like this:
  avrdude: AVR device initialized and ready to accept instructions
  
  Reading | ################################################## | 100% 0.01s
  
  avrdude: Device signature = 0×1e9406
  avrdude: erasing chip
  avrdude: reading input file “grbl.hex”
  avrdude: input file grbl.hex auto detected as Intel Hex
  avrdude: writing flash (14228 bytes):
  
  Writing | ################################################## | 100% 8.06s
  
  avrdude: 14228 bytes of flash written
  avrdude: verifying flash memory against grbl.hex:
  avrdude: load data flash data from input file grbl.hex:
  avrdude: input file grbl.hex auto detected as Intel Hex
  avrdude: input file grbl.hex contains 14228 bytes
  avrdude: reading on-chip flash data:
  
  Reading | ################################################## | 100% 6.45s
  
  avrdude: verifying …
  avrdude: 14228 bytes of flash verified
  
  avrdude: safemode: Fuses OK
  
  avrdude done. Thank you.

Mac

Configuring GRBL

configuring information here:

  • connecting to grbl
  • steps/mm x + y = 87.489
  • steps/mm Z axis = 2560
  • acceleration = default
  • default seek = 1100
  • default feed = 750

Using GRBL