I use a Printrbot Simple Metal to prototype product ideas and make lots of other little objects for use around the house or on the electronics bench. I chose this printer because the size was right for me, the price was good, the design seemed elegant, and its open software and hardware would allow me to hack it to suit my needs.
One of those hacks I've completed recently is the installation of a heated print bed and an upgraded hot end heater cartridge. A heated print bed helps prevent curling and warping. When a part is sitting on a cold print bed with hot plastic being applied on top, there is a significant temperature gradient within the part. Because plastic shrinks as it cools this can be a big problem, especially with plastics like ABS that shrink more than PLA. The result is that the corners of the object will pull off the bed and warp.
I looked at a few different ways of adding a heated bed to my printer. One of the first ideas I had was to just heat the existing aluminum build plate. I picked up some nicrome wire and kapton tape. I was planning to just tape the nichrome wire to the bottom of the build plate, run some current through it, and voilia.
I started to think twice about this idea when I realized that the build plate is mounted on plastic supports and also connects directly to the rubber x-axis drive belt. I'm not sure what temperature those parts can withstand, but I decided not to chance it.
Printrbot sells a heated build plate. It's the right size and it's thin, so it won't reduce the max build height by much. It's just a simple printed circuit board with traces running back and forth on the back of it. This seemed like a better option, so I ordered one and abandoned my original idea.
I connected the build plate's power and sensor cables to the printer's controller board, fired it up, and...
it destroyed the power supply. The power supply that comes with the printrbot just isn't beefy enough to handle all that current and unfortunately it burns out rather than gracefully shutting itself down. I went off to Amazon again to purchase an ATX Power Supply, which is cheap and has plenty of juice.
With the power supply issues sorted out, the heated bed worked! However, it was pretty slow to heat up. The wattage was just too low to heat quickly and I soon got tired of waiting for it to warm up before every print.
There are two ways to increase the wattage of a heating element. You can increase the voltage, or decrease the resistance. Looking at the printrboard schematics, it appears that it could handle a somewhat higher voltage. However, I wouldn't be able to use the ATX power supply that I just switched to. Other power supply options in the voltage/current range I needed were also very expensive, since they aren't commodity PC parts.
So if I can't increase the voltage, I need to reduce the resistance. The heating element in this case is just a PCB trace that snakes back and forth on the back of the heated bed. The resistance of the element is proportional to the length of the trace. The normal way to hook it up is to connect +12V to one end of the trace and GND to the other. If instead, however, we connect +12V to the middle of the trace and GND to both ends, we effectively have two resistors in parallel, each with half the resistance. That makes the total resistance 1/4 of what it was originally, which increases the wattage by a factor of 4. All I had to do was scrape off the solder mask in the middle of the trace and resolder the wires.
This worked... a little too well. With the default settings the bed would heat up very quickly but then repeatedly oscillate as it overshoots the target temperature every time the heater kicks on. I needed better temperature control.
I dug through the firmware source code and found that PID control for the heated bed is present, but disabled by default. To enable it, I only had to uncomment "#define PIDTEMPBED" in Configuration.h. Getting set up to build the Marlin firmware source and flash the printrbot is a bit of an ordeal though, so I'll have to save those details for another post.
Once PID control is enabled, though, you can tune the PID parameters by issuing gcode commands in Repetier. I found that these parameters worked fairly well for me: Kp = 70, Ki = 14, Kd = 90.
You can check the current pid values with: M304
You can set them by issuing: M304 P70 I14 D90
While I was at it, I upgraded the heating element in the extruder. The one that came with the printrbot was 25 watt. I swapped it with a 40 watt heater and adjusted the PID parameters. I found that Kp=30, Ki= .35, Kd=1 worked well for me.
To get extruder pid values: M301
To set pid values: M301 P30 I.35 D1
The M301/M304 command just set the PID constants in memory. When the printrbot is turned off, the values are lost. Fortunately, you can store the current values permanently in the printrbot's eeprom by issuing the gcode command "M500".
Now both the heated bed and extruder heat up quickly and accurately maintain their temperature while printing. Warping and and curling with PLA are things of the past and ABS prints well too!