What's new
What's new

Using the Brother Speedio M200X3


Jun 9, 2021
This is a follow-up to:

I originally planned to post everything at once all complete, but there's too much and it's been long enough. I'll add the rest when I have time.

## Machine Context

The Brother Speedio M200X3 is their 2nd-gen multi-tasking 5-axis CNC mill capable of 3+2/4+1 machining and 2000rpm turning.

The 3rd generation model, the Brother Speedio M200Xd1, was released in 2022 with a 28-slot ATC (up from 22) and a new controller (CNC-D00) that supports simultaneous 5-axis machining (5AX option).

## Inspection Report

The machine comes with a post-MFG inspection report like this: https://archive.org/details/brother-m-200-x-3-inspection-example

## Electrical Input

Oversize your solid state phase converter. My Phase Technologies PTE010RQT-H3S1 (10HP) was barely sufficient for the M200X3 (10kVA nameplate rating). The converter audibly struggles during spindle 0-16k rpm, and it cannot safely absorb the regenerative current during high-speed braking (ex. 16k-0 rpm) (machine alarm, converter alarm, worst case is spindle servo amplifier damage), even in elevator mode and thru comprehensive testing. I should have gotten the 20HP or even 30HP converter model. Fortunately, my converter does work if I ramp-down the spindle (ex. in 500 or 1000 rpm increments). I still like solid-state phase converters for their higher efficiency and reduced noise.

Use a delta-wye step-down transformer between the phase converter and the CNC machine (for proper 240V -> 220V stepdown and a degree of electromagnetic isolation/buffering).

## Spindle Rampdown Subprogram

Here is the spindle ramp-down subprogram (main program should call this with "M98 P05" before each instance of "M05"): https://archive.org/details/m200x3-spindle-rampdown

## Air Input

Clean, moisture-free air is important for machine reliability/longevity. I installed oil-free compressors with intake filters and 15um output filters. I installed an aftercooler and moisture filter. I installed SMC's new (2022) air filter series to achieve ISO 8573 air quality class 1:7:3.

SMC AFF/AM/AMD: https://ca01.smcworld.com/catalog/New-products-en/mpv/es30-17-aff/index.html

## Tool Install

An improperly seated toolholder (manual procedure human error) will fall out during the ATC cycle. I recommend visually inspecting to ensure no gap exists between the toolholder and the tool-slot half-ring.

## Speed Control

Rapid Traverse Override (non-cutting motion XYZAC): Speeds 1-3 are slow and good for learning/testing. Speed 4 is fast enough to be efficient but slow enough for reaction on probably-good programs. Speed 5 is extremely fast and should be used for peak efficiency on proven programs.

Feedrate Override (cutting motion XYZAC) and Spindle Override are especially useful on prototype parts (typically 1-2qty) to save reprogramming time. I find myself going up and down on the feedrate override pretty often.

## Floor

I've been happy with the polished concrete floor so far. For anyone planning a fresh build, check this thread: https://practicalmachinist.com/forum/threads/concrete-questions-for-new-shop.394216/


My toolchain is Autodesk Inventor and Autodesk Inventor CAM.

Social impact start-ups (public benefit) can get multiple seats of the Product Design and Manufacturing Collection for 3 years (free) by applying at: https://www.autodesk.com/sustainability/technology-impact-program

Autodesk post-processors are here: https://cam.autodesk.com/hsmposts

1. Search "brother"
2. Download the latest POST for "Brother Speedio M140X2" (compatible with M200X3)

I recommend Visual Studio Code for editing POST files (it's what my team uses for C++ robotics programming too, so quite versatile): https://code.visualstudio.com/

The official POST training guide is here: https://cam.autodesk.com/posts/posts/guides/Post Processor Training Guide.pdf

NYCCNC posted an Autodesk POST editing video years ago:

But some steps are now obsolete/unclear.

You want these extensions: NC-GCODE, Autodesk Fusion 360 Post Processor Utility v4.1.3

Configure it with: VSCode Settings -> Search "Fusion" -> Find Autodesk Post Utility, Post Executable Path -> C:/Autodesk/Inventor CAM 2023/post.exe

Some of the example NC files on the utility still don't load properly, but there was a recent update this year to the M140X2 POST so YMMV.

For the POST instructions below, custom functions can be added at the bottom of the POST file for convenient reference/editing.

## POST Customization: Auto Spindle Rampdown

Let the POST automate calling "M98 P5" before every "M05". For phase converters that can't handle the braking-regen backfeed.

1. Add a custom function at the bottom of the POST:


function rampdownSpindle() {

  writeBlock("M98 P5");


2. Call it before each spindle stop:

writeBlock(mFormat.format(isTurningOperation ? 305 : 5));

3. Also call it before the end of the program:

function onClose() {
(if block)


## POST Fix: Dwell Bug

Problem: dwells under 1 second are not supported

Solution: change "clamp(1, cycle.dwell, 99999999)" to "clamp(0.001, cycle.dwell, 99999999)"

## POST Customization: Coolant Dwell

Problem: tool starts cutting before flood-coolant flow has time to spray tool-workpiece

Solution: add 1 second delay after coolant-on

function setCoolant(coolant) {
  var coolantCodes = getCoolantCodes(coolant);
  if (Array.isArray(coolantCodes)) {
    if (singleLineCoolant) {
    } else {
      for (var c in coolantCodes) {
      onDwell(1); // dwell for flood coolant (CUSTOM)
    return undefined;
  return coolantCodes;

## POST Customization: Easy Dynamic Work Offset for 3 + 2 Indexing

(has been tested but not fully accuracy/edge-case verified)

Problem: the "normal" way to set up 5-axis on this machine with rotary fixture offset G54.2 is awkward (even setting aside the price).

gkoenig describes it well here: https://www.practicalmachinist.com/forum/threads/brother-u500xd1-5axis.409474/post-4020022

I've implemented what he was asking for, where you can keep using your normal WCS (G54 thru G59) and simply call a subprogram to activate a temporary WCS whenever A+C changes.

The subprogram code is here (use with "M98 P32"): https://archive.org/details/m200x3-3p2-indexing

Automate the call with POST:

1. Add a custom function for clearing the tool before the A+C move:

function writeRetractSimple() {
  writeBlock("G53 Z450."); // Tool Z-Clear (this Z-clear is AC-safe without Y-clear when workpiece is within 220mm radius sphere from center of rotation)
  //writeBlock("G00 Y0."); // Optional Tool Y-Clear (safest/furthest Y-position based on machine work volume; can be adjusted closer to optimize speed for small parts)

2. Add a custom function to call 3+2 indexing subprogram:

function updateWCS() {
  writeBlock("M98 P32");

3. In function "onSection()" (A+C Indexing with Tool Change):

var compCode = isTurningOperation ? gFormat.format(143) : (useMultiAxisFeatures ? "" : gFormat.format(43));  

var tempA = aOutput.format(abc.x);
var tempC = cOutput.format(abc.z);

// If and before A+C indexing, clear tool
if (tempA || tempC) {
  writeRetractSimple(); // Clear Tool Before A+C Indexing (CUSTOM)
  writeBlock("G00 " + tempA + " " + tempC);

  "T" + toolFormat.format(tool.number),
  conditional(!useMultiAxisFeatures, xOutput.format(start.x)),
  conditional(!useMultiAxisFeatures, yOutput.format(start.y)),
  conditional(!useMultiAxisFeatures, zOutput.format(start.z)),
  conditional(!useMultiAxisFeatures, hFormat.format(compensationOffset)),
  conditional((tool.type != TOOL_PROBE && !isTurningOperation), dFormat.format(tool.diameterOffset)),
  conditional((tool.type != TOOL_PROBE && !isTurningOperation), sOutput.format(spindleSpeed)),
  conditional((tool.type != TOOL_PROBE && !isTurningOperation), getSpindleDirection(tool.clockwise))
forceSpindleSpeed = false;

4. Again, in function "onSection()" (A+C Indexing without Tool Change):

if (a || b || c) {
  writeRetractSimple(); // Clear Tool Before A+C Indexing (CUSTOM)
  writeBlock(gMotionModal.format(0), a, b, c);
  if (!currentSection.isMultiAxis()) {
    clampAxis(abc, true, false);

## CAM

Once the custom POST/subprogram for Dynamic Work Offsets is prepared, 3+2 CAM is simply:

Autodesk Inventor -> Any Part -> CAM (UI tab) -> Setup -> Any Process Step -> Geometry -> Tool Orientation -> Set desired XYZ orientation -> Keep "Setup WCS origin"

(10K max characters reached) (I have a ton more to post but let me know if there's particular things you'd like me to write about)


Jun 13, 2022
Hey. Very nice!

Just a heads up, but I've done a ton of work on the standard Brother Autodesk post. I'm particular I've fixed most of the probing for Blum.

I would think you can apply most commits directly to the 5 axis post? Ideally we could try and find a way to unify the two...?


A demo of some probing moves with G68 rotation here: