Skip to content
AnHardt edited this page Sep 24, 2015 · 1 revision

Delta kinematics uses triangulation to control the nozzle position. Three coordinated carriages with rigid arms connect to a single effector where the nozzle is mounted. Delta triangulation has been documented extensively, perhaps nowhere better than in the PDF document Delta Robot Kinematics by Steve Graves. Marlin performs delta kinematics in real-time during printing, and this can add significant processing overhead. The DELTA_SEGMENTS_PER_SECOND configuration option can be reduced to tune performance when movement is choppy. Combining delta kinematics with a Full Graphic Smart Controller will test the limits of a Mega2560.

The math for inverse kinematics can seem pretty daunting, but it comes down to these basic facts:

  • Three Carriages are mounted on three Towers and together move a single Effector.
  • Each carriage moves in coordination with the other two (but "doesn't care" about the other two).
  • The only numbers that really matter are the distances in the XY plane from each carriage to the effector perimeter.
  • Once you know the distance, you can easily get the carriage Z position:
  H = DELTA_DIAGONAL_ROD      // The hypotenuse of all delta triangles is an arm's length
  Dx = Tx - Ex                // X difference between carriage and effector center
  Dy = Ty - Ey                // Y difference between carriage and effector center
  Dte = sqrt(Dx^2 + Dy^2)     // Distance from carriage XY to effector center (A)
  Dte -= EFFECTOR_RADIUS      // length to the edge, not the center
  // H*sin(acos(A/H))
  Ø = acos(Dte/H)             // Get the angle Ø from A/H
  O = H * sin(Ø)              // Opposite side is solved, O=H*(O/H)
  Zt = O + z                  // Add the carriage Z position
  Zt += effector_thickness/2  // Now the effector will touch the bed when z=0.
  Zt += nozzle_length         // Now the nozzle touches the bed at z=0. Done!
Clone this wiki locally