forked from teachingtechYT/teachingtechYT.github.io
-
Notifications
You must be signed in to change notification settings - Fork 0
/
troubleshooting.html
483 lines (470 loc) · 66.1 KB
/
troubleshooting.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
<!DOCTYPE html>
<html>
<head>
<script src="js/loadscripts.js"></script>
</head>
<body onload="loadAllFormData()">
<div id="menu"></div>
<div id="header"></div>
<div id="tabs">
<ul>
<li><a href="#general">General Principles</a></li>
<li><a href="#tools">Tools</a></li>
<li><a href="#frame">Frame Check</a></li>
<li><a href="#terminal">Connecting via Terminal</a></li>
<li><a href="#ssh">Connecting to a Pi via SSH</a></li>
<li><a href="#firstlayer">First Layer</a></li>
<li><a href="#filamentjams">Filament Jams</a></li>
<li><a href="#direction">Motor Direction</a></li>
<li><a href="#endstops">Endstops/Filament Runout/Probes</a></li>
<li><a href="#bltouch">BLtouch / ABL Probes</a></li>
<li><a href="#pindebugging">Pin debugging/Direct Pin control</a></li>
<li><a href="#zartefacts">Z wall artefacts</a></li>
</ul>
<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 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>
<h4>Understand your machine before attempting modification</h4>
<p>Perhaps you have arrived at this page with a standard printer that has broken down. In this case, ignore this heading. Many people, however, will arrive at this page after performing modifications to their machine. When they try to turn it back on, something doesn't work as expected.</p>
<p>Often people fall into the trap of modifying a 3D printer as a beginner, immediately after purchase. This can be quite risky. Firstly, they do not have a good working knowledge of how their printer functions. They have not seen it in action long enough to know what the purpose of each component is, which increases the chance of components being reinstalled incorrectly.</p>
<p>Another potential problem is that the user will not appreciate the benefits of the upgrade because they have not worked with the printer in its 'inferior' standard state. In some cases something like an ABL probe will be fitted immediately, before the user understands how to manually level the bed. The rush to upgrade deprives the user of learning the fundamentals necessary for efficient and effective long term operation. I am a fan of using ABL for the added convenience and the ability to compensate for a warped bed, but this is because I spent many years without ABL on a less than precise printer.</p>
<h4>Be methodical: only test/change/modify one aspect at a time</h4>
<p>Beginners often tear down a printer and upgrade multiple things at once, which means when it goes back together and doesn't work they have no idea which new component is the problem.</p>
<p>Therefore, it is smartest to upgrade one component at a time when the printer is working, or if it has broken down, test one aspect at a time. If we change two aspects and the problem goes away, which of the two changes was responsible? Maybe only one was needed and the additional, uneccessary change will cause problems down the line.</p>
<p>This guide works on the methodology of a scientific test, where only one variable is tested to ensure accurate results and conclusions are forthcoming.</p>
<h4>When asking for help, be specific</h4>
<p>If all else fails and you approach a community group for assistance, try to help them help you. Specify your printer, mainboard, stepper drivers, firmware, modifications, slicer, etc. Anything that is relevant to the situation. Tuning the current delivered to the stepper motors differs significantly depending on these variables.</p>
<p>Use free services like:</p>
<ul>
<li><a href="https://filebin.net/" target="_blank">Filebin</a> to upload gcode files for others to examine and preview.</li>
<li><a href="https://pastebin.com/" target="_blank">Pastebin</a> to provide firmware configuration information or other relevant data. Forums will often garble sensitive data like gcode or firmware configs that needs to be read accurately.</li>
<li><a href="https://imgur.com/" target="_blank">Imgur</a> to upload images of your problem. A picture paints a thousand words and is quite often the most efficient way to communicate a problem.</li>
<li><a href="https://streamable.com/" target="_blank">Streamable</a> to upload a video of the problem. This again can be incredibly useful in helping others diagnose your problem.</li>
</ul>
<p>All of the sites above are free to use and do not require an account for the core functionality.</p>
<h4>Use the search feature</h4>
<p>On the internet, with something as popular as 3D printing, there is a fair chance someone has had your particular problem before. Sometimes everything feels overwhelming and you really want a human to advise you but you should always start by searching. This can be in community groups or the <a href="https://github.com/MarlinFirmware/Marlin/issues" target="_blank">GitHub issue section (eg. Marlin)</a> for your hardware or firmware. People understandably get annoyed if you don't undertake this basic step. Why should you expect them to invest time in helping you when you can't even be bothered to type a few words in a search box?</p>
<h4>Be patient and appreciative</h4>
<p>Unless you are accessing paid technical support, everyone involved is assisting for free in their spare time. It may take them a long time to get back to you if at all. Even paid technical support may not have quick answers. Their efficacy depends a lot on your ability to accurately convey the problem.</p>
<h4>Pay it forward</h4>
<p>Once you do find the solution to your problem, make it public so it may benefit future searchers. If using a community group message board, mark the issue as solved, post the solution and thank those who helped you. In time, as you become more experienced and confident, consider helping the beginners who are in the same situation you were in when you started out.</p>
</div>
<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 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>
<p><a href="https://amzn.to/3h62loN" target="_blank">Digital calipers on Amazon</a></p>
<h4>Multimeter</h4>
<p>A digital multimeter is a versatile tool for measuring various electrical signals. On a 3D printer they are handy for measuring the VREF for tuning stepper motor current, measuring voltage to ensure components are turning on and off as expected, but perhaps most importantly, testing continuity to trace and find broken connections. Spending more means you will also gain the ability to measure temperature.</p>
<p><a href="https://amzn.to/3m0x765" target="_blank">Budget multimeter on Amazon</a></p>
<p><a href="https://amzn.to/2EZggQx" target="_blank">Multimeter with temperature reading on Amazon</a></p>
<h4>Terminal/console software</h4>
<p>This is perhaps the most important tool: the ability to connect directly to your 3D printer to read and send information. Options include:</p>
<ol>
<li><a href="https://www.pronterface.com/" target="_blank">Pronterface</a> - Free and available for Windows, Mac and Linux.</li>
<li><a href="https://octoprint.org/" target="_blank">Octoprint</a> - Free host software that typically runs on a Raspberry Pi. Has a 'terminal' tab. <a href="https://youtu.be/h--RLbvQKYc" target="_blank">Octoprint setup video guide</a></li>
<li><a href="https://www.arduino.cc/en/software" target="_blank">Arduino IDE</a> - Free and available for Windows, Mac and Linux. Less intuitive but the <i>Tools > Serial Monitor</i> option will provide a terminal.</li>
<li><a href="https://www.simplify3d.com/" target="_blank">Simplify3D</a> - Paid slicing software that also has a terminal feature.</li>
<li><a href="https://github.com/sir-buckyball/chrome-gcode-sender" target="_blank">Chrome gcode Sender</a> - I haven't used this yet but it was submitted via the issues by stdekart5827 and may be a good solution. Can send gcode directly from Chrome to your 3D printer. <a href="https://chrome.google.com/webstore/detail/gcode-sender/ngncibnakmabjlfpadjagnbdjbhoelom?hl=en" target="_blank">Chrome web store link</a>.</li>
</ol>
<p>There are many other options but these are the most popular. If you already have a favourite piece of terminal software, you don't really need this list.</p>
<p>Connecting to the printer is covered in the next tab.</p>
<h4>Firmware Gcode References</h4>
<p>Once you have a working connection, you need to know what to send. A great place to start is by having the gcode reference for your firmware handy:</p>
<ul>
<li><a href="https://marlinfw.org/meta/gcode/" target="_blank">Marlin</a></li>
<li><a href="https://duet3d.dozuki.com/Wiki/Gcode" target="_blank">RepRapFirmware / Duet3D</a></li>
<li><a href="http://smoothieware.org/supported-g-codes" target="_blank">Smoothieware</a></li>
<li><a href="https://github.com/KevinOConnor/klipper/blob/master/docs/G-Codes.md" target="_blank">Klipper</a></li>
<li><a href="https://www.lerdge.com/document/Gcode" target="_blank">Lerdge</a></li>
<li><a href="https://github.com/gnea/grbl/wiki/Grbl-v1.1-Commands" target="_blank">Grbl</a></li>
</ul>
<h4>GitHub Resources</h4>
<p>Many manufacturers of 3D printers and upgrade parts provide GitHub repositories with detailed manuals, dimensions and wiring diagrams. Here are some popular examples:</p>
<ul>
<li><a href="https://github.com/bigtreetech" target="_blank">BigTreeTech</a></li>
<li><a href="https://github.com/makerbase-mks" target="_blank">Makerbase MKS</a></li>
<li><a href="https://github.com/Creality3DPrinting" target="_blank">Creality</a></li>
</ul>
</div>
<div id="frame">
<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 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>
<div id="terminal">
<p>This tab has a companion video:</p>
<iframe loading="lazy" width="480" height="360" src="https://www.youtube.com/embed/13XDMQ6UWy4" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<h2>Connecting via terminal</h2>
<p>Typically, connecting to the printer with any of these software options involves using a USB cable, selecting a port and a baud rate.</p>
<h4>USB cable</h4>
<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 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>
<h4>Baud</h4>
<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 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 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>
<h4>If you still can't connect</h4>
<p>Sometimes it just won't work. Some additional areas to check:</p>
<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 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>
<div id="ssh">
<p>This tab has a companion video:</p>
<iframe loading="lazy" width="480" height="360" src="https://www.youtube.com/embed/KQVQOq0Tpgo" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<h2>Connecting via SSH to a Raspberry Pi</h2>
<p>Connecting to a Pi from your PC is possible via Secure Shell (SSH). This is a protocol for communicating with the Pi remotely. This is needed because we typically run the Pi headless on our 3D printers (no attached GUI).</p>
<h4>PuTTY</h4>
<p>Windows has an in built SSH client but I can never get it to open. Therefore I use the free and open source software <a href="https://www.putty.org/" target="_blank">PuTTY</a> .</p>
<h4>IP address</h4>
<p>To connect with PuTTY, we need the ip address of the Pi on our local network. If already being used in a working Octoprint or Klipper installation, this is simply the ip address you enter into the browser to access the web interface. Alternatively, you can log in to your WIFI router and retrieve a list of connected devices with their IP addresses. An example ip address is <i>192.168.1.5</i></p>
<h4>Default username and password</h4>
<p>The default username for the Pi should be <i>pi</i> and the default password <i>raspberry</i> .</p>
<p>It is recommended to change this after logging in with <i>passwd</i> .</p>
<p>Some useful commands:</p>
<pre>ls</pre>
<p>Lists the contents of the current directory.</p>
<pre>cd ..</pre>
<p>Move up a directory.</p>
<pre>cd [name]</pre>
<p>Move to the named directory. You can start to type and then press <i>tab</i> to auto complete the name.</p>
<pre>sudo</pre>
<p>Superuser do command. Added before other commands to give admin/root privileges. Your password will be required after using this.</p>
<pre>sudo nano [filename]</pre>
<p>Nano is an inbuilt text editor. sudo is needed to give file overwriting privileges. Be careful to enter the filename correctly. If you enter a typo, a blank file with that name will be created instead.</p>
<h4>Copying and pasting in PuTTY</h4>
<p>To copy in PuTTY, simply highlight text and it will be copied to the clipboard automatically. This is the equivalent of highlighting and inputing <i>Control + C</i> in Windows.</p>
<p>To paste in PuTTY, simply right click the mouse. This is the equivalent of inputing <i>Control + V</i> in Windows.</p>
<h4>WinSCP</h4>
<p>Another very useful piece of free software for Windows users is <a href="https://winscp.net/eng/index.php" target="_blank">WinSCP</a> .</p>
<p>The left panel shows a local Windows directory and the right a directory from the Raspberry Pi. Both can be navigated using the graphical interface and files and folders can be moved and copied between the two.</p>
</div>
<div id="firstlayer">
<h2>First layer problems</h2>
<p>In my experience, the number one problem new 3D printer users will have is getting the bed levelled correctly and therefore an adequate first layer on a 3D print.</p>
<ul>
<li>If the nozzle is the correct distance from the bed, the extruded plastic will squish into the surface of the bed, gaining a good grip that will keep the printed object secure until printing is complete.</li>
<li>If the nozzle is too close to the bed, the filament will be squished too much into the bed. This could damage some more delicate bed surfaces. It can also have the effect of blocking the exit of the nozzle and leading to a jam.</li>
<li>If the nozzle is too far from the bed, the first layer effectively prints in mid air, with the filament not squishing into the bed surface and therefore not adhering properly. Such a print will likely be dislodged sooner rather than later.</li>
<li>If the bed is not levelled correctly, you may have a combination of the above across different parts of the bed.</li>
<li>If the bed is warped, it may be impossible to achieve the correct distance between the nozzle and bed across the whole bed surface.</li>
</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 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 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 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>
<li>Slow it down - The first layer really benefits from a much slower feedrate to help the filament stick. Most slicers have a speed setting just for layer one, so you can ensure good adhesion without slowing down the subsequent layers.</li>
<li>Bed temperature - The bed temperature and nozzle temperature should match those stipulated by the filament manufacturer. If you attempt to print ABS with a heated bed temperature usually used for PLA (eg. 60 degrees C), the filament will probably look fine for the first layer but soon after will likely detach. It is also worth noting that some surfaces like Wham Bam PEX might need 10 degrees C hotter bed temperature over regular PEI to gain max adhesion (eg. 70 degrees for PLA instad of 60 degrees).
</li>
<li>Dirty bed - Dust, debris and greasy fingerprints will inhibit the adhesion between bed and filament. Most bed surfaces benefit from cleaning using Isopropyl alcohol and paper towel every few prints. Please check if IPA is safe for your bed to avoid damaging the surface.</li>
<li>Adhesion aids - Substances like glue stick, hairspray or even purpose made products like Dimifix may be used to increase adhesion. Again, read the instructions carefully and ensure the product will not damage your bed surface.</li>
<li>Environmental factors - A draft blowing over the printer from an open window might affect print adhesion. Ensuring a controlled environment will help 3D print quality overall. This may be as simple as closing doors and windows or providing a simple enclosure.</li>
</ul>
</div>
<div id="filamentjams">
<h2>Filament Jams</h2>
<p>When everything is working perfectly, the filament will be pushed through the heater block, melted and then exit the nozzle to be deposited as part of the printed object. It is possible, however, for the filament to jam somewhere in the system and cause the print to fail. The following is a list of areas to check if your 3D printer is jamming.</p>
<h4>Hot end temperature</h4>
<p>Thermoplastics require a certain temperature to melt and flow freely. Generally, the hotter the nozzle, the lower the viscosity of the filament and the more freely it flows. Upping the hot end temperature by 5 to 10 degrees is a viable method to try and stop filament jamming. If the nozzle temperature is too high, it may make the filament too 'oozy' which negatively impacts aspects like retraction. The faster you print, the higher the nozzle temperature will need to be allow the filament to melt and flow in time.</p>
<h4>First layer squish</h4>
<p>As mentioned in the previous tab, if the nozzle is too close to the bed for the first layer, the bed blocks the exit of the nozzle which can jam the filament. Quite often you will notice the extruder stepper motor 'clicking'/missing steps only on the first layer. A first layer with too much squish is illustrated in the previous tab. If you experience jams primarily at the start of prints, try increasing the distance between the nozzle and bed for the first layer.</p>
<h4>'Baked' filament from sitting in an idle hot nozzle</h4>
<p>Try to avoid leaving your nozzle at printing temperatures when the printer is idle. This can be easy to do, perhaps you heat up the nozzle for a filament swap and then get distracted. Over time, the filament in the nozzle can degrade, harden and then block the tip. This will likely require removal and cleaning.</p>
<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 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 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 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>
<video class="pf-html5-video" width="20%" height="auto" type="video/mp4?v=1585860716" src="https://cdn.shopify.com/s/files/1/0252/5285/5880/t/2/assets/Copperhead-2.85---ramp-up-25-250-C.mp4?v=1585860716" controls="" loop="" playsinline="" autoplay="" controlslist="nodownload" disablepictureinpicture="" muted="true"></video>
<p>If the heat sink cooling fan is starting to degrade, heat creep may soften the filament and cause a jam. As it is hard to diagnose a faulty fan, it may be easier to swap it to a good unit for peace of mind.</p>
<p>Some printers like the Monoprice Mini Delta have weak heat sink cooling systems from factory. I have found with this particular printer, I have to print 5-10 degrees below what I normally use to prevent heat creep and jams.</p>
<p>Changing to a quiter heat sink fan can be risky, as they typically produce less air flow and therefore less heat sink cooling. Despite this, I have successfully run a 40x10mm Noctua fan on my Ender 3 hot end for years now. I have ever had a jam, but it is worth noting that I've also had Hero Me upgraded fan shrouds, that direct the air directly onto the heat sink compared to the standard Ender 3 hot end metal box/cover which simply blows in the general direction.</p>
<p>Finally, it is possible for heat creep to affect a bowden tube design printer. If the extruder stepper motor gets too hot, the heat may creep up and cause the hobbed gear to also get hot. This will soften the filament and possibly lead to stripped filament as illustrated previously.</p>
<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 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>
<p>This problem can often be identified by abnormal extrusion in free air. The filament exiting the nozzle may be undersized and coming out at a strange angle.</p>
<h4>Part cooling fan blowing on nozzle</h4>
<p>This cause is unlikely, but if the part cooling fan duct is aimed at the nozzle instead of below it, it is possible for the nozzle to be cooled to the point where the filament no longer flows through the nozzle properly. If you notice a big reduction in nozzle temperature (possibly even triggering a thermal runaway error) when the part cooling fan turns on then this is an area to investigate further.</p>
<h4>Excessive retraction</h4>
<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 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>
<p>Some stepper motor drivers don't play well with linear/pressure advance. If you enable linear advance and find your extruder stepper motor just stops turning early in the print with no error messages, this may be your problem and you will have to disable the feature.</p>
</div>
<div id="direction">
<h2>Motor Direction</h2>
<p>Let's say we have completed an extruder upgrade, changed stepper motor drivers, swapped the mainboard or built a custom machine and one or more axes are reversed. In this tab we will deal with testing and fixing this problem.</p>
<h4>Testing</h4>
<p>Generally you would use the 3D printer's LCD menu or manual controls from a touchscreen, Octoprint or Pronterface to manually move each axis to see if the axis moves as expected. Keep in mind:</p>
<ul>
<li>Some printers won't move some axes until the printer is homed. If an axis is reversed, be handy on the power switch to potentially avoid a damaging collision when trying to home.</li>
<li>Most firmwares will not allow an axis to move to a value smaller than zero due to software endstops.</li>
<li>Each of these manual movement methods puts the printers in relative relative move mode, sends the movement command, then *should* put the printer back in absolute mode. The sequence should look lke this (eg. Move the axis 20mm to the right):
<pre>G91
G1 X20 F360
G90</pre>
If sending your own G1 commands to manually test movement, be careful to check if the printer is in relative or absolute mode as this may skew the results if you have this backwards.</li>
<li>Manual movements may not always be intuitive. On a machine where the bed moves vertically instead of the X axis gantry lifting, a downward bed movement represents an increase in Z axis value. i3 'bed slinger' designs also confuse people. Mark where you think min and max are on the bed with masking tape to make sure the nozle is moving in the right direction when testing.</li>
<li>The hot end will need to be up to temp before you can manually move the extruder, due to cold extrusion protection built into the firmware.</li>
</ul>
<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 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 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 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>
<div id="endstops">
<h2>Endstops/Filament Runout/Probes</h2>
<p>Correctly configuring endstops, filament runout sensors and probes to trigger correctly can be very frustrating unless we know a good sequence to follow. That is what this tab will attempt to provide. Endstops, filament runout sensors and probes are grouped together here because the operation of each is tested with the <a href="https://marlinfw.org/docs/gcode/M119.html" target="_blank"><b>M119</b></a> gcode.</p>
<p><b>M119</b> is simple but powerful. It reports back the status of the end stops filament runout sensor(s) and probes.</p>
<p class="warning">Note: These procedures only apply to endstop switches that can be manually triggered. A mechanical microswitch, optical switch or magnetic switch all fit into this category. It will not work for sensorless homing or when using a BLtouch for Z homing instead of an endstop.</p>
<h4>Check each axis is moving in the correct direction</h4>
<p>It is impossible to diagnose homing unless you have ensured each axis is moving in the correction direction. Follow the steps on the previous tab before attempting the procedures below.</p>
<h4>Testing via terminal - Correct behaviour</h4>
<p>Connect to your printer and make sure it is not in a homed position for any axis. This means none of the endstops are pressed. Send <b>M119</b>, to which you would expect the response to be:</p>
<pre>SENDING:M119
Reporting endstop status
x_min: open
y_min: open
z_min: open</pre>
<p>Now we will manually move the X axis to depress the endstop, or alternatively hold down the endstop switch with our finger, and send <b>M119</b> again. We would expect the output to be:</p>
<pre>SENDING:M119
Reporting endstop status
x_min: TRIGGERED
y_min: open
z_min: open</pre>
<p>Repeating for each axis should show <b>TRIGGERED</b> for that axis as you press the endstop. This is the normal behaviour and your machine should home correctly as the endstops are setup correctly.</p>
<h4>Axes swapped/incorrect</h4>
<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 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 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 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 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 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 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
Reporting endstop status
x_min: open
y_min: open
z_min: open
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 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>
<pre>SENDING:M119
Reporting endstop status
x_min: open
y_min: open
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 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>
<div id="bltouch">
<h2>BLtouch / ABL Probes</h2>
<p>The bulk of this page will deal with specific testing of a BLtouch, but the later sections concerning probing accuracy apply to any ABL probe.</p>
<p>When it's working well, a BLtouch adds great functionality to a 3D printer. It adds the convenience of the allowing the bed to be not quite be levelled perfectly. More importantly, it can compensate for a warped bed that no amount of manual levelling can fix. The reference page for the BLtouch we will be using can be found on the <a href="https://www.antclabs.com/bltouch-v3" target="_blank">Antclabs website</a>.</p>
<p>If your BLtouch is not working as intended, this tab maybe able to help you.</p>
<h4>Understanding the differences between a BLtouch and other probes</h4>
<p>The BLtouch is unique in that it has actively moving parts. Other probes replace a microswitch for the z axis and function the same way: they are either trigger or not depending on if they sense the bed directly beneath the probe. A BLtouch must be deployed (pin extended) before it can be triggered and report back to the firmware. Whereas other probes only report back to the firmware with one way communication whether they are triggered or not, a BLtouch requires two way communication. The firmware has to be able to send instructions to it, as well as receive a trigger signal back from it. This is why it has extra wiring and special gcodes that can be sent to control it.</p>
<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 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>
<li><span style="color:brown; font-weight:900;"> Brown: </span> Ground to BLtouch. In conjuction with the red wire provides power.</li>
<li><span style="color:yellow; font-weight:900; background-color:black;"> Yellow: </span> Control signal from firmware to BLtouch. Uses pulse width modulation (PWM) to control the BLtouch, the same way as a servo is controlled with PWM.</li>
<li><span style="color:white; font-weight:900; background-color:black;"> White: </span> Trigger signal from BLtouch to mainboard.</li>
<li><span style="color:black; font-weight:900;"> Black: </span> Ground for trigger signal from BLtouch to the mainboard.</li>
</ul>
<p class="warning">For the BLtouch to be work correctly, all of these wires must be connected correctly. When the printer is powered on, the BLtouch will click out and in. Only the red and brown wires are required for this behaviour. Don't assume you wiring is correct just because of this sequence when the printer is turned on.</p>
<h4>Manual control of a BLtouch</h4>
<p>Once again, connecting via terminal will provide more control to establish if the BLtouch is working correctly. The following gcode sequence of commands is useful for troubleshooting.</p>
<p>If the BLtouch does a self test (probe pin down then up twice) on start up, it means the red and brown wires are connected correctly, and the BLtouch is receiving power.</p>
<p>Using a terminal, send <b>M280 P0 S120</b> for an extended self test. This will deploy and retract the probe pin 10 times. It can be stopped prematurely by sending <b>M280 P0 S160</b>.</p>
<p>If the firmware returns an error message that it doesn't know the command, you probably have not configured your firmware for the BLtouch correctly.</p>
<p>If these commands send but the BLtouch does not react, it means the yellow wire is not connected correctly. This could be a physical wiring issue or the wrong pin specified in the firmware. Remember that if specifying a custom control pin for the BLtouch, the pin must be capable of supporting PWM. </p>
<p>Note that a faint blue LED will be lit inside the BLtouch at all times. A bright red LED will be lit only when the probe is stowed. Therefore, when the probe is deployed, the red LED will turn off. The red LED is bright to the point that you might not notice the blue LED.</p>
<p>Once we have manual control of the probe pin, we can test the black and white wires to see if the BLtouch is reporting back to the firmware when it is triggered.</p>
<p>With the printer turned on and sitting idle (BLtouch pin retracted), sending <b>M119</b> should return:</p>
<pre>z_probe: TRIGGERED</pre>
<p>If we now manually deploy the probe pin by sending <b>M280 P0 S10</b> and then issuing <b>M119</b> again, the status should read:</p>
<pre>z_probe: open</pre>
<p>If we now manually stow the probe pin with <b>M280 P0 S160</b>, and again send <b>M119</b>, it should return:</p>
<pre>z_probe: TRIGGERED</pre>
<p>If the trigger status does not change, the first thing to try is to reverse the black and white wires into the mainboard. Also note that is possible to connect the black and white wires to the Z min endstop port or a another port of your choosing, but this must be configured in the firmware. You'll notice in the wiring diagram above, the port for the black and white wires is shown and the matching line in the firmware is referenced to suit.</p>
<p class="warning">According to the Marlin M119 documentation, a BLtouch is in an error state if it reports <b>TRIGGERED</b> to the terminal. However my BLtouch installation works as described above and has been working perfectly for years now without error, so perhaps this varies from mainboard to mainboard. An additional BLtouch testing method is shown on the <a href="#pindebugging">Pins Debugging / Direct Pin Control tab</a> if the sequence above does not work for you.</p>
<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 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 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>
<li>BLtouch correctly wired and configured in firmware - passes manual control and trigger tests</li>
<li>Probe is rigidly mounted - no loose fasteners</li>
<li>Probe mounted the correct height relative to the nozzle</li>
<li>X, Y and Z offsets correctly measured and stored in EEPROM (not just compiled into firmware)</li>
</ul>
<p>In addition to this:</p>
<ul>
<li>You should have <b>G29</b> (probe bed for ABL) AFTER <b>G28</b> (homing) in your start gcode. By default, G28 clears any saved meshes.</li>
<li>Manually levelling the bed to get it as close to flat as possible. ABL has bounds on how much it can compensate, so providing a reasonable starting point will assist the process.</li>
<li>Probing when the bed is up to printing temp. Most 3D printer beds are prone to distortion when heated. Don't probe and store a mesh when it is cool, but apply that mesh when printing hot.</li>
<li>Temporarily cutting power to the heated bed when probing. Some probes other than the BLtouch are affected by the current going through the heated bed elements. In this case, the bed should be brought up to temp, turned off for probing and then turned back on before printing.</li>
<li>Slowing down the vertical feedrate during probing. When setting up the firmware for ABL, the vertical speed the probe travels can be set. The slower the descent towards the bed, the greater the accuracy, at the expense of overall mesh generation duration.</li>
<li>Some people have good experiences with clone BLtouch probes and some people hate them. I believe they are both right. By that I mean the quality of the clone probes may be variable.</li>
<li>This one comes courtesy of my patron <i>ucirello</i>: BLTouch wires are not shielded. Under the right circumstances the electromagnetic interference throws off the precision. One way to test for that is to run M48 with heaters off, take the number, the run M48 with heaters on (both bed and nozzle). (M48 is covered below). If they differ too much, that could be the source of the problem.<br />
Also, if you’re willing to go to the weeds of the firmware, try changing the features that disable the extruder stepper motor. Lots of people route their BLTouch through the same path of the extruder stepper motor, and if it is powered up, it can also throw off your probe measures.<br />
If the EMI is the source of your problems, you can use some kind of <a href="https://amzn.to/3urbnEM" target="_blank">metal braided wire sleeve</a>.</li>
<li>Courtesy of Chiral: "Right after the probing my hotend and bed powered down. I had to search for a while but in the end I found that Marlin has a feature called "HOTEND_IDLE_TIMEOUT" which I had activated. Unfortunately the standard value in Marlin for the deactivation is set to 5 minutes and the probing was taking long enough to trigger the timeout thus driving my printer into the cold extrusion prevention."</li>
</ul>
<p>If all of this is checked and you still want more information on the probing results, by entering <b>G28</b> and then <b>G29</b> in the terminal, we can receive detailed information on the probing that takes place. The output will vary depending on whether the printer is setup with a 3x3 grid, 4x4 grid, etc. Here is a sample:</p>
<pre>Bilinear Leveling Grid:
0 1 2
0 +0.352 +0.185 +0.265
1 +0.465 -0.007 -0.153
2 +0.915 +0.267 -0.015</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 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 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
Standard Deviation: 0.002795</pre>
<p>The result above is above is from a BLtouch V3.1 on an Ender 3. It is very accurate and as you might expect the ABL performance is reliable and repeatable. As the probe is moving up and down on the same spot, we would expect it to trigger at the same point each time. Further parameters can be input with <b>M48</b> to customise the accuracy test, click the link above to learn more.</p>
<p>There is one more BLtouch test sequence that is covered in the <a href="#pindebugging">Pin Debugging / Direct Pin Control tab</a>.</p>
</div>
<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 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 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 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 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 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 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 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>
<h4>M42 - Set Pin State</h4>
<p><a href="https://marlinfw.org/docs/gcode/M042.html" target="_blank"><b>M42</b></a> can be used to manually control mainboard pins. With the correct parameters, you can override the firmware and manually activate connected hardware. With the right gcode (which I will not include here), I managed to turn on the MOSFET for the hot end which rapidly started to raise the temperature without any target, hence the warning further up this page.</p>
<p>Perhaps a better use for <b>M42</b> is to control hardware that is not supported by Marlin. Where some components are directly supported and have corresponding gcodes, <b>M42</b> would allow you to still use gcode to trigger pins, even using PWM control.</p>
</div>
<div id="zartefacts">
<h2>Z Wall Artefacts</h2>
<p>This is one of the hardest problems to diagnose and fix, since there are so many potential culprits. As such, it will receive a dedicated video at a later date.</p>
</div>
</div>
<div id="up"></div>
<div id="footer"></div>
</body>
<script>
var pageName = "Troubleshooting";
var pageTitle="Teaching Tech 3D Printer Troubleshooting";
</script>
<script src="js/dynamic.js"></script>
</html>