First cuts from the MPCNC

      No Comments on First cuts from the MPCNC

Working on the MPCNC has been a bit of a background project. It’s hard to believe I started printing the parts for it about four months ago.

Here is a little about the MPCNC for some context.

The project is the brainchild of “Ryan” at It  is a set of 3D printable part designs, given away freely, and other instructions, including lists of additional hardware, for building a CNC milling machine. There is a shop where you can buy kits of the non printable hardware, but as he’s based in the US the shipping and taxes would be a nightmare so I found the parts on eBay.

These parts include:

  • Rails (tubes) for the axis
  • Stepper motors
  • Many, many nuts and bolts of various sizes
  • Belts and pulleys
  • Bearings
  • Control board electronics

The machine can be built to different dimensions, depending on what’s needed. My machine uses 600mm rails, giving a useable cutting area of about 350mm square. This seems to be a nice compromise between rigidity and a useful cutting area. Here’s a fairly up to date picture of it, in its not quite finished state:

The X and Y axis consists of a printed roller, with embedded bearings, which runs along tubing. To save on costs you can use galvanised conduit, but since my machine is fairly small I went for marine grade stainless steel. The rollers are driven by stepper motors, which pull the themselves along toothed belts, which are attached to the corners via cable ties. For accuracy, there are two motors, in opposition, on each axis.

The Z axis is a bit more conventional, being a lead screw arrangement which rides on the intersection of the X and Y axis tubing (the gantry).

The Computer part of my MPCNC is a board usually used to control a 3D printer, running software usually used for 3D printing, the open source Marlin project. The hardware I’ve chosen is a MKS GEN L clone, which is basically an AVR with lots of IO connectors that are useful for 3D printers: MOSFET drivers for a heated print bed, IDC10 headers for an attached LCD PCB, and 5 headers for removable stepper motor driver boards.

Talking of the stepper drivers, I’m using the A4988 (PDF) type. There are three different ways to wire up the 4 stepper motors for the X and Y; the Z axis always being attached to a dedicated, single, driver:

  1. Independently attached to 4 driver boards. The additional X and Y motors are attached to what would normally be the main and secondary extruder position (E0 and E1) on the board.
  2. The X (and Y) motor pairs attached to one driver in series.
  3. The same but with the motors in parallel.

There are pros and cons with each method – motors in series seems to be the most common mode with the MPCNC – but I’ve gone for the approach of using all 5 driver positions, for simpler wiring at the expense of some software complexity.

And It’s probably the software side which has given me the most grief. Marlin is not really designed with CNC in mind and has to be “bent” into working with an MPCNC-type setup, assuming you are not using a ready-to-run board suppled by v1engineering.

I have configured Marlin based off the stock 1.1.9 build. If anyone is interested I have pushed my changes into a forked Marlin repo.  The main changes are to accommodate the stepper motor setup. Whilst Marlin supports two motor drivers on each X and Y axis as an “exotic” config, it doesn’t really like not having at least one configured extruder so this needs to be hacked around.

At some point I will hack on the code to remove the references to 3D printers (eg. temperature control) and fix some issues with the software “panicking” because there is no extruder connected.

In the course of working on my MPCNC build I’ve ended up designing a couple of custom parts which are available on

My build is currently far from useable for serious milling, but I have done some test cuts:

The cutting spindle is a Dremel 3000, the tool I first bought for drilling PCBs all those years ago. It only accepts 1/8 inch shafts, so in the video the cutting is done by a 2mm flat ended end mill.

To produce the gcode, I used Fusion 360’s CAM (Computer Aided Manufacture) function. Like the rest of the software there is a massive learning curve, which I’ve only just started climbing.

Here’s a picture of the finished pocketing operation:I was extremely pleased, and surprised, by how well it came out. The bottom of the heart shape is completely flat to the touch, the path of the end mill being almost totally imperceptible.

There’s still much to do before I put the machine into “production”.

I need to install a spoil-board and figure out a workpiece clamping system. Most likely I will use a sheet of MDF, screwed down at the corners. To make it replaceable I will use screw inserts in what’s currently the top surface. I’ll also use inserts for the hold down clamps, which will be 3D printed.

The spoil-board will also have to be levelled by the CNC to make sure its parallel to the movement of the cutting head.

The controller case needs to be screwed down; it’s the only part not now attached to the base board. I also need a power strip that can be attached to the table legs so I can control power to the spindle and the controller via one switch.

Talking of the spindle I might find the size of the Dremel chuck limiting. Dremels are not ideal because of their high rpm but low torque. I can’t see me using a full size router for the work I’ll be doing but there are other options.

I will also probably end up needing a solution to the problem of sawdust, ie. dust extraction.

All in all, this has turned out to be an awesome project, completely different to the electronics projects I’m used to, and I’m looking forward to seeing what I can make with my MPCNC…

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.