This is a 3-axis + 1 clone axis motor controller for all your CNCs, laser cutters and engravers. Its powered by the Atmega328P, is Arduino compatible and runs the grbl motion control firmware.
Here is a list of features that this board supports:
- 3 + 1 clone axis for systems with two motors for a single axis (X or Y axis can be duplicated)
- Capable of driving upto 4 NEMA 23 motors at 2.2A per motor (with a heatsink, 1.5A without any heatsink)
- Full step to 32 micro-steps configurable via on board microswitches
- Current limiting can be set independently for every axis including the clone axis
- Options for user configured inputs and feedback such as E-Stop, Reset, Feed Hold, Cycle Start, Homing Location, and Probe
- Accommodates upto 6 NO limit switches and almost unlimited NC switches. Limit switches are configurable as active high (normally closed switches) or active low (normally open switches)
- USB port eliminates ancient parallel ports and freedom from older expensive machines that are hard to obtain
- Bluetooth control (with an optional HC-05 bluetooth module) to wirelessly connect and operate the machine
- Comes with heatsinks for the motor driver chips
- Uses standard 12-24V DC supply and with 12V at 1A and 5V at 2A outputs on the board
- Reverse power connect protection protects against errors while connecting the power source
- Plenty of visual indicators for debugging
- Comes pre-installed with grbl v1.1e
The motionPro CNC controller ships with these default settings
- The current limit for each stepper motor is set at 1A. See this section for more information on how to set current limits.
- Limit switch mode is set to active low
- When the USB cable is not plugged in, the board can communicate with the PC through a Bluetooth connection. This essentially makes the Bluetooth the default communication medium.
- Stepper resolution is set at full step mode for all drivers
- Clone axis is set to clone the Y-axis
- Steps/mm are kept at their default values set by grbl. Depending on the type of machine you have, you can set the values using this calculator.
The motionPro CNC controller uses a USB to UART bridge from Silicon Labs to connect to your computer. Before you connect the controller to your PC you will need to download the virtual com port (VCP) drivers. Once the drivers are installed your PC should auto-detect the hardware and create a numbered virtual serial port. This port can be used to connect the frontend GUI to your machine.
In Windows, this should be visible under Device Manager and in OSX you should be able to see this by typing ‘lsusb’ in the Terminal window.
All stepper drivers need to have current limiting set to prevent excessive current draw that can damage the motors and the controller board. By default the current limit is set to 1A. Current limit is set using the following formula:
To set a maximum current draw of 2A per motor you would set the Vref using the onboard preset to 1V. The board has separate 1-pin headers next to presets on the board marked as ILIMx.
At the time of shipping, the default limits are set at 1A. To change this limit, connect a multimeter between this point and any of the GND terminals. To set a larger current limit value, turn the preset anti-clockwise and to lower the limit turn it clockwise. Follow the equation above to set the required Vref value which in turn sets the current limit.
When the motor tries to draw more current than is set, the driver shuts down and a FAULT status is triggered. This can be identified on the FLTx pins on the expansion header. A low on these pins indicates a fault status.
Before connecting the motors you’ll need to identify which wires represent the coils. This guide explains identifying wires for a 4 and 6-wire stepper motor.
To identify the motor wires, simply choose two random wires and measure the resistance across them using a multimeter. If the meter shows an open connection then these wires belong to different coils. Once you’ve found the two pairs with similar resistances (usually in the range of a few ohms), you’ve identified the two coils.
This controller comes with four 4-pin terminals and 4-pin headers for connecting the motors. The headers make it easy to connect the motors if yours have connectors attached to them. If your motor does not have connectors simply use the terminals. The terminals are marked as 2B, 2A, 1A, 1B. Insert one pair in the 2B and 2A and other in 1A and 1B.
Remember that connecting motors in ways other than in pairs identified earlier will have unexpected results including the motors not moving at all or damaging them in some way.
A host of limit switch options are available.
Limit switches are either normally open (NO) or normally closed (NC). When normally open switches are used, set the limit switch mode to ACTIVE LOW. With NC switches set the limit switch mode to ACTIVE HIGH.
On the board, there is a 2×4 header with numbers around the pins. Pins 1 and 3 and 2 and 4 are shorted. Also, pins 2 and 4 are common pins. Connect your limit switch common terminals here.
Limit switches must be enabled through homing by setting $21=1 in the settings. Note that once homing is complete, the entire machine is set in the negative coordinate space. If you’d like it otherwise, you need to enable HOMING_FORCE_SET_ORIGIN in the config.h file to set 0,0,0 to the homed location and re-upload the firmware. You’ll then need to play with the homing direction and main direction port masks (explained below).
Getting homing right is never easy. Just be patient and if you’ve wired everything correctly, its bound to work right. I usually run a homing cycle and see which direction the axes move. I then play with the direction homing direction mask ($23) and get it to home in my preferred corner. Right after this you’d typically see that one or more axes are reversed. This is easily remedied by tweaking the direction port invert mask ($3). Once this is done, re-home the machine and then re-set the homing direction mask (it should be reversed again since we changed the main direction port invert mask). This should properly set the machine with limit switches and in your preferred coordinate space.
Before you plug in a BT module you will need to configure it with the appropriate settings. If you’ve bought the module from me, its pre-configured and you can skip straight to the connecting part. However if you are using your own module, you will need to configure it using this guide.
Once you’ve configured the module, Simply plug it in on the board such that the ‘KEY’ pin points to the motor controllers on the right.
If you’ve connected the USB cable, the BT module will remain switched OFF. To turn ON the module, detach the cable from the computer. If you are on a Windows machine, open Devices and Printers and click on ‘Add new device’. With the module turned ON, your computer should be able to discover the device and install its appropriate drivers.
When the computer installs the module it also creates a numbered serial port. You can find this port number under ‘Ports (COM & LPT)’ in the Device Manager (Control Panel > Device Manager). You’ll need this port number when you connect your CNC GUI with the board.
Once everything is installed, all you need to do is power up one of the supported controller GUIs, select the bluetooth module port and click connect. If all goes well, you should see the grbl welcome message with its currently installed version.
To change the default grbl settings connect to your controller board using either the USB cable or the BT module and open the serial monitor. Once connected you should see a message such as this:
Grbl v0.Xx [‘$’ for help]
This confirms that you are able to access all control settings for grbl. A full list of settings and their description is available here. To view the settings type $$ and grbl should respond with the settings that are pre-configured. To change any of the settings type $ followed by the associated number and the setting value. The grbl wiki here describes in detail the settings, its values and how to change them.
Typical values that you would need to change are the steps/mm, max travel distance, the acceleration rates and homing.
This controller comes pre-installed with grbl 1.1e. Whenever a new release comes in you can update the firmware yourself using the Arduino IDE. Download the grbl zip or clone the git repository into a new folder. You should find a new folder called grbl inside this main folder (usually named grbl-master). Copy the grbl folder to the Arduino libraries folder. This is usually under your ‘Documents/Arduino’ folder.
Restart the IDE and you should now see the grbl item under File > Examples menu. Please make a note of your existing settings, mask values etc. This is important!
Clear the EEPROM and upload the new firmware
Before you update the firmware, you’ll need to clear all existing settings and values. From the Arduino IDE menu, open the eeprom_clear program (File > Examples > EEPROM). Now upload this program to the controller as you would any other program.
If the above method does not work, use the 10-pin ISP header next to the AVR processor to program the board. You will need one an AVR programmer such as this or this. Please install any 3rd party drivers that would be needed by your programmer before attempting this. Make sure you line up the red wire from the programmer with pin 1 of the header (marked on the board).
If your programmer has a 6-pin header, you’ll need a converter or you need to connect individual wires between the programmer and the header as shown below.
After you’ve correctly wired the programmer, start the Arduino IDE and open the requisite sketch. Select the programmer as “USBTinyISP” from the Tools > Programmer menu. Now upload the sketch and update the firmware using “Upload using Programmer” option instead of simply “Upload”.
Note that when using Sparkfun’s AVR Pocket Programmer you do not need to specify a com port. Also this programmer works only on machines that run the Windows operating system. Follow their excellent hookup guide to setup the drivers first.