August 20, 2013

Building a 3D Printer

I've decided to do it. I'm going to join the ranks of those who have a 3D printer in their homes. While having the ability to print custom parts for future projects will be a definite benefit, I must say that the lion's share of the fun will be in the making of it.

Now, I know there is no shortage of plans and designs available for DIY 3D printers contributed to by a community of makers, hackers, hobbyists, etc., I've decided not to go with an existing design. My schooling focused on robotic kinematics and control as well as mechanical design. It seems a shame not to put that learning to good use. Perhaps I'll blaze some new trails in the process.

I plan to break away from the ubiquitous rep-rap concept. While it's a cool idea on paper to have a self replicating machine, I don't think that 3D printed parts have the accuracy or rigidity required to be used as primary components in this type of a machine. Any inaccuracies introduced by geometry, sloppy fit or flexing is reflected or amplified in the printed part. Instead, I'll be using a mixture of off-the-shelf and machined components. Of course it will end up costing more, but it's a trade off I'm willing to make. I do have a goal to keep it below $1,000. Compared to some of the higher end kits available ($2,200 for Makerbot Replicator 2, $1,600 for MendelMax 2.0) it isn't too bad.

Additionally, and I expect this to be somewhat controversial, I won't be using any stepper motors on this printer. I know they are the de facto motor for DIY printers, but something about open loop control on a robot just doesn't sit well with me. Instead, I'll be using brushless DC motors with full closed loop control for (hopefully) greater speed and accuracy. Ideally, I will be able to program them with an operational space controller, which basically means that each motor will be aware of all the others, and if one gets snagged or otherwise held up, the others will react to it so as not cause an error in position.

In addition to improved control schemes, going with DC motors will allow for smaller, lighter motors in place of their clunky stepper counterparts. This will be most beneficial for the filament extruder--keeping the weight of the moving head as low as possible will improve both speed and accuracy. Since stepper motors do not have any feedback, they rely on high torque output to ensure that the actual number of steps achieved matched the commanded number of steps. In essence, you have a severely oversized motor. Going with a DC motor allows for better use of available resources, but it does come with its own share of drawbacks: cost and complexity. But again, building is more than half the fun, so why not make it exciting?

For the printer design, I decided to go with a delta platform configuration (like this). Aside from being entirely captivating to watch, this platform does offer some advantages over the basic cartesian (XYZ) platform:

  • The printed part is stationary at all times--no need to limit speed or build height to keep the part stable.
  • The three axes each have a more fluid motion, minimizing the effects of taking sharp corners.
  • Accuracy is greatest at the center of the build platform, so small parts can have tighter tolerances.
  • It looks freakin' awesome.
Of course, there's the whole complexity thing again. But as it turns out, the inverse kinematics (that is, what axis positions are needed to give the desired XYZ coordinates?) aren't that difficult, so basic control won't be much, if any, harder than a cartesian robot. The forward kinematics (my axis positions are such, what are my XYZ coordinates?), required for the operational space controller mentioned above, are more involved and will take a fair amount of work to get through. But that's the fun part.

As for electronics, I haven't given that much thought at this point. For the brushless motors I know I'll need different motor controllers than are used on any of readily available printer plans. A basic ESC won't cut it since those are designed for speed control, not position control, so a custom control board may come into the mix. For the processing I'll probably need something with quite a lot more umph than an Arduino. An Arduino Due would probably work in terms of processing power, but I'd like more external interrupts than that one has to offer. The Maple Mini from LeafLabs looks promising.... We shall see.

So that's my high level plan. It's going to be a complex project, and will probably take a year or two to complete. I'll try to post updates of any progress I make as it happens. Wish me luck!

Posts in this series:


  1. You might be interested in looking at this, he has dome some work with 3D printer G-codes and his driver board is relatively inexpensive

  2. This site was... how do I say it? Relevant!! Finally I have found something that helped me.

    Thanks a lot!

    Here is my webpage sujith

    1. Glad you like it. I'm currently working on brushless DC motor control. I hope to have a post up about it before the end of the year.

  3. To be honest, I don't think you should go DC + feedback system just for the the sake of having "better" accuracy. 3D printers with no feedback from the steppers has proven to have robust quality and acceptable precision tolerance.

    It is more the nozzle diameter that will mainly dictate the tolerance of your 3D printed parts steps. Missing/extra steps can be corrected in the algorithm.

    I can't tell for the speed, since we have at our university 3D printers with fast moving head extrusion. The printed results weren't that bad.

    IMHO, the only reason I would ever go with closed loop, you don't want brick size of motors,need lighter weight or having the fun doing challenging stuff. Things you have already mentionned.

    Regarding the electronics stuff, you might want to try scrapping optical encoders from the Inkjet printers. These encoders alone could cost 3-4x the price of steppers. They may give you some of those crazy ideas.

    1. I agree that it wouldn't be worth the effort to go with DC + feedback just for accuracy. Stepper motors have proven to be sufficiently accurate for 3D printers. Just because you have closed loop control doesn't guarantee the results will be better, either. There's a significant amount of work that needs to go into tuning the control loop, modeling the system, etc.

      The real advantage like you said is that you get to use much smaller/lighter motors. I initially thought they would be cheaper, too, but I proved myself wrong on that front.
      And then of course there's the fun/educational factor of it all (the real motivation behind this project).

      As for the encoders, see the 3D Printer Motor Control - Part 1 post (and soon to come Part 2). I've found a way to get the required position feedback from hall effect sensors on the motor, negating the need (and cost) of an external encoder.

  4. I would simply say to you all “awesome information” eddm printing miami