OpenPnP: Global Axes and Enhanced Motion Control

UPDATE: These features (and much more) are now part of OpenPnP 2.0. Read OpenPnP: Advanced Motion Control.

The first step for more advanced Motion Control in OpenPnP has been implemented and a Pull request posted.

This is the foundation work. The fancier parts of what was discussed in the group in terms of “advanced motion control” are still mostly missing. But Jason of OpenPnP suggested, it makes sense to publish a first version, as it already simplifies setup of Axes, Axis Transforms and Axis Mapping, now fully in the GUI rather than hacked in the machine.xml. This also creates a new architecture around the Drivers, you can now have multiple and mix them as you like (formerly only GCodeDriver supported sub-drivers and these could again only be GCodeDrivers). Actuators can also easily be mapped to specific Drivers on the GUI now.
Some enhanced motion control is already there:
  1. You can now set up individual Axis feed-rate, acceleration and jerk limits (jerk control is 3rd order motion control, only some controllers support it).
  2. It is recommended, you remove the global feed-rate on the driver, so your machine can stretch its legs (this is explained in the guide in the PR).
  3. This is most useful for the rotary axes, were much higher limits are usually appropriate, as these are given in degrees rather than millimeters. Example: a 180° Nozzle half turn should be done in a snap, much faster than a 180mm linear move can ever be. I’ve seen many OpenPnP videos with painfully slow rotation. No more!
  4. The Speed [%] slider on the Machine Controls and other speed factors (on parts, nozzle tip changers, feeders etc.) now also control the more important acceleration (and jerk) rather than just the feed-rate. The motion now acts as if in slow motion, already resulting in better control over vibrations and how “carefully” the machine moves with reduced speeds. E.g. nozzle tip changes are already much smoother and quieter on my machine, as is the lever actuation on my PushPullFeeder.
  5. If you have axes on multiple controllers, motion control now approximates coordinated motion. So if your X is on controller 1 and your Y on controller 2 it will still approximately move in a straight line across a diagonal, because OpenPnP motion control now makes sure each axis takes the same amount of time to do its move. The Axis with the longest way to go sets the pace, the others are slowed down. This allows you to use very simple controllers such as an “Arduino” talking to a driver IC with built-in motion control (the Trinamic ICs with built-in 7-segment S-Curves have been discussed here in the group).
  6. The simulated machine was significantly enhanced. It already supports full 3rd order (jerk controlled) motion control for testing. You can check it out! (this is explained in the guide in the PR)
And yes, the work on the mentioned “fancier parts” of advanced motion control is going on!

Leave a Reply

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

Please use comments for short feed-back to the posts only. If you have questions, consider using the OpenPnP discussion group instead.