Friday, June 26, 2015

3D Printer Project, Part 12: Adjustments

I suspect 3D printer owners go through three phases once they start running prints:
  1. Printing calibration and test objects.
  2. Printing new parts for their printer.
  3. Using it for things that might actually be useful.
I think I'm about on the boundary between 1 and 2. I am largely happy with the prints I'm getting, and so I want to list some of the tweaks and adjustments I've made.

Folger include some settings to import into Slic3r. For PLA, they are not very good, and based on advice from the forums and from Triffid Hunter's Calibration Guide, I made a number of changes. Most important of all is the temperature. Folger's configuration sets it to 219C, and everyone agrees this is much too hot for PLA. There is some variation between different vendors of PLA. I've used values between 180C and 195C which worked well both for the sample of PLA included in the kit, and the filament I've been using since then. 170C is too low: you get no extrusion at all. At 175C there is some extrusion but it doesn't stick. 180C is OK. Many people recommend a higher temperature for the first layer, and I am now using 185C for the first layer and 180C for the rest, or sometimes 190C/185C. The bed temperature seems less important. 65C or 70C work well.

Both the layer height and the infill percentage need adjusting. The layer height should usually be no more than 80% of the nozzle width, 0.4mm. So 0.3mm is a good general setting. Sometimes it helps to have the first layer thicker by 0.1mm. I've successfully printed at 0.2mm and 0.1mm. At 0.05mm, the print was not a complete failure, but the surface kept getting chewed up by the nozzle. The Folger value for infill is 10%, and 30% is a much better value.

One other thing I changed is the G code executed at the start and end of the print. I'll discuss the end G code first. I was noticing two bad things at the end of each print. First, a very small part of the top layer would be missing, and secondly the motors would stop with a horrid grinding noise. These are both because the end code was not allowing pending commands to complete, and the following works better:
G1 E-1  ; retract extruder 1mm
M400    ; wait for buffer to clear (finish the top layer)
M104 S0 ; turn off temperature
G28 Y0  ; home Y axis
G28 X0  ; home X axis
M400    ; wait for buffer to clear (finish homing)
M84     ; disable motors
The home commands are optional. It's the M400 commands that are important. I'll come back to the retraction command in a moment.
(Edit: I now no longer use G28 Y0, G28 X0. They aren't necessary, as Repetier/Slic3r parks the head at X=100, Y=0).

I had some problems with the corners of parts curling slightly. This one went away on its own. It happened only on a couple of days which were unusually hot and humid (for where I live, in coastal Los Angeles, so much less hot and humid than say Boston in the summer). I'll see if this comes back as the summer goes on.
(Edit: I was mistaken about this. There is slight bowing on some more recent prints. It's something I'll investigate more.)

The issue I spent the most time on was the runny nose printer problem. The printer starts exuding filament when it hits 175C and it curls up and stick to the nozzle. By the time the print starts, then can be a semi-molten blob, which then loosely sticks to the bed. Sometimes this is OK, and sometimes it can get caught up in the print and ruin it. I tried many things for fixing this. By the way, it was helpful to make a tiny test object consisting of a 10mm x 10mm x 0.5mm slab so I could quickly experiment with different setting. You can try to grab the loose exudate with fine nose pliers just as the print starts, but this takes luck, and it's not a good solution. A second possibility is to retract some filament at the end of the previous run so there is less to exude. That's what the G1 E-1 command in the end code aims to do. It helped a little. In the end, the best solution I could find was to add commands to the start G code to draw a small object first, consisting of a skirt (the outline drawn round objects), and a small unfilled square. This helps most of the time. I made the G code by taking my code for the test slab and cutting it down. I call this the scribble. My start G code then looks like this. It's not ideal, but it works. Maybe this is just a limitation of the extruder.

Edit, a few weeks later.
I didn't use the scribble for long. It helped less than I thought it would at first. More recently, I've been trying something inspired by a blog post by nophead. Nophead's technique didn't work for me. Playing around with it, I arrived at the idea of drawing a L shape near the front of the bed. On leg of the L get the extruder going. This takes a while and leaves a blob of filament on the nozzle. Changing direction for the other leg of the L removes the blob. So far the results look good. I got the L code by making a L shaped model 0.3mm thick and deep in blender, then exporting to STL, slicing it and copying the G code. So now my start G code looks like this:
G28 ; home all axes
G1 Z0.05 ; move nozzle close to bed
M109 S[first_layer_temperature] ; heat nozzle and wait until reached
M82 ; use absolute distances for extruder
G92 E0 ; zero the extruder position
G1 Z0.334 ; move enough to let the ooze out
G1 X115.350 Y5.000 F9000.000
G1 E1.00000 F1800.000
G1 X190.350 Y5.000 E7.75323 F648.000
G1 X190.474 Y5.026 E7.76466
G1 X190.500 Y5.150 E7.77609
G1 X190.500 Y55.150 E12.27824
G1 F1800.000 E11.27824
M400 ; wait until we get there
G92 E0 ; zero the extruder position
So far this has been working quite nicely at 0.3, 0.2 and 0.1mm layer heights.

No comments: