Introduction: Convert a 3D Stuffmaker Mega Prusa Into a Working 3D Printer
Update 16/04/2016: The firmware is now available in the Firmware step for download.
You can try Xloader to upload the files to your Gen6 board, this saves the hassles of getting the right Arduino IDE enviroment going. For this you need to add this line to the boards.txt file:
Sanguino W/ ATmega644P;atmega644p;stk500;57600;
If you already have the Arduino IDE installed you can upload the hex file simply with AVRDUDE.
And of course if you don't need a bootloader at all you also upload the hex file with your favourite programmer.
Update 05/06/2015: New info in the extruder step, video will follow later today.
Update 01/06/2015: Added a section for upcoming videos and images, so far you can see the printer running at an impressive 70mm/s.
Update 26/05/2015: Check the firmware page for the latest news.
Update 25/05/2015: Beta Testers required! I decided to start from scratch with installing Marlin on the printer.
Calibration is almost done for the system and I should be able to do some test prints tomorrow - if the original extruder does not play up again...
If you are like me and in Australia, you might have fallen for the promotions Stuffmaker did for the big Mega Prusa.
But as we found out the company is neither located in AU, nor provides any usable service if you have a problem with your printer.
As the printer itself is not too bad it would be a shame to take it apart to build a different model, so I decided it is time to fix this machine once and for all.
This Instructable will be a work in progress and I will add steps and informations on the go while I change the printer bit by bit.
So don't be too disappointed yet as it will take a bit of time to get it done properly and there might be periods of time where nothing is updated - usually while I have to wait for parts coming from overseas.
Until finnished this Instructable will need some help from willing testers with the same model from the same company!
Most of the hardware mods I plan on are already at a good development stage but require a properly working firmware before I build and install them.
In the final stages I will provide instructions for a full aluminium hotend with a much smaller footprint than anything else out there - this will be subject to another upgrade with mutiple extruders and RAMPS electronics.
All the wrongs should be fixed, I will try to provide two options where possible - keeping the original parts but improve them and replacing them with better models.
Step 1: Addressing the Problems....
Here is a list of common problems that I found since I got the printer, most of them will be fixed whie other might just need some mods and tweaks.
A) Things gone totally wrong with the printer...
1. The printbed, even when new is not what you might call flat.
I had to fight with Stuffmaker to get a replacement but it turned out to be bad as well.
In my case there is warping over the entire printbed of up to 1.5mm - far too much for a good first layer.
2. The extruder is one of the worst designs I have seen, although the idea behind is not that bad.
Instead of using ball bearings only a teflon slider is used to apply pressure to the filament.
The hobbed bolt is more eating filament and clogging up than transporting.
3. The build manual, at least the version I got, has several faults.
If you follow the build as instructed the printer will be warped in the frame.
Although this was already fixed with common sense during the build phase it has to be noted.
4. There are no reference measurements provided and no usable markings on the parts either.
If you want proper print quality you also need a properly build printer, having it out of alignment will make the calibration process a nightmare and cause frustration when printing.
B) Things that should be better....
1. As said, the service provided is as good as talking to your bedroom wall, so you are on your own to fix problems.
2. The hotends are produced in a very cheap way, worst bit here is the hole for the thermistor.
You might have noticed that you have to use temps outside the spectrum the filament manufacturer states.
Some of this is normal in terms of tolerances but the thermistor is only 2mm in diameter but placed in a hole that is more than 3mm in diameter.
Even the best heat sink glue won't be able to bridge that gap properly.
This is most evident for the smaller nozzles, like the 0.4mm one which tends to block and needs massive amounts of force on the filament to extrude.
3. The hotend mount works as it should but when changing nozzles it is usually necessary to calibrate the system.
This is because the hotends don't all have the exact same lenght and because the mounting plate allows for movement of the hotend until fixed in one position.
4. The elctronics...
Well, it is an old Gen6 board that is designed for the only purpose of 3D printing.
Sadly it requires massive mods to be used with a heated bed, which is hampered by the firmware itself.
Due to the same firmware restrictions it is neither possible to change some registers for parameters like extrusion steps or a different thermistor nor to simply flash a new firmware.
People that wasted the 95$ for the "Upgrade Kit" often report that absolutely nothing changed and the print quality is as poor as before.
Considering any other open source based printer can be flashed with a USB cable and Arduino software this is quite disappointing.
All the above will be addressed in the coming stages of the rebuild.
Step 2: How to Fix the Hotend
If you check the image:
you will notice 2 holes.
The one on the right is the original that was holding the thermistor, the one on the left is the new one to match the size of the actual thermistor.
The thermistor used in the MK3 hotend as used for this printer is a B57560G104F.
You can get them quite cheap on Ebay, even completely wired.
Although Stuffmaker did not confirm this is the right type, they work fine for me.
I have to assume the constant failures due to breaking wires are caused by the fact that the thermistor wires are not properly supported and joined onto quite thick cables.
The most simple fix is to do the above hole of 2mm and to put a replacement thermistor with heatsink plaster (not the stuff for your CPU!) in there.
In the later steps, after fixing the firmware problem, I will explain how to use more common and cheaper alternatives by adjusting the tables for the thermistor.
Another common problem, especially with the smaller nozzles is that they love to get blocked.
In most cases changing the supplier of the filament helps best.
I had a batch that caused bad surfaces and even blocked the 0.7mm nozzle a few times.
Turned out to be contaminated with fibres, not sure if cotton or high temp plastics but they collected inside the melting chamber until it was ball that needed to be removed through the top hole.
With two of my original nozzles I also had the problem of residue on the inner teflon tube.
Usually not a big problem but after a decent clean these "shavings" can end up in the melting chamber.
So it pays off to check the teflon tube on a new nozzle before actually using it.
There are also plenty of proper hotends available on the net and you might be tempted to just buy one.
Be aware that most of them won't have the right thermistor and some might even have far too much power for the electronics to handle.
Make sure the thermistor is the correct type, otherwise you need to change or adjust the settings in the firmware (which is another story).
The original uses a 10Ohm resistor, although of the cheap kind as I have nozzles with just 8Ohms and one with close to 12Ohm.
So going for a nice 60W hotend will not only cost you extra for a new mount but might also damage your electronics.
Again, after fixing the firmware much more will be possible here.
In the final stages of this Instructable I will even make my own hotend based on the scrap of the originals.
I tried my aluminium nozzle today and again have to change the design.
I though a nozzle with fast warm up times would be a nice thing to have but as it turns out the Marlin software is unable to regulate the temp fast enough.
While a standard hotend takes over 2 minutes sometimes to reach 200°, mine is capable to do this in under 40seconds - at half the power.
Only problem is that Marlin can't change between heating and off fast enough to keep a steady temperature.
Might change the code for these routines though if I can't change the design.
Step 3: The Extruder...
I have to find my STL files for the modified clutch system that replaces the pressure system.
It works better but only for the 0.7mm nozzle, the smaller ones still cause a chew up in the extruder due to the force required.
The best option here is to replace the entire system with a Wades Extruder, there are quite a few versions available on Thingyverse for example as well as ready to go versions on Ebay.
If you find one with the same gear ratio as the original you are good to go after changing the wiring on the stepper motor.
People using these extruders state the motor would run the wrong way.
Of course you can fixthis in a normal firmware quite easy, in our case until the firmware is changed we have to change the wiring.
Flipping the two pairs will do the trick here.
I finnished the major parts for the Wades extruder.
Currently printing some nice tool to make a suitable hobbed bot.
The basic design is working, although I have some problems with the mounting screws.
They are located so the nuts have to be located within the extruder block which makes a successful print very hard due to bridging material filling the tiny holes.
For the time being I melted the holes bigger with a hot nail :(
But getting better used the Sketchup now so hopefully I will find a better solution.
The original gear can be used if you don't want to change the firmware for some reason.
Once I have done some good prints with different materials I will update the design for an easier print, maybe even in three "slices" to mount together to avoid bridging completely in favour of more accuracy and less cleanup work.
In any case it might be a better option to desging the screw holes a bit smaller and to completely drill them to size for a perfect fit.
Will upload the STL files if anyone is interested.
The extruder was a pain to mount as someone forgot to get shorter 3mm botls, will have to replace some later on.
But the good news is that now the printer finally works properly.
No more oozing all over the place, no jams in the extruder and overall more consistent looking prints as the nozzle pressure is better.
The long tube for the filament was acting like a spring, you print a big area with a lot plastic and then the fine details after that got too much plastic until the pressure in the tube was gone it is just soooo much better now.
Currently printing a spare gear for the extruder - just in case ;)
Will take a short video of it and upload.
Can upload the STL files for the gears and extruder as well but there will be some changes to be made.
I still have to figure out a better way to the problem with the nuts holding the extruder on the carriage.
Instead of trying to put nuts inside I think the best option would be to print the area solid and to drill / tap the M3 thread once printed.
Similar story for the pressure system, there is very little room and the belt runs through the bolts.
I will try to design a new lever system with only one bolt to adjust the pressure on the filament.
Instead of using a standard hobbed bolt I made mine from aluminium to save a little bit of weight.
Long grooves using a M3.5 tap were made and the grip on the filament is fantastic, I had to stop pulling on the filament when I heard the gear crumbing.
In fact the grip was so good it ruined my 0.4mm nozzle during the first test print.
Had to remove the heat sink you find on the J-heads to fit it in the carriage and the filament cracked the inner teflon tube pushing the filament out both sides.
If I get to the end of the current filament roll I will take another video showing the nozzle literall squirting out the plastic like it is water.
Step 4: Firmware - the Real Nightmare...
If you ever tried the Stuffmaker support and got a real person dealing with you it becomes clear that from a certain point on they simply block all help.
Usually this happens when you request changes or something broke that should not break and you need a replacement.
For the firmware my nightmare started when I tried to print with some ABS.
Of course there is no heated bed and the printer was promoted to be mainly used on PLA but in their original ads ABS and other filaments were listed as usable.
Turned out the max temp settings for the hotend inside the firmware are fixed at a temp of around 230° C - you can go higher but won't get the right temp displayed.
While I still got answers from their support team I requested the Firmware so I can change these parameters and also to change the extruder stepping so a proper model can be used.
This was refused with the comment the software would not be open source!
Mind you the design is open source based and the firmware (and Pronterface) are simply changed to look apart.
When I mentioned that this is a violation of the open source project and that I would at least like to get a firmware with higher temp limits and the extruder settings in an Eprom register the support ceased.
Emails sent from my original account will still receive no answers today....
If you ever played with other Arduino firmwares you already know it is as simple as telling you Arduino IDE software to upload the sketch.
Since we know it is a Gen6 electronics board based on the Sanguino platform - how hard can it be to get our own firmware like Marlin or Repetier to work?
Well, turned out to be pretty hard :(
There is a lot of info on the Reprap websites on how to use Gen6 boards, including the fact that most of them come without a bootloader.
This speeds the initial start a bit but makes uploading new firmware without a ISP programmer impossible.
By the way, there "offer" for the "High Quality print software" include an ISP programmer that is available on Ebay for under 30$.
Considering the firmware is Marlin with the parameters changed for their model, the 95$ price tag is an insult.
Worst part still is that those that actually did it reported there are no changes in the print quality and that all old problems still exist.
So I wanted to flash a bootloader and at least get firmware dump in the form of a HEX file to have a working backup while experimenting with other firmware.
Here I messed up due to not knowing that Stuffmaker used FUSE settings that differ from those to be found in the Atmega 644PA datasheet.
For the upload I used my old Arduino Mega programmed as an ISP - the sketch is included in every Arduino ISP version.
Problem here is the Gen6 is quite old and in newer ISP versions the sketch was changed causing problems with the timing.
I reverted back to the 018 version of the IDE program with Sanguino support.
But when I was flashing the bootloader the different FUSE settings caused the firmware to corrupt and to make things worse also messed up the bootloader itself - the result was a useless board that still showed up as a Com port but was otherwise unresponsive.
All further attempts to flash the bootloader failed.
There is a nice online calculator for the FUSE setting of Atmega chips, but without really deep knowledge of the things it is next to impossible to get it right, especially if the settings are already messed up.
After a few days of experimenting I found a posting on the web where someone pointed out the differences between the common 644, the 644P and the 644PA.
This made me realise that the PA version is useless in a 3D printer as it is an edition with extreme low power consumption - as it would matter with all the energy we waste to heat the filament...
Anyways, from there I was able to find the right FUSE settings that would allow to get back to a state where I can flash the bootloader properly.
I used the Arduino to program and the AVRDUDE version that came with the latest Arduino IDE version.
When you check the docs for the Arduino ISP project you will see the programmer is always addressed as "Arduino" in the options - this won't work for the Gen6 board!
Instead the programmer setting must be for the AVRISP programmer!
Here are the steps I used to set the fuses correctly and to flash a Marlin firmware:
1) avrdude -c avrisp -b 19200 -p m644p -P com6 -B 8 -u -e -U lock:w:0x3F:m -v -v -v -v
2) avrdude -c avrisp -b 19200 -p m644p -P com6 -v -v -v -v
3) avrdude -c avrisp -b 19200 -p m644p -P com6 -u -U efuse:w:0xFD:m -v -v -v -v
4) avrdude -c avrisp -b 19200 -p m644p -P com6 -u -U hfuse:w:0xDC:m -v -v -v -v
5) avrdude -c avrisp -b 19200 -p m644p -P com6 -u -U lfuse:w:0xFF:m -v -v -v -v
6) avrdude -c avrisp -b 19200 -p m644p -P com6 -U flash:w:ATmegaBOOT_644P.hex -v -v -v -v
7) avrdude -c avrisp -b 19200 -p m644p -P com6 -U lock:w:0x0F:m -v -v -v -v
A few explanations on the above:
"-c avrisp" set the mode for the programmer.
"-b 19200" specifies the baud rate as seen in the Windows device manager for that port.
"-p m644p" is our Gen6 board.
"-P com6" is the com port of the Arduino Mega as you would see in the IDE program or Windows device manager.
"-v -v -v -v" sets verbose level to maximum - this was you see what is happening, which is good for troubleshooting.
Line 1 sets the FUSES and bord settings so we can actually start what what we try here.
Line 2 is a simple check if the communication works - you might have to force stop this if it hangs towards the end by pressing "CTRL C" on your keyboard.
If you get an error for line 1 or 2 you have to check your programmer.
Line 3 to 5 set the fuses so we can actually flash the the bootloader, you can put all "-U" parameters into one line, I just wanted to make sure it is all to be seen here and single lines make it easier in a DOS window.
Line 6 now finally adds a bootloader to our board - please use the bootloader as listed above, there is another version with a slightly different name but it won't install.
Line 7 fixes the fuse settings so we can use the board and upload sketches through Arduino IDE instead of using a programmer.
You might think that if you already need a programmer to get the bootloader working it might be easier to install the firmware this way and not to mess with the bootloader at all.
If you are good in compiling your own HEX file from the sources you are right.
But I assume most people having trouble with this printer are beginners with little knowledge on using Makefile and compiling.
Changing parameters in the Configuration.h and the Configuration_adv.h - which contain our settings, is much easier and faster than to always compile the firmware to a HEX file for flashing.
Once you have the exact right settings for your printer it might be a different story though...
Marlin, Repetier or something else?
The original firmware is based on Marlin so using Marlin would be a good option.
For those wanting a bit more Repetier might be the right choice.
In any case it means we need to find the correct settings for a few things before we can upload and try it out.
This is where I am a little stuck right now.
Stuffmaker did not follow the entire deign specifications for the Gen6 board and the same is true for their handling of travel directions and limit switches.
Not to mention the stepping for the axes and extruder.
This will be a long task to get it right but it is also a point where you might be able to help.
If you have the original Configuration.h and Configuration_adv.h files from Stuffmaker already please post their content or attach the files.
It would save a lot of time to find the correct stepping, which in return saves me a lot of filament for test prints to measure :)
Same if you want to help me (and maybe others) by providing the firmware dump of your Stuffmaker Mega Prusa.
The commands for that can be found on the Gen6 pages of the Reprap project, if you can't find it or need help feel free to post a question.
I will contunue with this Instructable as I go, upload pics and some videos once it is working.
At this stage I will not offer a Marlin or Repetier firmware as first I want to see my printer perform to specs.
My apologies for this but you will understand that it is better to download a working firmware once all is fixed than one that makes printing impossible.
I was able to get a working Arduino IDE enviroment working that suits Marlin the same way as the printer.
Don't be fooled to think that the newest version of a programming software also is the best or right one for a job.
Found that out the hard way...
Here is the story so far:
To get the bootloader going I used the recommended 018 version of Arduino IDE, trying to flash the bootloader with anything above 1.0 resulted in connection problems or a non booting system.
That means I used the AVRDUDE version included in this version to flash the bootloader with the above commands and by setting the programmer to AVRISP instead of Arduino.
Using a dedicated falsher instead of programming an Arduino for the job might work with other versions though and should always work using the AVR suite for Windows with a suitable ISP programmer.
The real nightmare was finding a combination of Marlin firmware and Arduino IDE that would actually work together without causing endless lists of errors that should not exisist to start with.
Thinking that any Marlin firmware could be substituted was the biggest mistake I made here and I did cost me a few days of frustration.
At this stage I wasted another day researching images of Gen6 boards to confirm Stuffmaker actually used the original specifications and not another home made solution - to my knowledge the board is genuine and fully Gen6.
Problem was to find a Marlin version that matched the other hardware of the printer as close possible, and I found only one that did it.
The original creators of the Mega Prusa now have the third model, the I3, out there but it is still based on the same mechanical properties as the original V1 that we use - basically the Model T of 3D printers LOL
Adjusting the firmware to our hardware was not the easiest bit as the I3 model has all the bells and whistles we miss out on, like heated bed, auto bed levelling, Z axis probing, fan control for board, heater and extruder and a few more gimmicks.
Trying to compile it was the problem that almost made me give up on it.
If you ever tried compiling and uploading a big program from the WWW to your Arduino or printer you know what I mean with the connection errors, SPI errors and all the problems finding a solution for other errors that should not be there - after all I got the same problems trying to compile the unaltered firmware.
As it turned out you not only need the the correct Arduino IDE version, 023, but also change some libraries, board definitions and pin configurations.
After sorting all that with some sleepless nights I was finally able to compile without errors nd shortly after upload the whole thing to the printer board.
Here things got really interesting as all axis, motors and endstops needed to be setup correctly, not to mention the settings for the thermistor tables.
None of the supplied tables give correct readings so far, but my prototype hotend with a different (and in the firmware supported) thermistor comes close enough to what my thermometer reads considering the tolerances.
But that is a problem that can be sorted quite easy and for those that want a proper hotend of the modern type will appreciate that we can no change our thermistor settings by simply adjusting the firmware and uploading it.
The X, Y, Z axis have been calibrated with less than 0.1mm error measured on the full distance of the corresponding axis.
The extruder still needs some finetuning as it is off by around around 0.5mm but that should not be a problem as the final extrusion settings need to be adjusted for every roll of new filament anyway.
To allow for easy changes of those parameters I activated the EEPROM support for the board, so all vital values are stored in that memory without the need for a new firmware to change them.
This includes all axis.
The stepping can be changed with the M92 command and stored in the EEPROM with the m500 command.
To keep track of the current settings all stored values will be displayed in the status window of Pronterface after connecting to the printer.
The reamaining steps before I offer the midfied firmware for willing testers will be the thermistor tables and the final calibration with some test prints.
Once that is all sorted I will create a direct extruder on the hotend based on Wades geared extruder but matched to the X-carriage as I would like to avoid creating a new one (don't really like the idea to take the printer apart for this).
Last and final step for this stage is to optimise the motor speeds for best performance so prints above our usually crawling speeds are possible.
Temp settings are already adjusted to allow 275°C but can be changed higher in the firmware if you have one of the fancy high temp hotends like used for printing in Nylon.
After that I might go for hardware mods on the board to allow for a heated bed or maybe a changeover to Arduino Mega with RAMPS.
Anyone willing to test the new firmware can contact me by PM and I will provide a download link that includes all software required including all the mods to get the Arduino IDE working properly.
Once a few testers confirmed the firmware works as expected I provide the download links in this Instructable for everyone.
But please keep in mind this only works for a 3D STUFFMAKER Meaga Prusa of the first generation!
If you have one of the newer model, like the ones with a wooden frame the firmware should still work but you might have to adjust a few settings to cater for the differences.
The firmware is running nice and stable now, first test prints confirmed the alignment and stepping is correct :)
No up to print some extruder parts to get the machine working the way it should - without constant jamming, extruder chewing, missed steps and an operator going insane.
The firmware is stable and as long as your Stuffmaker is not modified it will run with no problems.
If you have bought (or considered to buy) a different hotend you can now do the auto tuning with through Gcode and store the settings in the EEPROM without the need to change the firmware as long as the thermistor is the same.
In case it is not you have to change the thermistor table out, which is usually as easy as changing one number in the configuration.h file through Arduino ISP.
Might upload a short video from the first extruder gear being printed later tonight.
Step 5: Videos and Pictures...
First of a little video showing the oldie running at 70mm/s, only slowed during the infill through acceleration control to prevent loosing steps.
0.7mm nozzle, 0.1mm layer height, all original Stuffmaker parts including the extruder (unmodified for this test):