Motion Controller Firmwares - strChrisLee/openpnp GitHub Wiki
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):
- 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:
-
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 withT
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. -
The controller can report axes positions, including extra axes (
A
,B
,C
etc.), typically with theM114
command. -
The controller can reset axes positions, including extra axes (
A
,B
,C
etc.), typically with theG92
command. -
G92
must work correctly when motion is still pending. Either by implicitly waiting for still-stand or (better!) by allowing on-the-fly offsetting. -
The controller must be able to wait for motion completion, typically with the
M400
command. Any further commands sent after theM400
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. -
The controller must support dynamic acceleration and/or jerk limits, typically by the
M204
command for acceleration or theM201.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:
- makr.zone: "Smoothieware: New Firmware for PnP"
- Note: for CHMT machines you require a different build, see CharmHigh CHMT36VA
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.":
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.
- 6-axis support seems to be included in the official Marlin bugfix-2.0.x branch.
- 9-axis support was reported to be included in the DerAndere1 9axis_pull.
- See also the Teensy 4.1 controller base PCB by OpenPnP user Bill.
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:
- makr.zone: TinyG: New G-code commands for OpenPnP use.
- See the proposed changes (Pull Request).
- Follow the discussion.
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
- Machine Axes
- Backlash-Compensation
- Transformed Axes
- Linear Transformed Axes
- Mapping Axes
- Axis Interlock Actuator