August 18, 2011

Some tips and tricks from my RepRap

My RepRap is no more. I’ve taken it apart to use its parts for another robot — a hybrid Mill and Printer I’ve designed, called EasyMaker. Here’s a list of some of the things I did to make my Prusa a more tolerable bot when it was still intact.

1. How to tighten a belt.

Take the ends of the belt and form small loops using zip ties. Connect the belt together by running a zip tie through the loops. This gives you a belt you can tighten on the fly.

2. How to reduce current needs/noise/skipped steps.
Use linear bearings on your smooth rods. It takes 10 for a Prusa Mendel, but the smoothness from bearings means less current needed to move your bed/print-head. I use only about 500ma for my X and Y motors, and I never skip steps on those. My Z and E motors still draw a bit of current, since bearings don’t help as much there. For my Z motors, I’ve found that using a bubble level to level the X carriage true stops me from skipping steps. On my Extruder, I’ve turned up the current and set the spring tension on my Wade’s extruder — this helps it not skip steps. Luckily for me, when I skip steps, it’s pretty obvios — I hear a sick, clicking sound. With micro-stepping from my RAMPS kit, my bot is very quiet — Here’s a video. I can also run my bot fast — the bearings enable very fast motion — I’m limited in the max speed of my extruder.

3. How to calibrate your extruder.
I was writing a PERL wrapper around Skeingforge to modify the G-Code to calibrate my Prusa. It was a very simple script, and it worked for large prints, but not small. Then I learned how to calibrate my extruder(E). The method is simple.

Take a clear, straight drinking straw and cut it to 100 mm. Mark it at 25mm, 50mm, and at 75mm.

Take off your hot end. (Though you can skip this step if you don’t mind a little error)

feed 50 mm of filament.

Use the straw to see how much you fed. If you fed exactly 50, great! If not, modify your extruder steps per unit in the firmware. For sprinter, it is the last element of the float axis_steps_per_unit[] array in Configuration.h. You multiply your existing value by a fractions — 50 in the numerator, and the measured movement in the denominator. So, if I tried to feed 50mm, but really get 60mm, I would multiply the final element of the array by 50/60 ( aka 5/6th ).

Recompile and upload the changes to your electronics.

Repeat the last two steps until you get exactly 50.

Load your hot end, heat it, and load filament.

Feed 50mm of filament.

The extruder should feed exactly 50mm of plastic. If you don’t, you’re skipping steps. Increase current to your extruder motor, and/or change the tension on your extruder 608 bearing.

5. How to calibrate any other Axis (X, Y, Z).
Stepper motors work by having a single step being some degree of rotation. Most commonly, steppers are 1.8 degrees per step. You need to determine how many steps you need to move your motor 1 millimeter on that axis. Most people sort of guess, or use the defaults. But, the method to calculate this turns out to be really easy.

figure out how many steps is 1 full turn of your motor. This is easy — take 360 degrees and divide it by your angle per step. Most motors are 1.8 degrees per step, so for most motors, that answer is 200. Some motors are 0.9 — hence the answer is 400.

Adjust for micro-stepping. If you have micro-stepping, you’ll need to multiply by the inverse of the microstepping ratio. So, 1/16 microstepping means you have to do 16 micro-steps to get 1 full step.

An example for my Motor. I have a 1.8 degree stepper motor with 1/16 micro-stepping(common on RAMPS) you would take [360( the degrees of a circle)/1.8(the angle per step from your data sheet)] * 16(The inverse of the micro-stepping ratio). 360/1.8 = 200. 200 * 16 = 3200. Viola — that’s how many steps for 1 rotation of my motor.

See how much your axis moves for 1 full turn of your motor, in the unit of measure you’re using.

Divide the the steps for a rotation by the amount moved.

Enter that number into your firmware.

An example from my Z Axis. My Z axis is a screw axis, so a full turn moves about 1.25mm. Hence, I take 3200/1.25 = 2560. That’s my steps per unit. You can do more than 1 full turn if it’s small — try 10 full turns on something like the Z axis, then divide the amount moved by 10. So, 10 turns is 12.5mm. Which is easier to measure, especially if you have calipers. The X axis on mine does about 40mm for a full turn — so that comes out to around (3200/40 = 80) steps for 1 mm.

5. Picking and loading a software stack.I used to use the SF-ACT modified skeinforge to generate G-Code from a model, pronterface to send that G-Code to the robot , and sprinter to run the G-Code on the robot as my software stack. Now, I use Slic3r to generate, Pronterface to send, and Marlin to run. Reptier works really well as a sender, but is a pain to get working on a Mac. However, if you have a Linux or Windows box, then it is a good choice instead of pronterface.

6. Leveling the print bed.
One trick, and this should just become standard design for the Prusa, is to mount the screws that link your frog-plate to your print bed upside down, and use wing-nuts on the top side to secure it. This way, you don’t need a screwdriver to adjust the bed’s level — just turn the wing nuts. Removing the bed — say to remove a very well stuck on, large object, also become easier this way — the upside down screws become posts that hold your springs in place, even with the bed removed.

7. Mount linear bearings with zip ties.
I use linear bearings in my prusa, to reduce current, help prevent skipped steps, and for better speed/quiet. I’ve found that holes cut into your mounts combined with zip ties provides a nice, easy to remove solution. It allows for relatively quick tool-head changes, though it does turn zip-ties into a consumable. Luckily, zip ties are cheap and easy to get.

8. Upgrade to an EasyMaker.
Really, anyone with any form of RepRap should upgrade it to an EasyMaker. The design is open source, and up on ThingiVerse. Still a prototype, and already far better than a Prusa, MendelMax, Makerbot, etc…