Nophead’s Mendel90 (Dibond) modernization

By | September 28, 2019

A description of how to upgrade the Nophead’s Dibond Mendel90 to have a new 32bit control board, Trinamic TMC 2130 stepper drivers, automatic bed leveling using the BLTouch probe and the latest Marlin 2 firmware.


In 2014 I have bought Chris ‘Nophead’ Palmer’s Dibond Mendel90 kit and the machine has served me quite well since, without major problems. I have made a few minor mods over the years (Y axis idler/tensioner, different spool holder, replaced front bed pillars with screws/springs, etc.) and replaced a few broken parts (cracked extruder block, broken top side Y axis clamps) but the machine is otherwise mostly stock. Compared to the more recent printers, such as Prusa I3 Mk3 or the many Chinese machines (Anet, Creality, …) available today, it is clear that it is getting considerably long in the tooth.

The original impetus for performing the upgrade described in this article has been the desire to add an automatic Z probing capability. Both for the bed leveling but mainly to ensure automatic Z offset setting.

Mendel90 in the original Nophead’s configuration homes the Z-axis upwards, with a fixed limit switch at the end of the Z-axis. That’s different from the original RepRaps and the various Prusa I3 clones – these home downwards, towards the bed and the Z-offset is adjusted by turning a screw moving the homing switch up/down.

The consequence is that the Z-offset on the Mendel90 is hardwired in the firmware and cannot be adjusted (newer Marlin versions can do this but not the ancient version used by the Nophead’s kit) without messing with the generated G-code. This becomes a major pain when different printing surfaces with different thicknesses are being used – e.g. I am using glass for most PLA and ABS printing but I sometimes use also steel sheets covered with PEI.

Having to re-measure and re-adjust the Z-offset every time gets old fast and, worse, if one forgets it, one risks either a failed print (first layer won’t stick due to the nozzle being too far) or crashing the nozzle into the bed. The ability to automatically probe the bed and set the correct offset would be an enormous boon.

The same story for bed leveling – Nophead’s design is very robust and doesn’t need leveling frequently but when it does, it requires that the extruder is removed, dial indicator is installed in its place (I have never had much success using a sheet of paper) and then fiddling with both the Z axis screws and the front pillars/screws of the bed. What takes a few minutes tops on other machines is a much longer exercise on the Mendel. Again, having the ability to automatically compensate for minor leveling issues or uneven bed surface by probing would be extremely helpful here.

Unfortunately, the Marlin firmware running on the original Melzi controller shipped with the kit is ancient (pre 1.0!), heavily customized by Nophead (so upgrade isn’t straightforward) and the controller uses the ATMega1284 MCU, which has only 128kB of flash. Newer Marlin that would be needed for the bed leveling support and probing won’t fit. The board also lacks any means to actually connect the probe – there is an expansion connector, but it would require some nasty hacking to get anything more complicated than a basic microswitch (e.g. a BLTouch/3DTouch which behave like a servo and a switch) to work.

There are also some other niceties that modern controllers have – such as support for touch screen controllers, replaceable stepper motor drivers (Melzi has them soldered into the board), support for more extruders/axes/fans/heaters, more powerful CPUs allow better speed control reducing vibrations at high speeds, 24V compatibility (nice for faster bed heating), and many other things.

Thus, time to upgrade.


For the upgrade I have selected the Chinese Big Tree Tech SKR Pro V1.1 control board:


Figure 1: SKR Pro V1.1 (click to enlarge)


  • Split power rails – separate power for the board, motors and heated bed, fused with common automotive style fuses
  • ARM Cortex M4 CPU (32bit, with hardware floating point)
  • 6 stepper drivers, supports dual drive for the Z axis on a single driver or can use two drivers, up to 3 extruders
  • Wide range of stepper drivers are supported (Allegro, Trinamic, TI)
  • 3 heaters (bed + 2 extruders)
  • 4 thermistors (bed + 3 extruders or heated chamber, etc.)
  • 3 fans
  • Up to 6 limit switches (each axis both ends)
  • USB device & host (supports printing from an USB stick)
  • Wifi (via a cheap ESP8266 module)
  • SD card interface
  • Common LCD support, including touchscreens and encoders
  • Dedicated connector for the BLTouch probe
  • Expansion connectors with a lot of pins available
  • Complete schematic available, runs open source Marlin firmware

This controller has a lot of features that I won’t use immediately but it is good to have the options to add things later, such as 24V power supply and bed (the original 12V PCB bed from the Nophead’s kit takes very long time to heat up), touch screen or an extra fan/extruder.

I have also opted for 6 Trinamic TMC2130 drivers in SPI mode – silent and smooth running motors are nice, as is the StallGuard feature. It can be used for homing but it is mainly good as an extra safety feature.

For the Z probing I have bought the original BLTouch 3.0 probe – it is expensive compared to the clones sold under the “3DTouch” name but I wanted repeatability and something that I knew will work. Also, apparently some of the clones are made out of thermoplastic that can soften/melt when around a heated bed – oops! The original is made out of polycarbonate which should be safe at temperatures that the heated bed can normally reach.


The installation has been a 3 part affair – mechanical installation in the electronics bay of the Mendel90, replacing the original Melzi board, basic electrical wiring and finally the installation of the BLTouch probe. The probe requires a 3D printed spacer, so it is important to have the rest of the machine working beforehand.


The controller is installed horizontally where the original Melzi has been. Four mounting holes were drilled into the side panel.


Figure 2: Electronics installation (click to enlarge)

A heavy duty 25A terminal block has been added for power distribution. The wiring is not ideal, I regret not having bought a 6 position one. The original plan has been to install two of these side by side, one for the +12V rail and one for the ground, however the stiff power wiring would make that very difficult in the cramped space available. The consequence is that two cables for the board and motor power are both on the same screw terminal, the same at the bottom for the bus bars and wires from the ATX supply.


Figure 3: Detail of the power terminal block (click to enlarge)


Unlike the Melzi which uses screw terminals for everything, the SKR Pro controller uses mostly JST XH shrouded connectors (motors, end stops, thermistors), some naked pin headers (e.g. for the BLTouch probe) and heavy duty screw terminals (power, extruder & bed heaters, fans). So connectors need to be crimped.

I am not 100% sure about the JST XH connectors, the documentation says “Dupont”, but the JSTs fit and lock into the shrouds perfectly, so I have used them. Dupont (aka “Mini-PV”) would likely work too, even though JST XH has 2.5mm metric pin pitch and Mini-PV has 2.54mm (0.1″) imperial pin pitch. However, the connectors wouldn’t be locking and polarized, which is a downside.

Some wires will likely need to be extended (e.g. the Z axis motors) – I have soldered on some wires with matching colors and covered the splices with heatshrink to avoid shorts.


Figure 4: Detail of the board wiring (click to enlarge)


  • Power – I have used the pre-crimped wires provided with the board. Bed heater and the power supply use crimped spade fork terminals. These need to be crimped really well and properly insulated, otherwise there could be a lot of power lost causing problems (heat, melting connectors, even a fire!).
  • Motors – 4pin JST XH connectors, I have used red-blue-green-black wire order on all the motors. Z axis motors are separated (original wiring has them in series), each to its own connector. That permits to either use the dual Z-axis connector provided on the board or to use separate drivers for each motor.
  • Endstops – 3pin JST XH connectors. Mendel90 endstops are normally connected, active low (switch against ground). So only the GND (central pin) and the signal (pin closer to the USB connector) are populated. Positions “X-“, “Y-” and “E2” are used because Mendel90 homes to min X, min Y and max Z (no idea why the positive endstop connectors are labeled “E0”, “E1” and “E2”).
  • Thermistors – 2 pin JST connectors, bed thermistor goes in “T0”.
  • Fans – I have only the extruder fan connected, goes into the screw terminal for “FAN0”. There is only a single wire, so if the fan doesn’t spin, you have it in the wrong “hole” – it needs to be on the contact labeled “-“.
  • Heaters – The bed is connected to the large screw terminal on the side, labeled “HOT BED”, spade fork terminals were crimped onto the original bed wires. The bed cable has been moved from behind the power supply in order to have sufficient length available. Hot end power is from the “HEAT0” screw terminal.

The wiring is generally fairly obvious, the downloadable manual for this board documents all the connectors well, Most information is available directly on the silkscreen of the board as well.

For connector crimping I am using the Engineer PA-09 for the JST and Dupont connectors, together with the YTH-202B for crimping the insulation of the Dupont pins and for the spade forks. (see here for the explanation of why two separate tools are required for the Dupont/Min-PV terminals).


The BLTouch probe is a bit tricky to fit on the original Mendel90 X carriage. The Wade’s block motor bracket is in the way on the top side, the X axis linear bearings are in the way on the bottom side. The probe just fits when rotated diagonally so that the mounting screws clear the diagonal edge of the extruder motor bracket.

This is not ideal because the probe is offset quite far from the nozzle (49mm on the X axis!), so it is unable to probe towards the X min edge of the bed. However, without redesigning the X carriage there aren’t many other options available.

The probe requires a ~6mm thick spacer. I have modelled this to copy the shape of the mounting surface of the BLTouch and printed it in ABS in order to not have problems with it deforming from the extruder or bed heat. The probe is fixed using the supplied M2.8 screws, with a normal and locking washer on each side. Probably a drop of threadlocker would not be a bad idea neither, given the amount of vibration present here.


Figure 5: BLTouch mounting (click to enlarge)

While the original Mendel90 wiring provides an unused 2 pin connector meant for a Z probe, the BLTouch uses 5 wires – it has a 3 pin control connector that carries both 5V power and a standard RC servo PWM signal for deploying and stowing the probe (+ some more advanced configuration) and a 2 pin connector that works as a regular switch/endstop.

I have installed a 5 wire ribbon cable, parallel with the existing X axis/extruder cable. This cable is tied to the plastic strip reinforcing the original ribbon using a few strips of tape and has Dupont connectors crimped on both sides – female ones on the controller side, male ones on the extruder side.


Figure 6: BLTouch wiring (click to enlarge)

The BLTouch connector on the controller board is only 4 pins, though. Fortunately the missing pin is only ground, which is present on the connector already – just insert the 5 pin connector with the pin closest to the power screw terminal block “hanging in the air”. Exactly as it is shown in the board documentation as well.

Marlin configuration

Big Tree Tech is providing their own fork of Marlin which supports this board. This has been merged into the official Marlin repository, however Big Tree Tech is still doing development on their code to add support for the missing features. So my Mendel90 configuration is based off the Big Tree Tech’s code for now, even though even the official Marlin 2.x branch works.

The configuration is available here (“mendel90” branch):

The original configuration from Nophead’s Marlin was kept where possible (PID coefficients, bed configuration, homing directions, thermistors, etc.).

Basic configuration in Configuration.h:

  • STM32 UARTs are numbered from 1 not 0. SERIAL_PORT_2 is for the Wifi module. Do keep it set to -1 if the module is not present! – otherwise the board will hang on boot.
    #define SERIAL_PORT 1
    #define SERIAL_PORT_2 6
  • Bed thermistor – Marlin lacks the Epcos B57861S104F 100k thermistor used in the original PCB bed from Nophead’s kit. I have added it using the data from the original Nophead’s firmware.
    #define TEMP_SENSOR_BED 900
  • Endstops – USE_ZMIN_PLUG and USES_Z_MIN_PROBE_ENDSTOP is enabled because of the BLTouch, may not be actually needed given that the probe uses its own dedicated port and not an endstop connector.
  • The NOZZLE_TO_PROBE_OFFSET offsets need to be adapted to your configuration, obviously.
  • Probing is done with heaters and fans off – less dimensionally accurate but less chance of melting the plastic probe tip.
  • Axis inversions (INVERT_[XYZ]_DIR) – if the motor is running in the wrong direction, either change the wiring or you can flip the movement direction here.
  • Homing direction – min X, min Y, max Z, standard Nophead’s Mendel90 homing
    #define X_HOME_DIR -1
    #define Y_HOME_DIR -1
    //#define Z_HOME_DIR -1
    #define Z_HOME_DIR  1
  • Bed size is set to 200×200, with the origin in the center
  • Bilinear bed leveling – UBL is not possible without a working EEPROM!
  • One servo is enabled (BLTouch behaves like a servo)
    //#define NUM_SERVOS 3 // Servo index starts with 0 for M280 command
    #define NUM_SERVOS 1 // Servo index starts with 0 for M280 command

Advanced configuration in Configuration_adv.h:

  • Marlin has very eager thermal protection defaults, especially for the slow PCB bed it is possible to get “thermal runaway” errors that kill the print. The default had to be significantly relaxed.
    #define THERMAL_PROTECTION_BED_PERIOD 90     // Seconds
    #define THERMAL_PROTECTION_BED_HYSTERESIS 40 // Degrees Celsius
     * As described above, except for the bed (M140/M190/M303).
    #define WATCH_BED_TEMP_PERIOD 90                // Seconds
    #define WATCH_BED_TEMP_INCREASE 2               // Degrees Celsius
  • The TMC2130 drivers are in SPI configuration, for this to work the SPI has to be done in software (bit-banged) because the MCU doesn’t have a third SPI bus (one is used by the SD card reader and the other by the LCD expansion connectors).
    #define TMC_USE_SW_SPI
  • StealthChop mode is disabled (see the “Gotchas” section)
    //  #define STEALTHCHOP_XY
    //  #define STEALTHCHOP_Z
    //  #define STEALTHCHOP_E


There are quite a few! Most of the issues are not really due to the SKR Pro controller board itself but limitations of Marlin. Also, this board is fairly new (September 2019) so not all features are supported yet.

SKR Pro issues

What does not work:

  • SD card reader – this is a biggie. Marlin doesn’t work with the built-in card reader, because it uses a different SPI bus than what the Marlin assumes. Only card readers present on an external LCD controller are supported (which is on the “right” SPI bus). The built-in card reader can be used only for upgrading the firmware (place firmware on the card and reset the board).

    This may be fixable in the future by a patch to Marlin but right now it is only possible to print using the USB connection from a host if you don’t have a display with an SD slot connected. I am running my printer using Octoprint, so it is not too limiting for me.

    Sadly this seems to be thanks to Marlin’s 8bit legacy where having multiple SPI buses was rare (most 8bit ATMegas have only 1).

  • USB host doesn’t work as of now (no support in Marlin for STM32 yet) and is mutually exclusive with the printing over USB cable (USB device).
  • Persistent configuration (offsets, PID coefficients, UBL bed leveling data, etc.) – the board has no EEPROM (most STM32 MCUs lack a built-in EEPROM, unlike the 8bit ATMegas and Big Tree Tech didn’t include an external one). The only way to get persistence is to either write the configuration into the flash memory of the MCU (not great for longevity of the chip) or by emulating EEPROM using a file on the SD card. However, with the card reader not supported this doesn’t work neither.
  • Wifi works but not really very usable without the SD card support. Octoprint is better and more flexible.
  • Be prepared to kill the power or hit the RESET button immediately when bringing the board up. A motor turning in the wrong direction or non-functioning endstop could seriously ruin your day …

Trinamic TMC2130 issues

I have bought these drivers because I wanted silent steppers (the classic A4988 has the motors “sing”) and few other features, such as the automatic step interpolation and StallGuard. However, after spending quite a bit of time with these drivers I am not sure whether they are worth it, at least on the Mendel90.

  • These drivers do get HOT! A heatsink is pretty much mandatory, otherwise the driver could start limiting motor current due to the built-in over-temperature protection kicking in. Even a fan may be required in some setups.
  • The silent “StealthChop” mode does not really work. Well, it kinda does for the X and Y axis, however, for the Z axis I had one motor spin and the other stalled, skipping steps, producing horrible noise. Of course, that made the machine go totally out of whack. I guess the driver is attempting to do something “smart” with driving the motors and when two were connected in series (thus higher impedance) it got very confused … The only way to make this work was to connect each Z axis motor to a separate driver (the controller supports this).
  • When the Z axis motors were on separate drivers, they started to diverge extremely quickly – the Z axis pointers were significantly out of sync after homing the Z axis twice already. I suspect that was due to the automatic step interpolation the TMC2130 does and which may not have been identical for both motors. So this was a no-go.
  • Even on the other axes the motors visibly lacked torque in the “StealthChop” mode. Not quite to the point of stalling but the machine seemed to occasionally struggle.
  • There is also this article that analyses the problems with the “StealthChop” mode of these drivers.

Conclusion – I have disabled “StealthChop” and I am using the default “spreadCycle” mode. The machine doesn’t quite “sing” as before but the motors generate different noises – hissing, huffing …

That leaves the StallGuard feature – it does work but especially on the Z axis it is easy to crash into the bed or the Z axis top clamps and cause damage before this kicks in due to the torque advantage of the screws. So the benefit is not all that great.

If someone has some input how to correctly configure these drivers to avoid the issues above, I am very interested. Otherwise it may be better to either use the newer TMC5160 (which didn’t have Marlin support until recently and are more expensive) or stay with the venerable Allegro A4988.


Overall, I am pretty happy with this upgrade. Most of the goals were fulfilled, the bed probing works and allows me to not have to mess with the Z offsets or bed leveling as often as before.

Furthermore, the new controller board opens the possibilities for future upgrades – mainly switching to 24V power supply and a new heated bed. The current one is very slow to heat up and flexes a bit too much. Also the mounting to the Y carriage is very flimsy.

Another future upgrade would be a new extruder. The Wade’s extruder and the old J-head are both obsolete. Once I finish my stock of the 3mm filament I may start to look for doing this change – 1.75mm is more commonly available and would need a new hotend anyway.

Also the Z axis screws need to be replaced with proper (and mainly straight!) lead screws – that would certainly help to make the Z axis run smoother than it does now.

6 thoughts on “Nophead’s Mendel90 (Dibond) modernization

  1. Leif

    It’s nice to see someone else is still using the Mendel90!

    I’m working on upgrades to mine as well. I was using RAMPS from the start and have upgraded to TMC2130s as well. I’ve also switched to leadscrews and added an adjustable tensioner to the Y-belt that someone shared on Thingiverse.

    I’m currently working on switching to an all metal hotend. Actually, I bought two, one 3mm and one 1.75 but otherwise identical. I bought them a while ago because I wanted to print PET-G but haven’t mounted them yet.

    I printed a couple new wades extruders, one for each hotend as I wanted to be able to just swap between the two. I modified the scad to make one of the extruders have a smaller hole but it still does not grip 1.75mm filament. I will play with that again after I get the 3mm one working.

    The TMC2130s do not like my motors very well. It causes them to squeal very annoyingly. I think an upgrade to 24V will fix that. I bought a power supply but am waiting to install it until I get the new hotend going. I glued the resistor into my JHead with muffler putty and don’t know if I can get it out to replace with a higher value for the higher voltage but the new hotend uses an easy to swap cartridge.

    I have struggled to print ABS. It doesn’t stick to the bed very well. I think that this is because I can’t get my bed to reliably go beyond about 80C. I can make it work for most prints using ABS juice but I hate that stuff. So messy! I am hoping it will be better at 24V but unless I am really impressed with the difference I will probably switch to a silicone heat mat powered off of line voltage.

    I also bought a BLTouch. I intend to design and print a modified carriage to hold it though. I want all my parts to be ABS and that wide flat carriage is one part that even with ABS juice I have been unable to print right. Half way through it starts to warp and peels itself off the bed. I am hoping this will no longer be a problem when I have a hotter bed.

    Meanwhile I have a different procedure for manual bed leveling. Short version… get it close by eyeballing it. Then start a print that takes it all around the bed. I have a big hollow circle that I print which is nearly as large as the bed. As it goes around I watch how the bead is laid down and adjust the bed until it looks right all the way around. If it gets past the first layer and I am still leveling it then I stop and restart the print.

    This has worked way better for me than the dial gauge ever did.

    1. Jan Post author


      >It’s nice to see someone else is still using the Mendel90!

      Sure, why not? The machine is reasonably well designed and works, I
      doubt I would get much better results from a $200 Chinese special than
      from this. And if something breaks on the Mendel, I can fix it myself
      (that was my main reason why I have bought a kit like this in the
      first place).

      >I’m working on upgrades to mine as well. I was using RAMPS from the
      >start and have upgraded to TMC2130s as well. I’ve also switched to
      >leadscrews and added an adjustable tensioner to the Y-belt that
      >someone shared on Thingiverse.

      Yes, the original tensioner was one of the rather strange design
      “warts” this machine had. I could never get the Y belt tensioned
      properly with it. The Thingiverse replacement with a screw works much
      better. Leadscrews are in the mail already as well, that should fix
      the horrible Z axis design too.

      >I’m currently working on switching to an all metal hotend. Actually, I
      >bought two, one 3mm and one 1.75 but otherwise identical. I bought
      >them a while ago because I wanted to print PET-G but haven’t mounted
      >them yet.

      I am printing PET-G (well, GFIL) using the original JHead, no problems
      at all. Of course, 3mm filament only.

      >I modified the scad to make one of the extruders have a smaller hole
      >but it still does not grip 1.75mm filament. I will play with that
      >again after I get the 3mm one working.

      AFAIK, the issue is not the hole for the filament but that the idler
      doesn’t get close enough to put sufficient pressure on the thinner
      filament. I think Nophead has a modified Wade’s block in his Github
      for this or there was some mod on the RepRap forums (see:,521645 ).

      Alternatively, I would consider ditching the Wade’s extruder
      completely and replacing it with something more modern – e.g. the E3D
      Titan – much smaller but still geared so it can handle even the stiffer
      3mm filament (a small direct-drive would likely struggle with that).

      > The TMC2130s do not like my motors very well. It causes them to squeal
      > very annoyingly. I think an upgrade to 24V will fix that.

      Mine don’t squeal but make various hissing and puffing noises, like a
      steam engine. Not sure the higher voltage will fix that – the noise
      depends on the switching mode of the driver, e.g. my motors are
      totally silent in the stealthchop mode (but then they lack torque and
      are missing steps).

      However, if you decide to change to 24V, don’t forget to replace the
      heated bed. The original Nophead’s one is only for 12V and at 24V it
      will draw waay too much current, either burning up or tripping the
      overcurrent protection of your supply (hopefully it has one!). I am
      thinking about switching to one of those 3mm aluminium backed PCB beds
      – there are some available even in the exact same size as the original
      bed, so the carriage won’t need to be adapted. And a 3mm bed would be
      much stiffer, eliminating the annoying flexing which makes bed
      leveling tricky.

      >I have struggled to print ABS. It doesn’t stick to the bed very
      >well. I think that this is because I can’t get my bed to reliably go
      >beyond about 80C. I can make it work for most prints using ABS juice
      >but I hate that stuff. So messy! I am hoping it will be better at 24V
      >but unless I am really impressed with the difference I will probably
      >switch to a silicone heat mat powered off of line voltage.

      Oh no need for that. I am printing ABS without issues, actually it is
      more reliable for me than PLA.

      I don’t use ABS juice, that’s way too messy and difficult to clean
      up. I am printing on glass and either use a thin layer of PVA glue
      (the common glue sticks like UHU) or, more recently, I have bought a
      can of the Dimafix glue. That is specifically designed for 3D printing
      and activates with temperature. Above some 70 degrees ABS sticks to
      the bed like crazy but when cooled below 40 degrees, the prints pop
      right off all by themselves. Just take the glass out, spray Dimafix
      on, let it dry for some 20 seconds and print. It is a bit pricey
      (especially compared to a glue stick) but well worth it. Oh and both
      PVA glue and Dimafix are easy to clean up – just wash them off with
      water (both are water soluble) in the sink.

      24V supply would give you faster temperature ramp-up but not
      necessarily higher temperature. That’s a function of how the bed is

      I also wouldn’t want to have line voltage anywhere near any moving
      parts of a 3D printer. That’s literally asking for a Darwin award
      because the stiffer mains wires will chaff and wear through at some
      point – you will get either a fire or could get electrocuted. 24V is
      plenty already, even though I know some Chinese printers (Tevo?) use
      mains powered bed (and lack any safety features and earthing =

      >I also bought a BLTouch. I intend to design and print a modified
      >carriage to hold it though.

      You can fit it diagonally to the original X carriage, mine is mounted
      so that the screw heads come up right next to the extruder motor
      bracket. That’s the only place where it fits with the original
      carriage. Just drill two holes and done, no need to even disassemble
      the machine.

      I was thinking about printing a new carriage for it too but there
      isn’t much space where to attach the probe with the current
      extruder. The right side will make it get in the way of the limit
      switch (and the Z bar), the fan interferes in front and in the back
      you are limited by the space between the carriage and the top of the
      gantry, so that it still passes while homing.

      >Meanwhile I have a different procedure for manual bed leveling. Short
      >version… get it close by eyeballing it.

      Uff, that’s messy. When I need to level, I take the extruder off, put
      the dial gauge on, run the Z axis down until the indicator makes about
      2 full turns and then disable the motors. Then I push the carriage
      over the back of the bed by hand, adjusting the Z screws until it is
      +- level. Then move it to the front and do the same using the bed
      screws. Repeat 2-3x and done. It rarely takes more than 10
      minutes. Then I put a drop of Loctite on the bed screws to make sure
      they won’t get loose (had a nut fall off during print once). This
      lasts a long time. I have found it useful to buy extension bars for
      the dial gauge, though – most of these come with a very short one by
      default. You can find some cheaply on AliExpress.

      The bed doesn’t need to be super level – ~0.1-0.15mm is plenty
      already. Also, the bed flexes so you will never get it completely
      level over the entire surface – e.g the procedure you use will give
      you level surface around the edges but the center could well be
      bulging up or down. A glass plate will probably be OK but if you are
      printing on something like spring steel sheets with PEI, that’s a
      problem. That’s where the BLTouch probe helps.

      There is also one design gotcha in the Mendel which comes from the
      original Prusa – given how the X axis is mounted to the Z rails and
      how the screws are driven the X axis will twist when going down. It is
      being actively driven only when going up, when going down you rely
      only on gravity to pull the assembly down because the Z axis nuts
      aren’t attached to the X axis carriers.

      If you haven’t fixed this flaw when upgrading to leadscrews you will
      likely notice that the X axis twists and binds when going down – the
      right side with the motor being much heavier the left side will stay
      up for a while and then “jump” down. This is even worse if you are
      driving the Z axis down with the extruder at its X home position
      (i.e. completely on the right), having both motors on the same
      side. The effect can be exacerbated even more if your Z bars aren’t
      completely parallel but it will happen even if they are.

      The consequence of this is that left-right leveling of the bed will be
      constantly off. I used to tie a small plastic bottle with water to the
      left X axis carrier as a counterweight, these days I have a start
      script that homes the machine and then drives the extruder completely
      to the left to act as a counterweight before moving back down. That
      helps with this problem but it is something that really needs to be
      fixed once I will print the new X carriers for fitting the leadscrews.


  2. Arakon

    I’m also upgrading my Mendel90 piece by piece and am now wondering about the Z-axes. Have you done the lead screw modification? And if so, have you published the X-carriers anywhere?

    1. Jan Post author


      Actually, I did! I haven’t written a blog entry on it but maybe I should, along with the heated bed replacement with an aluminium one – even though I am 100% convinced that was a good idea – it takes almost 40 minutes to heat up to 110 degrees!

      I haven’t published the redesigned X carriage files but mine are publicly available on OnShape. You will need to make a free account but then the files are not mesh but b-rep and exportable as e.g. STEP or IGES for further modification in the CAD software of your choice (or even OnShape which is surprisingly good).

      Motor side:

      and idler:

      However, beware – you would need to order exactly the same leadscrews and nuts as I did for this. I have assumed they are all the same and they are not – there are several types of the nuts and screws around that look similar but have different amounts of screw holes and different leadscrew lead/pitch (e.g. I had no idea that there is a difference between pitch and lead – the leadscrews have multiple starts!). I got burned by this when I took a design that someone else has made and discovered that it was made for a 3 hole nut with a slightly different diameter.

      I have got 300mm long ones, with 8mm lead from here:

      You may want to use the 2mm lead ones. 8mm is a bit steep and will put a lot of stress on the Z-axis motors because the screws will turn even under the weight of the X axis alone – e.g. when the machine is off and you bump it, desynchronizing the Z motors . When I got these the 2mm option wasn’t there.

      Also, don’t forget to get a pair of shaft couplers – the stock ones from Nophead won’t fit anymore, the leadscrews are thicker.

      However, it is well worth doing the upgrade – the print quality may not really change (Nophead’s Mendel90 is pretty robust even with the crappy threaded rods) but the X axis isn’t twisting when going down anymore (both sides are being actively driven in both directions) and isn’t “flopping around” like the bent and twisted threaded rods.

      1. Arakon

        Ah, damn.. saw your reply too late!
        I just finished modifying mine last night. I made my own X-Motor/Idler carriages in a quite similar way to yours, although I did replace my bearings with a single LM8LUU instead of 2 LM8UU since I kept having trouble getting them to be exactly in parallel.
        The beauty of the T8 leadscrew mod for me is especially in the noise.. where Z-movement was whining before, it’s now completely silent.
        And I agree on the X-axis no longer twisting. I built a BFPTouch for the Mendel, and it was completely useless because the left side of the bed was always (wrongly) seen as much lower, so the auto-leveling didn’t work. Now it’s working fine.
        I did also order a BLTouch and modified the main X-carriage to place it very similar to your method, but it hasn’t arrived yet.
        There’s actually an option in Marlin to synchronize the Z-motor height (by using the probe), so if the sinking down is a repeat problem, I will activate that and use the remaining free slot on my SKR board to drive each Z-motor seperately.

        1. Jan Post author

          The bearings don’t need to be exactly parallel – once you pull the rod through them they will straighten out. Of course, if it is grossly off it won’t work.

          I think that Z sync option in Marlin requires to have a Z endstop on both left and right side, the probe alone is not good enough. Another thing is that you are going to be using the bed as a reference – and if the bed isn’t exactly level (it never is) you will end up with the X axis twisted again even though Marlin will falsely give you an indication that everything is perfectly level now. Except that your machine isn’t square anymore.

          Which will be much worse now when you have the X axis rigidly coupled to the leadscrews – there is a much less “give” in the system and you end up with wearing out the plastic pieces.

          That’s why I have decided to not do this. I tram the machine using a square and a bubble level, then I level the bed using the Nophead’s method and mark the matching positions on the couplers with a permanent marker (instead of the original plastic pointers). Like this I can see immediately that the screws are off and rotate them back into position by hand. The remaining difference will be calibrated out by the Z probing of the bed.


Leave a Reply

Your email address will not be published. Required fields are marked *