Saturday, 5 October 2013

Mendel90 design improvements

I temporarily suspended kit production for a few weeks in order to have some time to make some improvements to the design. The following improvements apply to kits currently being shipped.

Hot End

It came to light during the hot summer that the top of the J-Head can get too hot for extruding PLA. The problem seems to manifest itself when extruding slowly because it takes longer for the filament to pass through the hex grub screw (which is the Achilles heel of the J-Head because it is wider than the rest of the filament path) and so has enough time to soften and buckle. Ironically it is also more of a problem when extruding at lower temperatures because the filament gets harder to push and so buckles at a lower temperature.

On investigation I found what I had suspected for a long time: that the heat at the top is mainly due to convection rather than conduction. This is easily demonstrated by running the extruder on its side. A lot of people add a second fan but a simple solution is to insulate the heater block. I now wrap it in two turns of silicone "self amalgamating" or "self fusing" tape, which is rated for 260°C. There are several brands but I use E-Z Fuse Tape which is 25mm wide. I stretch 110mm of it around the bottom of the PEEK, just below the bottom vent slots. I then trim it flush with the bottom of the heater block with a pair of scissors.

This makes enough difference to allow it to extrude very slowly without jamming. To cool it further I added a small hole to the fan duct.

A small airflow makes a big difference because it disrupts the convection but it is only active after the first layer when the fan is on.

It is possible to drill the hole to upgrade an old fan duct but straight drilling will spit the layers apart as it is a very thin wall. The way I did it was to melt a hole using a soldering iron with a conical bit set to 200°C. At that temperature you can wipe the ABS off the bit before it has chance to burn and make a mess of it. I then clean up the hole by drilling the melted ring it with a 4.5mm drill and then trim it flush with a penknife.

Another mod I made was to apply a bit more pressure to the idler by adding washers to each end of the springs. The same effect can be achieved by tightening the screws so they go about 1.5mm past the back of the bearing block but I like them flush with the block for an easier reference point.

These three little changes made a big difference and I can now extrude PLA at 185°C, which gives better print quality. I have updated the android gcode I include on the SD card and I have put the new Skeinforge settings on Github.


Other improvements I made to the settings are: -
The PLA settings were erroneously under the ABS profile, sorry for the confusion. The un-configured profiles have been removed and two new ones: PLA0.3 and PLA0.2 have been added. The android sample is sliced with the 0.3mm layer profile because it is easier to get the Z calibration right with the highest layer height possible with PLA. The 0.2mm profile gives a much nicer print.
The ooze free unattended start was not very reliable with PLA. Lowering the temperature helped but I also improved the extruder priming by extruding a very fat line along the front edge of the bed instead of a blob.
I have come to realise that you get better prints if you do the outlines at the same speed as the infill and looking back I think that is what I have seen commercial machines do. The old profiles had the outlines at 25mm/s and infill at 50mm/s. I now do both at 40mm/s.
The reason it works better is because when the extruder rewinds at the end of one run and then fast forwards the same distance to start another it will restore the same nozzle pressure as it had on the previous run. That means the initial flow rate will be the same, so if the speed has changed it will be too fast or too slow. This leads to blobs on the outline after doing faster infill and gaps at the start of infill after doing slow outlines. 
Another advantage is with a constant flow rate the plug of plastic that forms at the hot end transition zone will be a constant length. If the speed increases the length reduces, which means less of the barrel has plastic expanded to the barrel's diameter and more has it at the original filament diameter. This implies there is less plastic in the barrel, so an excess must have been extruded while the plug was shortening. Conversely when the extrusion rate drops the plug extends so too little plastic will be extruded during that time.
Yet another advantage of using constant flow rate is that the die swell will be constant, so the plastic is always stretched by the same amount. When outlines are done slower the die swell is less, so they are stretched less, and so don't span gaps as well as the infill.
I have set the outline flow rates slightly lower than the infill. Skeinforge's volumetric calculations fill a rectangle equal to the filament width and layer height. This is OK for the infill but the outline does not have a rectangular profile, it has rounded sides, so it comes out a little wider than intended. The error is less when the filament path is wide compared to its height. The correct value is 1 + (π/4 - 1) / (w / h). Using this formula I get dimensionally correct prints instead of outlines that are too big and holes that are too small.
PLA prints better when cooled by the fan but you don't want it cooling the print surface when the first layer is being laid down. Ironically print cooling seems to be more important when extruding at 185°C than at 220°C for reasons I can't yet explain. To be able to automatically turn the fan on at a specified layer I had to incorporate an update to the Cool plugin by DeuxVis and Joost-b plus my own little bug fix. I have put the patched version of Skeinforge50 that I include on the SD card onto Github.


I made three small tweaks to the version of Marlin I distribute: -
I reduced the XY acceleration from 4000 to 2000 as the Y axis can lose steps due to resonance in high frequency infill otherwise.
I found that the Y axis would overshoot when homing if the X axis hits the end stop first. This was because the axis moves 40% faster on it own than when moving diagonally. I reduced the homing speeds but multiplied them by 1.4 when moving diagonally. The net effect is diagonal homing is the same speed as before but it now doesn't speed up when one axis stops.
I updated the PID constants for J-Head MK5B as I hadn't changed them from MK4B. It didn't seem to make much difference.

X ends

A few people started reporting the bar clamps on the X motor bracket and the X idler bracket had cracked. I am not sure why this became a problem after hundreds of kits. Some reported they could not get enough tension to pull the belt tight, so perhaps the belt got stiffer, or the plastic parts weaker. I built a kit myself to investigate using a problem belt that one of my customers returned. It was inconclusive because I managed to get the machine printing well without breaking the clamps but I think some belts are stiffer than they were in the first kits, despite coming from the same manufacturer and I also think the plastic parts might not be as strong as they used to be due to ABS supply changing. I tackled the problem from both sides by immediately switching to more flexible belt and then redesigning the X end clamps.

I switched to Brecoflex® belt which has more thinner wires in it and also boasts that it has a better arrangement of strands within each wire. This makes it more flexible without being less strong. The wires are also parallel, whereas cheaper belts have them in a spiral so they meet the edge every so often.

The clamps now only have plastic in compression so are much stronger. They do use a lot more fasteners but because the screws are accessible from above they no longer need to have hex heads, so that is one less type of screw required.

The nut trap for the lead screw is now at the top (don't be fooled by the hexagonal hole at the bottom, that is just clearance to allow the nut to be fitted to the leadscrew first). This greatly increases the distance of the nut from the Z coupling when the Z axis is at the bottom. When the nut was at the bottom it got to within about 10mm so any eccentricity was magnified by about 20 at the top of the leadscrew.

Because holes can't be printed in mid air there are one layer thick support membranes at the bottom and the top of the nut trap. This creates a completely enclosed void which revealed a bug in OpenScad. It generates an STL with the internal faces facing the wrong way, i.e. outwards instead of inwards. Fortunately Skeinforge does not care and slices it correctly but Slic3r doesn't.

Another little tweak to the design was to angle the hole for the idler axle. It is a clearance hole so the belt tension pulls the front of the bolt to the right, which tends to make the belt run to the front of the idler pulley, requiring a shim under the back washer to correct it. The new design angles the bolt hole slightly to correct for this so doesn't require a shim. Here is a cross section showing that when the axle bolt is orthogonal the front rests against the right side of the hole and the nut at the back rests on the left side of its trap.

The X motor bracket has been simplified and made much easier to print. The previous design fastened the motor with three screws at the front and used a box construction to be stiff enough not to bend under the belt tension. The new design has one screw in the back of the motor so that only two are needed at the front leading to a much smaller bracket.

The length of stepper motors has a poor tolerance of ±1mm because it is made from a stack of laminations pressed together. For this reason I couldn't use a normal screw through the plastic. Instead the screw head is packed out with as many washers needed to fill the gap between the motor and the bracket. This will be one if the motor is top tolerance and five if it is bottom tolerance. The hole in the bracket is a snug fit for the head of the screw so it acts as a dowel.

Like the idler, the clearance screw holes for the motor would allow the front to be pulled to the left causing the belt to run to the front of the pulley. The motor holes have been offset by half their clearance to avoid this.

Z couplings

The original Z couplings worked well on all of my machines until I built another one that produced objects with some Z banding. Investigation with a dial gauge showed that the Z position was not increasing linearly leading to uneven layer heights. I found that the lead screw was eccentric leaving the coupling due to the bore of the PVC tubing not being central. Also PVC is more plastic than elastic, so when it is squeezed by the coupling it deforms permanently and does not give much flexibility. The couplings where designed with a gap so it was possible to over tighten them leading to too much constraint. The top needed to be fully closed because the studding has a smaller outside diameter than a normal M6 bolt would have.

To address these issues I switched to neoprene rubber tubing that seems to have the bore more central and is also a lot more flexible. I changed the plastic parts so they can be closed completely to give the correct pressure rather than relying on a gap being maintained. I also made the screw positions diagonally opposite which makes them a bit easier to tighten up.

The only downside to the neoprene is that it doesn't give enough grip to be able to turn the motor manually when it is enabled. To allow bed levelling I changed the Pronterface buttons for back left and back right to disable the motors. The new config file is on Github.

X carriage fan bracket

The length of the J-Head MK5B is incorrect in the Mendel90 model. This makes the fan duct too low and it hits the clips on the bed. A simple solution is to make the slots in the fan bracket deeper so it can be fitted a bit higher. I also added strengthening ribs as the old bracket allowed the duct to droop.

Tube end caps

I reversed the direction of the screws that hold the aluminium tubes onto the base. The nut is now trapped inside the tube by the end cap. This means the tube no longer needs the large holes for the screw head, which greatly reduces the amount of machining I need to do to make them.

The two extra washers are needed at the front to avoid using an additional screw length. The two rear fixing blocks are now different from the others because they don't have a nut trap in the middle position.

Y carriage heat shield

Instead of using aluminium foil to reflect heat I found that simply filling the gap under the bed with multiple layers of corrugated cardboard allows the bed to reach higher temperatures.

Spool Holders

These are now assembled with the large washer on the outside of the spool rather than the inside, requiring four more small washers. This is to accommodate spools that originate from Orbitech that are slightly wider than the ones I used to get.

Kits have been shipping with all these mods for a while now but the time out taken to make the changes led to a backlog and a large waiting list which we have been working flat out to clear and hope to get back to next day dispatch this week.


  1. Cool, excellent work.

    I have used a couple of similar mods, Except I used ceramic fibre under the print bed and around the hot end tip to help with keeping temperatures up for ABS printing and avoid wasting heat. The bed lower plate is now a lot cooler too.

    The rest are something for me to work through.

    I use a Raspberry Pi to drive the printer from and connect it to my network. This works extremely well and is very stable. Powering the Raspberry Pi from the same PSU maybe helps with this as well. It may be worth considering offering a Raspberry Pi Mounting as an upgrade option and adding holes into the frame for this.

    A recent minor issue discovered with a 90 I look after sometimes was that filament spools that are very full catch on the cleaner assembly until enough filament has been used to clear it. Because the cleaner assembly protrudes a little further than the roller bearings. Moving the large washers to the out sides would have helped with this too. So an early mod to apply for me. I needed to hand un-reel until enough filament had been used for it to run smoothly again and be left unattended.

    I last small issue I have to sort is that the first 2 layers scrape on the underside of the print head whilst printing. I think this is because it is putting down too much plastic. Holes are coming out undersized as well which tends to support this idea. The improvements above though are also worth taking into account.

    Thanks for sharing these tweaks, it is very much appreciated.

    1. I un-clip the dust filter from its normal position and clip its bottom clip to the top bar. That allows me to use over full spools. They are a pain, the Orbitech spools have an inner radius 10mm bigger but hold the same amount of plastic as the GEHR ones that the spool holders were designed for originally.

      Where do you fit the PI?

    2. I will try that with the filter holder.

      At the moment the Pi is not fitted it is sat on the desktop. Eventually I am hoping it will go on the back of the frame in the same compartment as the Melzi.

      The Pi is powered via a Pi Plate prototype board and the Standby 5V from the PSU which is permanently on with the PSU. I have also brought the Power Good and Power on cables to the Pi Plate ready for it to turn the printer on and off as well as check the power is ready all via the network connection.

      The Pi also doubles as an image server for my USB microscope when it is doing nothing else.

    3. Hi Aka47,
      yesterday I tried to drive my mendel90 with RaspberryPi. I got two problems. First the pronterfacescreen doesn't look a I am used from the windows version. There are several mistakes in Display. Second I got loss of steps, not continuosly but on one time the printout was wasted. So I would like to know how to implementate pronterface, which version of raspbian has to be used and which baudrate is correct.
      lg dochol

  2. Hi Chris (Nophead),
    Great updates. Thanks for continuing to share your insights into the many aspects of printer settings. It can be a mine-field but you always shed light on this area for me. I'm so glad we have your blog for reference.
    I especially like the changes to the x-end bar clamps. It will make the X assembly far more robust.
    I wish you continued success with your business.

    Small questions... could you share the specifics of the change that enables diagonal (x/y) movement to travel at the same speed as a single axis on its own? (I'm not using your Marlin and would like to include this change in my own.)
    Could you also show "nozzle wipe" g-code lines? I'd like to give that a go also.

    1. If you click on the latest commit to Marlin on my Github it shows all the changes I made.
      The gcode is here:

  3. This is awsome!!! I have just clogged my 2 jheads with a difficult print and here is the solution! Can't wait to test it!! After you sent me the replacement X motor and idler brackets they have been doing fine, I guess the first time you assemble it you do not have a reference for tightening and most people (like myself) break the clamps. These new ones seem more forgiving, though, and do not need the motor wires to be desoldered to disassemble.
    I'll start printing them right away. One question, can you share your printing and slicing parameters for ABS, so that I print parts as close as possible to what you meant them to be?
    Thanks as always for the super work.

    1. I print the parts with 0.4mm layers, W/T 1.5, single outlines. The X ends are 50% hex infill and the clamps 25% so they distort rather than the base of the X end.

      Unfortunately my ABS supply changed in April and I can no longer print 0,4mm layers with a 0.4mm nozzle because the die swell is not enough. So on my production machines I ream the nozzles to 0.45mm. This is very annoying because the machine is supposed to be able to print its own parts and it could with the plastic I had been using for years. The company that made it (GEHR) got rid of the machine they used and can no longer make accurate filament. The new stuff comes from Orbitech and looks exactly the same but has less die swell.

      If you look at the latest version of the manual it shows how to work out the limits you can extrude by measuring the die swell. Perhaps try 0.3mm layers with W/T = 2. The one layer support membranes will then be two layers unless you reduce the layer height in the scad files but that might have a knock on effect for other dimensions.

    2. Sorry I did not understand. You can increase flow to compensate less die swell. Yes? Or f.e. set filament diameter less. - 2.7mm insteed of 3mm or smth. And no need to jump to 0.45 nozzle... Am I wrong?

    3. No die swell does not change the volume, so the flow rate has to stay the same. All that happens with die swell is the plastic comes out wider than the nozzle aperture and correspondingly shorter when extruded into free air. When you build an object you can't extrude tracks bigger than the die swell area because it would want to come out the nozzle longer and thinner that the track. So you end up trying to compress it lengthways instead of stretching it. That makes it squirm and wiggle instead of being pulled tight.

      The nozzle aperture and the die swell of the plastic dictate the maximum cross section you can extrude and together with a minimum W/T value of about 1.5 for strength dictates the maximum layer height.

  4. Hi Chris,

    I got your kit up and running and you made me a happy man. Setup and calibration went super fast and your design is so clean and effective. My MendelMax just made me sick with the bunch of wires hanging around. Building your M90 just showed me all the lacks my MendelMax has in every spot.

    I could not resist changing the cardboard isolation with 25mm Silcawool. In the beginning its a little dusty but it pays off with superior isolation.

    You always make me wonder how you come up with an spot-on explanation for a given problem, most of the time I feel blindfold running into problems I cannot interpret. I almost never can decide which factor leads to an error getting me off the path with fiddling around on many parameters.

  5. Hi chris,

    first of all thanks for beeing so transparent and sharing your thoughts and all the work with us. this is highly appreciated and makes good karma :)

    I printed a modified one myself using 4mm dibond (we already wrote about that privat on the reprap forums). Everything went well so far though i still have some trouble getting my prints fine. For that reason and because of some other i decided to print the newer x-ends to replace the old ones.

    Still having a hard time getting them to slice in any slicer apart from skeinforge (which i haven't used for years and haven't calibrated at all). I hope to get rid of this bug openscad creates anyhow but still have a question left as i don't have your kit: Are you just using one 8mm thread / 13mm OD nut in your x-ends without a spring or anything else? I'm using ACME threads but have made myself delrin nuts with OD13mm - i was just wondering if you let the x-axis just "sit" on those nuts or if you using anything else to get rid of backlash and other issues?

    Thanks for helping out.

    1. In the kit I use M6 nuts which are 10mm across the flats. I don't use anti-backlash springs as gravity is enough. They old design allowed them but the new design doesn't.

  6. Some Pictures of my Build of this Version! Great Kit no worries its this easy to Build!

    1. I did a blog of my build if your interested :)

  7. Hi, great to see some improvements in this already awesome printer!

    About the extruder-fan, I always print with it turned off. The reason for that is than if i have it turned on while printing, the object cools down so much that it comes loose from the platform. Now when I tried with your new settings, it happened as well. I use the glass which were provided with the kit and have made a cardboard-insulator under it...
    Any suggestions to prevent that from happening?

    1. Not really as objects stay stuck until the bed has cooled for me. I don't use a fan for ABS but for PLA I turn it on after the first layer. I find that if I print objects at 185C the fan is essential or they collapse in on themselves.

      To increase adhesion you can have the temperature of the bed and filament higher for the first layer and then drop it. You could also change the fan parameters to leave it off for more layers, perhaps 2 or 3 and you can also make it only come on when the layers are small in time.

    2. I tried raising the bed temperature to 90°C, and now the prints are really good stuck on the bed, awesome!

      By the way, I just printed a case to cover the electronics on the printer, and put it on Thingiverse. Thought you'd like to see it:

  8. Hi Chris,

    I tried to compile the newest version (I succeeded with the old one) but with the following error:

    C:\Mendel90-master_neu> dibondhoch
    openscad -D $bom=2 -o dummy.csg scad/bom.scad
    Generating bom ... done
    openscad -o dibondhoch/sheets/frame_base.dxf dibondhoch/sheets/
    Traceback (most recent call last):
    File "C:\Mendel90-master_neu\", line 17, in
    File "C:\Mendel90-master_neu\", line 11, in make_machine
    File "C:\Mendel90-master_neu\", line 63, in sheets
    File "C:\Mendel90-master_neu\", line 81, in dxf_to_svg
    ptList, cirList = parse_dxf(fn)
    File "C:\Mendel90-master_neu\", line 7, in parse_dxf
    f = open(fn)
    IOError: [Errno 2] No such file or directory: 'dibondhoch/sheets/frame_base.dxf'



    any idea? I have openscad, python 2.7.5 and inkscape in the path.

    1. To get a detailed error message have a look at openscad.log.

      My guess would be that you haven't got a new enough version of OpenScad. The required version is in the README. The latest Mendel90 code makes use of features introduced in June.

    2. Hi Chris,

      it's 2013.06, freshly installed. Openscad.log says:

      Parser error in line 2617: syntax error

      compiled module: 0
      WARNING: Failed to compile library 'C:/Mendel90-master_neu/dibondhoch/sheets\../../scad/main.scad'.
      WARNING: Ignoring unknown module 'frame_base_dxf'.
      Current top level object is not a 2D object.

    3. Oh, and there's only a filr frame_base_dxf.scad in the newly made sheets folder.

    4. module frame_base_dxf is on line 923 of main.scad.

      Have you tried building one of the standard configurations before your own? If that works there must be a syntax error in your configuration file.

  9. Love my Sturdy Mendel90. In December it'll be a year. Thanks for continuing to post updates. I think it might be time to print some upgraded parts.

    Quick questions. Have you thought about creating a setup for direct drive? Personally i'm looking to add a EZStruder in the next couple months. After doing some research it looks like the best option if I want to print with 1.75. Plus I love the simple design.

    Also let me join the others and say Raspberry Pi with Octoprint is amazing. Being able to watch and manage my printer anywhere in the house has been a godsend.

  10. Are the kits still for sale? I can't find a sales link anywhere. I'd love to buy one :)

    1. Yes they are still for sale, see,196585

    2. Or google Mendel90 for sale!

  11. Hi nop head,
    First of all, happey new year !.
    Can I make you a copule of questions ?
    Why do you use T5 belts ?
    GT2 belts aren't more accurate ? (have less backlash ??)
    Thanks very much.


    1. T5 pulleys are printable and pulleys don't give backlash unless the teeth are too small.

  12. First of all thanks for all your work this kit looks really great. I'm a beginner in this world, and I think I will start with this Mendel90. I See than the hot end is really important, so I would like to change for a 100% metal one from E3D maybe you know it :
    Do you think it could fit ? with a different mount of course , I didn't check on thingiverse for example but maybe it already exist for your mendel.

    Also I don't know what to choose between 1.75 and 3mm feeding system, I didn't find yet an pro/cons article, I just think that maybe 1.75mm is faster to reach temperature and so the printer could print faster ? the 0.4mm nozzle seems to be a good start for precision.

    thanks for your time.

    1. The E3D will fit the existing mount because it is the same groove mount as used on the J-Head. It is longer so it will reduce the maximum build height. The fan duct in the kit will not fit around it so if you want to print PLA you would need to find some other way of cooling the object. Also some people have problems printing PLA with it, so I do not recommend it for PLA. See my comments here:,197736,310387#msg-310387 and here:,197736,311520#msg-311520.

      Possibly it can melt faster but I don't print at speeds where melt speed is the limiting factor. The extruder is designed for 3mm because 1.75mm filament costs about twice as much from the companies I buy filament from.

  13. Again, I second all of the compliments on sharing this excellent design.

    I have the design running properly in OpenSCAD but am missing a few key concepts. I'd like to be able to consider thicker Dibond but nowhere do I see where the thickness of that or even the MDF defined. Could you point that out, please?


    1. The sheet thicknesses are defined here:

  14. Thank you. I was looking in vitamins.scad

  15. I find the frame base dxf but not the dxfs for the other parts that might typically be CNC cut. Is it intentional they are not generated? I think I can follow through and do it myself but I was just wondering.

  16. Never Mind. It appears that I had an older version of the GitHub zip running.

  17. The sheets are in the zip but none are made but the frame, at least so far.

  18. If Inkscape isn't in the path, will abort on the first _dxf it finds and in this case it only processes the frame. Adding to the path and rebooting will allow the remaining dxfs to be generated.