Anycubic Kossel Marlin 2.0 firmware

Why should I do that?

Marlin 2.0 offers better performance and more options over the stock Anycubic Kossel FW.
Delta calibration works much better then stock bed calibration.
You can easily make changes in FW.
Configuration files have been created for original Trigorilla board and original drivers which come with the printer.

1. Download Marlin

It was time to move on after announcing bugfix Marlin 2.0 and upgrading the printer to E3D V6 extruder.
I have been testing this firmware almost every day this week with no issues.
You can find 2 different configurations of PID values in the file.
One is for original V5 J-Head and the second is for E3D V6 extruder + new extruder fan.

Configuration files are modified for Anycubic Kossel Linear Plus with original Trigorilla board and steppers.
You can easily modify them for another board such as SKR 1.3 or newer stepper drivers.

Official Marlin 2.0.0 version. 02. 12. 2019 (US 12/02/2019) version

Older version with some bugs – baby stepping, lcd sometimes freezes.

If you want to use an older Marlin version, you can download 1.1.9, but steps in this guide follow only Marlin 2.0 installation.
Flashing Marlin 1.1.9 is similar, but the calibration steps are a little bit different.

Original Anycubic Kossel Linear Plus FW

2. Download and install Arduino IDE

I prefer direct download from
Arduino IDE installed from the Windows Store is known for issues (I hope that they will fix it ASAP).
Click on Download Arduino IDE, choose a version for you operating system, download and install

3. Connect Kossel to PC via USB

Use the USB cable that came with the printer or a standard USB-B USB-A cable and connect Kossel to your PC.
Turn on the Kossel.
Go to device manager (WIN10 – right mouse click on windows logo, device manager) and you should see Silicon Labs CP210x device under COM ports.

4. Modify Configuration.h

Go to the folder you have downloaded Marlin to (Downloads usually) and extract zip archive.

For Marlin 2.0 go to Kossel-Marlin-2-0-x-LPomykal then to Marlin folder and open Marlin.ino in Arduino IDE.

4.1. Kossel type

Firmware is prepared for a Kossel Linear Plus, but if you want to use it for a pulley version, just modify this one line.

Kossel Linear Plus – define it:

Kossel Pulley version – comment the line:

4.2. Autoleveling probe type

This is the standard autoleveling probe which comes with the printer since 2017.
If you have received another type (microswitch is different), your probe is probabably type 1.

If you have a multimeter, you can easily check that. Probe 2 is a NC – normally closed which means that it is normally switched on, so you will read a very low resistance or you can beep the contacts.

Choose the correct version probe version.

4.3. Bed type

Make sure you have chosen the correct bed type.
If you want to modify it, simply change:

0) No heated bed:

1) Standard heated bed with a black sticker:

2) Ultrabase + heated bed

4.4. Printable radius

Here comes the tricky part:
Kossel Linear Plus comes with a heated bed with a 230 mm outer diameter.
Ultrabases for the Kossel are made in two outer diameters: 200 mm and 240 mm.

In my case I have a standard 230 mm heated bed with a mouted 240 mm Ultrabase and that means that my printable radius is: (240 mm – unreachable space (10 mm usually))/2 = 115 mm.

Please note that DELTA_* must be defined as a floating point number!
Do not forget to add .0 behind each value.

4.5. Rod lenght

Measure the correct lenght of your rods by disassebling and measuring them with a sliding meter axis to axis – hole diameter and correct the value

4.6. Probe edge

If your printer is probing very near the edges of the bed, you could modify this parameter.
It is a minimal distance of the probe’s microswich from the edge of the bed.

4.7. Safe zone – moving the head down after G28 – home

This variable causes the printing head to move approx. 50 mm down after homing at the end of a printing session.

If you are going to print tall models, please comment this line:

4.8. Maximum speed

A standard Kossel without corner reinforcements, belts well tensioned can do about 60mm/s max.
If you have these upgrades, you can easily achieve 100mm/s and even larger speed.

4.9. Maximum acceleration

You can define maximum acceleration values in this part of the configuration file.
Just keep in mind, that if you want to print with higher acceleration, the FW will not allow you to do that.
I consider these values as a “failsafe” against too high acceleration values.

4.10. Restore autoleveling

This is almost critical.
For anyone using another FW, check if this line is defined.
It ensures that after a reboot, the printer will still use values from your delta calibration.

There is also another solution:
Placing M420 S1 after G28 in start G code in your slicer

4.11. Homing speed

Homing speed is a crucial setting. It allows you to lower homing speed making homing and calibration more precise.
Instead of a fast homing and “crushing” into end stops you can slowly approach and trigger them.

4.12. Probing speed

XY_PROBE_SPEED – XY movement between probing points in mm/minute
Z_PROBE_SPEED_SLOW – slow probing speed set up to a one third of Z_PROBE_SPEED_FAST

5. Upload new Marlin FW

In Arduino IDE click on Tools and choose Mega 2560 as a board and ATmega2560 as a processor.
Pick the correct COM port (you can check that in device manager, com ports).

Click on Projects and upload.
Or simply use Ctrl + U shortcut.

The moment you see Upload complete you can disconnect the printer and calibrate your bed.

6. Delta calibration

This important calibration measures each end stop’s position and arm lenght.
Is also auto levels your bed.

7. Hotend PID calibration

You also should perform PID calibration to get rid of any thermal runaway problems.


  1. Lukas,
    I have not been able to get online for a while but i wanted to thank you for all your help in previous posts i was never able to get the new magnetic rods to auto calibrate so i went back to stock rods thank you so much for your help though and good health to you!

  2. I was thinking of selling Kossel as the 1.1.8 version of the autocalibration issue.

    However, I updated to version 2.0 and the problem disappeared neatly.

    Thank you very much

  3. First thanks for sharing the right up it has been extremely beneficial.
    It is very clear and was able to get my anycubic linear plus up and printing again with stock rods . I have a question though I have a set of magnet rods and when I switch them out and adjust the values the auto calibration wants to crash into the tower after the first few center points I have measured multiple times and the rods are from blueagle they came with exact measurements do you know what might cause this?

      • i utilized and had the the effector adapter and carriage mounts printed professionally in nylon i am using blue eagle rods at 288.13 mm all came labeled and when i checked they are exactly 288.13 here is what is in my config h
        // Print surface diameter/2 minus unreachable space (avoid collisions with vertical towers).
        #define DELTA_PRINTABLE_RADIUS 120.0 // (mm)
        // Center-to-center distance of the holes in the diagonal push rods.
        #define DELTA_DIAGONAL_ROD 288.13 // (mm)
        // Horizontal offset from middle of printer to smooth rod center.
        #define DELTA_SMOOTH_ROD_OFFSET 186.0 // (mm)
        // Horizontal offset of the universal joints on the end effector.
        #define DELTA_EFFECTOR_OFFSET 31.0 // (mm)
        // Horizontal offset of the universal joints on the carriages.
        #define DELTA_CARRIAGE_OFFSET 20.6 // (mm)
        // Horizontal distance bridged by diagonal push rods when effector is centered.
        #define DELTA_RADIUS (DELTA_SMOOTH_ROD_OFFSET-(DELTA_EFFECTOR_OFFSET)-(DELTA_CARRIAGE_OFFSET)) // (mm) Get this value from G33 auto calibrate
        // Print surface diameter/2 minus unreachable space (avoid collisions with vertical towers).
        #define DELTA_PRINTABLE_RADIUS 120.0 // (mm)
        // Center-to-center distance of the holes in the diagonal push rods.
        #define DELTA_DIAGONAL_ROD 288.13 // (mm)
        // Horizontal distance bridged by diagonal push rods when effector is centered.
        #define DELTA_RADIUS 97.0 // (mm) Get this value from G33 auto calibrate

  4. Awesome Guide. I’m having an issue when the probe is lowering for the auto-calibration is stops about 1 inch from the bed, never touching, and then gives a probing failed error. what do you think could be causing this? Thanks!

  5. Hi there!
    Thank you very much for this (and the other) great guide(s)! Keep up the excellent work! Maybe you could write something about PETG & retraction & the Kossel. I wasted hours in the Cura options to find a ideal solution for supports and the right retraction with PETG.

      • Hi,
        thank you for your reply. I am using 60 mm/s at 3mm for retraction. It is still not perfect. I have still trouble with some strings. Especially on the first layer.

  6. Hi, Thanks for your article.
    I am new to these things and a bit daunted. I bought an ANYCIBIC linear plussome time ago and after a straight-forward build with good initially tests of bed-leveling and so-forth moved it to its working bench, wrongly re-connected a wire which had come adrift in transit and blew Trigorrila board. Bought replacement board and installed but got lost trying to configure Marlin. Then busy with other stuff so the pKossel has just been sitting there for about 6 months!
    I’m ready to have anpther go using your info but confidence is at a minimum.
    Already stuck as to where to find the configuration of PID values for the original V5 J-Head. I would be very grateful for your help with this. I’ll probably have some other stupid questions to ask later.

  7. Awesome guide! I have owned kossel plus now for 4 months, and wanted to get rid of the stock firmware – this helped me get everything set up!
    Next step: V6 upgrade (probably) 🙂

  8. Hi Lukas,

    thanks a lot for your guide!

    Do you know what setting I have to use for and SKR 1.3 with TMC2209 (V3 from Fysetc)?

    And is there a newer configuration as Marlin is already on 2.0.3?

    Best regards

    • Hi, you are welcome.
      Look for a bigtreetech GIT, look for a SKR manual.
      Compare Fysetc and Bigtreetech driver pins, set it to UART and connect it by the manual.

      There is no need to upgrade from 2.0.0 to 2.0.3, there is no major difference.

Leave a Reply

Your email address will not be published.