About a year a go I bought a Tevo Little Monster second hand. It was a little dirty but (as far as I could see) unmodified. I put away that noisy "MKS SBASE"-board with smoothieware and installed a nice Duet 2 Ethernet board. I tried for weeks to get it going but without success, then decided to try it again later. Now I am on it again and already put a lot more effort in it than last time. Anyway, the problem persists and it is really driving me nuts!

Out there on the internet are several people who succeeded with a duet board on the same printer, so it must be possible. For Example this one.

My Background

I am doing 3D printing for a while now. Besides the Little Monster I own a Makerbot Replicator 2X (running latest Sailfish), a Anycubic Delta Linear Plus (running self-compiled Marlin 1.1.9) and – for two weeks now – a Two Trees Sapphire Pro (running self-compiled Marlin 2.0.x). All these printers are running absolutely fine.


As far as I can tell, my problem boils down to inaccurate z positioning of the nozzle. This makes the nozzle (heavily) scratch on printed parts of the same layer. Small parts are often ripped of the bed by the nozzle before the print is finished. Practically I cannot use the printer in its current state.

Here is a video of the Problem.

Test setup

My usual test scenario is a 100 x 100 x 20 mm box with two walls, two top/bottom-layers and 50% Infill. Maximum Speed 90 mm/s. The speed should be fine, as the printer is advertised with 300 mm/s.

What I changed from stock:

  • Install genuine BL Touch
  • Changed controller board from stock "MKS SBASE" to Duet 2 Ethernet
  • Removed sticker from printbed and placed a UltraBase (310 x 310 mm) on top of the stock glas plate
  • Replaced stock titan-ish extruder by cloned BMG dual drive Extruder (same extruder as on all of my other printers)
  • Replaced full-metal hotend by a hotend with PTFE liner

What I already tried to solve the problem:

Hypothesis: Bad config of duet board

Actions: see separate section

Hypothesis: Narrow nosed nozzle does not smooth the printed line enough

Actions: replaced narrow-nosed nozzle (0.6mm) by broad-nosed nozzle (0.4mm) and adjusted cura accordingly

Result: No difference

Hytothesis: There is something wrong with the firmware

Action: Upgraded duet board from RepRap 2.0 to 3.0

Result: No difference

Hyptothesis: Geometrical inaccurate build

Actions: Measured arm space on effector and carriages (by caliper), "measured" rod lengths by eye (b/c my caliper can only measure about 150mm), checked towers by eye for bending.

Result: Arm spacing on effector and carriage is the same down to 0.19mm. Rod lengths have no noticeable difference, towers seem to be straight.

Hypothesis: Joints on delta Rods have play

Actions: Tried to shake/move/wiggle the effector by hand

Result: No noticeable play

Hypothesis: Overextrusion

Action: Intentionally underextruded (80% flow) for testing

Result: Printed lines became noticable more narrow (not even touch each other), but scratching persists.

Hypothesis: Rubber wheels of the carriages running too rough and are worn out

Action: Replaced rubber wheels by linear Rails. (Thingiverse)

Result: Carriages run much smoother, but this change does not help with my problem

Hypothesis: Belt tension is bad

Action: Tensioned the belts thoroughly

Result: No noticable difference

Hypothesis: Tooth belts are worn out

Action: Replaced tooth-belt with new GT-2 Belt

Result: Belts look more regular when moving, does not help with my problem

Hypothesis: Pulleys and Idlers are worn out or not sufficiently round

Action: Replaced Pulleys and Idlers

Result: No noticable difference

Hypothesis: One or more of the stepper motors are not working properly

Action: Replaced all tower motors (incl. wiring) with new ones

Result: No noticable difference

Hypothesis: One of the stepper drivers is not working correctly

Action1: Investigation of signals on the motor-wires by oscilloscope

Result1: They all looked about the same (short square pulses), in principal no difference between all motor wires. (I do not know how these signals should look like. I just tried to spot differences.)

Action2: Changed the drivers for the tower motors one by one with the unused E1-driver

Result2: No noticable difference

Hypothesis: Leveling is bad due bad probing

Action1: Checked leveling manually (with feeler gauge) and checked BL-Touch repeatability.

Result1: Found deviation of 0.2mm on some points between automated and manual leveling. Repeatability is good (accurate to 0.02mm)

Action2: Leveling is now done by a DF9-40 weight-resistor (and a voltage divider). This sensor is mounted (manually every time) directly under the nozzle.

Result2: The first layer is next to perfect. To my understanding that means a correct calibration.

Hypothesis: Flying extruder is too heavy and impacts the accuracy of the carriage movement

Action: changed extruder from flying to remote, mounted on one of the towers

Result: Problem seems to hit maybe a little less. I am not entirely sure about this.

Hypothesis: My problem is no problem, a little scratching is nothing unusual

Action: Tried the same print on my smaller Delta printer

Result: No scratching on the other printer. Hence it seems not to be usual.

Hypothesis: Scratching is related partial overextrusion due to "extrusion delay" caused by bowden system

Action: Tested linear advance between 0 to 1.2

Result: linear advance seems to work as intended (watching the extruder), but does not change anything on my problem


I tried to transfer the settings from the original smoothieware config-files as good as possible. Original smoothieware files can be found here on github

To have a consistent config, I used the RRF Browser Config Tool.

Motor Current: There is no advice printed on the original motors concerning the current. Smoothieware config file says 1.5 Amp. Thats what I configured. (The Replacement-Motors came with a data sheet, they can take 2 Amp. So they got 2 Amp)

Steps per mm: On all tower motors there are 20-tooth-GT2-pulleys. RRF Config tool suggests 80 steps/mm (with 16x microstepping). I tried it with and without interpolation from 16x to 256x and with "native" 256x microstepping (1280 steps/mm). Also tried native 32x microstepping with 159.53 steps/mm (like in the smoothieware config) and 160 steps/mm. Does not change anything on the problem.

Delta Parameters: Original Smoothieware config suggests:

arm_length      397.1900            # This is the length of an arm from hinge to hinge
arm_radius      157.0741            # This is the horizontal distance from hinge to hinge when the effector is centered

That seems to be (roughly) consistent with what I measure by folding ruler. So that is what I put in my config right away.

Auto Calibration: Tried 4,6,7,8 and 9 factors (using the force-sensor, not BL Touch) and put the results into splunk. Each data point is averaged over 3 calibration runs with exactly the same settings, every time starting from the smoothieware stock-values. (First run was with 159.53 steps/mm, second with 160 steps/mm)

Splunk Dashboard showing calibration behaviour

Surprisingly the auto calibration finds reliably the same parameters, which differ from the stock-config ones. I have no Idea why, but similar things happen on my smaller delta printer. Hence I do not consider this a problem.

Speed and acceleration: Lowering acceleration (down to 300 mm/s) does not change anything. Lowering speed makes scratching less loud, but still hearable/feelable rumble from the nozzle on the print. Prints are still ripped of the print bed.

; Configuration file for Duet WiFi (firmware version 3)
; executed by the firmware on start-up
; generated by RepRapFirmware Configuration Tool v2.1.8 on Fri Apr 24 2020 17:00:42 GMT+0200 (CEST)

; General preferences
G90                                            ; send absolute coordinates...
M83                                            ; ...but relative extruder moves
M550 P"jKossel19"                              ; set printer name
;M665 R157.0741 L397.19 B155 H522               ; 
M665 R170 L397.19 B155 H525            ; from forum.duet3d.com with modified hight 520 ==> 525
M666 X0 Y0 Z0                                  ; put your endstop adjustments here, or let auto calibration find them

; Network
M552 S1                                        ; enable network
M586 P0 S1                                     ; enable HTTP
M586 P1 S0                                     ; disable FTP
M586 P2 S0                                     ; disable Telnet

; Drives
M569 P0 S0                                     ; physical drive 0 goes backwards
M569 P1 S0                                     ; physical drive 1 goes backwards
M569 P2 S0                                     ; physical drive 2 goes backwards
M569 P3 S0                                     ; physical drive 3 goes backwards
M584 X0 Y1 Z2 E3                               ; set drive mapping
M350 X16 Y16 Z16 E16 I1                        ; configure microstepping with interpolation
M92 X80 Y80 Z80 E418.00                        ; set steps per mm
M566 X480.00 Y480.00 Z480.00 E1200.00          ; set maximum instantaneous speed changes (mm/min)
M203 X240000.00 Y240000.00 Z240000.00 E1800.00 ; set maximum speeds (mm/min)
M201 X1000.00 Y1000.00 Z1000.00 E1000.00       ; set accelerations (mm/s^2)
M906 X2000 Y2000 Z2000 E800 I30                ; set motor currents (mA) and motor idle factor in per cent
M84 S30                                        ; Set idle timeout

; Axis Limits
M208 Z0 S1                                     ; set minimum Z

; Endstops
M574 X2 S1 P"xstop"                            ; configure active-high endstop for high end on X via pin xstop
M574 Y2 S1 P"ystop"                            ; configure active-high endstop for high end on Y via pin ystop
M574 Z2 S1 P"zstop"                            ; configure active-high endstop for high end on Z via pin zstop

; Z-Probe BLTouch
;M950 S0 C"exp.heater3"                         ; create servo pin 0 for BLTouch
;M558 P9 C"zprobe.in+zprobe.mod" H5 F120 T6000  ; set Z probe type to bltouch and the dive height + speeds
;G31 P500 X0 Y20 Z0.45                          ; set Z probe trigger value, offset and trigger height
;M557 R140 S45                                  ; define mesh grid

; Z-Probe MANUAL
;M558 P0 H5 F120 T6000                          ; disable Z probe but set dive height, probe speed and travel speed

; Z-Probe weight resistor
M558 P1 C"zprobe.in" H5 F60 T6000              ; set Z probe type to unmodulated and the dive height + speeds
G31 P500 X0 Y0 Z0.05                           ; set Z probe trigger value, offset and trigger height

; Heaters
M308 S0 P"bedtemp" Y"thermistor" T100000 B4092 ; configure sensor 0 as thermistor on pin bedtemp
M950 H0 C"bedheat" T0 Q10                      ; create bed heater output on bedheat and map it to sensor 0
M143 H0 S120                                   ; set temperature limit for heater 0 to 120C
M307 H0 B0 S1.00                               ; disable bang-bang mode for the bed heater and set PWM limit
M140 H0                                        ; map heated bed to heater 0
M308 S1 P"e0temp" Y"thermistor" T100000 B4092  ; configure sensor 1 as thermistor on pin e0temp
M950 H1 C"e0heat" T1                           ; create nozzle heater output on e0heat and map it to sensor 1
M143 H1 S280                                   ; set temperature limit for heater 1 to 280C
M307 H1 B0 S1.00                               ; disable bang-bang mode for heater  and set PWM limit

; Fans
M950 F0 C"fan0" Q500                           ; create fan 0 on pin fan0 and set its frequency
M106 P0 S1 H1 T50                              ; set fan 0 value. Thermostatic control is turned on
M950 F1 C"fan1" Q500                           ; create fan 1 on pin fan1 and set its frequency
M106 P1 S0 H-1                                 ; set fan 1 value. Thermostatic control is turned off

; Tools
M563 P0 S"Vulcan" D0 H1 F0:2:1                 ; define tool 0
G10 P0 X0 Y0 Z0                                ; set tool 0 axis offsets
G10 P0 R0 S0                                   ; set initial tool 0 active and standby temperatures to 0C

; Custom settings
; set heater parameters
M307 H0 A213.8 C593.5 D3.3 S1.00 V24.6 B0
M307 H1 A513.6 C184.3 D8.4 S1.00 V24.4 B0
M572 D0 S0.5 ; pressure advance

; Miscellaneous
M501                                           ; load saved parameters from non-volatile memory


  • Yes Z-hop helps, but only with travel moves. That is no solution, only a partly working workaround.
  • No infill with crossing lines: Yes possible, but no: i want a sturdy infill.

What I still do not understand:

  • Measurements are subject to statistical errors. Marlin (on my anycubic delta-printer) fights this by probing the same point multiple times and taking the average for calibration. As far as I could find out, RepRap firmware does not support this. Is that correct? Is there any good reason? I am quite sure, calibration accuracy would get a little better with this.

  • Does a perfect first layer really mean accurate calibration of the delta-parameters? Is there any other way i can be sure?

  • I really would like to know more about the effector tilt. But a bubble level does not offer enough accuracy. Is there any good way to measure this?

  • I am absolutely not sure about this, but I remember very faintly not to have this problem when printing with the original smoothie board on a completely unmodified printer. But I only made one or two test prints with it. Sadly I cannot test it anymore, because I do not have the smoothie board anymore.

  • In the very first place I made a mistake with wiring of the motors to the duet board and shorted at least one motor output. (Duet board told me so, I corrected my mistake. Afterwards everything seemed fine.) Might I have damaged my duet board in a way that might cause my problem?

  • There are parameters in the smoothie config that I cannot find in the duet config. Neither could I find why the duet config does not need these parameters.

    • mm_max_arc_error
    • mm_per_arc_segment
  • Auto calibration finds (repeatable) delta parameters that do not match the smoothieware config, mainly rod length and delta radius. Is there any difference in definition? The numbers from the original smoothieware definition seem to be more consistent with my (quite unprecise) measurements (down to 1-2 mm). I actually know this behavior of "too long" calibrated push rods from my Anycubic Delta. But it does not seem to cause any problems there.


Recently tried:

  • changed duet board for a new one (yes I bought a brand new one)
  • used different slicer (Slic3r instead of cura)
  • started from scratch with a new config

Result: problem persists and has not changed noticeably.


Finally I found an solution. But I still don't know what exactly the problem was.

In my case the problem vanished after the following steps:


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.