I’ve had to do a lot of experimenting and tweaking in order to get decent prints out of my Printrbot (NOTE: Just to be clear, the Printrbot I built was not from a kit from Brook Drumm. I self sourced the parts, including the printed bits, which were given to me by a friend. You may or may not run into the all of the issues I had, but my tips below are generally applicable to Repraps of any kind, as well). Initially, my prints were wiggly unless I printed very slowly, at 15mm/sec. After tweaking, my prints at 30 mm/sec look better than they used to at 15 mm/sec, and now my 15 mm/sec prints look even better.
Below is one of my best prints before tweaking; note the squiggly lines, which are caused by vibration, and binding bearings on my y-axis:
My Printrbot from the Printrbot’s Kickstarter Campaign was supposed to arrive in February. Unfortunately, due to the huge number of supporters they received, the schedule has been pushed back, and I doubt I’ll receive mine until late May. In the meantime, I’ve been getting antsy waiting for mine to arrive, so I decided to go ahead and build one from scratch. The Printrbot that I ordered is actually the laser-cut model. John Seaber of JDS Labs was kind enough to send me the printed bits and a complete extruder for the RepRap version of Printrbot.
I already had most of the other parts needed to build a Printrbot, except for the threaded rods and miscellaneous nuts and bolts. I had 4 used steppers gutted from laser printers (which I bought from Wildseyed), and a stepper for the extruder plus smooth rods from Epson Stylus Color 600 ink jet printer that has been gathering dust for more than 10 years. There is a decent Printrbot BOM on printrbottalk’s wiki; a few bits here and there are missing, but it still saved me a lot of time. The nuts & bolts were all easy to find at a local hardware store, except for the M3 screws. The M3 screws were the only parts I had to buy for which an SAE equivalent simply wouldn’t do, since they had to mate into threaded holes in the motors. I ended up wasting a whole afternoon going to several hardware stores, and almost gave up, before finally finding them at Ace Hardware. It’s amazing how difficult it is to buy metric parts in the US.
Since I had already been experimenting with my own variations on Wildseyed’s Hot End, I already had a hot end built and ready to go. My modifications on Wildseyed’s design are 1) it can be completely dissassembled for cleaning 2) the brass barrel is shorter, has less mass, and screws on 3) I’m using a radial resistor embedded in the aluminum block, rather than attaching an aluminum-cased resistor to the outside.
Unfortunately, the extruder I received was set up for a different mount, so I had to adapt it. A trip to the hardware store yielded a PVC pipe elbow, that, as luck would have it, had the exact inside and outside diameters to form an adapter for my hot end. I cut out a small ring, and attached the hot end with M3 grub screws.
One thing I learned while assembling this printer is that LM8UU bearings need precise alignment, or they will bind very badly. The bearings in the Printrbot’s x-carriage are press fit, which is great for simplicity, but can cause headaches if the parts aren’t printed perfectly. Initially, my carriage was binding very badly, and would barely move. Even worse, the LM8UU’s were gouging deep grooves into my smooth rods. This is because of two factors 1) the spacing of the x-carriage smooth rods was slightly different between the left and right sides of the carriage, due to imperfections in the printed rod holders and 2) the holes in the plastic x-carriage piece I received were not perfectly parallel. After some cleanup of the holes with a rasp in my drill press, I got everything to line up, and the carriage now moves smoothly.
I had a similar problem with the smooth rods of my z-axis. The rods on the y-axis ride on 2 LM8UU’s which are stacked on top of each other, and press fit into a printed plastic block. Again, due to minor imperfections in the print, the stacked bearings didn’t line up perfectly, and my z-axis bearings were binding quite badly against my smooth rod. I was lucky that I was able to pry them out, because they were a very tight fit. Again cleaning up the holes with a rasp on my drill press fixed the problem.
All in all, there was a maddening amount of tweaking and coaxing involved in getting my Printrbot assembled and calibrated. My x-motor’s shaft was a bit to short so I had to cut down its mount a bit. This in turn, caused problems with the alignment of the belt and idler bearing. The z-motor mount dimensions were a bit off, so the threaded rods were tilted inwards, rather than parallel to the z-axis smooth rods. I had to re-drill the holes to achieve the proper alignment. The couplers between the z motors and threaded rods didn’t quite fit right, and caused the rods to wobble. I solved this by switching to aluminum couplers. The crimp on pins that I bought from Ultimachine didn’t fit into the Molex hoods I bought, so I had to improvise the connections to my Printrboard.
I decided to use CAT-5 for wiring my Printrbot. It’s cheap and has a jacket, so cabling is tidy. Since the cable has more conductors than I need, and the gauge of the wires in CAT5 is relatively small, I used one twisted pair for each connection.
I still need to attach end stops, build the hot bed, and get a 12V power supply with higher output to power the hot bed. In the meantime, I was itching to crank out some test prints. The problem is that it’s very difficult to get the molten ABS to stick to any cold surface. I finally decided to try something crazy … print ABS on ABS. I printed on a piece of the Epson Stylus Color 600 printer from which I salvaged the motor that I’m using for the extruder. The first object that I printed was a replacement foot for my Vitamix.
My Printrbot is running Marlin firmware, which I adapted to run on Printrboard, and I’m using either Pronterface and Repetier host software, depending on my mood. Currently, I’m using Slic3r to convert STL’s to GCODE. While calibrating the printer, I found that the carriage and build plate vibrate quite a bit, and the motion is not completely smooth. This wobbling can be seen in my test prints. Hopefully, the excessive vibration is due to a modification that I made to the design, as opposed to an intrinsic problem in the Printrbot. Because my rods came in 3′ lengths, I extended all of the rods from 10″ to 12″ long.
Here is my first print, the Vitamix foot:
I was just happy that it came out well enough to use. At this stage, there was still a lot of tweaking to do … refining the calibration, adjusting the temperature, tweaking the parameters for Slic3r. After a lot of experimentation and failures
I am finally able to get some decent prints. In a future article, I will discuss my current printer settings. I made the mistake of selecting a very challenging object as my second print, Surveyor’s Cat Toy.
Here is my best attempt so far:
I am now in the process of printing an extruder for a friend. My best print to date is the small gear on the left:
Both of the gears are printed with .2mm layer height. The only difference is that I slowed down the perimeters from 30mm/s to 15mm/s in order to get rid of the vibration. Here is my Printrbot attempting to print the large extruder gear:
The print actually failed because 1) my extruder jammed, due to a stray piece of plastic which fell into it and 2) my ABS printing surface started warping too much. I need to get my heated bed working before I can print large parts.
As of this writing, the official version of Marlin firmware from github does not yet work with Printrboard. Printrboard is a fork of Teensylu, designed by the folks at Printrbot. Printrboard isn’t yet available for purchase, but since the design is open source, anyone can download it and get the PCB’s manufactured themselves. Sprinter is currently the only RepRap firmware works with Teensylu and Printrboard out of the box. I am now successfuly running Marlin on my Printrboard. Below is a video of Printrboard virtually printing a Printrbot with Marlin:
Last month, I submitted an issue with ErikZalm to get the compile errors fixed when compiling Marlin for Teensylu. The main branch of Marlin now compiles for Teensylu by setting MOTHERBOARD = 8. Unfortunately, this build setting won’t work with Printrboard, because some of the pins are different. Also, there is a kill function that Marlin calls if it detects certain things like a shorted thermistor, etc… but it’s not able to send the error messages back to the host, so it looks like your board is just dead.
I think Erik is too busy right now getting V1 out the door to deal with making fixes for a couple of not so popular boards, so I’ve forked Marlin on github with my fixes for making it behave nicely with Teensylu and Printrboard. You can download it here: lincomatic/Marlin.
For Firmware Hackers Only
For those who want to know what’s special about my branch of Marlin, it has to do with the mappings of the I/O pins. The code in Marlin has two different ways to access digital I/O pins: 1) the Arduino digitalRead/Write() functions 2) fastio – there are macros and pin assignments in fastio.h. In ErikZalm’s Marlin branch, the pin numbers are different between Arduino and fastio functions, which leads to confusion and bugs. What I have done is use the digital pin definitions in Teensyduino’s core_pins.h and updated the pins in fastio.h to match them. This way, a call to digitalRead(28) is equivalent to _READ(28).
in pins.h, analog pins use ADC numbering instead of digital pin numbering. Therefore, even though B_THERM -> F0/ADC0 and E_THERM -> F1/ADC1, we are using them as ADC pins, so B_THERM=0 (ADC0) and E_THERM=1 (ADC1).
Printrboard uses some pins that aren’t supported by Teensyduino, since they aren’t exposed in the Teensy hardware. Therefore, those pins aren’t listed in core_pins.h. I have added them to fastio.h, so they are accessible only with fastio macros. They are digital pins 46 and 47 see the “//– Begin not supported by Teensyduino
” section of fastio.h
XSTEP = physical pin 51. Looking at the AT90USB1286 spec sheet, pin 51 = PA0 (AD0)
in core_pins.h, #define PIN_A0 28
X_MIN = AT90USB1286 pin 9 = PE3
core_pins.h doesn’t have a definition for PIN_E3, because the pin isn’t accessible in Teensy++, so we can’t talk to that pin at all with the Arduino functions. However, it’s in fastio.h:
//– Begin not supported by Teensyduino
//– don’t use Arduino functions on these pins pinMode/digitalWrite/etc
#define DIO47_PIN PINE3
#define DIO47_RPORT PINE
#define DIO47_WPORT PORTE
#define DIO47_PWM NULL
#define DIO47_DDR DDRE
I have been somewhat intrigued by the RepRap project, an open source 3D printer movement, for several years. However, wasn’t motivated enough to jump into the fray until late last year, when I saw Brook Drumm’s Printrbot on Kickstarter.
With only about 1 hour left before funding closed, I pledged $500 to get a Printrbot kit. While I could have started from scratch, and built a Prusa Mendel, after reading about how much tweaking is involved in building and setting up a RepRap, I decided to start with a Printrbot – a cute, compact, and simple design, and the most inexpensive RepRap at the time. Printrbot’s Kickstarter was a smashing success. They raised an astonishing $830K. Unfortunately, the gigantic amount of orders they received means that mine will take a little longer to get to me than I originally anticipated. So, I’ve been immersing myself in the intricacies of the electronics, firmware, host software, and mechanical aspects of RepRap for the past couple of months.
There are a variety of popular controller electronics for RepRap, the most popular being RAMPS. The electronics are one of the largest costs of building a RepRap. Although RAMPS is convenient, because it’s based on an Arduino Mega, I like the idea of having a single dedicated board. The Printrbot folks have designed their own controller board, which they call Printrboard. Although Printrbot is not yet selling Printrboards, the design is open source, and thus, I was able to obtain one before their release.
Kang, a fellow RepRapper from Seoul, Korea, built a few Printrboards and sent me one to play with.
Printrboard is a fork of Teensylu, an AT90USB1286/AT90USB1287 based RepRap controller. I like the fact that these boards are based on the AT90USB128x MCU’s because they have built-in full USB support, eliminating the need for an external serial->USB bridge IC; additionally, the native USB support means that communication with the host computer is blazingly fast – 12Mbps rather than 115200kbps.
There are a few notable differences between Printrboard and Teensylu. Printrboard is a single board solution. First, Printrboard adds an integrated SD card reader. This is handy for printing while untethered to a computer. Teensylu has I/O pins which can be used to easily add an SD card reader.
Second, the stepper motor drivers are integrated onto Printrboard’s PCB, while Teensylu uses plug-in Pololu/Stepstick carriers. The advantages of integrating the stepper drivers onto the main PCB are reduced cost and compactness. The downside is that it is not uncommon to blow up a stepper driver IC, so having them soldered in means if one goes bad, the whole board is unusable.
Third, Printrboard uses Allegro A4982’s in a 24-TSSOP package, while Pololu/Stepstick use the Allegro A4988 in a 28QFN package. The TSSOP package is considerably larger, and has a wider pin pitch, which makes reworking the board easier if one of them blows out; the 28QFN is very tiny and not for the faint of heart. The other difference between the A4982 and A4988 is that the A4982 only supports full/half/quarter/sixteenth stepping, while the A4988 also supports one eighth stepping.
Some other minor differences between Printrboard and Teensylu are that while Printrboard only supports a 12V2 ATX power input, Teensylu gives more power options. Also, Teensylu has a large USB-A socket, while Printrboard uses a micro USB-B socket.
I am diving into figuring out how to load Marlin RepRap firmware into Printrboard/Teensylu, to keep my end of the bargain with Kang. A series of articles will follow with my findings.