Friday, May 10, 2013

New Printer!

We've been working on a new printer layout for the past few weeks, and now that we have our direct drive extruder working, along with a z-axis that we're happy with we tried printing something more complex than a simple box.

It's a small Spoctopus, printed @ 0.2mm layer height with 25% infill.  We think it looks pretty good!

1st real print out of our new printer!

More PID tweaking

So after my episodes with PID auto-tune yesterday, someone sent me a link to a presentation on PIDs and what those Kp, Ki, & Kd values actually do.  You can read the presentation yourself here: http://wwwdsa.uqac.ca/~rbeguena/Systemes_Asservis/PID.pdf.  It will give you a decent grasp of what impact the numbers have on the temperature graph.

TLDR; version:  From the summary:

  • Increase Kp to decrease the rise time.
  • Increase Kd to reduce the overshoot and settling time.
  • Increase Ki to eliminate the steady-state error
As our setup was still having serious overshoot, a look at the auto-tune results told me by Kd was far too low.  I had used the following values:

Kp = 10.75, Ki = 0.56, and Kd = 51.60


 I went in and took Kd back to the default of 114.  This is the resultant heating curve from that:
Kd = 114, target temp 180
As you can see, the overshoot was much better than before and it settled really well.  I then tried again with Kd set to 200.
Kd = 200, target temp 180
The results were actually not as good as before - so now I decided to tweak the Kp setting, by reducing it I should increase the time the heater takes to get to target temp, which I hoped would reduce the overshoot.  It had been set to 10.75, I decided to start by halving it to 5.5.
Kd = 200, Ki = 5.5, temp = 180
It was pretty disappointing to see no real change to the curve.  Time for drastic changes!  I tried various settings of Kd (even as high as 600) and dropped Ki down to 2.0, but nothing really made the curve better than I had.  So I started exploring the code in Temperature.cpp some more.  Turns out the firmware setting called "PID_FUNCTIONAL_RANGE" was pretty important.  Until the actual temperature and the target temperature get within this range, the PID is disabled.  This meant the heater was on full until the temp got with 10c of the target temp and tried to take control, but it was too late,  I'd already seen everything!

I set the PID_FUNCTIONAL_RANGE to 30 (default was 10) and got the following result:

PID_FUNCTIONAL_RANGE = 30
Much better! Now hopefully with some more minor adjustments I can reduce the settle errors, but that will have to wait until another time.  Let's see if this new setup can actually print something remotely resembling the 3D shape I send to it...

 



 

Thursday, May 9, 2013

New Heater for summer!

The MM2.0 uses a nifty heater cartridge instead of the old standard resistor to provide heat to the hot end.  We really liked the ease of connection of the cartridge, not to mention that it's been designed to heat things up, while a resistor is really designed to provide resistance and heat generation is a byproduct of it's primary function.

We did some hunting around and found a supplier of heater cartridges that work with a 12V supply.  The cartridge is about 3.5 ohms, which means it eats 41W... this is more than the old resistor heater (6 ohms) and so it heats up much faster.

The heater element is connected the part with the red wires attached...
With the previous firmware settings we were having a problem with the heater overshooting the target temperature by quite a lot (>40c) which could be a real problem if we want to use it to print Nylon or ABS.  We could easily exceed the maximum hotend temperature.

We tried to use the auto-tune settings built into Marlin by sending a M303 S200.  This tells the printer to measure the PID performance as it get to 200c.  However, because of the overshooting temperature the auto-tune would fail as the temperature got too high compared to the target.
A little digging in the temperature.cpp file found the following lines:

There is a line that used to say if (input>(temp+20))... so in our case, once we went above 220, the auto-tune would fail.  I ended up modifying this to +40 and then set the target temperature to 150, with: M303 S150.

This worked, and auto-tune was able to complete and I then used the outputed numbers in the firmware.  I then re-ran the auto-tune, this time with the target temperature set for 180.  Took the new PID values and plugged those into the firmware.


 We're still not happy with the results, but it's better than it was, but still overshoots the target temperature when the hotend starts up, just not as much as before.




Startup Temp graph for the Hotend after auto-tune

Temp graph after the hot-end has been running for a bit

Friday, April 26, 2013

The Fleet is in!

A friend of ours asked if we could print some battle ships his daughter needed for a diorama she was making as part of a school project - I said sure!  Then went hunting for models.  There are some great models in the Sketchup warehouse, but they are all crazy detailed and not printable.

Searching around Thingiverse turned up this model:


It looked like it would work and a few folks had printed it already, so that was selected.  In my opinion the hull is much too tall for the ship (maybe it was done this way so it would float).  I loaded the model in Blender and reduced the height.

Loaded it up in Kisslicer and produced the G code file that let me print these:
The left image was printed on the MM1.5+ and the right hand one was 3 ships at once on the MM2.0.


Below is a video showing some of the ships being printed -- this is from the MM2.0 with faster acceleration than we'd previously used.


Monday, April 22, 2013

Printing with ABS

After getting comfortable printing PLA, we decided to buy some ABS and nylon.  I opened up the ABS roll today and after printing a few test cubes, I loaded up a Spocktapus. Why Spocktapus again? First, I've printed it enough times to know what it's supposed to look like and what it's not supposed to look like. Second, it will annoy Colin (they're like Tribbles around here).

This was printed at 0.25mm layer height at 230C. It curls a lot more than PLA, which already curls too much and the smell is a lot stronger than PLA. Here's a video and final shot.



Not the best print ever, but I just wanted to crank this out quickly.

Friday, April 19, 2013

More worm work

My curiosity with worm gears continues...

The gears I printed yesterday were too small to make workable, and I've since modified the OpenSCAD file to give me better sized parts.

I need to make a mount that will hold the NEMA17 and the 8mm rod and a couple of bearings along with the gears.  This is what I have right now:

Like I said yesterday, OpenSCAD is a wonderful program (with limitations) and I'll use it to design and build the mount.  Hopefully it'll be done soon and I can see the worm drive in action!

Thursday, April 18, 2013

Worms, gears and OpenSCAD - Oh My!

I've been wanting to play around with worm gears and stepper motors for awhile, and today I had some time to experiment.  I downloaded this http://www.thingiverse.com/thing:8821 from Thingiverse today and after a bit of work, got it rendering correctly with OpenSCAD (http://en.wikibooks.org/wiki/OpenSCAD_User_Manual).

Initially I printed the gears the same size they were in the original file and was quite surprised by how well they turned out:



The fitted pretty well together and even turned as you'd expect.  The actual worm gear had some underhanging PLA under it's flanges, but it was better than I thought I'd get.

I then decided to reduce the size of them and try it again, this time with something I'd actually use on a stepper motor:

They came out beautifully - and don't they look cool!

When I've got them in a jig and hooked up to a stepper I'll post updated pics & video.