50 weeks later: Still no final spindle motor

IMG_0644.JPGI’m still working on the final spindle (motor) for the Pleasant Mill.

As mentioned before, the Dremel as spindle motor works more or less fine, but it’s way too loud for my ears! That’s why I bought a big-ass brushless motor back in mid-2011 as kickoff for a new, self-made spindle.

I found this blog post (Google translation) on a DIY spindle and decided to use it as base for my build. I even found a PDF with detailed drawings of such a spindle on this site (Google translation).

So the build began:

I bought a piece of V2A steel stock on ebay and machined the spindle body on my lathe. It was the first time for me to machine steel. Definitely a whole different deal than the aluminum and brass stock I work with normally…

The main work was to drill the 17mm through boring into the V2A. Here’re the tools I used for this job (from left to right):

IMG_2520.jpg

10mm…

IMG_2517.jpg

17mm…

IMG_2518.jpg

After the tough job of drilling the hole, the bearing seats were machined with the boring bar:

IMG_2522.jpg

IMG_2526.jpg

I hadn’t a thread cutter tool for machining inner 19mm fine pitch threads a the time. So I paused the project until the ordered tools were delivered…

Still missing the inner thread:

IMG_2536.jpg

The 6001 ball bearings fit. However, I later replaced the RS type bearings with Z type bearings.

IMG_2533.JPG

And that’s my trash can after boring the V2A stock:

IMG_2527.jpg

A week later or so, the thread cutting tool arrived. Here’s the spindle housing with the fine pitch thread. The threaded ring later holds the bearing in place. It’s made out of aluminum.

IMG_0646.JPG

IMG_0648.JPG

The rest of the assembly.  I bought the ER11 100mm spindle on ebay. The only modification was the flattening at it’s end for fastening the timing wheel with the set screw.

The distance rings were machined out of brass by me. The timing wheel’s center hole was re-bored to fit on the spindle shaft and a set screw was added.

IMG_0650.JPG

Here’s the lower part of the spindle after assembly. The lower brass distance ring is also visible:

IMG_0651.JPG

And the upper part of the assembly. Again, a brass distance ring sits between ball bearing and the rest of the assembly: timing wheel, another brass spacer and finally a washer and a bolt. The spacer and bold are for adding some pretension (“Vorspannung”, not sure if this is the correct word for it in English) on the bearings.

IMG_0654.JPG

Finally, I machined an eccentric ring for mounting the motor in the retainer clamp. By rotating the eccentric ring, the disance between spindle and motor axis can be varied by some mm to adjust the tension of the timing belt.

IMG_0655.JPG

I’m not particularly proud of the retainer clamp itself. I tried to build it from 10mm sheet aluminum without proper tools. This resulted kind of a “substandard” piece on the whole assembly. As soon as I can get access to the proper tools, I’ll build a better, cleaner version of the clamp…

Anyhow, here’s the complete spindle with the  2.5kW 1000KV brushless motor:

IMG_0105.jpg

The motor is most likely oversized for this. But i thought it would be a good idea to run motor and speed controller (ESC) way under their ratings in order to run both for much longer time as they usually do in their RC world habitat.

And then the real problems start: How to run such a motor not from LiPo batteries but from a power supply?! I read all kinds of warnings on this in the internet. There were some guys, saying it would be ok to simply connect a brushless motor with it’s ESC to a power supply, but a lot other guys saying that the power supply won’t last for long.

Since I didn’t want to blow up my high current power supply by connecting an RC world ESC to it, and also since I read, that running a brushless motor without hall sensors won’t work very well with quick changing loads on the motor, I started to develop my own brushless speed controller, using three hall sensors I added to the motor’s housing for closed loop operation. The power stage is driven by an Arduino. I’ll write some more details on this in my next post.

Meanwhile I bought a smaller brushed DC motor on ebay. This motor has a rotary encoder already mounted to it’s end, so I thought, it would be nice to try some PID speed controlled spindle driving with it.

One problem was, that the motor’s spindle has a diameter of only 4mm while the timing wheels all have a 6mm center hole. So I machined a special spindle adapter out of brass:

IMG_0551.JPG

IMG_0554.JPG

I also needed a second eccentric ring for the motor retainer:

IMG_0656.JPG

With the new DC motor I was finally able to use the spindle for the first time. It worked well and was considerably quieter than using a Dremel as spindle motor.

However, the brushed DC motor is definitely too weak for the job. I used it to drill holes in a PCB, but only for the smaller drills. Drilling the 3mm mounting holes in the corners of the PCB failed (the spindle simply stopped…).

Here’s a video of the brushed DC spindle in action. The video also compares the sound level of my former Dremel spindle to the new spindle:

Pleasant3D is now open source

I hadn’t too much time for developing Pleasant3D lately. Sorry for that!

However, I did some work on Pleasant3D in the last year:

  • Better (more performant) versions of the Quicklook  plugins (for previewing STL and GCode files in the Finder)
  • An experimental implementation of a DAE file import plug-in
  • Experimental support for printing directly from Pleasant3D (still not functional, but the infrastructure is there…)
  • Support for different devices (3D printers, CNC mills etc.)

… and some other stuff.

Unfortunately, I currently don’t have the time to develop, test and stabilize the current code on my own in order to release a new binary version of Pleasant3D.

So starting today, I open source the complete code base of Pleasant3D:

https://github.com/zaggo/Pleasant3D

(The slicer plugins of Pleasant3D were open source from the beginning. I’ll mark the old open source BitBucket repository as obsolete.)

I’d be very happy, if some of you 3D-printing (or CNC-milling) Mac developers out there would help with the further development of Pleasant3D!

Please note, that the published sources aren’t in a fully tested state. As far as I can tell, the project builds and runs after a clean ‘clone’. Be sure to use Xcode 4 and to choose “Pleasant3D/32-bit” as build scheme.
However, there seem to be some issues with the Quicklook generators in this version (they seem to run in Debug mode, but crash when running in the real world…).
Also the OpenCL slicer seems to be broken in the current version.

The  stable version of Pleasant3D (v2.0) is (and will be) still available as pre-built binary release: Download Pleasant3D

Flat Teardrop

The teardrop is around in the 3D printing scene virtually forever. It’s even part of RepRap’s icon.
This geometric shape is used whenever an object with horizontal holes is printed. This avoids overhangs greater than 45° at the top of the hole, which are not (or at least not easily and clean) printable on FDM printers without support material.
Some people use teardrops only for larger holes (>4 or 5 mm diameter), since the overhangs are not such a big problem on smaller holes. While this is generally true, I tend to use teardrops even for smaller holes (3mm or even 1mm), since it turns out, that even these tiny holes look cleaner when printed in teardrop shape.
It always was kind of tricky to design objects containing teardrop shapes in classic CAD apps, since the teardrop shape isn’t a standard primitive in those applications (at least not in those I used).
This luckily changed with the release of OpenSCAD and it’s ability to use user written libraries.
At the latest with the release of Randy Young’s great Libs.scad library, using teardrops instead of cylinders for punching holes into objects is easy as pie.

Here’s the code of teardrop module from the Libs.scad library. I changed the Libs.scad code on my computer to use the polygon code instead of whosawwhatsis’ projection code, since the projection code takes forever to render in CGAL mode.

module teardrop(radius=5, length=10, angle=90) {
	$fn=resolution(radius);

	rotate([0, angle, 0]) union() {
		linear_extrude(height = length, center = true, convexity = radius, twist = 0)
			circle(r = radius, center = true);
		linear_extrude(height = length, center = true, convexity = radius, twist = 0)
			polygon(points = [
				[radius * -cos(-45), radius * sin(-45)],
				[radius * -cos(-45), radius * -sin(-45)],
				[(sin(-135) + cos(-135)) * radius, 0]],
				paths = [[0, 1, 2]]);
	}
// This code take forever to render:
// teardrop module by whosawhatsis <www.thingiverse.com/thing:3457>
// Creative Commons LGPL, 2010.  I added default values and resolution code
/*	rotate([0, angle, 0]) union() {
		linear_extrude(height = length, center = true, convexity = radius, twist = 0)
			circle(r = radius, center = true);
		linear_extrude(height = length, center = true, convexity = radius, twist = 0)
			projection(cut = false) rotate([0, -angle, 0])
			translate([0, 0, radius * sin(45) * 1.5])
			cylinder(h = radius * sin(45), r1 = radius * sin(45), r2 = 0,
					center = true);
	}*/
}

The problem with teardrop holes is, that they need considerably more space. This can be a real problem, when the main object is limited in size for one reason or another.

For example, this is a ball bearing retainer:

 

When simply using teardrops instead of cylinders for the holes, the result would be this:

As you can see, the larger footprint of the teardrop shape becomes a real problem with the larger holes in front and back of the retainer. In this case, the structural stability might still be good enough, since the smaller center bore  is still closed at the top. But often teardrop holes just aren’t an option unless you significantly re-design the main object (and usually make it larger).

Well, it turns out there is another option after all:

Introducing the Flat Teardrop

The solution is simple. Although overhangs > 45° are a problem in 3D printing, reasonably short bridges aren’t!

So why not just cut off the dead space in the tip of a teardrop?

 

 

 

I wrote a new module in OpenSCAD, called flatteardrop. This module is derived from the original teardrop module in Libs.scad:

module flatteardrop(radius=5, length=10, angle=90, luck=0) {
	$fn=resolution(radius);

	sx1 = radius * sin(-45);
	sx2 = radius * -sin(-45);
	sy = radius * -cos(-45);
	ex = 0;
	ey = (sin(-135) + cos(-135)) * radius;

	dx= ex-sx1;
	dy = ey-sy;

	eys = -radius-luck;
	dys = eys-sy;
	ex1 = sy+dys*dx/dy;
	ex2 = -ex1;

	rotate([0, angle, 0]) union() {
		linear_extrude(height = length, center = true, convexity = radius, twist = 0)
			circle(r = radius, center = true);
		linear_extrude(height = length, center = true, convexity = radius, twist = 0)
			polygon(points = [
				[sy, sx1],
				[sy, sx2],
				[eys, ex2],
				[eys, ex1]],
				paths = [[0, 1, 2, 3]]);
	}
}

Since the top is cut at radius height of the theoretical cylinder inside the teardrop, it might be a problem when the bridged part at top of the flat teardrop sags a bit during printing. This might happen when the bridge gets longer, i.e. on larger teardrops.

As a countermeasure it’s possible to add a little bit height to the cut “for luck”. To do so, set the value of the luck parameter to the additional height. However, the default value of this parameter is 0 and simply can be omitted in most cases.

The module makes use of the resolution function of the Libs.scad library. If you add the flatteardrop module to this library (as I did on my computer), it just works. If you plan to use the flatteardrop module separately, you might want to comment out the line

$fn=resolution(radius);

or set $fn to a fixed value (e.g. 36).