Skip to content

Motion Controller Firmwares

markmaker edited this page Jan 11, 2023 · 64 revisions

Controllers and associated Firmware for Advanced Motion Control

This page lists Controllers and associated Firmware that are known to be compatible with GcodeAsyncDriver and Advanced Motion Control features. Other controllers may also support the needed features, if you think your controller provides the needed features, please contact us in the user group.

Upgrading and Configuring Firmwares

Open Source controller firmwares often have 3D-printing heritage, where only the X Y Z axes, plus a limited-capabilities axis E for the extruder were supported. Later these firmwares were extended to support more axes, e.g. A B C, with full capabilities like moving them at the same time and reporting back their positions. Make sure to have one of these modern firmware versions loaded. Some firmwares also require you to configure the extra axes properly. For some well-supported firmwares, the following sections discuss required upgrades and instructions for configuration.

This is an area where Wiki contributions are very welcome, so if you find your firmware was not documented well, consider donating your documentation after you figured it out.

Key Features

The following key features need to be supported (in addition to basic homing and motion commands like G1 etc. of course):

  1. The controller provides a M115 firmware report command. This is used to automatically detect the type of the firmware in OpenPnP. Some automated setup can then be provided by the Issues and Solutions system. Even for a non-motion controller (e.g. a feeder control board) it is recommended to implement this as a minimum, to easily identify a controller on a port and to allow for automatic Issues & Solutions auto-setup.

The following requirements apply for controllers with axes attached:

  1. The controller can manage extra axes (A, B, C etc.) as true axes, with simultaneous motion. Controllers/firmwares that only support multiplexing "extruder" E axes with T tool select commands are not valid. Any mixing of axes must be correctly supported, including all aspects of feed rate and acceleration limiting according to the NIST RS274/NGC Interpreter – Version 3 standard, more specifically section "2.1.2.5 Feed Rate", or better.

  2. The controller can report axes positions, including extra axes (A, B, C etc.), typically with the M114 command.

  3. The controller can reset axes positions, including extra axes (A, B, C etc.), typically with the G92 command.

  4. G92 must work correctly when motion is still pending. Either by implicitly waiting for still-stand or (better!) by allowing on-the-fly offsetting.

  5. The controller must be able to wait for motion completion, typically with the M400 command. Any further commands sent after the M400 must be suspended until motion completion. The controller must only acknowledge the command, when motion is complete i.e. the "ok" (COMMAND_CONFIRM_REGEX) response must be suspended until then, providing blocking synchronization to OpenPnP.

  6. The controller must support dynamic acceleration and/or jerk limits, typically by the M204 command for acceleration or the M201.3 command for jerk.

To adapt a new firmware it is sometimes best to play with the GcodeServer controller simulator built into OpenPnP. You can then send commands and observe the expected response and behavior. You can activate the built-in GcodeServer by switching the GcodeDriver to tcp and setting the IP Address to exactly GcodeServer (case sensitive).

Duet3D

Duet3D 2/3 controllers firmwares have been perfected for use with OpenPnP. Many thanks to Duet3D for providing a free Duet 3 board and to dc42 for implementing substantial improvements, and accepting a crucial pull request. For advanced OpenPnP use, Duet firmware has been improved in...

  • USB serial speed
  • Fixes for compressed G-code parsing
  • Fixes and configurable option for correct feed rate calculations according to section 2.1.2.5 of the NIST G-Code standard.
  • Configurable grace period for proper look-ahead planning

Firmware version 3.3beta or newer must be used to support most OpenPnP Advanced Motion Control features. Use the Issues and Solutions system to help you detect the correct version and configuration and to setup proper G-code.

Refer to the Duet3D Wiki on how to upgrade:

Configuration

RepRapFirmware on other Boards

RepRapFirmware is the official name of the Duet3D boards' firmware (see above). It is Open Source and ports are available for some STM32 and LPC boards:

You need an OpenPnP version from 2023-01-11 or newer to support these.

Smoothieware

⚠ WARNING ⚠ do not buy the illegitimate clones of the Smoothieboard that are typically offered in Chinese online-shops. These are known to violate Open Source licenses and brand names, they use inferior/sub-spec and counterfeit components, inadequate copper layers etc. They are known to fail with OpenPnP. We will not provide support for these boards. See the discussions here and here.


A special Smoothieware firmware for OpenPnP is available. It contains some bug-fixes and features that are crucial for use with OpenPnP but are not present/accepted in the official Smoothieware firmware. The firmware and more details are available here:

Refer to the Smoothieware Wiki on how to upgrade:

Axes vs. Extruder Configuration

Please make sure your Smoothieware is configured to use true axes, i.e. A B C, not extruders (we're not 3D printing!). If your config.txt contains something like this:

# Extruder module configuration
# See http://smoothieware.org/extruder
extruder.hotend.enable                          true          # Whether to activate the extruder module at all. All configuration is ignored if false
extruder.hotend.steps_per_mm                    8.8888      # Steps per mm for extruder stepper

Then you must remove the extruder parts and instead use the delta, epsilon and zeta definitions as described in the Smoothieware 6axis page.

If you skip this, you will get a complaint by Issues and Solutions saying "The driver does not report axes in the expected X Y Z A B C order", or "Avoid axis letter E, if possible. Use proper rotation axes instead.":

driver reported

Marlin 2.0

Marlin must be configured for modern 6- or 9-axis support, i.e. using axes A B C etc. OpenPnP does not work (reasonably) with the old multiplexed extruder E0 E1 etc. modes.

HELP WANTED: Configuration was discussed here, but more concise instructions should be contributed as a separate Marlin Configuration page by Marlin users.

TinyG

TinyG is often used for Pick & Place because it comes with the Liteplacer kit. Some features have been added to TinyG to make it more like other controllers and to optimize its use with OpenPnP. The firmware and more details are available here:

Most changes have now officially been adopted by the TinyG project. But please still use the makr.zone link, as the official firmware downloads (binaries) are not yet updated and additional guidance is needed. Plus there is still a special version supporting the ADC for vacuum sensing.


Advanced Motion Control Topics

Motion Control

Machine Axes

General

Clone this wiki locally