<p>Every 3D printer or machine tool that is commanded through G-code must interpret the G-code in terms of the particular mechanism.  Even a Cartesian machine in which there is a clear X, Y, and Z axis, each with independent actuators, interprets the G-code and adjusts for the scale factors, considers the current kinetic energy and the implicit changes in the kinetic energy, and constructs a move plan to implement the G-code.  This involves considering the velocity limits, the acceleration, the jerk, and possible higher derivatives.  This plan is passed to the motor drivers, and the mechanism responds.</p>

<p>A delta mechanism is really the same.  The difference is that there is not a distinct X, Y, and Z axis, even though the commands in the G-code are given in Cartesian coordinates.</p>

<p>My second 3D printer is one I designed using standard hot ends and extruders.  I'm using the reprap firmware, and haven't adequately studied the kinematics.</p>

<p>My first milling machine, however, was a delta machine with 3 additional degrees of freedom -- a machine style generically called a parallel-kinematics inverted Stewart platform.  In my kinematics code, I plan a movement by breaking the Cartesian command into small enough segments that the non-linearity of the 6-axis movement space never exceeds the tiny error of the actuators.  I developed a CPU-intensive but effective calibration system that estimates the errors that I introduced when building it, and so the mechanical performance is good enough.  The machine itself is a 5'x6'x6' frame of welded steel, so it is pretty dimensionally stable.</p>

<p>A delta 3D printer is simpler because there is no control over the roll, pitch, and yaw of the hot end.  Unfortunately, not being able to control also means that you are subject to whatever errors are introduced in the construction.</p>

<p>"Bed-leveling" of a delta printer consists of estimating some of the machine-unique parameters and compensating for their effects: cup, bowl, ripple, and tilt.  Applying these adjustments is done in the kinematics code as a further modification of the G-code Cartesian parameters to the leg-space delta mechanism motions.</p>

<p>TL;DR</p>

<p>The G-code is not modified, but the parameters expressed in the G-code are adjusted and interpreted in light of the machine kinematics so that the intention of the G-code can be faithfully followed.</p>

CC BY-SA 4.0
2018-07-06T16:16:59.573Z
2018-07-06T16:16:59.573Z
cmm
<p>The short answer is that the handling of the non-cartesian design is done by the motion-control firmware running on the Arduino.</p>

<p>The long answer:</p>

<p>I don't believe GRBL supports non-cartesian designs, and it is not commonly used for printers. It is more often used for mills, routers, or laser machines. 3D printers will typically use a firmware such as Marlin, which supports several printer designs, including Delta machines.</p>

<p>At no point is the g-code itself changed. The motion control firmware running on the Arduino or other controller interprets the g-code and determines which way and when to step each motor to accomplish the motion.</p>

<p>With a simple cartesian machine, commands for the X-axis only relate to the X-axis motor, but for a non-cartesian machine the axis and motors have complex relationships. The firmware must be programmed and configured to control the motors correctly.</p>

<p>The g-code itself is never passed to the drivers. The commands to the driver are simple electrical signals to "enable" (to energize the motor power - even to just hold position), "direction" (which way to rotate the motor shaft), and "step" (which causes the motor to rotate by one step in the selected direction).</p>

CC BY-SA 3.0
2018-04-03T19:31:18.173Z
2018-04-03T19:31:18.173Z
mbmcavoy
<p>For example, to make a DIY cartesian 3d printer you <strong>could</strong> use/do the following:</p>

<ul>
<li><p>Create G-code using a program of your choice.</p></li>
<li><p>Load it into Universal G-code Sender (GRBL).</p></li>
<li><p>Pass it into an Arduino with GRBL.</p></li>
<li><p>The arduino can pass the instructions to the drivers through a GRBL arduino uno shield.</p></li>
<li><p>The drivers will control the steppers.</p></li>
</ul>

<p>If you want to make a DYI delta 3d printer, which point of this whole process needs to be altered in order for the delta printer to work properly? Is there an existing open source software for delta printers/cncs?</p>

<p>EDIT: This question could be asked about any kind of non-cartesian 3d printer, including Delta, SCARA, Polar, etc.</p>

<diy-3d-printer><delta><open-source>
At which point does a delta 3d printer change the G-code in order to work in its non-cartesian design?
begginer3
# At which point does a delta 3d printer change the G-code in order to work in its non-cartesian design?

(Asked by: username_0 on 2018-04-03)

For example, to make a DIY cartesian 3d printer you **could** use/do the following:

* Create G-code using a program of your choice.
* Load it into Universal G-code Sender (GRBL).
* Pass it into an Arduino with GRBL.
* The arduino can pass the instructions to the drivers through a GRBL arduino uno shield.
* The drivers will control the steppers.

If you want to make a DYI delta 3d printer, which point of this whole process needs to be altered in order for the delta printer to work properly? Is there an existing open source software for delta printers/cncs?

EDIT: This question could be asked about any kind of non-cartesian 3d printer, including Delta, SCARA, Polar, etc.

**Tags:** diy-3d-printer, delta, open-source

---

## 2 answers

### Answer by username_2 on 2018-04-03. Score: 5 | Accepted answer

The short answer is that the handling of the non-cartesian design is done by the motion-control firmware running on the Arduino.

The long answer:

I don't believe GRBL supports non-cartesian designs, and it is not commonly used for printers. It is more often used for mills, routers, or laser machines. 3D printers will typically use a firmware such as Marlin, which supports several printer designs, including Delta machines.

At no point is the g-code itself changed. The motion control firmware running on the Arduino or other controller interprets the g-code and determines which way and when to step each motor to accomplish the motion.

With a simple cartesian machine, commands for the X-axis only relate to the X-axis motor, but for a non-cartesian machine the axis and motors have complex relationships. The firmware must be programmed and configured to control the motors correctly.

The g-code itself is never passed to the drivers. The commands to the driver are simple electrical signals to "enable" (to energize the motor power - even to just hold position), "direction" (which way to rotate the motor shaft), and "step" (which causes the motor to rotate by one step in the selected direction).


---

### Answer by username_1 on 2018-07-06. Score: 2

Every 3D printer or machine tool that is commanded through G-code must interpret the G-code in terms of the particular mechanism. Even a Cartesian machine in which there is a clear X, Y, and Z axis, each with independent actuators, interprets the G-code and adjusts for the scale factors, considers the current kinetic energy and the implicit changes in the kinetic energy, and constructs a move plan to implement the G-code. This involves considering the velocity limits, the acceleration, the jerk, and possible higher derivatives. This plan is passed to the motor drivers, and the mechanism responds.

A delta mechanism is really the same. The difference is that there is not a distinct X, Y, and Z axis, even though the commands in the G-code are given in Cartesian coordinates.

My second 3D printer is one I designed using standard hot ends and extruders. I'm using the reprap firmware, and haven't adequately studied the kinematics.

My first milling machine, however, was a delta machine with 3 additional degrees of freedom -- a machine style generically called a parallel-kinematics inverted Stewart platform. In my kinematics code, I plan a movement by breaking the Cartesian command into small enough segments that the non-linearity of the 6-axis movement space never exceeds the tiny error of the actuators. I developed a CPU-intensive but effective calibration system that estimates the errors that I introduced when building it, and so the mechanical performance is good enough. The machine itself is a 5'x6'x6' frame of welded steel, so it is pretty dimensionally stable.

A delta 3D printer is simpler because there is no control over the roll, pitch, and yaw of the hot end. Unfortunately, not being able to control also means that you are subject to whatever errors are introduced in the construction.

"Bed-leveling" of a delta printer consists of estimating some of the machine-unique parameters and compensating for their effects: cup, bowl, ripple, and tilt. Applying these adjustments is done in the kinematics code as a further modification of the G-code Cartesian parameters to the leg-space delta mechanism motions.

TL;DR

The G-code is not modified, but the parameters expressed in the G-code are adjusted and interpreted in light of the machine kinematics so that the intention of the G-code can be faithfully followed.


---

