You chose the installation for any Generic Engraver driver shown below. First it must be noted that the only difference between all 3 different configuration is in the wiring and connectors. The Generic Engraver requires the usage of an ohmmeter, voltmeter, and a soldering iron as there are no known connectors that would work universally for all different drivers. Otherwise the Beagleboard and LinuxCNC firmware is identical.

Installation Instructions:

Please study and scan over the beagleboard driver combination as shown in the picture below. We provide the wires and power terminal blocks, Always make sure that the polarity of + (red wires) and negatives (black wires) as shown below are observed properly when making your own power wiring harness. More information will be provided below.

Open up your driver chassis box and take note of its contents, note that the electronics inside your chassis may look nothing like that shown below. However, there are really only three types of connectors we need to reroute to our LinuxCNC board. The first is the motor connectors, the second is the power, and the third is the emergency stop switch if present. Also it must be noted that our replacement driver board derives its main power from a 7-28VDC connector. So we will need to reroute this to our LinuxCNC driver the 24VDC power. Our driver/beagleboard combination derives its main supply from a absolute maximum voltage of 28VDC input and then steps that down to the 5V/3.3V to drive the beagleboard. We therefore recommend that the pre-existing voltage on the chassis power supply be tested with a DVM (digital voltage meter) to make sure it sets below this maximum 28VDC threshold before applying it to our driver replacement! Please take note of the X, Y, and Z stepper motor cables, these will interface with the mating connectors on our BeagleBoard LinuxCNC driver board. If there is any doubt which internal connectors belong to what motor then look on the backside connectors of the chassis, each motor is usually labeled with silkscreen as shown in the second picture below.

Add picture of Silkscreen back motors

First let us cutoff the motor connectors. We are going to leave just enough conductor on both ends in case we later want to resplice on the old motor connector. After cutting off the circuit board connector on the wiring harness, we will then need to strip about 1/4" of wire insulation off the ends of the four wires of each motor connector .

With the X, Y, and Z motors connected up to the chassis output motor connectors, and with power of the chassis turned off. Please measure with the ohmmeter the resistances observed for each possible conductor combination (as shown above in the rightmost picture. I have provided an example table of what was measured using my mill's motors connected to the driver at each of the stripped conductors.

orange-green 1.7ohm
blue-yellow 1.5 ohm
orange-blue open
orange-yellow open
green-blue open
green-yellow open

PLEASE NOTE THAT BEFORE SOLDERING YOU SHOULD MAKE SURE TO DISCONNECT POWER TO ALL CIRCUITRY! As the soldering tips can carry fairly high AC/DC offset that can destroy active parts. You will now want to solder for the example of the table above (your wiring may be totally different colors and orders), as pairs of wires sharing common low impedances (low 1.5-1.7 ohms in this case) nearest to one another in soldering order. In this case we place orange-green pair as orange followed by green from top to bottom in soldering, followed by blue-yellow pair in blue then yellow. We could have also arranged to solder as green, orange, yellow, blue in order. Or blue, yellow, green, orange from top to bottom. Or yellow, blue, orange and green in top to bottom order. In other words as long as the pairs of shared (low) resistance follow consecutively and are nearest adjacent wire connection there are many permutation that will work. The major difference in the permutations is that the direction of the motors may spin inverted direction, in which case SCALE can be inverted (shown later in this information tutorial) in the configuration files to reorient the correct direction of travel. This is why we don't mind what particular permutation we choose at soldering as long as the wiring is again that the two closest wires of the connectors read a low impedance/ohms. You'll want to solder like this for each of the X, Y, and Z connectors of the beaglboard/Driver board connectors.

Next we need to add the provided Kapton Tape around all the solderable connector conductors as shown in the picture below:

Use our provided wire nuts to connect the chassis emergency stop switch to the LinuxCNC emergency stop input wires.

Next we'll need to find the 12-24VDC power supply to drive the BeagleBoard/driver board. The exact position of this supply will depend on your actual driver chassis and corresponding electronics. I have below two different types of chassis along with their electronic and power supply boards. Yours could be vastly different. I'd first recommend that you just look over the circuit boards for a silkscreen marking with something like 12VDC or 24VDC. Or if you see a similar power supply as shown below in the left side you'll just look for + or - (or COM) which should indicate polarity. I'd recommend using a voltmeter to verify the polarity of the supply and magnitude. IF YOU GET THE WRONG VOLTAGE > 28 VDC OR POLARITY YOU'LL DESTROY THE NEW DRIVER AND BEAGLEBOARD AND OWN A WHITE ELEPHANT!!! So please do your due diligence on both even if you think the silkscreen and polarity on the wires (red is + and black is -) with a voltmeter. If your power supply is shown as in the left picture below then you won't need to do any splicing of the wiring harness just screw clamp onto the terminals below. On the other hand if the power supply as shown in the right side doesn't have a terminal block to thread your Beagleboard harness then you'll need to cut with wire cutter and splice on harness wire, for this you'll find we provide some additional wire nuts to speed up the reconnection.

We provide and up close of the power terminal connectors coming from the 24VDC chassis supply, one can also see the network cable coming in from the opening where the parallel port input used to reside. Polarity must be observed when connecting the Driver to the external power supply voltage. If the wrong polarity is put into the terminal blocks you'll destroy both the beagle controller as well as the motor driver board!!!

Standoffs for mounting are provided with the LinuxCNC beagleboard and driver board stackup solution. In this picture we drilled and threaded the two M3 screw (also included with the kit) through the top sheet metal of the chassis, so that our beaglebone sits close to the exhaust fan and upside down in the chassis. You can also mount on the bottom and remove the existing driver board to make room for the LinuxCNC driver. Obviously be very cautious when drilling you don't get metal shavings that can short out electronics in either the power supply or our LinuxCNC controller boards.

Usage and Troubleshooting:

Using your LinuxCNC Beagleboard plus stepper motor cape board stackup is as simple as plugging in the network cable. Turning on the power to the board stack, possibly needing to press a reset button on the motor driver board if their is a power on race problem. And logging into the VNC network with a remote desktop viewer. You can also move the files across from your local computer's hard drive files such a .ngc (gerber code) or .gcode to the beagleboard's folders by using a SSH (Secure Shell) client. These programs are readily available for free on gpl repositories. Your Desktop/Laptop OS will determine the correct binary download to obtain the free softwares to communicate with your beagleboard LinuxCNC OS, more on that later.

Before beginning on the communication and networking, we strongly recommend that you shut off your computer's firewall before trying any of the network commands below. A firewall blocking communication on a network is often times one of the biggest problems of failed networking and communications. By default the IP assigned to your beagleboard OS (Operating System) will be static address This must match your local subnet and not conflict with another device/computer that might have the same static IP address. You can verify the correct subnet of your computer on a LAN ethernet by opening a command/terminal window. For linux/mac you would type "ifconfig -a" without the quotes and hit enter, for windows you would type "ipconfig /a". The results will show your computers IP address such as or say or maybe Your subnet for that lan connection would then be the first 3 numbers between the dots if the subnet mask was Our first example being reported back by ipconfig would have also be the same subnet 192.168.1.X where X is don't care and thus see our default beagleboard as being on the same local subnet which by default is In either windows, mac, or linux you should then be able to type ping 192.168.15 from say your computer and a reply should come back with a ping of the beagleboard not timing out if it sees the board and is on the same subnet as the ethernet network. If you see your subnet is 10.0.0.X for example you need to tell us this so that we can personally configure your beagleboard at configuration to say instead. In fact we can set your beagleboard to any ip you wish to specify but please let us know when you buy it if you don't want the default subnet 192.168.1.X and fixed address of


You actually need two packages of software to communicate with your LinuxCNC beagleboard over the ethernet. One you need a VNC remote desktop viewer, I use the gpl free vinagre in linux mint. The remote desktop viewer will give you a window/viewer as if the Beagleboard remote operating system had a hardware monitor piped into your PC/laptop. Your PC/laptop acting as a dummy terminal/display for the remote LinuxCNC beagleboard. In other words you will be remotely connected on your desktop/laptop with a VNC connection to see an X window (virtual monitor) of the LinuxCNC server. Anyone who has used a virtual host or X window to another operating system will get the drift of what we are trying to say here on being remotely logged on and viewing another computer (in this case the beagleboard) through the ethernet. The second piece of software that will be required to move data files to and from your remotely connected LinuxCNC beagleboard will be a SSH (secure shell) client. In linux and these case examples I use the SSH client present in nemo/nautilus of my Linux Mint Desktop computer, which allows a file system very similar to the host directory file system . There are also standalone SSH clients like Putty, as well as Vinagre also supporting ssh servers. At the end of my elaboration I will try to give sources on the internet where you can download various SSH clients and compatible remote desktop viewers for Macs, Windows, and Linux.

Let's start with my case example of my work ethernet. The IP address of the LinuxCNC driver is at the default and the work network has a router at local ip address with a subnet 192.168.1.X and subnet mask obviously at The first operation is to connect the device into the ethernet through a patch cable. Power on the milling/LinuxCNC controller box. Do a warm reset after power comes up by pressing the reset button on the driver board as shown below:

Then open up a command/terminal and ping, until the ping shows a reply. If there is no reply then your computer is not seeing the beagleboard.

The first time we start vinagre/VNCviewer we need to specify VNC as the desktop viewer type, we also need to enter the IP address as shown below. If its the first time to start a connection to the LinuxCNC beagleboard your viewer might ask for a username and password. Use both "machinekit" without quotes for any username or password prompt.

Start the Linux CNC application.

We need to choose CRAMPS if its the first time we started LinuxCNC application, thereafter just click on OK.

After clicking OK wait about 1 minute for the linuxCNC package to start. At this point you will see the main application. You'll want to Enable the Mill as shown in the photo below.

To open CAM files for milling obviously we need to take the exported .ngc/gcode file and move it from our PC/laptop to the beagleboard Ubuntu OS file system. Then Open with the File->Open menu system of axis LinuxCNC application. To move the files over from the remote computer to the LinuxCNC host we will use SSH. This example uses nemo/nautilus in Linux Mint/Ubuntu however free software for Linux/Mac/Windows, such as Putty can also be used to SSH.

First time login will require that you verify the certificate by login anyway.

Afterwards we can just copy and paste or move the CAM files as shown below by dragging and dropping into the nautilus/nemo file system application folder. Notice we first descended down the folder hierachy of /home/macinekit/Desktop, you can place your machine files anywhere but we do this for convenience as the VNC window will automatically show the file show up on Desktop after the file is moved with the SSH transfer.

The VNC viewer shows the SSH file copied onto the Beaglebone Desktop.

A list of other SSH packages and VNC free viewers for Windows, Mac and Linux are provided below:

Free SSH available using Putty.
TightVNC free VNC viewer (java version OS independent)

Linux (As shown in these examples):
Free SSH Use the standard Nemo/Nautilus File Manager, Already part of GNOME, Non GNOME base Linux use FOSS/linux community to determine best alternate solution
Free VNC software for Linux. Many great choices available to FOSS, but we have had good results with Vinagre which is what is used in this manual. Also TightVNC is hardware/OS indifferent platform.

MAC (As shown in these examples):
Free SSH Use FUGU or
TightVNC free VNC viewer (java version is OS independent)

Other Adjustments and Configuration of your LinuxCNC beaglebone

We set the driver current to the stepper motors to the near maximum provided. If the current were set too low the chances increase of missed step, so on the error of caution (especially when our customer's first use the board) we went with the maximum. This of course can overheat the motors, so we suggest that you touch the motors in a long operation. If the motors are warm to the touch or very hot and hard to touch for longer then seconds but does not burn, then the current will probably be ok. On the other hand if you feel the motors in operation are getting near burning temperature you can cut back the current drive by using a jewelers to adjust the following potentiometers. NOTE: The potentiometers roll back to the same value in a full rotation, so its possible to adust by just 1 degree and actually go from a Maximum drive to the absolute minimum current drive to the motors.

Another configuration that may be necessary later is to change subnets or static IP of the router, one can set up a temporary network of the old subnet or use a crossover network ethernet cable and/or set your local router ip network to 192.168.1.X subnet initially. Then login to the beagleboard VNC remote server on that network. Then start a terminal (XTERM Desktop icon - right mouse click open) and open inside the beagleboard's LinuxCNC ubunutu OS, when at the terminal entry type in "sudo leafpad /etc/network/interfaces" followed by enter key. After the leafpad editor starts scroll down to the section:

auto eth0
iface eth0 inet static
iface eth1 inet dhcp

You can then set the address, network, netmask and gateway to whatever your new network will operate on. Then make sure to save the file and you have custom set the IP of your LinuxCNC to any address. Of course as stated earlier, we will request for the ip you'd like after purchase if the default ip address is not usable on your network then please let us know a new ip address that you want the LinuxCNC to reside.

The LinuxCNC configuration files:

You can find the configuration files by descending down the directory structure using left corner beaglebone window start, then choose the file Accessories->File Manager. Descend down the folder structure to /home/machinekit/machinekit-dev/configs/ARM/BeagleBone/CRAMPS. The two files that most of the LinuxCNC configuration are based on is CRAMP.ini and CRAMPS.hal. These files are already setup as default to work for your mill, you may want or need to change them for more specific changes. The two easiest ways to edit them is to open a XTERM window and type "leafpad /home/machinekit/machinekit-dev/configs/ARM/BeagleBone/CRAMPS/CRAMP.ini" and/or "leafpad /home/machinekit/machinekit-dev/configs/ARM/BeagleBone/CRAMPS/CRAMP.hal" without the quotes and the enter key. If for some reason you make a mistake on a configuration file and want to go back to factory default configuration, you can copy the default back over by running in a XTERM window "cd /home/machinekit/machinekit-dev/configs/ARM/BeagleBone/CRAMPS" followed by enter. Then type in the XTERM "cp CRAMPS.ini.bak CRAMPS.ini" followed by enter then another command of "cp CRAMPS.hal.bak CRAMPS.hal" and again followed by an enter. Now when you close and restart LinuxCNC will be back at default. The linuxCNC must be closed and re-opened for the changes to take effect.

Calibrating the axis length x, width y, and height z:

The device was default configured assuming a type of mill we have access to here. Your mill may or may not have the same amount of steps/mm. So we present the easiest way to find out if you need further calibration correction for the x, y, and z axis. Let's proceed as in the pictures below to see if the x-axis is calibrated and of course you'd have to do similar measurement techniques for the y and z axis as well.

Our steps will be to mark the first position of the mill with white tape, then issue the g0 x100 command to move the x-axis to position x=100mm (as shown in the superposition picture before/after below). Then calipers are used to measure the distance in mm from the beginning to end position. Hopefully this value reads 100 mm on the calipers, if it does not then we need to calibrate by correcting the SCALE entry in the CRAMP.ini file. There are 3 entries of a SCALE value, one for each axis x, y, and z. So be sure that the value you modify is the correct one when calibrating by changing the SCALE value. The x SCALE member will be located below the "[AXIS_0]", whereas the y SCALE will be under "[AXIS_1]", and the z scale value will be under the "[AXIS_2]. Generally speaking the x SCALE of your default CRAMPS.ini is set to 158.12, which basically is saying that LinuxCNC thinks there should be 158.12 steps/mm of the x motor. Now since I issue a command as shown below to move in the x axis by 100mm. If instead the calipers read say 150mm, then I would take 100 and divide by 150 and multiply by the previous SCALE=158.12 which means that the corrected SCALE would be 105.41. This would mean I should change the x axis scale to 105.41 from 158.12, and save the CRAMPS.ini, shutdown and restart the LinuxCNC application for it to take effect. The formula for newly corrected SCALE is thus =Expected (divided by) Measured (multiplied by) Old SCALE value

Conclusive Information about this Product

This product comes ready to install and replace a standard parallel port controlled mill driver. It's entirely OS (operating system) platform independent, as the host beaglebone acts as a minicomputer with its own local OS and linuxCNC application. Communication from your PC/laptop to the Beaglebone is via LAN ethernet cable of your local subnet. You will be expected to perform some electrical connections and some modifications to the configuration files as shown in this manual, but as one can see the usage and installation is actually quite easy for most with technical background. Total Installation time about 30 minutes. No expensive Mach3 or additional hardware is required, and no bulky old computer with parallel cables is needed as most LinuxCNC solutions require. Obviously the dedicated and fast beaglebone ARM processor gives extremely fast driver response times. The entire firmware is OpenSource and provided online as CRAMPS images and source. Further details of locations of these sources will be provided upon request if desired. Thank you all of the opensource community for this extremely economical and excellent product.

Common Troubleshooting and Issues

Symptom 1: Skipping, grinding, and/or gritty Noise when a servo motor turns
Cause 1: The driver motor current is either two low (see above screw adjustment) of a current output for motors, and/or the speed of the motor is too fast.
Solution 1: First check and adjust the motor driver current if set too low. Second, you may want to adjust speed of motor you need to open up the CRAMPS.ini files as listed above and search for the string STEPGEN_MAX_VEL, these should be lowered in value just until the eccentric servo sounds disappear. PLEASE NOTE that each axis x, y, and z should have a separate entry for STEP_MAX_VEL. X axis will be under AXIS_0, y axis will be defined under AXIS_1, and z under AXIS_2. Change only the STEP_MAX_VEL on the motors that are skipping.

Symptom 2: Milling mostly OK but sometimes it chatters or loses its X-Y position, often smaller bits will break all of a sudden even though prior cutting was good
Cause 2: Same as Cause 1. The driver motor current is either two low (see above screw adjustment) of a current output for motors, and/or the speed of the motor is too fast. In particular you should really be diligent on this problem on the z axis current adjustment or CRAMPS.ini AXIS_2 velocity settings.
Solution 2: Same as Solution 1. First check and adjust the motor driver current if set too low, especially on the Z-axis motor in a quick plunge rate but sometimes the X-Y axis as well can slip under cutting loads. Second, you may want to adjust speed of motor you need to open up the CRAMPS.ini files as listed above and search for the string STEPGEN_MAX_VEL, these should be lowered in value just until the eccentric servo sounds disappear. PLEASE NOTE that each axis x, y, and z should have a separate entry for STEP_MAX_VEL. X axis will be under AXIS_0, y axis will be defined under AXIS_1, and z under AXIS_2. Change only the STEP_MAX_VEL on the motors that are skipping.

Symptom 3: The X, Y, and/or Z axis move in the wrong direction, + direction is actually moving negative and vice versa.
Cause 3: The stepper gain in CRAMP.ini is negated to the correct magnitude of sign
Solution 3:Take note of the axis as we will need to find the correct location in the the CRAMPS.ini file and change the magnitude of the SCALE value for that axis. If the axis is moving opposite direction of expected on the X you will search for SCALE under entry "[AXIS_0]", if y axis then under entry "[AXIS_1]", and if z axis motion is backwards under entry "[AXIS_2]". After finding the correct SCALE value observe what it is equal to. If the SCALE value/number has a negative sign then change to a positive sign or remove the negative "-" in front of the number. On the other hand if the number is clearly positive as in missing a "-" or having a + then if course invert that numbers magnitude to a "-" in front. Save the CRAMP.ini setting and shutdown and restart the linuxCNC application windows inside the remote beaglebone host.