How to Install Carbon Fiber Arms with Zero Backlash Magnetic Joints on a Kossel Clear

Outside of carriage.

Inside of carriage.

Side view, showing angled carriage adapters between ball studs and acrylic.

Effector with arms.
  1. Carefully remove the old Traxxas joint arms from the effector and carriages.
    If you are careful enough, you can do this while the carriages remain on your printer, but the acrylic carriages are a little bit brittle, and I accidentally snapped one of mine!
    (I wasn’t careful enough the first time and accidentally broke one of mine. I temporarily taped it back together and it worked ok. Later I decided that wasn’t good enough, so I used the broken inside carriage as a template to drill three 3mm (or 1/8”) holes in an outside carriage, to replace it with.)

  2. Install six of the ball studs on the effector. Use M3 nuts to fasten them. If you have nylock nuts, those would be ideal to use — they won’t work themselves loose over time. An alternative is to use a pair of M3 nuts tightened against one another on each bolt.

  3. Install two ball studs into each of the three angled carriage adapters with nylock nuts, and then attach the angled carriage adapters to the inside carriage pieces using M3x8’s. Also install the new, stiffer outside carriage pieces.

  4. Install the magnetic carbon fiber arms and write down the six lengths written on them. Later on you’ll need to know the average of those lengths for DELTA_DIAGONAL_ROD. I’ve carefully measured your rods using a large micrometer. Those numbers are the distances from the center of one ball at one end of a rod to the center of the other. Ideally, you can pair the two shortest rods together on one carriage, the two longest on another, and the two middle length ones on the last carriage.

  5. Note: When you place your eye in the center of the top of your printer and look down, you should see that each pair of arms is parallel. If they aren’t, then detach the effector, rotate it by 60°, and reattach. You’ll be connnecting each pair of arms to the pair of adjacent ball studs which are the furthest apart, and which match the distance between the ball studs on the carriages.
    Here are two pictures of my modified Kossel Clear, showing the parallel arms when looking downward:

    Looking down, with spool removed.

    Looking down, with spool mounted.

    Front view.

  6. Here are the STL files in case you would like to print them yourself:

    Here are the OpenSCAD source files if you would like to customize them:


Now you will need to recalibrate your KC in order to get the best performance out of it. Before this point, if your calibration was a little bit off, the slop in the system may have hidden it. Now you will notice smaller miscalibration problems, but there is a much easier technique for calibrating your printer to within a smaller margin of error than you’re probably used to.

I’ll assume that you’ve been using BEL’s version of Marlin.

  1. Download and use this slightly modified copy of Rich Cattell’s version of Marlin, which I’ve named Marlin_RC_master: Download ZIP

    RC’s documentation is on this page: Documentation
    Take a moment to peruse the documentation to get an idea for some of the new parameters you can change in EEPROM and the new things you can do with it.

    Note: You must compile Marlin (or Repetier) with version 1.0.5 of the Arduino IDE. For some reason the newer versions produce code which doesn’t work correctly!
    Here is the page which has download links to all of the old versions, including 1.0.5:

  2. Use the Arduino IDE to compile and upload the version of Marlin in Marlin_RC_master to your KC’s Arduino.

  3. Use Pronterface to connect to your KC’s Arduino running the new software from Marlin_RC_master.
    Here is an example:
    Printer is now online.
    echo:Marlin 1.0.0
    echo: Last Updated: Nov 23 2014 21:25:15 | Author: (huntley, Kossel Clear)
    Compiled: Nov 23 2014
    echo: Free Memory: 2733  PlannerBufferBytes: 1232
    echo:Stored settings retrieved
    echo:Steps per unit:
    echo:  M92 X200.00 Y200.00 Z200.00 E294.00
    echo:Maximum feedrates (mm/s):
    echo:  M203 X100.00 Y100.00 Z100.00 E200.00
    echo:Maximum Acceleration (mm/s2):
    echo:  M201 X9000 Y9000 Z9000 E9000
    echo:Acceleration: S=acceleration, T=retract acceleration
    echo:  M204 S3000.00 T3000.00
    echo:Advanced variables: S=Min feedrate (mm/s), T=Min travel feedrate (mm/s), B=minimum segment time (ms), X=maximum XY jerk (mm/s),  Z=maximum Z jerk (mm/s),  E=maximum E jerk (mm/s)
    echo:  M205 S0.00 T0.00 B20000 X20.00 Z20.00 E20.00
    echo:Home offset (mm):
    echo:  M206 X0.00 Y0.00 Z0.00
    echo:Endstop adjustment (mm):
    echo:  M666 X0.00 Y0.00 Z0.00
    echo:Delta Geometry adjustment:
    echo:  M666 A0.00 B0.00 C0.00 E0.00 F0.00 G0.00 R160.00 D288.00 H283.00 P0.00
    echo:PID settings:
    echo:   M301 P22.20 I1.08 D114.00
    echo:SD init fail
    ok T:0.0 /0.0 B:0.0 /0.0 T0:0.0 /0.0 @:0 B@:
  4. I modified the Marlin_RC_master’s Configuration.h to use the standard values from BEL’s version of Marlin:

     Name in Marlin   BEL’s Original Value   Name in Repetier 

  5. Use the M502 command to load the default values from the code into EEPROM. (This prevents random values in your EEPROM from causing problems.)
    Here is an example:
    echo:Hardcoded Default Settings Loaded
  6. Use the M666 L command to list the new parameters in EEPROM, which you can now change without recompiling. After changing a parameter, home your printer (by clicking on the home button or with G28), and then you will be using the new parameter. You no longer have to recompile Marlin each time you want to change something!
    Here is an example:
    >>>M666 L
    SENDING:M666 L
    Current Delta geometry values:
    X (Endstop Adj): 0.00
    Y (Endstop Adj): 0.00
    Z (Endstop Adj): 0.00
    P (Z-Probe Offset): X0.00 Y0.00 Z-5.10
    A (Tower A Position Correction): 0.00
    B (Tower B Position Correction): 0.00
    C (Tower C Position Correction): 0.00
    I (Tower A Radius Correction): 0.00
    J (Tower B Radius Correction): 0.00
    K (Tower C Radius Correction): 0.00
    R (Delta Radius): 160.00
    D (Diagonal Rod Length): 288.00
    H (Z-Height): 283.00
  7. Use the command M666 R154.5 to set the value for Delta Radius to 154.5mm, which should be pretty close to the right value.
    >>>M666 R154.5
    SENDING: M666 R154.5
  8. Use the M666 Dnnn command to change the value for DELTA_DIAGONAL_ROD.
    In step #4 above, I hope you wrote down and calculated the average length of the diagonal rods. This is the first place to use it. It should be close to 288±0.3mm.
    On my printer, the average was 287.91mm, so I’ll use M666 D287.91
    Here is an example:
    >>>M666 D287.91
    SENDING:M666 D287.91
    If you’d like, you can use M666 L again to verify that the value has changed.

  9. Now use the M500 command to save your changes to EEPROM:
    echo:Settings Stored
  10. The G30 E command is useful for checking how well calibrated your bed is. Flick your Z-probe down and use the G30 E command to probe your bed at seven key points and display a report.
    Here is an example:
    >>>G30 E
    	Z-Tower			Endstop Offsets
    	1.5000			X:0.00 Y:0.00 Z:0.00
    1.2550		1.1900		Tower Position Adjust
    	2.0150			A:0.00 B:0.00 C:0.00
    1.4050		1.5350		I:0.00 J:0.00 K:0.00
    	1.5150			Delta Radius: 154.5000
    X-Tower		Y-Tower		Diag Rod: 287.9100
  11. Now let’s calibrate your printer. Use the command G30 A Dnnn, where nnn is the value you entered for DELTA_DIAGONAL_ROD in installation step #4.
    This tells your printer to run the new autocalibration sequence. It may take a while. In Configuration.h I set AUTOCALIBRATION_PRECISION to 0.05mm (50 microns). The G30 A Dnnn tells the printer to start calibrating itself, and to not change the Diagonal Rod Length. This makes calibration pretty quick. Mine calibrated in just 7 iterations.
    Here is an example:
    >>>G30 A D287.91
    SENDING:G30 A D287.91
    Starting Auto Calibration..
    	Z-Tower			Endstop Offsets
    	-12.1250		X:0.00 Y:0.00 Z:0.00
    -12.3300	-12.2300	Tower Position Adjust
    	-12.2450		A:0.00 B:0.00 C:0.00
    -12.1950	-12.1900	I:0.00 J:0.00 K:0.00
    	-12.1100		Delta Radius: 154.5000
    X-Tower		Y-Tower		Diag Rod: 287.9100
    Using diagional rod length: 287.91mm (will not be adjusted)
    Iteration: 1
    Adjusting Z-Height to: 293.25 mm..
    Iteration: 7
    Adjusting Endstops..
    	Z-Tower			Endstop Offsets
    	-0.0050			X:-2.07 Y:-2.12 Z:-1.80
    -0.1100		-0.1000		Tower Position Adjust
    	-0.0000			A:0.22 B:-0.16 C:-0.06
    -0.0050		-0.0150		I:0.00 J:0.00 K:0.00
    	0.0300			Delta Radius: 154.5000
    X-Tower		Y-Tower		Diag Rod: 287.9100
    Auto Calibration Complete
    Issue M500 Command to save calibration settings to EPROM (if enabled)
  12. When you have your printer calibrated to your satisfaction, then use M500 to save the new, optimized parameters to EEPROM.
    I calibrate my printer once, and then use it for months, never having to recalibrate it (or use the old G29 command).

  13. Now test your KC. I use a quick and simple calibration object, which is a square 100mm on a side. It takes less than 2 minutes to print. You can download the STL file from here. While printing it, I watch how the first layer goes down. Is it even all around? Is there anything I need to tune manually? Also I use inexpensive 150mm calipers to verify that the object is actually square, and that the sides are close to 100mm. In this case they turned out to be 100.35mm horizontally and 100.82mm vertically. I have no idea why it’s not perfectly square, but it’s within 1%, and that works for me!

  14. Note: You can also use the G30 A command to automatically try to calibrate all of the parameters for your printer. This takes quite a bit longer than G30 A Dnnn. In practice, I have found that this does not work as well. It alters the Delta Diagonal Rod parameter significantly, which results in objects being printed either too large or too small.

  15. I normally use RC’s Marlin together with Pronterface for calibration and then switch to using Repetier-Firmware with Repetier-Host for production, because Repetier’s print quality is much better, especially at high speeds and on small radius curves. If you would like to use Repetier, you can plug in the numbers which RC’s Marlin calculated in step #10 above using the table below.
    The biggest difference between them is that RC’s Marlin measures the endstop offsets in negative mm, while Repetier measures them in positive steps. To convert, change the sign and multiply by the number of steps/mm.
    Here is Repetier-Firmware 0.92.8 configured for a Kossel Clear:
    If you come up with any improvements to this configuration, please let me know!
    My favorite feature is Z Babystepping, which uses the knob to finely adjust the Z-height, typically while printing the skirt around the first layer.

    In Repetier-Host, press Alt-E or else click on the Config menu, select Firmware EEPROM Configuration, and change the following values (using the results from step #10 above as an example):

    RC’s Marlin Repetier-Firmware
    NameValue NameValue
    X Endstop Offset [mm]-2.07 Tower X endstop offset [steps]2.07 * 80 steps/mm = 166
    Y Endstop Offset [mm]-2.12 Tower Y endstop offset [steps]2.12 * 80 steps/mm = 170
    Z Endstop Offset [mm]-1.80 Tower Z endstop offset [steps]1.80 * 80 steps/mm = 144
    A Tower Position Adjust0.22 Delta Radius A(0)0.22
    B Tower Position Adjust-0.16 Delta Radius B(0)-0.16
    C Tower Position Adjust-0.06 Delta Radius C(0)-0.06
    I Tower Position Adjust0.00 Corr. diagonal A [mm]0.00
    J Tower Position Adjust0.00 Corr. diagonal B [mm]0.00
    K Tower Position Adjust0.00 Corr. diagonal C [mm]0.00
    Delta Radius154.5000 Horizontal radius [mm]154.50
    Diag Rod287.9100 Diagonal rod length [mm]287.91
    Z-Height283.00 Z max length [mm]283.00

  16. After a few days of use or if the joints make noise, I recommend using a little bit of lubricant in the ball sockets. I’ve used coconut oil, bicycle chain lube, lithium grease, 3-in-1 oil, and sewing machine oil. Vaseline might work, too. My favorite is White Lightning Easy Lube because it sheds dirt, stays put, and you can get it inexpensively at Walmart.

If you have any corrections or suggestions for improving the above, please let me know: haydn dot huntley at gmail dot com

Last modified on Apr 9, 2017 at 16:08 HST.