Thursday, 21 January 2016

Mendel90 GitHub catch up

I finally found time to update GitHub with some Mendel90 changes that I have had in the works for a long time. The problem with releasing them sooner was that they were all not quite finished and / or would make unintended knock on changes to the kits I was producing. In particular the changes I did to make a Huxley90 in a hurry for the TCT show and the E3D mods kindly contributed by needed a lot of work to merge.

I also updated to the latest version of OpenScad. The upside was that hull and some of the 2D operations are much faster. I was also able to replace all the calls to minkowski with offset as I was only using it for 2D offsetting. The net result is it is now four or five times quicker to generate the preview and the STL files. The downside is that the 2D sub-system now uses fixed point coordinates but the rest of OpenScad doesn't. This makes it difficult to get 2D and 3D geometry to match up. For example, an extruded circle now has slightly different vertices to a cylinder of the same size. This created a few degenerate triangles requiring that I changed the way I constructed some objects in order to get nice clean STL files.

The solution in the case above was to make the cylinder slightly bigger than the circle used to make the pointer.

On the up side it seems OpenScad has got better at handling unioning exactly coincident faces since I first wrote Mendel90, so I could remove some of my small offset bodges to avoid z-fighting.

Another benefit is that the X end brackets now slice correctly in Slic3r, as the bug that caused internal faces to point the wrong way has now been fixed. Skeinforge doesn't care about face orientation, it just counts edges to work out what is inside and what is outside. Other slicers got confused and filled in the nut cavity.

Along the way I discovered that, although OpenScad now has trig functions that are accurate for multiples of 90 degrees, etc., it doesn't use them in rotate, or vertex creation for circles and cylinders. It converts to radians and uses the library trig functions. Degrees can never be represented accurately as radians in floating point because Pi is irrational, not to mention transcendental. To get round this I now override the built in rotate with a user space version that uses the accurate sin and cos degree functions.

module rotate(a)
{
cx = cos(a[0]);
cy = cos(a[1]);
cz = cos(a[2]);
sx = sin(a[0]);
sy = sin(a[1]);
sz = sin(a[2]);
multmatrix([
[ cy * cz, cz * sx * sy - cx * sz, cx * cz * sy + sx * sz, 0],
[ cy * sz, cx * cz + sx * sy * sz,-cz * sx + cx * sy * sz, 0],
[-sy,      cy * sx,                cx * cy,                0],
[ 0,       0,                      0,                      1]
]) children();
} 

Not surprisingly every STL and DXF file generated is now slightly different numerically but hopefully not dimensionally. I made a stable branch to record the state before these global changes, just in case. GitHub has some excellent image and STL comparison views but unfortunately it gives up if more than a handful of files have changed and there are hundreds in the Mendel90 tree.

After a few people started to report broken or cracked Wade's blocks I strengthened it a bit around the bearing block. I also made the bearing sockets a bit bigger so there is less stress created pressing them in. Kits from around March 2015 have shipped with this version.

When

E3D Hotend

I temporarily parked

The fan duct has to slope downwards to avoid the E3D heatsink. That creates a sloping bridge that is also skewed horizontally. I haven't found a slicer that handles this properly yet, having tried Skeinforge, Slic3r, Cura, Kisslicer and even paid for Simplify3D! I have blogged about their failings in another post here: hydraraptor.blogspot.co.uk/2016/01/a-bridge-too-far. Any other slicers I should try?

To this: -

It probably doesn't make a lot of difference but a comparative test of various fans and ducts will be the subject of a later post.

Even with the shortened Wade's block the E3D V6 hot end is 4mm lower and the V5 is a bit longer still. If you retro fit it to an old machine you will lose 4mm Z travel. If you are building a new machine then there are alternative files which add 4mm to the height of the frame and lengthen the Z smooth rods and threaded rods on the bom. That also has a knock on effect on the shape of the spool holders and the dust filter. If you use the larger sheets be sure to get the correct size rods and use the correct spool holder parts to match the frame.

New Lighting Options

I redesigned the lighting system I described here to work with some commonly available LED light strips. These consist of an aluminium PCB strip that slides into an aluminium extrusion with plastic end caps, which I discard. Instead of printing a bar to hang the lights and camera from I now add printed end caps to the light strip and uses those to hinge it from the frame edge clips. I then hang the camera from the strip with its own hinge.

The strips come in 500mm lengths but they can be cut at discrete points between every third LED. They are described as "50CM 5050 SMD 36 LED Warm White Aluminium Rigid Strip Bar Light Lamp" and I bought them from bgood2010 on eBay.

I got some from another seller and although the eBay picture looked the same the extrusions where actually not as deep. The STL files on GitHub are for 8.6mm deep extrusions and are generated by light_strip = RIGID5050_290. Setting it to Rigid5050_290 generates the clips for 7mm deep extrusion. Other sizes can easily be accommodated as long as they are rectangular. The definitions are here.

Rather than waste the off-cut I mount it above with a second pair of end caps that clip onto the main light strip. These are set back just far enough to avoid the build volume in the unlikely event you print something tall at the back edge of the bed. This is calculated by the model with lots of trig and Pythagoras maths. Set show_rays = true to see this view showing that the camera and lights are pointing at the centre of the bed and the build volume is clear.

Another light strip that can be selected is this one: FSRP3W, discovered by Alzibiff.

Again the end caps are removed and replaced with printed ones that clip into the screw channels in the extrusion. There is no room for the plug so I just solder the wires on.

It looks neater and gives a more diffuse light but is not as bright as the double strip of 5050 LEDs and is more expensive. I bought it from www.ledlightingandlights.com.

The only problem with these light strips compared to my original Sanken ones is that they are unregulated, so they flicker when the bed switches on and off. I described how I fixed that here. I also need to update the mounting for the Raspberry Pi to accommodate the plethora of new Pis that have appeared since my original design.

Huxley90

Half a truncated teardrop with a crutch!

The heated bed was made with veroboard and coincidentally has the same resistance as a full sized Prusa PCB, so the machine takes the same amount of power but heats up about twice as fast. There is no room on the frame for an ATX PSU, so I used an external XBOX 200W PSU. I couldn't find a spec for the 5V standby rail but it seems to supply enough current to power a Raspberry Pi.

Direct Drive Extruder

Laszlo Krekacs' Indigogo campaign. Unfortunately I don't think the small diameter version is available now. I could probably make one from a hobbed bolt if I needed to or hob one from scratch.

1. Hi nophead. How much torque would you say is required to direct drive the E3D V6 lite with a 1.75mm filament. I have a Prusa i3 Plus which uses a direct drive extruder, and I am finding its sometimes skipping steps. The stepper is a SX17-1003LQEF which rated as having a holding torque of 0.3Nm (http://www.hightorquesteppermotors.com/SXSeries.pdf)

1. Hi Giles,
I don't know as I haven't tried an E3D yet. It also depends greatly on the nozzle size and the drive pulley radius of course. I am surprised a NEMA17 struggles though. What current are you using?

On my todo list is to make a jig to measure the force needed to extrude for various speeds, temperatures, plastics, nozzle sizes and hots ends. Too much suck it and see in the RepRap world and not enough hard data. I intend to do a lot of experiments before I design my next machine.

2. Its a 0.4mm nozzle. There was a firmware update in which the current was lowered to make the printer run quieter (its a rambo mini where current can be altered from an rc circuit connected to pwm output) Perhaps I will change back to the value in the old firmware, just for the extruder.

Ideally I should measure Vref on the board but I am not sure what it should be...(ok I found your motor math page.) "The motor current is equal to the reference voltage divided by 8 times the sense resistor." and the sense resistor on the mini-rambo is 0.1ohm. So for 1 Amp current, I want vref to be 0.8 volts?

That's a really good idea about making a jig to measure extrusion force. I looked into force meters, the spring ones look cheap enough but I don't know how accurate the results would be. Digital ones are very expensive!

2. Yes 0.8V gives "1 Amp" but that is the peak current into one coil. The motor holding torque spec is actually with both coils on at 1A. With microstepping drivers the current is 1/sqrt(2) when both coils are on. That said RepRap machines never use enough current to get the rated torque because the motors run too hot for plastic mountings and most drivers can't do 1.4A due to lack of adequate heat sinking.

I did buy a digital force meter for this job but haven't got round to using it yet.

3. i do love your physics investigations and experiments - have you ever run the numbers on extruders?
http://imgur.com/gKGPpZr
i'd be happy if you check my work.
how can a printer do so well with such horrible numbers?
(i didn't compute microsteps)

1. Your figures look correct to me. If you take the Mendel90 case of 0.4mm nozzle, x 16 micro stepping ~7mm hob then it works out to be about 0.1mm, which is about the target resolution of RepRap.

What is vitamin G?

2. Vit G is a 20,000 step/rev (full steps) extruder we needed to print with wax filament for lost wax casting.

3. The gear ratio also limits how fast you can retract / fast forward. The speed that you need to do that depends on the pressure you need to build up / release, i.e. flow rate, nozzle size and viscosity. So there is definitely an optimum gear ratio that is a balance between accurate deposition and clean starts and stops. This is something I intend to explore in the future.

4. What is the maximum step rate one should expect from firmware on arduino?
Is it a practical limit on speed?
(my 50MHz 486 gives me @ 8000 steps per second - hardly a screamer)
I'll be eagerly awaiting your report - you do excellent science - all the theory with real empirical bricks. Solid.

4. Marlin has a maximum interrupt rate of 10kHz, above that it starts doubling up steps and above 20kHz it does four steps per interrupt. So it goes up to 40,000 microsteps per second but you effectively have a quarter of the microstep resolution during the high speed part.

1. That's pretty smart! Thanks for the info.
Printing in machineable wax, 3mm https://youtu.be/Ferq_qIaEOQ

2. Maybe you can use this: