Prusa i3 MK2 Build
Over the past handful of months, I have been running into the limitations of my Monoprice Select Mini V2 3D printer more and more frequently. It’s been a great introductory hobby printer, but as I have become more experienced with 3D printing, and have been having larger ideas, these limitations are starting to show. The build plate is only 120x120mm in size, meaning a fairly small upper limit in terms of the size of objects I can print with it. It also features a bowden extruder system, which is perfectly fine when only printing PLA and ABS plastics, but quickly becomes an issue once more exotic filaments come into play, namely flexible ones.
It is possible to cut larger objects up into sections and glue them together after printing in multiple parts, as I did with my recent attempt to print a decent sized flower pot, but it is hard to get a consistent surface finish with this method, and it can be quite time consuming as well.
The remedy to this of course is to increase the size of the build volume. There is a hack you can do to install a larger build plate on the Select Mini, but it doesn’t seem like it would be particularly sturdy, and essentially involves rebuilding the entire X and Y axis. It seemed to me at this point I would be better off building an entirely new 3D printer from scratch.
After mulling this idea over for a while, and eventually getting inspired by Thomas Sanladerer’s guide, I decided that the MK2 design was one that I could put together fairly easily, and with the larger build plate and direct extruder system, would also possess the feature set that I felt I was lacking with my Select Mini. All of the necessary plastic parts could be printed in ABS on my select mini, and I could also repurpose some its parts in order to get the MK2 working during the long wait for parts to arrive from AliExpress.
Of course I would be unable to follow this guide to a tee, because Thomas lives in Germany, and therefore the locally sourced hardware would be in metric units. Myself being in North America where imperial measurements still reign supreme, I would have to make some changes.
Luckily the exact measurements of most of the components were non critical, so I was able to purchase most of the necessary hardware in “close enough” measurements from a local fastener supply. The only areas where this proved an issue were on the Y axis where the insets for the washers I purchased were too small, and on the linear guide rails, where I attempted to use 5/16 stainless steel rod instead of 8mm smooth rod, while still using the LM8UU 8mm linear bearings. I’m sure that 5/16 linear bearings exist, but I wasn’t able to find them online easily. I long for the day the whole world finally goes metric.
The washer issue was solved easily, as some metric hardware is available locally, so I was able to easily purchase a few washers to fill in where necessary(albeit at a premium compared to their imperial counterparts). It would have been easy enough to modify the printed parts, as the OpenSCAD files are available along with the STLs, but I had already printed them and saw this to be an easier solution.
The guide rails seemed to be working at first, but it soon became apparent that there was a bit too much slop, allowing the print bed to wiggle a bit too much during prints, significantly reducing print quality. 5/16 of an inch is about 7.938mm. I supposed I underestimated how much slop is too much, and it turns out that for this application, 0.72mm of slop is too much. I eventually decided to spend the extra money on 8mm smooth rod, ordered online.
The next consideration was the frame. I did end up ordering a CNC cut frame from china, but I knew that it would take months to arrive. So, antsy to begin putting the machine together, I chose to route a frame by hand out of MDF. This was accomplished by printing out the DXF across 4 sheets, gluing them together onto the stock, and slowly cutting along the lines with a plunge router. It took quite a long time, and I managed to cover every inch of my dad’s workshop with MDF dust, but I was fairly pleased with the result. This would serve as the testing frame until the proper cut one arrived.
The proper machine cut frame did eventually arrive from China, but much to my disappointment it was not solid aluminum. It appeared to be some sort of polycarbonate sandwiched between two pieces of thin aluminum laminate. This was not going to be as sturdy as the MDF frame, but I elected to swap it in anyways since the dimensions would be better, which could improve the smoothness of motion on the Y and Z axes, depending on how well I cut the original frame by hand. I could also fix any instability by adding braces or supports if need be.
As for the electronics, I would be using a standard RAMPS 1.4 control board mounted to an Arduino Mega 2560. Most of the setup, configuration, and assembly of the electronics are done for you when you buy a proper kit from Prusa, so I would end up being mostly on my own. Luckily I have some experience with driving stepper motors from a previous project, am quite comfortable with electronics, and am pretty well versed with Arduino, so this wouldn’t prove to be too challenging a task.
A fun little aside: Since I still had a while to wait for my stepper motor drivers, and was mostly done with the mechanical assembly, I decided to try to see if I could find a stand in for the 3 stepper motor drivers necessary to get XYZ motion up and running. Two of those were easy, as I had some higher current stepper drivers sitting around(too large to use in the final project, but more than enough to use for testing). Interfacing these with the RAMPS board was a simple task of interfacing their control pins into the pin headers where the stepper driver boards are supposed to plug in. The third required a bit more creativity.
I didn’t have another stepper driver sitting around, but I did have one of those motor drive shields for an Arduino Uno, based around the L293D quad H-bridge stepper driver IC. This is a more primitive way of driving stepper motors than the using the A4988 or similar IC included on the stepper driver boards that you’re supposed to use with the RAMPS, but the functional principle is the same. The two phases of the stepper motor are energized with specific timing in order to cause the motor to “step”. The difference is that if you use the L293D, you need to energize each phase manually using the microcontroller pins. With an A4988 or similar, all you have to do is set the direction line to a logic high or low, pull the enable line low, and send a pulse for each desired step. The chip itself takes care of the heavy lifting in terms of driving the phases of the motor.
My solution was to simply fill in the gaps between the two using the Arduino Uno. The task was rather trivial: I just had to define three of the unused I/O pins on the shield as enable, direction, and step. Then I adapted the code to execute steps in the given direction based on input from these pins.
This worked well enough for testing, but I’m sure I wasn’t getting the most out of the stepper motors this way, as I believe the method of energizing the phases is less sophisticated than with the dedicated IC. And since the driver modules are so cheap and easy to get, there’s really no reason to do it this way unless you are in a pinch. It’s also worthy of note that a standard NEMA 17 stepper motor can draw more than the rated current of the L239D IC, so the longevity of such a circuit is questionable. But it did what I wanted it to do.
Despite my fun diversions to get the printer working before I had the necessary parts, the necessary parts did eventually arrive over the course of the next few months, and I was finally ready to finish putting the machine together. Since I had already more or less completed the mechanical construction, It was simply a matter of fitting and wiring up all of the electronics.
The biggest mistake I made here was with my hot end wiring. This is the wiring that will be under the most strain, as the hot end will be moving back and forth, as well as up and down, almost constantly while the printer is in use.
I had also recently come into possession of several hundred feet of the cheapest solid core CAT5e ethernet cable money can buy. Itching to use up this enormous supply of terrible cable, I chose to take my chances and wire the fan power, extruder motor, and Z axis probe using this cable. It seemed to be working ok at first, but it eventually presented the worst type of problem when it comes to troubleshooting electronics: An intermittent problem.
Since a 3D printer is a fairly complex mechanical system as far as hobbyists such as myself are concerned, it can sometimes be difficult to track down issues as they present themselves. The first issue that presented itself was that of extrusion; or lack thereof. When I first started spitting out my first couple of test prints, I was ecstatic. I was very excited to see objects pass from the digital realm to the material one, all as a result of my handiwork. But that excitement soon turned to frustration, as the extruder would eventually stop extruding plastic seemingly at random during the course of the print. Since I would say that my amateur electrical engineering skills outweigh my amateur mechanical engineering skills, I assumed that the problem would be mechanical. What made it harder to diagnose was that the motor appeared to be skipping steps, in a way that would suggest that the nozzle was clogged or that the extruder idler was too tight. But after cleaning out the nozzle several times, and loosening the idler as much as possible, the problem persisted.
I was starting to get quite frustrated, and beginning to wonder if there was an issue with the motor or the driver board. But then I noticed something interesting: when the problem was happening, if I jostled the wires a bit, the extruder would miraculously start working again. Thanks to this, it finally dawned on me: It was my crappy wiring! I am embarrassed it took me so long to realize, as the wiring was obviously the weakest link in the chain. A common symptom of a stepper motor that doesn’t have all of its phases connected properly is that it will sort of “bump” in a direction, but never succeed in completing a revolution. This is what lead to my diagnosis of the problem being skipped steps due to a mechanical issue.
The thing about using solid core copper wire on a moving part is that copper work hardens. Meaning the more you bend it, the harder and more brittle it becomes. So the more you move the part around, the more brittle the copper gets, until eventually it breaks. Or in my case, cracks just enough to make good contact when the Z axis is close to the bed, and then become intermittent as the Z height increases.
After learning my metallurgical lesson for the day, I replaced all of that wiring with a more flexible stranded copper wire. A bundle of thinner strands of course can withstand a lot more movement without becoming brittle and breaking. After doing this, I haven’t had intermittent extrusion since.
The next issue I had was with a significant amount of vibration coming from one of the axes, but I was unable to determine exactly from where, as it was causing a rough finish on all of the surfaces of my prints. I again initially diagnosed this as a mechanical problem, and assumed that it was a problem with a loosened belt, or other loose component of the machine. I at first thought it was because of my choice to use 5/16 rod for the guide rails, but after replacing these with proper 8mm ones, the problem persisted. Again the main issue with my troubleshooting approach was the assumption that the problem was mechanical. After tightening every single belt and screw I could find on the entire machine, and without any improvement, I eventually noticed something. The extruder motor itself was vibrating quite a bit.
Though I had worked with stepper motors before, I had never used them in an application that required minimal vibration such as a 3D printer. As a result of this, I wasn’t quite sure how much was a normal amount of vibration coming from the motor. And since it was in fact stepping as expected, It took me a while to suspect it as the culprit.
It turns out the little A4988 stepper driver modules that you use with the RAMPS board have a little potentiometer that is used to set the current going to your stepper motor. I was aware of this adjustment, and from my research had found that you should generally expect to measure around 0.6v between the metal on this pot and ground, which I did with a small adjustment. As well, my assumption was that as long as you have enough current to drive the motor, there isn’t a problem.
What I didn’t realize is that you don’t necessarily want full current going to your motors in this application. While it is true that more current = more torque, you don’t always need the full torque the motor can provide. It also stands to reason that more motor current = more change in magnetic field inside the motor = more vibration. So at this point I realized that there is probably more nuance to setting your stepper current than just reading 0.6v between the pot and ground.
So I chose to test this theory by homing the Y axis, and then sending a G1 Y220 F100 command to slowly move the bed from one end to the other, and carefully adjust the stepper current while it was in motion. And, as expected, the lower the current, the smoother the motion. Of course the lower limit of this adjustment is when the motor no longer has the sufficient torque to move the axis at all, so I repeated this action on all the axes and the extruder motor until I had what seemed to be the best balance between torque and smooth motion.
The results were like night and day. It turns out that there was a lot of excessive vibration coming from all of the motors. Once I adjusted the stepper currents, the printer went from feeling like a cobbled together hobby project to feeling like a useful machine. Of course the results were not perfect, and there still appears to be a bit of ringing taking place at some point in the motion, but at this point I’m willing to say that I have a functional 3D printer that I built from scratch.
And with that, and a little bit of cable management, I was ready to call the project complete. Of course there are still lots of small tweaks to be made, and slicer tuning to get the absolute most out of it, but I am quite happy with the result.
Thanks for reading!