Fixed font and loading optimisation

GH-26
Courtesy of KieranHolroyd
This commit is contained in:
lawgicau
2021-07-19 17:14:28 +10:00
parent 0d6a006225
commit 76af120a2f
4 changed files with 103 additions and 103 deletions

View File

@ -27,8 +27,8 @@
<h2>Introduction</h2>
<p>This page serves as a companion for this video: <a href="https://www.youtube.com/watch?v=rp3r921DBGI" target="_blank">3D printer calibration revolutionised - Step by step to better print quality</a></p>
<p>It has received a major update to bring it up to V2 which is explained in this video: <a href="https://www.youtube.com/watch?v=9kDK7czgMxc" target="_blank">3D printer calibration site V2 - Still free and better than ever!</a></p>
<iframe width="480" height="360" src="https://www.youtube.com/embed/rp3r921DBGI" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<iframe width="480" height="360" src="https://www.youtube.com/embed/9kDK7czgMxc" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<iframe loading="lazy" width="480" height="360" src="https://www.youtube.com/embed/rp3r921DBGI" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<iframe loading="lazy" width="480" height="360" src="https://www.youtube.com/embed/9kDK7czgMxc" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<p>It aims to make calibrating your 3D printer as easy as possible. If you find it helps you and you would like to say thank you, here is a donation link: <a href="https://paypal.me/testlawgicau" target="blank">PayPal.me</a></p>
<p>Special thanks to my <a href="http://www.patreon.com/teachingtech" target="_blank">Patrons</a> for suggesting this video, helping define the contents and testing/proofing.</p>
<p>Watch the videos and then work through each tab. I have created a custom gcode generator to assist in making testing towers. This used to be a laborious process and beyond the skills of many users. Other times pre-sliced gcode was used from the internet, but it is impossible to have gcode available for every printer configuration. <i>Until now!</i></p>
@ -146,7 +146,7 @@
</div>
<p>It would be easy to use the techniques elsewhere on this page to try and fix problems that were actually caused by a problem with the physical components, so we will eliminate this possibility first.</p>
<p>Many of these procedures are covered in this video: <a href="https://youtu.be/T-Z3GmM20JM" target="_blank">Complete beginner's guide to 3D printing - Assembly, tour, slicing, levelling and first prints</a></p>
<iframe width="480" height="360" src="https://www.youtube.com/embed/T-Z3GmM20JM" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<iframe loading="lazy" width="480" height="360" src="https://www.youtube.com/embed/T-Z3GmM20JM" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<h4>Loose nuts and bolts</h4>
<p>Move around the machine and check all fasteners. Crucial ones include those on the print head gantry such as those that hold the hot end on.</p>
<h4>V-roller tension</h4>
@ -167,7 +167,7 @@
<h4>Fans</h4>
<p>Check all fans are spinning freely. This includes but is not limited to: mainboard cooling fan, heat sink fan, part cooling fan, PSU fan. It can be hard to diagose if a fan is performing at less than full capacity. It may be easier to simply replace than repair if you suspect a fan is failing.</p>
<p>Another suitable video for seeing some of these procedures is here:</p>
<iframe width="480" height="360" src="https://www.youtube.com/embed/kAafiApJs9A" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<iframe loading="lazy" width="480" height="360" src="https://www.youtube.com/embed/kAafiApJs9A" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</div>
<div id="pid">
@ -182,7 +182,7 @@
<p>Instructions on how to setup <a href="troubleshooting.html#tools" target="_blank">terminal software</a> can be found <a href="troubleshooting.html#terminal" target="_blank">here.</a></p>
</div>
<p>PID autotuning is quick and easy, and relates to the most potentially dangerous components of your 3D printer: the heaters. It makes sense to do it as a first step. This procedure is covered in this video: <a href="https://youtu.be/qCtL0Yd_w0I" target="_blank">Two easy fixes for 3D printer temperature swings</a></p>
<iframe width="480" height="360" src="https://www.youtube.com/embed/qCtL0Yd_w0I" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<iframe loading="lazy" width="480" height="360" src="https://www.youtube.com/embed/qCtL0Yd_w0I" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<p>In Marlin, this is a very straightforward process using <a href="https://marlinfw.org/docs/gcode/M303.html" target="_blank">M303</a>.</p>
<p>It is not essential, but you may prefer to start this process with the hot end at room temperature. In a terminal, enter the following to tune the hot end:</p>
<pre>M303 E0 S200 U1</pre>
@ -224,14 +224,14 @@
<p>If the nozzle is too close, there will not be enough room for the extruded filament to take the correct shape, and it will be forced to squeeze outwards. In minor cases, the extruded line will be wider than necessary and produce <i>elephant's foot</i>. Prints like this may be quite hard to remove from the bed.</p>
<p>In extreme cases, there will be no way for the filament to exit the nozzle, at best causing extruder stepper motor skipping, and even potentially even jamming the extruder/hot end.</p>
<p>The contents of this page are shown in detail in the following video:</p>
<iframe width="480" height="360" src="https://www.youtube.com/embed/Ze36SX1xzOE" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<iframe loading="lazy" width="480" height="360" src="https://www.youtube.com/embed/Ze36SX1xzOE" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<h2>Manual Levelling Procedure</h2>
<p>There are many techniques available, but a common one is to move the nozzle to the various corners of the bed, turning the levelling knobs until a standard piece of office paper can just fit between the bed and nozzle. A 0.1mm feeler gauge can be used, but make sure it doesn't have any oil on it that will contaminate the bed surface. Typically, this procedure is done with the bed at printing temperature (essential), and the nozzle close to printing temperature - just cool enough to prevent filament oozing out (optional).</p>
<p>It is common to follow up with a first layer calibration print, and 'live level' the bed by continuing to adjust the knobs when the print is under way.</p>
<p>This process is depicted in detail in the video above, and a gcode generator is provided at the bottom of the page to generate a suitable test print.</p>
<h2>Auto Bed Levelling and Z offset</h2>
<p>Auto bed levelling automates the procedure to some extent. A sensor such as a BLtouch, EZABL, strain gauge or peizo transducer is used to probe the bed in a grid formation. At each location, it measures the vertical height, building up an array of stored values, called a <i>mesh</i>. <a href="https://www.youtube.com/watch?v=vcxM7-VK44k" target="_blank">Manual mesh bed levelling</a> can also be used to probe such a grid, but is still a manual process and hence not considered 'automatic'. Here is a visual representation of a probed mesh, shown with the <a href="https://plugins.octoprint.org/plugins/bedlevelvisualizer/" target="_blank">Bed level visualizer Octprint plugin</a>:</p>
<a href="#" data-featherlight="img/ablmesh.jpg"><img class="thumb" src="img/ablmesh.jpg" /></a>
<a href="#" data-featherlight="img/ablmesh.jpg"><img loading="lazy" class="thumb" src="img/ablmesh.jpg" /></a>
<p>During printing, the firmware will reference the mesh and compensate for an angled and/or warped bed by raising and lowering the nozzle using Z axis movement. This means the nozzle can travel up and down to match the contours of the bed, ensuring a good first layer.</p>
<p>If the printer's bed is perfectly flat, it is reasonable to claim ABL is not needed. Some users may still prefer it for the added convenience. In the event that the bed is warped (very common), it can be impossible to get a good first layer without ABL or manual mesh bed levelling. An example of this situation is shown in the video above.</p>
<p>It's worth noting that you can compensate for a warped bed in other ways, such as shimming the lower portions with a thin and flexible material. You can also use a glass/mirror plate over the top, which are typically quite flat. The downside of this is a longer time required to reach printing tempratures and additional load on the Y stepper (on an i3/'bed slinger' style printer) that may require lower print speed/acceleration.</p>
@ -244,13 +244,13 @@
<li><a href="https://www.youtube.com/watch?v=hs6IVfNrf5k" target="_blank">CR-6 style</a> strain gauge - The nozzle touches the bed and flexes upwards to trigger the probe. This means the trigger point is actually higher than the nozzle tip, and requires a positive Z offset.</li>
</ul>
<p>The following picture shows Z offset for a BLtouch. You can clearly see the vertical difference between the probing point (tip of BLtouch) and the tip of the nozzle.</p>
<a href="#" data-featherlight="img/zoffset.jpg"><img class="thumb" src="img/zoffset.jpg" /></a>
<a href="#" data-featherlight="img/zoffset.jpg"><img loading="lazy" class="thumb" src="img/zoffset.jpg" /></a>
<p>If <b>BABYSTEP_ZPROBE_OFFSET</b> is enabled in Marlin, setting the Z offset can easily be done as the first layer goes down. Don't forget to save to EEPROM afterwards. Newer versions of Marlin also have a Z offset wizard that can be included when you compile. I have a dedicated video for this:</p>
<iframe width="480" height="360" src="https://www.youtube.com/embed/fN_ndWvXGBQ" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<iframe loading="lazy" width="480" height="360" src="https://www.youtube.com/embed/fN_ndWvXGBQ" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<p>Another advantage of some ABL systems is that once the Z offset is set, you can interchange build surfaces of various thicknesses, with no changes needed for a successful first layer. Assuming the probe is triggered the same way on the bed surface, the Z offset is applied to this trigger point and the first layer height should be the same. On a manually levelled bed, the four corner knobs would need to be turned in unison to raise or lower the bed in accounting for thickness of the new build surface.</p>
<h6 id="fl" >First layer gcode generator</h6>
<p>The following form will create a series of five squares that you can use to live level your bed or set the Z offset. It is quick to print and features one square in the middle of the bed, with four others in the corners. You can use these to turn the levelling knobs in each corner until they are consistent, or ensure your ABL system is working if you have one in place.</p>
<a href="#" data-featherlight="img/firstlayerpreview.jpg"><img class="thumb" src="img/firstlayerpreview.jpg" /></a>
<a href="#" data-featherlight="img/firstlayerpreview.jpg"><img loading="lazy" class="thumb" src="img/firstlayerpreview.jpg" /></a>
<!-- firstlayerForm-->
<form name="firstlayerForm" id="firstlayerForm" onsubmit="return false;">
<script>
@ -261,10 +261,10 @@
</form>
<h2>Interpreting Results:</h2>
<p>Please use the following video as a guide to this test:</p>
<iframe width="640" height="480" src="https://www.youtube.com/embed/seBOQpjLCQ4" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<iframe loading="lazy" width="640" height="480" src="https://www.youtube.com/embed/seBOQpjLCQ4" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<p>The following diagram and reference picture can be useful in determing if your first layer is too close or too far away from the nozzle. The reference image is quite large to aid clarity, you may wish to open it in a new tab to view it at maximum size.</p>
<p>If one side looks too close, but the other too far, adjust the levellng knobs to correct this. It is worth printing this gcode more than once after making adjustments to make sure the result is accurate and repeatable.</p>
<a href="#" data-featherlight="img/firstlayer.jpg"><img class="thumb" src="img/firstlayer.jpg" /></a> <a href="#" data-featherlight="img/firstlayer2.jpg"><img class="thumb" src="img/firstlayer2.jpg" /></a>
<a href="#" data-featherlight="img/firstlayer.jpg"><img loading="lazy" class="thumb" src="img/firstlayer.jpg" /></a> <a href="#" data-featherlight="img/firstlayer2.jpg"><img loading="lazy" class="thumb" src="img/firstlayer2.jpg" /></a>
</div>
<div id="baseline">
@ -280,7 +280,7 @@
</div>
<h6 id="bl">Baseline test print generator</h6>
<p>The form below will create a customised version of the <a href="https://www.thingiverse.com/thing:1278865" target="_blank">XYZ 20mm calibration cube by iDig3Dprinting</a>. It is fast to print and gives a good indication if there is any fundamental problem with the printer.</p>
<a href="#" data-featherlight="img/cube.jpg"><img class="thumb" src="img/cube.jpg" /></a>
<a href="#" data-featherlight="img/cube.jpg"><img loading="lazy" class="thumb" src="img/cube.jpg" /></a>
<!-- baselineForm -->
<form name="baselineForm" id="baselineForm" onsubmit="return false;">
<script>
@ -291,7 +291,7 @@
</form>
<h2>Interpreting Results:</h2>
<p>Please use the following video as a guide to this test:</p>
<iframe width="640" height="480" src="https://www.youtube.com/embed/Vf7nSuDGHI0" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<iframe loading="lazy" width="640" height="480" src="https://www.youtube.com/embed/Vf7nSuDGHI0" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<p>The cube should look similar to those at the top of this page. If there are no major issues, please continue to the next step. If there is a significant defect, the culprit will likely be found by working through the frame tab. Minor issues will hopefully be resolved with the subsequent tests.</p>
</div>
@ -325,7 +325,7 @@
<p><a href="https://marlinfw.org/docs/gcode/G091.html" target="_blank">G91</a> puts the printer in relative movement mode. This means requesting 100mm of filament adds 100mm to the current position, instead of moving to the specific position of 100mm.</p>
<p>For Klipper and Rep Rap Firmware, <b>M83</b> is used to select relative extruder movement instead.</p>
<p>Now we take a permanent marker and put a mark 120mm from the entry to the extruder:</p>
<a href="#" data-featherlight="img/mark.jpg"><img class="thumb" src="img/mark.jpg" /></a>
<a href="#" data-featherlight="img/mark.jpg"><img loading="lazy" class="thumb" src="img/mark.jpg" /></a>
<p>Next, we enter:</p>
<pre>G1 E100 F50</pre>
<p><a href="https://marlinfw.org/docs/gcode/G000-G001.html" target="_blank">G1</a> sends a move command to the printer, in this case asking the extruder to advance 100mm at a speed of 50mm/min.</p>
@ -456,7 +456,7 @@
<p>Now slice and print!</p>
<h2>Interpreting Results:</h2>
<p>Use digital/vernier callipers to measure the outer wall thickness of the hollow cube. Take measurements in multiple places/sides and average them. You may wish to cut/tear off the lower and upper layers of the cube. This is to remove portions with elephant's foot and/or other abnormalities.</p>
<a href="#" data-featherlight="img/measurecube.jpg"><img class="thumb" src="img/measurecube.jpg" /></a>
<a href="#" data-featherlight="img/measurecube.jpg"><img loading="lazy" class="thumb" src="img/measurecube.jpg" /></a>
<p>If your measurement is <i>significantly</i> off, the following calculator can then be used to calculate the new flow rate:</p>
<h6 id="frc">Flow rate calculator</h6>
<table>
@ -499,7 +499,7 @@
<h2>Important note!</h2>
<p>What you see with your eyes is more important than a theoretical calculation. After you have performed this calibration, please adjust the flow rate higher or lower based on what you actually see.</p>
<p>For example, the cube shown in the thumbnail of the <a href="https://www.thingiverse.com/thing:1278865" target="_blank">XYZ 20mm calibration cube by iDig3Dprinting</a>:</p>
<a href="#" data-featherlight="img/xyzcube.jpg"><img class="thumb" src="img/xyzcube.jpg" /></a>
<a href="#" data-featherlight="img/xyzcube.jpg"><img loading="lazy" class="thumb" src="img/xyzcube.jpg" /></a>
<p>This print shows clear signs of under extrusion. There are gaps in the top infill as well as gaps between the perimeters and infill. Despite what any calibration procedure determined, the flow rate for this slicer/printer combination needs to be increased.</p>
<p><a href="https://all3dp.com/2/over-extrusion-3d-printing-tips-and-tricks-to-solve-it/" target="_blank">This article on all3DP</a> has examples of what over extrusion looks like.</p>
</div>
@ -553,7 +553,7 @@
<h2>Peak Current and Sense Resistor Value</h2>
<p>Setting stepper driver current accurately relies on knowing two values: the peak current that the stepper motor is rated for and the sense resistor value on the stepper motor driver.</p>
<p>For newer TMC drivers, the sense resistor value is already known. For older drivers, methods for determining this are seen in the following snippet. Methods for determining the stepper motor peak current are shown too:</p>
<iframe width="480" height="360" src="https://www.youtube.com/embed/H41hIXdB6js?start=307&end=359" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<iframe loading="lazy" width="480" height="360" src="https://www.youtube.com/embed/H41hIXdB6js?start=307&end=359" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<h2>1. Physical</h2>
<p>I have covered this in detail before, so please use the embedded video below (queued to the correct time) to see how to set the VREF. The process is essentially the same for any driver.</p>
<p>The VREF is just a reference voltage to assist us in setting the driver current. It is used because it is much simpler to measure voltage rather than current with a multimeter. Typically these drivers have the peak/max current set.</p>
@ -567,7 +567,7 @@
<li>Repeat for each stepper motor driver.</li>
</ol>
<p>Alternatively, you can use an alligator clip wire between the red probe and the metal shaft of the screwdriver, so that a VREF reading is available as you turn the screwdriver. This procedure is shown in this snippet:</p>
<iframe width="480" height="360" src="https://www.youtube.com/embed/H41hIXdB6js?start=389&end=438" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<iframe loading="lazy" width="480" height="360" src="https://www.youtube.com/embed/H41hIXdB6js?start=389&end=438" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<p>The VREF formulas for drivers I have tested are as follows:</p>
<h4>A4988</h4>
<p>The typical sense resistor value is 0.1. Please check your drivers to be sure.</p>
@ -633,7 +633,7 @@
</div>
<p>FDM works by melting plastic filament and extruding it accurately one layer at a time to build up 3D geometry. By its nature, the plastic will continue to ooze and drip out of the nozzle even when not pushed by the extruder. To combat this, our slicers use retraction, where the filament is withdrawn from the hot end, alleviating pressure and minimising ooze. When properly tuned, this has the effect of removing stringing, the unwanted oozing of plastic between two points of the model.</p>
<p>An example of fine stringing can be seen in the following image. It appears like cobwebs:</p>
<a href="#" data-featherlight="img/stringing.jpg"><img class="thumb" src="img/stringing.jpg" /></a>
<a href="#" data-featherlight="img/stringing.jpg"><img loading="lazy" class="thumb" src="img/stringing.jpg" /></a>
<div class="exp">
<h5>Special note:</h5>
<p>Temperature tuning and retraction tuning are related to each other. You could do them in either order, and it may be necessary to tune back and forth to reach an ideal result. A higher nozzle temperature will promote more oozing and stringing, whereas a lower temperature will reduce oozing and stringing.</p>
@ -694,10 +694,10 @@
</form>
<h2>Interpreting Results:</h2>
<p>Please use the following video as a guide to this test:</p>
<iframe width="640" height="480" src="https://www.youtube.com/embed/JY6E9srwZm0" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<iframe loading="lazy" width="640" height="480" src="https://www.youtube.com/embed/JY6E9srwZm0" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<p>Inspect your finished print. Hopefully, there will be a clear difference between the segments that reflect the settings you entered. In the example below (Ender 3 direct drive, PLA, linear advance enabled), the retraction distance varied from 0.4 up to 1.4mm in 0.2mm increments. Segments A and B have the least stringing. Based on this, I would assume that a retraction distance of 0.4 - 0.6 is best for this printer. this is consistent with linear advance being enabled.</p>
<p>I would then repeat the test, setting the same retraction distance for each segment and instead altering the retraction speed to dial that in. A third test could then take place to test extra restart distance, a fourth for Z hop, etc.</p>
<a href="#" data-featherlight="img/retractionresults.jpg"><img class="thumb" src="img/retractionresults.jpg" /></a>
<a href="#" data-featherlight="img/retractionresults.jpg"><img loading="lazy" class="thumb" src="img/retractionresults.jpg" /></a>
<p>If you would like to be able to customise additional parameters for a retraction test, Prahjister has made a great tool: <a href="http://retractioncalibration.com/" target="_blank">Retraction Calibration Tool</a>. It has a higher degree of difficulty due to needing more parameters but is ultimately more powerful. Warning! This is an external website and beyond my control. Some users have reported success and others have had issues with the gcode generated. As with the gcode made by this website, monitor your printer during printing with a view to cutting the power if needed.</p>
<div class="exp">
<h5>I can't translate my test results to my own slicer! Other factors beyond the scope of this test - <span style="color:red;">Important!</span></h5>
@ -752,9 +752,9 @@
</form>
<h2>Interpreting Results:</h2>
<p>Please use the following video as a guide to this test:</p>
<iframe width="640" height="480" src="https://www.youtube.com/embed/D6m_kYhOth0" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<iframe loading="lazy" width="640" height="480" src="https://www.youtube.com/embed/D6m_kYhOth0" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<p>Inspect your finished print. Hopefully, there will be a clear difference between the segments that reflect the temperatures you entered. In the example below (Ender 3 direct drive, PLA, linear advance enabled), the hot end temperature varied from 180 to 260 in 20 degree increments</p>
<a href="#" data-featherlight="img/temperatureresults.jpg"><img class="thumb" src="img/temperatureresults.jpg" /></a>
<a href="#" data-featherlight="img/temperatureresults.jpg"><img loading="lazy" class="thumb" src="img/temperatureresults.jpg" /></a>
<p>As expected, surfaces becomes more glossy as the temperature increases. What was unexpected was surface rippling being more obvious as the temperatures went up. Overhangs and bridges all look good on this test, however the little spikes could not be printed accurately at the higher temps due to the part cooling system not keeping up. The coolest spike in segment A was very brittle, the spike on segment C the strongest, and the upper spikes too malformed to test accurately.</p>
<p>My previous hot end temperature was 200 degrees for this printer, but I will consider raising it to 210 degrees after this test to gain some interlayer strength without any trouble with part cooling.</p>
</div>
@ -776,9 +776,9 @@
<p>We set a feedrate or movement speed in our slicer, but the printer does not instantly reach these speeds. Like a motor vehicle, it needs time to accelerate. If the distance of the movement is short, it may not even have time to reach the specified speed. This can determined with the handy <a href="https://blog.prusaprinters.org/calculator/" target="_blank">acceleration calculator</a>, available on the Prusa website.</p>
<p>Complementary to acceleration we have jerk, replaced by junction deviation in newer versions of Marlin. These settings have differences, but both are essentially responsible for making sure the printer does not come to a complete stop between each movement, but rather decelerates an appropriate amount depending on the angle of the next 'corner'.</p>
<p>We will be tuning both of these parameters with another tower. The aim is to have a reasonably fast print time without inducing excessive ringing/ghosting. An example of bad ghosting is seen below. The features of the model are repeated across the surfaces due to vibration of the printer components:</p>
<a href="#" data-featherlight="img/ghosting.jpg"><img class="thumb" src="img/ghosting.jpg" /></a>
<a href="#" data-featherlight="img/ghosting.jpg"><img loading="lazy" class="thumb" src="img/ghosting.jpg" /></a>
<p>I have previously made a detailed video guide on this subject, complete with many diagrams explaining the concepts. The tuning process depicted will be improved upon here with an easier to use calculator and custom gcode generator below.</p>
<iframe width="480" height="360" src="https://www.youtube.com/embed/Mnvj6xCzikM" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<iframe loading="lazy" width="480" height="360" src="https://www.youtube.com/embed/Mnvj6xCzikM" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<div class="exp">
<h5>Rule of thumb:</h5>
<p>Higher acceleration and jerk will result in a faster print time, as the printer reaches top speed faster and maintains a higher speed when corning. This is harder on the printer, and may result in reduced lifespan of components and the need for more regular maintenance. It also introduces more surface defects such as ringing/ghosting.</p>
@ -846,7 +846,7 @@
<li>If the <b>M205</b> contains the letter <b>J</b>, your printer is running junction deviation. The number after the J is your current junction deviation value.</li>
</ul>
<p>The image below shows an example of each of these scenarios:</p>
<a href="#" data-featherlight="img/m205.jpg"><img class="thumb" src="img/m205.jpg" /></a>
<a href="#" data-featherlight="img/m205.jpg"><img loading="lazy" class="thumb" src="img/m205.jpg" /></a>
<p>Use the following form to customise the gcode to your liking:</p>
<h6 id="acc">Acceleration & jerk/junction deviation tuning tower generator</h6>
<!-- accelerationForm -->
@ -859,13 +859,13 @@
</form>
<h2>Interpreting Results:</h2>
<p>Please use the following video as a guide to this test:</p>
<iframe width="640" height="480" src="https://www.youtube.com/embed/SIsKQIyuzYs" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<iframe loading="lazy" width="640" height="480" src="https://www.youtube.com/embed/SIsKQIyuzYs" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<p>You may initially think the X and Y labels are facing the wrong way, but they are not. This is explained and demonstrated in the video above.</p>
<p>You may also notice a few bits of stringing. These are a quirk of how the test was originally sliced and can safely be ignored.</p>
<p>Inspect your finished print. Hopefully, there will be a clear difference between the segments that reflect the acceleration values you entered. In the example below (Ender 3 direct drive, PLA, linear advance enabled), acceleration varied from 300 to 800 in 100 mm/sec/sec increments. Junction deviation was left at the default 0.08. The difference between each segment is subtle, but there is increased ghosting around the letter Y on the higher segments. In the lowest segment, the gentle acceleration means the nozzle spends more time in the corners and they tend to bulge. This would be more evident if linear advance was disabled.</p>
<p>The ideal segment will have the best compromise between low acceleration corner bulging and high acceleration ringing.</p>
<p>My previous value was 500, but a small increase in quality may be achieved from lowering the value to 400.</p>
<a href="#" data-featherlight="img/accelerationresults.jpg"><img class="thumb" src="img/accelerationresults.jpg" /></a>
<a href="#" data-featherlight="img/accelerationresults.jpg"><img loading="lazy" class="thumb" src="img/accelerationresults.jpg" /></a>
<p></p>
<p>Once you have a value you are happy with, you can update with:</p>
<pre>M204 P400</pre>
@ -882,11 +882,11 @@
<div class="exp">
<h5>Special note for Cura and PrusaSlicer:</h5>
<p>Cura and PrusaSlicer both have the capability to control these parameters from the slicer by inserting appropriate gcode. If you are finding that your new acceleration values are not taking effect, you may need to also set them in the slicer. This is actually a desirable feature, as it allows more aggressive settings for infill and features that can't be seen in the final print, yet be more conservative for outer walls where aesthetics are paramount.</p>
<a href="#" data-featherlight="img/acceloverride.jpg"><img class="thumb" src="img/acceloverride.jpg" /></a>
<a href="#" data-featherlight="img/acceloverride.jpg"><img loading="lazy" class="thumb" src="img/acceloverride.jpg" /></a>
</div>
<h2>Higher acceleration without ringing: Input Shaping</h2>
<p>An amazing development in 3D printing is input shaping, which compensates for the machine's resonant frequency by altering stepper motor inputs to drastically reduce ringing. Available in Klipper and soon to be introduced to RepRapFirmware, input shaping allows much higher feedrates without a loss in print quality. To see it in action, see the video below:</p>
<iframe width="480" height="360" src="https://www.youtube.com/embed/er7q-CJL1lc" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<iframe loading="lazy" width="480" height="360" src="https://www.youtube.com/embed/er7q-CJL1lc" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</div>
<div id="linadv">
@ -901,7 +901,7 @@
</div>
<p>In a 3D printer, due to the pressure required to push the molten filament through the small opening of the nozzle, there is a small time delay from when the extruder pushes the filament to when it actually comes out the nozzle. Traditionally the movement of the extruder is matched to XY movements of the printer, so this means the start of a line will be under-extruded and the end of the line will be over-extruded. Linear advance unsynchronises the extruder movements from the XY movements, changing the timing of the extruder so the thin and thick sections are significantly reduced.</p>
<p>The concept and how to tune linear advance is explained in much more detail here:</p>
<iframe width="480" height="360" src="https://www.youtube.com/embed/n3yK0lJ8TWM" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<iframe loading="lazy" width="480" height="360" src="https://www.youtube.com/embed/n3yK0lJ8TWM" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<div class="exp">
<h5>Special notes:</h5>
<p>Linear advance often goes by the name pressure advance. They are the same thing.</p>
@ -919,10 +919,10 @@
<p>A lower K value suits a direct drive extruder and more rigid filaments. With these characteristics, the transfer of filament between extruder and hot end is more direct with less time delay. A good starting point for a direct drive extruder is <b>0.2</b>.</p>
<p>The above video takes you through how to use the pattern generator, which basically involves inputting printer and slicer parameters, before clicking to download the gcode file.</p>
<p>Using the suggested starting K values above, you would then pick an upper and lower limit either side of this for a preliminary test.</p>
<a href="#" data-featherlight="img/patterngenerator.jpg"><img class="thumb" src="img/patterngenerator.jpg" /></a>
<a href="#" data-featherlight="img/patterngenerator.jpg"><img loading="lazy" class="thumb" src="img/patterngenerator.jpg" /></a>
<h2>Interpreting results:</h2>
<p>Printing the gcode generated by the pattern generator with yield a result like this:</p>
<a href="#" data-featherlight="img/linearadvanceresults.jpg"><img class="thumb" src="img/linearadvanceresults.jpg" /></a>
<a href="#" data-featherlight="img/linearadvanceresults.jpg"><img loading="lazy" class="thumb" src="img/linearadvanceresults.jpg" /></a>
<p>Some of the horizontal lines should have obvious thick and thin portions, and some may even have large gaps. You are looking for the line with the most consistent extrusion width from left to right. The K value for this line will be printed to the right of the line. At this point, as shown in the video, you may wish to repeat the test with a narrower range of values either side of this best K value. This will help determine the best value by using a 'higher resolution'.</p>
<h2>Saving the K Factor</h2>
<p>With many of the parameters we have tuned so far, we can permanently save them to either the firmware or EEPROM. As the linear advance K factor is filament dependent, this may not be the best solution if you print with varied filaments, and instead you may prefer to save using your slicer profile. All methods are covered below.</p>
@ -950,7 +950,7 @@
<button class="zoom" onclick="$('html, body').animate({scrollTop: ($('#xyzc').offset().top-200)},500);">Scroll to X/Y/Z steps calculator</button>
</div>
<p>This tab serves as a companion for this video: <a href="https://youtu.be/2v7EGDp55n4" target="_blank">Calibrating your XYZ steps using a dial gauge for maximum accuracy</a></p>
<iframe width="480" height="360" src="https://www.youtube.com/embed/2v7EGDp55n4" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<iframe loading="lazy" width="480" height="360" src="https://www.youtube.com/embed/2v7EGDp55n4" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<p>It is common practice for 3D printer users to measure a 20mm calibration cube to see how dimensionally accurate their machine is. While this is a very valid test to measure the accuracy of their printed parts, it is not a suitable measurement to base adjustments of the X, Y and Z steps per mm.</p>
<h2>X, Y and Z steps per unit</h2>
<p>Many people are familiar with E-steps, which is the value in the firmware that dictates how many steps the extruder stepper motor needs to rotate to push through 1 unit of material (typically millimetres). Depending on if the extruder is geared or not, this number can vary quite a lot and needs to be set accurately for prints to come out properly. <a href="#esteps">Calibrating E-steps already has its own tab.</a></p>
@ -959,16 +959,16 @@
<p>There are two choices here, which are both convient:</p>
<ol>
<li>On the Marlin LCD menu, go to Configuration > Advanced Configuration > Steps per mm. Your machine may say steps per inch if that is how you have it configured. The values will be shown on the LCD:<br>
<a href="#" data-featherlight="img/lcdstepsperunit.jpg"><img class="thumb" src="img/lcdstepsperunit.jpg" /></a></li>
<a href="#" data-featherlight="img/lcdstepsperunit.jpg"><img loading="lazy" class="thumb" src="img/lcdstepsperunit.jpg" /></a></li>
<li>Connect via terminal, and send <b>M503</b>. This will report the variables currently being used by the firmware. Somewhere in the long outpout, it will say 'Steps per unit' and list your values on the next line:<br>
<a href="#" data-featherlight="img/terminalstepsperunit.jpg"><img class="thumb" src="img/terminalstepsperunit.jpg" /></a></li>
<a href="#" data-featherlight="img/terminalstepsperunit.jpg"><img loading="lazy" class="thumb" src="img/terminalstepsperunit.jpg" /></a></li>
</ol>
<h2>How are X, Y and Z steps usually calculated?</h2>
<p>The steps per unit for the Z, Y and Z axes are a function of the mechanical and electronic components of the printer. These include the type of stepper motor, the type of belt/lead screw, the amount of micro stepping and so on. An excellent resource exists in the <a href="https://blog.prusaprinters.org/calculator_3416/" target="_blank">Prusa RepRap Calculator</a>. In the 'Stepper Motor' section, you can enter the specifications of your machine and the correct steps per unit will be calculated.</p>
<h2>What not to do - Measuring printed parts</h2>
<p>Often people will print a 20mm calibration cube and measure the external faces to see how accurate their machine is. While this is a valid measurement for determining how accurate the output of the printer is, it is NOT the correct measurement for calibrating X, Y and Z steps. This is because the printed part is the result of many more variables other than how far the X, Y and Z axes are moving during the print.</p>
<p>A simple demonstration of this can be made by printing three 20mm calibration cubes, with no changes to the machine but the extruder flow rate altered for each test. In the image below, the cubes have flow rates of 80%, 96% and 120%. Although they look identical from a distance, there is a clear variation in their external dimensions when measuring with calipers.</p>
<a href="#" data-featherlight="img/cubeflowvariation.jpg"><img class="thumb" src="img/cubeflowvariation.jpg" /></a>
<a href="#" data-featherlight="img/cubeflowvariation.jpg"><img loading="lazy" class="thumb" src="img/cubeflowvariation.jpg" /></a>
<p>If the cube can vary this much without adjusting steps per unit, it goes to show that printed parts are not a reliable indicator of whether the steps per unit are correctly configured. Commenters on the video have also pointed out that the printed plastic will shrink as it cools, and this will differ for different materials and even for different colours/age/filament condition. Another relevant variable that ruins our results. Yes, we do care about the accuracy of the final part, but we need a better way to measure X, Y and Z movement.</p>
<h2>What to do - Measuring raw axis movement</h2>
<p>The primary variable we need to eliminate is the extruded plastic. Therefore we want to measure the movement of each axis when not printing, comparing target vs actual movement. This is where our calipers or preferably a dial gauge comes in handy. Our aim is to mount the dial gauge so that when we move an axis, it measures eactly how far it has travelled.</p>
@ -1034,12 +1034,12 @@
<p>As we know from our earlier 20mm calibration cube test, there is more to the final printed dimensions that just the steps per unit for each axis.</p>
<p>Changing the slicer flow rate will influence the overall dimensions, although this also has an effect on every other aspect of the finished print. One obvious area is whether there are gaps inbetween individual extrusions (flow rate too low) or the individual extrusions overlap too much and bulge (flow rate too high). Perhaps the flow rate should be used to only make very small adjustments.</p>
<p>Some slicers have dimensional accuracy compensation. Seen below is this setting in PrusaSlicer (found in Print Settings > Advanced > Slicing):</p>
<a href="#" data-featherlight="img/prusaslicercompensation.jpg"><img class="thumb" src="img/prusaslicercompensation.jpg" /></a>
<a href="#" data-featherlight="img/prusaslicercompensation.jpg"><img loading="lazy" class="thumb" src="img/prusaslicercompensation.jpg" /></a>
<p>A similar feature exists in Cura (found in Shell > Horizontal expansion):</p>
<a href="#" data-featherlight="img/curacompensation.jpg"><img class="thumb" src="img/curacompensation.jpg" /></a>
<a href="#" data-featherlight="img/curacompensation.jpg"><img loading="lazy" class="thumb" src="img/curacompensation.jpg" /></a>
<p>Experimentation with these features would need to be undertaken to fully understand their advantages and disadvantages. For instance, increasing the X/Y measurements may fix the external dimensions but negatively impact the accuracy of printed holes.</p>
<p>Sometimes a machine can be upgraded to make it more accurate. For instance, I have a theory that using a belt pulley rather than a smooth surfaced bearing as a belt idler should have the belt ride the idler more consistently, due to the teeth of the belt deforming unevenly over the bearing surface:</p>
<a href="#" data-featherlight="img/bearingidlerdeformation.jpg"><img class="thumb" src="img/bearingidlerdeformation.jpg" /></a>
<a href="#" data-featherlight="img/bearingidlerdeformation.jpg"><img loading="lazy" class="thumb" src="img/bearingidlerdeformation.jpg" /></a>
<p>One final measure, that is the least desirable, is to design parts to be printed bigger or smaller to compensate. This is a band aid approach and falls apart very quickly once we print geometry designed by other people.</p>
</div>

View File

@ -2,7 +2,7 @@ var scripts = `
<link type="text/css" rel="stylesheet" href="css/styles.css">
<link type="text/css" rel="stylesheet" href="css/responsive-tabs.css">
<link type="text/css" rel="stylesheet" href="css/featherlight.css">
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@300&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@300,400&display=swap" rel="stylesheet">
<script src="js/jquery-3.5.1.js"></script>
<script src="js/jquery.responsiveTabs.js"></script>
<script src="js/videobox.js"></script>

View File

@ -24,7 +24,7 @@
<div id="general">
<h2>General Principles</h2>
<p>This page serves as a companion for this video: <a href="https://youtu.be/fiwbp2NKyTY" target="_blank">3D printer troubleshooting - Free step by step help website</a></p>
<iframe width="480" height="360" src="https://www.youtube.com/embed/fiwbp2NKyTY" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<iframe loading="lazy" width="480" height="360" src="https://www.youtube.com/embed/fiwbp2NKyTY" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<p>It aims to provide a methodology for identifying and solving common problems that occur with hobby 3D printers. If you find it helps you and you would like to say thank you, here is a donation link: <a href="https://paypal.me/testlawgicau" target="blank">PayPal.me</a></p>
<p>Special thanks to my <a href="http://www.patreon.com/teachingtech" target="_blank">Patrons</a> for helping define the contents.</p>
<p>Watch the video, read this tab, prepare yourself with the appropriate tools and then work through relevant tabs.</p>
@ -57,7 +57,7 @@
<div id="tools">
<h2>Tools</h2>
<p>I have a video on useful tools for 3D printing: <a href="https://youtu.be/XBoXp31PCo8" target="_blank">Essential (and obscure) 3D printing tools and spares</a></p>
<iframe width="480" height="360" src="https://www.youtube.com/embed/XBoXp31PCo8" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<iframe loading="lazy" width="480" height="360" src="https://www.youtube.com/embed/XBoXp31PCo8" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<p>However, here we are focused on specific tools to collect information, because when troubleshooting a 3D printer: knowledge is power.</p>
<h4>Calipers</h4>
<p>Digital calipers are a cheap and easy to use tool for measuring various dimensions. This may include printed objects, probe offsets, and measuring the movement of the machine. A ruler is a useful backup but will not be as accurate as digital calipers. Calipers are also excellent for measuring objects when 3D modelling.</p>
@ -100,7 +100,7 @@
<h2>Frame Check</h2>
<p>Before going down the rabbit hole diagnosing problems, it is probably best to confirm they actually exist by making sure your 3D printer is in good condition.</p>
<p>The following is a guide to 3D printer maintenance that should serve you well:</p>
<iframe width="480" height="360" src="https://www.youtube.com/embed/kAafiApJs9A" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<iframe loading="lazy" width="480" height="360" src="https://www.youtube.com/embed/kAafiApJs9A" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<p>Additionally, I have a list of items to check around the printer on the <a href="calibration.html#frame" target="_blank">Frame tab of my Calibration page</a> that should serve as a handy guide to work through.</p>
</div>
@ -111,7 +111,7 @@
<p>This one seems clear cut: just plug in the cable between the computer/Raspberry Pi and the mainboard. It is still worth mentioning that not all USB cables are created equal. If you are having trouble connecting, try another cable.</p>
<h4>Port</h4>
<p>On a Windows machine, after a driver is installed, the name of the port can be found in <b>Device Manager</b>:</p>
<a href="#" data-featherlight="img/devicemanager.jpg"><img class="thumb" src="img/devicemanager.jpg" /></a>
<a href="#" data-featherlight="img/devicemanager.jpg"><img loading="lazy" class="thumb" src="img/devicemanager.jpg" /></a>
<p>As you can see, the name of the port will be <b>COM</b> followed by a number. In the example above: <b>COM6</b>.</p>
<p>On a Mac, Linux or with Octoprint on a Raspberry Pi, the name of the port will typically start with <b>ttyUSB</b>, followed by a number. For example <b>/dev/ttyUSB0</b>.</p>
<p>On any system, there may be more than one device listed, so trial and error may be required to find the right port.</p>
@ -119,10 +119,10 @@
<p>Baud is the speed of the serial connection between the host device and mainboard. 99% of the time the baud should be either <b>115200</b> or <b>250000</b>. This is set in the firmware but even if you don't access to the firmware source to check, just try one and if needed, the other.</p>
<h4>Connecting</h4>
<p>In Pronterface, select the port and baud in the top left and then click connect.</p>
<a href="#" data-featherlight="img/pronterfaceconnection.jpg"><img class="thumb" src="img/pronterfaceconnection.jpg" /></a>
<a href="#" data-featherlight="img/pronterfaceconnection.jpg"><img loading="lazy" class="thumb" src="img/pronterfaceconnection.jpg" /></a>
<p>If this is successful, you will receive a confirmation message in the terminal output. If not, try a different combination.</p>
<p>With Octoprint, we have the same options, but Octoprint will automatically cycle between them until it finds the right combination.</p>
<a href="#" data-featherlight="img/octoprintconnection.jpg"><img class="thumb" src="img/octoprintconnection.jpg" /></a>
<a href="#" data-featherlight="img/octoprintconnection.jpg"><img loading="lazy" class="thumb" src="img/octoprintconnection.jpg" /></a>
<h4>What to send to get started</h4>
<p>To test your serial connection, send <a href="https://marlinfw.org/docs/gcode/M115.html" target="_blank"><b>M115</b></a> which will report on your firmware, including when it was compiled and uploaded.</p>
<p>Another useful command is <a href="https://marlinfw.org/docs/gcode/M503.html" target="_blank"><b>M503</b></a>, which will return all of the firmware variables currently in place. This output is worth copying and pasting in a document before performing major modifications. This list of variables also represents everything that can be changed and stored in the EEPROM without the need for firmware compilation.</p>
@ -131,7 +131,7 @@
<ul>
<li>Close Simplify3D/Cura/other 3D printing software - These may connect automaticlly to available machines, hogging the serial port and preventing your terminal software from connecting.</li>
<li>Double check you serial port settings in the firmware - 8 bit mainboard generally had the same settings but 32 bit boards vary. Consult the documentation to ensure you have the right values in <b>configuration.h</b>. The examle below is from a Creality V4 32 bit mainboard:<br />
<a href="#" data-featherlight="img/v4serialsettings.jpg"><img class="thumb" src="img/v4serialsettings.jpg" /></a></li>
<a href="#" data-featherlight="img/v4serialsettings.jpg"><img loading="lazy" class="thumb" src="img/v4serialsettings.jpg" /></a></li>
<li>Turn the printer on - Some mainboards will come to life solely from a 5V USB cable, where as others need the main power switch turned on.</li>
</ul>
</div>
@ -148,11 +148,11 @@
</ul>
<h4>First Layer Calibration</h4>
<p>I have already created a <a href="calibration.html#firstlayer" target="_blank">First Layer Calibration page</a> to address this need. It features a companion video:</p>
<iframe width="480" height="360" src="https://www.youtube.com/embed/Ze36SX1xzOE" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<iframe loading="lazy" width="480" height="360" src="https://www.youtube.com/embed/Ze36SX1xzOE" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<p>It also features a gcode generator to created a first layer test print to suit your 3D printer.</p>
<a href="#" data-featherlight="img/firstlayerpreview.jpg"><img class="thumb" src="img/firstlayerpreview.jpg" /></a>
<a href="#" data-featherlight="img/firstlayerpreview.jpg"><img loading="lazy" class="thumb" src="img/firstlayerpreview.jpg" /></a>
<p>Finally, there are reference diagrams to help you deterine your results.</p>
<a href="#" data-featherlight="img/firstlayer.jpg"><img class="thumb" src="img/firstlayer.jpg" /></a> <a href="#" data-featherlight="img/firstlayer2.jpg"><img class="thumb" src="img/firstlayer2.jpg" /></a>
<a href="#" data-featherlight="img/firstlayer.jpg"><img loading="lazy" class="thumb" src="img/firstlayer.jpg" /></a> <a href="#" data-featherlight="img/firstlayer2.jpg"><img loading="lazy" class="thumb" src="img/firstlayer2.jpg" /></a>
<h4>Other Factors</h4>
<p>Apart from the levelling and physical distance between the nozzle and bed surface, there are a few other factors you can investigate if you are still having trouble with your first layer:</p>
<ul>
@ -177,12 +177,12 @@
<h4>PTFE tube not correctly seated</h4>
<p>Hot ends can either be lined or 'all metal'. In a lined hot end, the PTFE tube runs through the heat break and either into the inside of the nozzle or is jammed hard against the back/top of it. This design is popular on Creality and other budget machines.</p>
<p>If there are any gaps in the system between the PTFE tube and the metal components, filament is free to expand into the wider cavity and prevent the filament from moving through the whole system. This is illustrated in the diagram below with the resulting filament bulge which causes the jam:</p>
<a href="#" data-featherlight="img/ptfegap.jpg"><img class="thumb" src="img/ptfegap.jpg" /></a>
<a href="#" data-featherlight="img/ptfegap.jpg"><img loading="lazy" class="thumb" src="img/ptfegap.jpg" /></a>
<p>To stop this problem, it is essential to have a good quality tube fitting that wll hold the PTFE tube firmly in place. As these fittings can degrade over time, <a href="https://www.thingiverse.com/thing:3203831" target="_blank">Luke Hatfield has developed a simple but effective fix</a> to modify Creality lined hot ends so the tube remains seated. CHEP has made a great video on testing this solution:</p>
<iframe width="480" height="360" src="https://www.youtube.com/embed/7tCxO17XZtw" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<iframe loading="lazy" width="480" height="360" src="https://www.youtube.com/embed/7tCxO17XZtw" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<h4>Stripped filament in hobbed gear</h4>
<p>This problem is illustrated below:</p>
<a href="#" data-featherlight="img/strippedfilament.jpg"><img class="thumb" src="img/strippedfilament.jpg" /></a>
<a href="#" data-featherlight="img/strippedfilament.jpg"><img loading="lazy" class="thumb" src="img/strippedfilament.jpg" /></a>
<p>The hobbed gear has tiny teeth to grab the filament and push it through the hot end. This problem often comes from an obstruction further along the system - a blockage in the nozzle for instance. The filament has no where to go, the hobbed gear cuts a trench in the filament and the debris clog the hobbed gear(s). Quite often this problem must be checked and cleared after solving a jam elsewhere. After disassembly to gain access, a spare toothbrush is an excellent tool for cleaning the hobbed gear(s).</p>
<h4>Heat creep</h4>
<p>Heat creep is when areas of the printer that are meant to stay cool slowly heat up to problematic temperatures. It is vital that only a specific section of the hot end assembly remains hot enough to fully melt the filament. To achieve this, a heat sink is typically fitted above a heat break that is actively cooled by a fan. This prevents the filament path above the melt zone from heating up and softening or melting the filament prematurely. This is illustrated well by Slice Engineering on their <a href="https://www.sliceengineering.com/products/copperhead%E2%84%A2" target="_blank">Copperhead hot end page, where we can see the heater block is hot but everything above it is cool:</a></p>
@ -194,7 +194,7 @@
<p>Heat creep jams normally occur a set amount of time into the print. If you notice that the printer jams approximately the same amount of time into the print regardless of the object, this may be the amount of time it takes the heat to creep up and saturate the system.</p>
<h4>Filament path obstruction/tangle</h4>
<p>This one can be easy to overlook. In the case of a clear tangle of the filament on the spool, the cause of the jam will be obvious:</p>
<a href="#" data-featherlight="img/filamenttangle.jpg"><img class="thumb" src="img/filamenttangle.jpg" /></a>
<a href="#" data-featherlight="img/filamenttangle.jpg"><img loading="lazy" class="thumb" src="img/filamenttangle.jpg" /></a>
<p>It is also worth checking the filament can pull freely from the spool if you have some sort of guide system like a reverse bowden tube. Also check the filament spool can rotate freely.</p>
<h4>Physical obstruction in nozzle</h4>
<p>After printing a higher temperature filament, it is important to ensure that the old filament has been completely purged from the nozzle when switching back to a lower temperature filament like PLA. Failing to do this or perhaps leaving filament to degrade in a hot nozzle might leave harder chunks of filament obstructing the path through the nozzle. An acupuncture needle, cleaning filament pushed through at high temp or performing a cold pull will clean the inside the inside of the nozzle in many cases. Sometimes, however, it is necessary to remove the nozzle and use a solvent or my favourite: a blow torch, to clean the nozzle more aggressively.</p>
@ -205,7 +205,7 @@
<p>This one is very rare, but if retraction distance is set too high in the slicer, the filament may be pulled so far out of the nozzle that a molten section pulls into the cool zone, solidifying as it sticks to the walls, jamming the system.</p>
<h4>Seasoning the hot end</h4>
<p>This is something I've never personally done, but it has been the correct solution for patrons when all else had failed. The process involves introducing a small amount of oil to lubricate the internals of the hot end and assist filament in moving through freely. This process is demonstrated below by Nillabean:</p>
<iframe width="480" height="360" src="https://www.youtube.com/embed/shSfZxK-VUk" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<iframe loading="lazy" width="480" height="360" src="https://www.youtube.com/embed/shSfZxK-VUk" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<h4>Extruder stepper current too low</h4>
<p>This should only be examined after checking and eliminating the more common causes above. Increasing the current to the extruder stepper motor and therefore the torque available will increase the system's ability to push filament out of the nozzle. If all else is well this may be just what is needed to make the printer reliable. If there is a blockage or problem elsewhere, however, this step will at best mask the problem or at worst enflame it. <a href="https://teachingtechyt.github.io/calibration.html#steppers" target="_blank">Stepper motor current tuning is covered on this calibration page</a>.</p>
<h4>Linear advance with incompatible drivers</h4>
@ -231,14 +231,14 @@ G90</pre>
<p>We'll now assume you have at least one axis that is travelling in reverse and needs fixing.</p>
<h4>Reversing direction in the firmware</h4>
<p>For Marlin firmware, in <b>configuration.h</b>, search for the term <b>INVERT_X</b> to be taken to the section shown below:</p>
<a href="#" data-featherlight="img/marlinstepperdirection.jpg"><img class="thumb" src="img/marlinstepperdirection.jpg" /></a>
<a href="#" data-featherlight="img/marlinstepperdirection.jpg"><img loading="lazy" class="thumb" src="img/marlinstepperdirection.jpg" /></a>
<p>Simply toggle the value from true to false or vice versa for any axes that are reversed. Recompile and flash the changes.</p>
<h4>Reversal through wiring changes</h4>
<p>If you don't have access to the firmware source, there is the option of altering the wiring. The simplest solution is to just plug in the stepper motor in reverse, however much to the time the connectors will make this difficult. Rather than using a blade to modify the connector and mangle it, a better solution is to lift the plastic connector housing off the mainboard PCB and then replace it facing the other way. This is illustrated in the picture below, where the E stepper port has been reversed:</p>
<a href="#" data-featherlight="img/stepperplugreversed.jpg"><img class="thumb" src="img/stepperplugreversed.jpg" /></a>
<a href="#" data-featherlight="img/stepperplugreversed.jpg"><img loading="lazy" class="thumb" src="img/stepperplugreversed.jpg" /></a>
<h4>Stepper motor stutters from incorrect wiring</h4>
<p>Sometimes you may complete an upgrade of stepper motors to another brand which has different wiring. If connected without remedy the stepper motor will stutter back and forth rather than turning smoothly in either direction. In these cases, the most common fix is to remove the centre two pins from the connector and swap them. This can be fiddly but is doable with a pick or tiny screwdriver.</p>
<a href="#" data-featherlight="img/flippedstepperwires.jpg"><img class="thumb" src="img/flippedstepperwires.jpg" /></a>
<a href="#" data-featherlight="img/flippedstepperwires.jpg"><img loading="lazy" class="thumb" src="img/flippedstepperwires.jpg" /></a>
<p>If your stepper motor current was set far too low, the same stutters could occur. Proceed with caution in either switching wires or increasing the current.</p>
</div>
@ -267,26 +267,26 @@ z_min: open</pre>
<p>Let's say we press the X axis endstop but the Y reports as triggered. In this case we know that the endstops are plugged into the wrong port on the mainboard and the fix is a simple case of switching the plugs.</p>
<h4>Endstops report in reverse</h4>
<p>If the endstops report <b>TRIGGERED</b> when not pressed, and then <b>open</b> when pressed, you need to invert your endstop logic in the firmware. In <b>configuration.h</b>, search for <b>X_MIN</b> to be taken to the section below, where you can toggle between true/false for any axis working in reverse.</p>
<a href="#" data-featherlight="img/endstopinverting.jpg"><img class="thumb" src="img/endstopinverting.jpg" /></a>
<a href="#" data-featherlight="img/endstopinverting.jpg"><img loading="lazy" class="thumb" src="img/endstopinverting.jpg" /></a>
<p>In the case that the firmware source is not available, you can change which pins are connected on the microswitch. The common pin will always be connected, so you can change whether NO (normally open) or NC (normally closed) is the other pin connected to back to the mainboard.</p>
<h4>Endstop status never changes - always reports open or TRIGGERED</h4>
<p>This can be caused by several things. The first is that the endstop is not plugged in or plugged into the wrong port (eg. max port instead of min. If all of the axes work except for one, this is likely your culprit.</p>
<p>After double checking connections, and we find there is still no response from pressing any of the switches with <b>M119</b>, we have an option in the firmware to toggle between pull down and pull up resistors to prevent a floating state. In <b>configuration.h</b>, search for <b>ENDSTOPPULLUPS</b> to be taken to the section below, where you can comment out <b>ENDSTOPPULLUPS</b> and uncomment <b>ENDSTOPPULLDOWNS</b>. In this area, we have three options: using endstoppullups (default), endstoppulldowns (possible), or neither (very unlikely).</p>
<a href="#" data-featherlight="img/endstoppullups.jpg"><img class="thumb" src="img/endstoppullups.jpg" /></a>
<a href="#" data-featherlight="img/endstoppullups.jpg"><img loading="lazy" class="thumb" src="img/endstoppullups.jpg" /></a>
<p>If all of the endstops now come to life, you still may need to tweak the logic as described above. If there is still no response, perhaps you are using powered endstops and they are wired incorrectly.</p>
<h4>One switch still not responding - Testing for broken wiring</h4>
<p>If the procedures above do not produce working endstops, we need to consider that a switch or the wiring is damaged. This is particularly relevant if only one endstop is not working as intended.</p>
<p>A quick way to identify that wiring or a faulty switch is the issue is to remove the endstop plug from the mainboard and use a jumper to short the signal and ground pins, simulating a closed switch.</p>
<p class="warning">Warning: If your mainboard endstop ports have pins for 5V, ground and signal, take extra care to avoid connecting 5V to signal or ground. This will likely kill your mainboard! Consult the wiring diagram for your mainboard to avoid disaster.</p>
<a href="#" data-featherlight="img/endstopjumper.jpg"><img class="thumb" src="img/endstopjumper.jpg" /></a>
<a href="#" data-featherlight="img/endstopjumper.jpg"><img loading="lazy" class="thumb" src="img/endstopjumper.jpg" /></a>
<p>If the jumper out/in provides correct <b>M119</b> reporting then we know for sure we have an electrical problem with wiring or the switch.</p>
<h4>Using a multimeter to test continuity</h4>
<p>A multimeter is required and we will use the continuity feature. In this case the multimeter will indicate when the two probes are connected by the screen (and a buzz if your multimeter supports this). The image below shows the typical symbol for continuity, and how the screen display changes when the probes are touching or not touching. The exact value doesn't matter when the probes are touching, all we care about is that the display registers something to indicate we have continuity.</p>
<a href="#" data-featherlight="img/multimetercontinuity.jpg"><img class="thumb" src="img/multimetercontinuity.jpg" /></a>
<a href="#" data-featherlight="img/multimetercontinuity.jpg"><img loading="lazy" class="thumb" src="img/multimetercontinuity.jpg" /></a>
<p>Now we can use the multimeter to first test the actual switch. Connecting the probes to the microwitch terminals, We would expect continuity to change when the switch is pressed or not pressed. If it does, the switch is good. If not, the switch needs replacing. The image below shows the switch to be good. It doesn't matter if it reads continuity when it is pressed or open, as the endstop logic can be adjusted in the firmware.</p>
<a href="#" data-featherlight="img/multimetertestswitch.jpg"><img class="thumb" src="img/multimetertestswitch.jpg" /></a>
<a href="#" data-featherlight="img/multimetertestswitch.jpg"><img loading="lazy" class="thumb" src="img/multimetertestswitch.jpg" /></a>
<p>Assuming the switch is good, we can now probe each wire between the switch and the mainboard to check for breaks. Connect the multimeter probes to each end of the wire, and hopefully the continuity should be measured. If one or more of the wires do not, there is an internal break and the wire(s) need to be replaced. The image below shows the red wire to be good but the black wire to be broken. If there is no continuity measured with the multimeter then there is no chance the signal can be transmitted correctly from the switch to the mainboard.</p>
<a href="#" data-featherlight="img/multimetertestwire.jpg"><img class="thumb" src="img/multimetertestwire.jpg" /></a>
<a href="#" data-featherlight="img/multimetertestwire.jpg"><img loading="lazy" class="thumb" src="img/multimetertestwire.jpg" /></a>
<h4>Applying this testing to filament runout sensors</h4>
<p>Most filament runout sensors are simple microswitches in a fancy housing, the same switches used for endstops. <b>M119</b> also report filament runout status. If you start a print and find that the machine immediately tries to start a filament swap despite filament being loaded, you can use <b>M119</b> to diagnose. With filament runout enabled in the firmware, the <b>M119</b> output should read:</p>
<pre>SENDING:M119
@ -298,7 +298,7 @@ filament: TRIGGERED</pre>
<p>If you manually add or remove filament from the sensor, you would expect the report to change from <b>open</b> to <b>TRIGGERED</b> accordingly.</p>
<p>For an encoder based runout sensor (eg. BTT smart filament runout sensor), we need to repeatedly pull the filament through around 1mm at a time, sending M119 and read the status. We would expect <b>M119</b> to report <b>open</b> most of the time and then <b>TRIGGERED</b> on occasion.</p>
<p>Like the endstops, we can change the logic and whether pullup or pulldown resistors are used in <b>configuration.h</b> of the firmware:</p>
<a href="#" data-featherlight="img/marlinfilamentrunout.jpg"><img class="thumb" src="img/marlinfilamentrunout.jpg" /></a>
<a href="#" data-featherlight="img/marlinfilamentrunout.jpg"><img loading="lazy" class="thumb" src="img/marlinfilamentrunout.jpg" /></a>
<p>We can also use a multimeter to test the wiring the same as for endstops.</p>
<h4>Applying this testing to Z probes</h4>
<p>With ABL enabled in the firmware, <b>M119</b> will also report probe status:</p>
@ -310,8 +310,8 @@ z_min: open
z_probe: open</pre>
<p>We can use the above methods to troubleshoot the probe triggering. This works well for probes like the EZabl from TH3D or Prusa PINDA probe. You can expect the <b>M119</b> status for the probe to change when you add or remove an object beneath the probe. Please remember that some probes only detect metal objects!</p>
<p>You may have noticed that the probe can have its logic reversed and pullup or pulldown resistors toggled at the same place as the endstops:</p>
<a href="#" data-featherlight="img/endstopinverting.jpg"><img class="thumb" src="img/endstopinverting.jpg" /></a>
<a href="#" data-featherlight="img/endstoppullups.jpg"><img class="thumb" src="img/endstoppullups.jpg" /></a>
<a href="#" data-featherlight="img/endstopinverting.jpg"><img loading="lazy" class="thumb" src="img/endstopinverting.jpg" /></a>
<a href="#" data-featherlight="img/endstoppullups.jpg"><img loading="lazy" class="thumb" src="img/endstoppullups.jpg" /></a>
<p class="warning">Note: The testing of a BLtouch is slightly different to other probes. It is covered in its own tab.</p>
</div>
@ -325,7 +325,7 @@ z_probe: open</pre>
<h4>BLtouch wiring</h4>
<p>A BLtouch requires 5 wires. Three are used to control it (red, yellow and brown), and the remaing two are used to read the trigger signal from it (black and white). Sometimes extension looms use different colours, such as the Creality loom which substitutes blue for brown.</p>
<p class="warning">Pay attention to wiring diagrams! The following diagram was created for a <a href="https://youtu.be/neS7lB7fCww" target="_blank">video guide for the Creality V4 32 bit mainoards</a>. The comments are littered with people who assumed the Creality extension loom would match the Creality board, connected the BLtouch incorrectly and blew up their mainboard. Never assume the extension loom you are using matches the input to the mainboard (even if they are both Creality).</p>
<a href="#" data-featherlight="img/crealityv4bltouchwiring.jpg"><img class="thumb" src="img/crealityv4bltouchwiring.jpg" /></a>
<a href="#" data-featherlight="img/crealityv4bltouchwiring.jpg"><img loading="lazy" class="thumb" src="img/crealityv4bltouchwiring.jpg" /></a>
<p>Here is a break down of the pins:</p>
<ul>
<li><span style="color:red; font-weight:900;"> Red: </span> 5V power to BLtouch. (Some mainboards supply 3.3V and the BLtouch can be configured to operate with this logic level).</li>
@ -354,9 +354,9 @@ z_probe: open</pre>
<h4>BLtouch physical mounting</h4>
<p>It should go without saying that everything should be rigidly mounted. BLtouch kits come with small springs but I have never used them without issue. Check for any loose fasteners in the print head and probe mounting assembly as a first step. If there is play and the BLtouch can pivot or slide from probing point to probing point, accuracy will really suffer.</p>
<p>Ideally the BLtouch (or any other ABL probe) will be mounted as closely to the nozzle as possible, but not so close it fails from exposure to heat. A silicone sock over the heater block can assist here. What people often forget is that the tip of the retracted probe needs to be a certain distance from the tip of he nozzle, as illustrated in the Antclabs diagram:</p>
<a href="#" data-featherlight="img/bltouchdimensions.jpg"><img class="thumb" src="img/bltouchdimensions.jpg" /></a>
<a href="#" data-featherlight="img/bltouchdimensions.jpg"><img loading="lazy" class="thumb" src="img/bltouchdimensions.jpg" /></a>
<p>If your BLtouch is mounting too far off this target of 2.3 to 4.3mm, the probing results may be inaccurate. For a guide to measuring and inputing the probe X, Y and Z offsets, see this video guide:</p>
<iframe width="480" height="360" src="https://www.youtube.com/embed/fN_ndWvXGBQ" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<iframe loading="lazy" width="480" height="360" src="https://www.youtube.com/embed/fN_ndWvXGBQ" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<h4>What to check if ABL compensation seems non existant or probing is inaccurate</h4>
<p>Firstly, check the items previously listed on this page:</p>
<ul>
@ -387,11 +387,11 @@ z_probe: open</pre>
<p>Firstly, I need to manually adjust my bed of this printer to get it closer to flat. The numbers do tell another story though. For row zero and column 1, we have a classic high, low, high warped bed. The rest of the bed seems to be more of a general slant. Keep in mind the point 0,0 is likely at the front left of your bed, which may be counter intuitive.</p>
<p>For a more visual representation, the <a href="https://plugins.octoprint.org/plugins/bedlevelvisualizer/" target="_blank">Bed Visualizer</a> plugin for Octoprint will provide attractive and informative diagrams (pictured below)</p>
<p>There is now a fantastic <a href="http://lokspace.eu/3d-printer-auto-bed-leveling-mesh-visualizer/" target="_blank">web based visualiser available from Lokster</a>. Octoprint not required! Thanks to ouartsiw for pointing this out.</p>
<a href="#" data-featherlight="img/bedvisualizerplugin.jpg"><img class="thumb" src="img/bedvisualizerplugin.jpg" /></a>
<a href="#" data-featherlight="img/bedvisualizerplugin.jpg"><img loading="lazy" class="thumb" src="img/bedvisualizerplugin.jpg" /></a>
<p>Repeating either test should give you a good idea of the probe's accuracy. If the results vary wildly it may indicate an underlying problem and more targeted testing is required.</p>
<h4>M48 Probe Repeatability test</h4>
<p>Another option we have is to enable a purpose built probing accuracy test built into Marlin firmware. In <b>configuration.h</b>, search for <b>M48</b> to find the section below and uncomment as shown:</p>
<a href="#" data-featherlight="img/marlinm48.jpg"><img class="thumb" src="img/marlinm48.jpg" /></a>
<a href="#" data-featherlight="img/marlinm48.jpg"><img loading="lazy" class="thumb" src="img/marlinm48.jpg" /></a>
<p>Now when you send <a href="https://marlinfw.org/docs/gcode/M048.html" target="_blank"><b>M48</b></a> via terminal (or via the LCD screen) the probe will test the same point repeatdly and return the results:</p>
<pre>Finished!
Mean: -0.006250 Min: -0.010 Max: 0.000 Range: 0.010
@ -403,27 +403,27 @@ Standard Deviation: 0.002795</pre>
<div id="pindebugging">
<h2>Pin Debugging / Direct Pin Control</h2>
<p>Marlin firmware provides very powerful low level control of your printer by enabling <b>PINS_DEBUGGING</b> and <b>DIRECT_PIN_CONTROL</b> in <b>configuration_adv.h</b>:</p>
<a href="#" data-featherlight="img/marlinpindebugging.jpg"><img class="thumb" src="img/marlinpindebugging.jpg" /></a>
<a href="#" data-featherlight="img/marlinpindebugging.jpg"><img loading="lazy" class="thumb" src="img/marlinpindebugging.jpg" /></a>
<p>As the firmware comments suggest, after recompiling the firmware and uploading we can use gcode to access this feature.</p>
<p class="warning">These features are intended for temporary testing only. There is the potential to damage your printer if you don't know what you're doing. Proceed with caution and disable these features after troubleshooting is complete.</p>
<h4>M43 - Debug Pins</h4>
<p><a href="https://marlinfw.org/docs/gcode/M043.html" target="_blank"><b>M43</b></a> offers a way to see exactly what the pins are doing as we have the firmware configured.</p>
<p>Sending <b>M43</b> by itself will list all of the pins and their functions:</p>
<a href="#" data-featherlight="img/m43_1.jpg"><img class="thumb" src="img/m43_1.jpg" /></a>
<a href="#" data-featherlight="img/m43_1.jpg"><img loading="lazy" class="thumb" src="img/m43_1.jpg" /></a>
<p>As you can see, there is a lot of information and the formatting suffers as a result. There also appears to be some pins missing.</p>
<p>To get a slightly cleaner output, we can instead send <b>M43 I</b>, which will omit telling you that some pins are protected:</p>
<a href="#" data-featherlight="img/m43_2.jpg"><img class="thumb" src="img/m43_2.jpg" /></a>
<a href="#" data-featherlight="img/m43_2.jpg"><img loading="lazy" class="thumb" src="img/m43_2.jpg" /></a>
<p>If a pin is protected, that means the firmware is using it for an important function and it doesn't want you manually change the state.</p>
<p>Some pins are still missing, but we can still query a specific pin, by adding the <b>P</b> argument followed by the pin number:</p>
<a href="#" data-featherlight="img/m43_3.jpg"><img class="thumb" src="img/m43_3.jpg" /></a>
<a href="#" data-featherlight="img/m43_3.jpg"><img loading="lazy" class="thumb" src="img/m43_3.jpg" /></a>
<p>We need to use the integer pin numbers (eg. 0, 1, 2, 3 ,4 , 5...) assigned by <b>M43</b> rather than the specific pin numbers from the firmware (eg. P2_04).</p>
<h4>Specific M43 Uses</h4>
<p><b>M43 S</b> will actually test the BLtouch for us, by moving the pin in and out several times and then waiting for us to manually trigger the pin.</p>
<a href="#" data-featherlight="img/m43_4.jpg"><img class="thumb" src="img/m43_4.jpg" /></a>
<a href="#" data-featherlight="img/m43_4.jpg"><img loading="lazy" class="thumb" src="img/m43_4.jpg" /></a>
<p><b>M43 E1</b> will begin watching the endstops for activity, and <b>M43 E0</b> will stop this. I found no output in the terminal from manually pressing the endstops in this state.</p>
<a href="#" data-featherlight="img/m43_5.jpg"><img class="thumb" src="img/m43_5.jpg" /></a>
<a href="#" data-featherlight="img/m43_5.jpg"><img loading="lazy" class="thumb" src="img/m43_5.jpg" /></a>
<p><b>M43 P[pin] W</b> will begin watching a specific pin for activity. I couldn't find a way to exit this watching state without resetting the printer.</p>
<a href="#" data-featherlight="img/m43_6.jpg"><img class="thumb" src="img/m43_6.jpg" /></a>
<a href="#" data-featherlight="img/m43_6.jpg"><img loading="lazy" class="thumb" src="img/m43_6.jpg" /></a>
<h4>M43 T - Trigger pins</h4>
<p><a href="https://marlinfw.org/docs/gcode/M043-T.html" target="_blank"><b>M43 T</b></a> offers a way to manually control pins with gcode.</p>
<p>Sending <b>M43 T</b> is a variant of <b>M43</b> that allows you to cycle through your mainboard pins, pulsing them for a specific amount of time. I have not tested this personally, but the example linked on the Marlin reference page should illustrate it's use.</p>

View File

@ -41,7 +41,7 @@
<p>Compared to other ABL probes, a BLtouch requires a slight amount of extra wiring. If the mainboard does not have a dedicated 'probe' port or spare PWM output (Creality V1.X boards), a 'pin27 adaptor' is required.</p>
</div>
<p>I have made many BLtouch guide videos in the past, but this one aims to be generic enough to apply to almost any 3D printer. This guide has a companion video with many of the concepts illustrated: <a href="https://youtu.be/eF060dBEnfs" target="_blank">BLtouch for any 3D printer - Comprehensive step by step guide</a></p>
<iframe width="480" height="360" src="https://www.youtube.com/embed/eF060dBEnfs" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<iframe loading="lazy" width="480" height="360" src="https://www.youtube.com/embed/eF060dBEnfs" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<p>For this guide, we will start with the physical mounting of the BLtouch, then cover wiring, firmware changes, calibration, slicer changes, customisation and troubleshooting.</p>
<h4>Physical mounting</h4>
<p>A BLtouch needs to be mounted to the print head of the machine. Ideally the BLtouch (or any other ABL probe) will be mounted as closely to the nozzle as possible, but not so close it fails from exposure to heat. A silicone sock over the heater block can assist here. The BLtouch should be secured tightly. Any play or wobble will destroy accuracy and repeataility. Other considerations when mounting are making sure the BLtouch is not so close to the hot end that it suffers damage from heat, and that its placement does not interfere with homing.</p>
@ -53,16 +53,16 @@
<li><a href="https://www.thingiverse.com/thing:3716043" target="_blank">Artillery3D X1</a></li>
</ul>
<p>The vertical mounting height of the BLtouch tip relative to the tip of nozzle is very important for accuracy. Antclabs have a diagram on their site and advise a target height of 2.3 to 4.3mm.</p>
<a href="#" data-featherlight="img/bltouchdimensions.jpg"><img class="thumb" src="img/bltouchdimensions.jpg" /></a>
<a href="#" data-featherlight="img/bltouchdimensions.jpg"><img loading="lazy" class="thumb" src="img/bltouchdimensions.jpg" /></a>
<p>With the power off, lower the print head down until the nozzle is resting on the bed. If your BLtouch mount is adjustable, you can put an appropriately sized (3mm is ideal) allen key flat on the bed and slide the BLtouch down until the tip touches. For a non adjustable mount, washers can be use to shim the position downwards to spec. If the tip is sitting too low, you need a new mount to prevent the tip hitting the bed/printed part and being damaged.</p>
<a href="#" data-featherlight="img/bltouchspacing.jpg"><img class="thumb" src="img/bltouchspacing.jpg" /></a>
<a href="#" data-featherlight="img/bltouchspacing.jpg"><img loading="lazy" class="thumb" src="img/bltouchspacing.jpg" /></a>
<h4>Wiring loom</h4>
<p>Hopefully you saw the note at the top of the page and purchased a wiring extension loom long enough to go from the BLtouch back to the mainboard. Alternately, you can make your own if you have the appropraite connectors and crimping tools. You want to ensure the loom is protected and can't snag on the moving printer parts. At a minimum, it should be tied to the existing loom to prevent it being caught. Ideally, it should be enclosed in some sort of sleeve or wrap.</p>
<a href="#" data-featherlight="img/loomwraps.jpg"><img class="thumb" src="img/loomwraps.jpg" /></a>
<a href="#" data-featherlight="img/loomwraps.jpg"><img loading="lazy" class="thumb" src="img/loomwraps.jpg" /></a>
<h4>Wiring to mainboard</h4>
<p>A BLtouch requires 5 wires. Three are used to control it (red, yellow and brown), and the remaing two are used to read the trigger signal from it (black and white). Sometimes extension looms use different colours, such as the Creality loom which substitutes blue for brown.</p>
<p class="warning">Pay attention to wiring diagrams! The following diagram was created for a <a href="https://youtu.be/neS7lB7fCww" target="_blank">video guide for the Creality V4 32 bit mainoards</a>. The comments are littered with people who assumed the Creality extension loom would match the Creality board, connected the BLtouch incorrectly and blew up their mainboard. Never assume the extension loom you are using matches the input to the mainboard (even if they are both Creality).</p>
<a href="#" data-featherlight="img/crealityv4bltouchwiring.jpg"><img class="thumb" src="img/crealityv4bltouchwiring.jpg" /></a>
<a href="#" data-featherlight="img/crealityv4bltouchwiring.jpg"><img loading="lazy" class="thumb" src="img/crealityv4bltouchwiring.jpg" /></a>
<p>Here is a break down of the pins:</p>
<ul>
<li><span style="color:red; font-weight:900;"> Red: </span> 5V power to BLtouch. (Some mainboards supply 3.3V and the BLtouch can be configured to operate with this logic level).</li>
@ -81,33 +81,33 @@
<p>Personally, I prefer to use the normal Z axis endstop port. This is because it simplifies the changes needed in the firmware (both versions covered below). It also prevents any chance of leaving the old Z endstop switch connected and potentially interfering.</p>
<h4>Marlin firmware changes</h4>
<p>Firstly, if you are new to firmware, I have a few beginner guides, but <a href="https://youtu.be/eq_ygvHF29I" target="_blank">Updated Marlin firmware setup guide - VS Code and Auto Build Marlin</a> is probably the best place to start as it goes over installing the software and how to use the example configurations to get a good starting point for your printer.</p>
<iframe width="480" height="360" src="https://www.youtube.com/embed/eq_ygvHF29I" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<iframe loading="lazy" width="480" height="360" src="https://www.youtube.com/embed/eq_ygvHF29I" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<h5>Mandatory changes</h5>
<p>Once you have this baseline, the following changes are mandatory for a BLtouch:</p>
<a href="#" data-featherlight="img/bltouch-firmware-1.jpg"><img class="thumb" src="img/bltouch-firmware-1.jpg" /></a>
<a href="#" data-featherlight="img/bltouch-firmware-2.jpg"><img class="thumb" src="img/bltouch-firmware-2.jpg" /></a>
<a href="#" data-featherlight="img/bltouch-firmware-3.jpg"><img class="thumb" src="img/bltouch-firmware-3.jpg" /></a>
<a href="#" data-featherlight="img/bltouch-firmware-1.jpg"><img loading="lazy" class="thumb" src="img/bltouch-firmware-1.jpg" /></a>
<a href="#" data-featherlight="img/bltouch-firmware-2.jpg"><img loading="lazy" class="thumb" src="img/bltouch-firmware-2.jpg" /></a>
<a href="#" data-featherlight="img/bltouch-firmware-3.jpg"><img loading="lazy" class="thumb" src="img/bltouch-firmware-3.jpg" /></a>
<p>Previously, when using a pin27 board with a Creality V1.x mainboard, it was required to add a custom line to the firmware to account for this. Thanks to the Marlin developers and contributers, this is now automatically in place in the pins file.</p>
<h5>If you are connecting the black and white BLtouch wires to the Z axis endstop port</h5>
<p>The following should already be in place by default:</p>
<a href="#" data-featherlight="img/bltouch-firmware-8.jpg"><img class="thumb" src="img/bltouch-firmware-8.jpg" /></a>
<a href="#" data-featherlight="img/bltouch-firmware-8.jpg"><img loading="lazy" class="thumb" src="img/bltouch-firmware-8.jpg" /></a>
<h5>If you are connecting the black and white BLtouch wires to a dedicated port</h5>
<p>You will need to look up the name of the pin that the port uses, and then make the following changes:</p>
<a href="#" data-featherlight="img/bltouch-firmware-9.jpg"><img class="thumb" src="img/bltouch-firmware-9.jpg" /></a>
<a href="#" data-featherlight="img/bltouch-firmware-9.jpg"><img loading="lazy" class="thumb" src="img/bltouch-firmware-9.jpg" /></a>
<h5>If you are using a custom PWM pin for the BLtouch yellow wire</h5>
<p>You will need to look up the name of your pin and then enter it in the pins file for your board. Make sure this is the only reference to this pin. Uncomment other references to avoid conflicts.</p>
<a href="#" data-featherlight="img/bltouch-firmware-10.jpg"><img class="thumb" src="img/bltouch-firmware-10.jpg" /></a>
<a href="#" data-featherlight="img/bltouch-firmware-10.jpg"><img loading="lazy" class="thumb" src="img/bltouch-firmware-10.jpg" /></a>
<h5>Optional changes</h5>
<p>If you are using a traditional LCD, you can enable an ABL specific sub menu:</p>
<a href="#" data-featherlight="img/bltouch-firmware-4.jpg"><img class="thumb" src="img/bltouch-firmware-4.jpg" /></a>
<a href="#" data-featherlight="img/bltouch-firmware-4.jpg"><img loading="lazy" class="thumb" src="img/bltouch-firmware-4.jpg" /></a>
<p>For a much easier way to calibrate the Z offset of your probe (covered in the video below), enable the following:</p>
<a href="#" data-featherlight="img/bltouch-firmware-5.jpg"><img class="thumb" src="img/bltouch-firmware-5.jpg" /></a>
<a href="#" data-featherlight="img/bltouch-firmware-6.jpg"><img class="thumb" src="img/bltouch-firmware-6.jpg" /></a>
<a href="#" data-featherlight="img/bltouch-firmware-5.jpg"><img loading="lazy" class="thumb" src="img/bltouch-firmware-5.jpg" /></a>
<a href="#" data-featherlight="img/bltouch-firmware-6.jpg"><img loading="lazy" class="thumb" src="img/bltouch-firmware-6.jpg" /></a>
<p>If you have already measured your X and Y probe offsets, you can enter them now. This is not mandatory, however, as it can be done after the firmware is updated. More on probe offsets later.</p>
<a href="#" data-featherlight="img/bltouch-firmware-7.jpg"><img class="thumb" src="img/bltouch-firmware-7.jpg" /></a>
<a href="#" data-featherlight="img/bltouch-firmware-7.jpg"><img loading="lazy" class="thumb" src="img/bltouch-firmware-7.jpg" /></a>
<h4>Calibration</h4>
<p>Once you have connected everything and flashed your updated firmware, there is still some calibration regarding the offset of the probe. Fortynuately I have dedicated video on this topic:</p>
<iframe width="480" height="360" src="https://www.youtube.com/embed/fN_ndWvXGBQ" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<iframe loading="lazy" width="480" height="360" src="https://www.youtube.com/embed/fN_ndWvXGBQ" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<p>In summary, we need to do the following:</p>
<ul>
<li>Measure and input our X/Y probe offsets. This can be done using the <a href="https://marlinfw.org/docs/gcode/M851.html" target="_bank"><b>M851</b></a> gcode command over terminal or via the LCD screen. Even if you previously entered this when compiling firmware, double check the values are correct. When changing offsets, don't forget to save to EEPROM.</li>
@ -122,18 +122,18 @@
<h5>Probe before every print</h5>
<p>This option has the advantage of providing the most accurate result and suits printers that have a less than steady bed that may shift between prints. The disadvantage is the added time to the start of the print.</p>
<p>To do this, <b>G29</b> (ABL) must be placed on the line after <b>G28</b> (homing) in the start gcode section of your slicer. <b>G28</b> cancels any probed meshes so it must be in this order.</p>
<a href="#" data-featherlight="img/g29-start-gcode.jpg"><img class="thumb" src="img/g29-start-gcode.jpg" /></a>
<a href="#" data-featherlight="img/g29-start-gcode.jpg"><img loading="lazy" class="thumb" src="img/g29-start-gcode.jpg" /></a>
<h5>Probe once and restore the saved mesh at the start of the print</h5>
<p>Alternatively, if your bed is stable, you can home with <b>G28</b>, then probe the bed to create a mesh with <b>G29</b>, followed by saving the mesh to EEPROM with <b>M500</b>. All of this can also be done with LCD controls instead of gcodes. In your slicer start gcode, you can add <a href="https://marlinfw.org/docs/gcode/M420.html" target="_blank"><b>M420 S1</b></a> on the line AFTER <b>G28</b>, which will load the previously saved mesh to use for compensation in the current print.</p>
<p>As neccessary, from time to time you can re-probe the bed and store the mesh to maintain accuracy.</p>
<a href="#" data-featherlight="img/m420-S1.jpg"><img class="thumb" src="img/m420-S1.jpg" /></a>
<a href="#" data-featherlight="img/m420-S1.jpg"><img loading="lazy" class="thumb" src="img/m420-S1.jpg" /></a>
<h4>Customisation</h4>
<p>By default, the probing grid is 3 x 3. For small printers this is fine but you may want to increase the resolution at the expense of a longer probing sequence. This can be changed in the firmware:</p>
<a href="#" data-featherlight="img/bltouch-firmware-11.jpg"><img class="thumb" src="img/bltouch-firmware-11.jpg" /></a>
<a href="#" data-featherlight="img/bltouch-firmware-11.jpg"><img loading="lazy" class="thumb" src="img/bltouch-firmware-11.jpg" /></a>
<p>By default, the probing sequence is fairly slow. Again, we can customise this in the firmware. Your choices here will be a trade off between speed and accuracy:</p>
<a href="#" data-featherlight="img/bltouch-firmware-12.jpg"><img class="thumb" src="img/bltouch-firmware-12.jpg" /></a>
<a href="#" data-featherlight="img/bltouch-firmware-12.jpg"><img loading="lazy" class="thumb" src="img/bltouch-firmware-12.jpg" /></a>
<p>By default, the boundaries of the probing grid will be offset towards the position of the probe relative to the nozzle. I personally prefer a symmetrical probing grid. In the firmware, you can set manual boundaries for the grid. Just keep your probe X/Y offset in mind. You don't want to request probing 20mm from the edge when the probe is 40mm to the side of the nozzle. Best case, you receive an error. Worst case, the probe misses the bed and the nozzle collides with the bed.</p>
<a href="#" data-featherlight="img/bltouch-firmware-13.jpg"><img class="thumb" src="img/bltouch-firmware-13.jpg" /></a>
<a href="#" data-featherlight="img/bltouch-firmware-13.jpg"><img loading="lazy" class="thumb" src="img/bltouch-firmware-13.jpg" /></a>
<p>There is also a parameter called fade height, that can be set from the LCD or with the <a href="https://marlinfw.org/docs/gcode/M420.html" target="_blank"><b>M420 Z</b></a> gcode command. The first layer will not actually be perfectly flat, due to the compensation applied to match the measured bed contours. We don't necessarily want each layer to match this contour for the rest of the print, however. Fade height is the vertical distance in which the printer will transition between following the contours of the bed to printing in a perfectly flat plane. Remember to save to EEPROM after changing the fade height.</p>
<h4>Troubleshooting</h4>
<p>There's a lot to get right, which means there is also a lot that can go wrong. Fortunately, I have a full page dedicated to <a href="troubleshooting.html#bltouch">BLtouch troubleshooting</a> elsewhere on this site.</p>