<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Keith&#039;s Electronics Blog &#187; 3D Printing</title>
	<atom:link href="http://www.neufeld.newton.ks.us/electronics/?cat=34&#038;feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.neufeld.newton.ks.us/electronics</link>
	<description></description>
	<lastBuildDate>Fri, 18 Apr 2025 00:10:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Voron 2.4 Heated Build Platform, Part 3A: Temperature Accuracy (As Built)</title>
		<link>http://www.neufeld.newton.ks.us/electronics/?p=2248</link>
		<comments>http://www.neufeld.newton.ks.us/electronics/?p=2248#comments</comments>
		<pubDate>Sun, 20 Aug 2023 19:02:21 +0000</pubDate>
		<dc:creator>Keith Neufeld</dc:creator>
				<category><![CDATA[3D Printing]]></category>
		<category><![CDATA[Voron]]></category>

		<guid isPermaLink="false">http://www.neufeld.newton.ks.us/electronics/?p=2248</guid>
		<description><![CDATA[After knowing that the Voron 2.4&#8242;s Z limit switch and Z probe produce repeatable results, we&#8217;re almost ready to begin calibrating the heated build platform for optimal first layers. But since the goal is to achieve the right temperature for different filaments (at the very least, radically different temperature for ABS vs PLA, and quite [...]]]></description>
			<content:encoded><![CDATA[<p>After knowing that the Voron 2.4&#8242;s Z limit switch and Z probe produce repeatable results, we&#8217;re almost ready to begin calibrating the heated build platform for optimal first layers.  But since the goal is to achieve the right temperature for different filaments (at the very least, radically different temperature for ABS vs PLA, and quite likely somewhat different from brand to brand and even color to color), I&#8217;d like to know that the printer is setting the surface of the build platform to the temperature I&#8217;ve asked it to.</p>
<p>One could &#8212; and I will &#8212; empirically test the best temperature setting for different filaments.  But done without knowing how accurately the printer is achieving the temperature that has been set, the results will be <em>unique to that printer</em>.  I&#8217;d like to tune my filament temperature settings to work reliably across <em>all</em> my printers (for a given build surface).</p>
<p><a href="http://www2.neufeld.newton.ks.us/images/electronics/2023/08/15/FLIR_20230815_063012_895.jpg"><img src="http://www2.neufeld.newton.ks.us/images/electronics/2023/08/15/FLIR_20230815_063012_895_mid.jpg" alt="IR camera of Voron 2.4 heated build platform" /></a></p>
<p>Apparently this will require some compromise, as the steady-state temperature between the center and edge of the build platform varied by 6&deg;C when the setpoint was 100&deg;C, a considerable amount given that first layers are often printed with the platform 10&deg;C hotter than remaining layers and this 10&deg;C is believed to make a difference.</p>
<p>Let&#8217;s see how the platform temperature behaves with a Fysetc kit in factory configuration.</p>
<p><span id="more-2248"></span></p>
<p>Important factors:</p>
<ul>
<li>My printer uses the Fysetc kit&#8217;s 350-mm-square x 8-mm-thick rolled aluminum heat spreader.</li>
<li>The heat spreader has a 300-mm-square AC-powered silicone heating pad adhered to the bottom with the thermistor factory-adhered <em>to the underside of the silicone heater where it will always get heated faster than the aluminum plate</em>.</li>
<li>The heater heats the bottom of the aluminum plate and the top is open to the air in the build chamber, so one should expect the print surface at the top to be cooler than the bottom that&#8217;s in contact with the heater.</li>
<li>I trust the accuracy of my FLIR camera.</li>
</ul>
<p>My method is this:</p>
<ol>
<li>Start with the platform at room temperature.</li>
<li>Set it for 100&deg;C nominal ABS printing temperature.</li>
<li>Every five minutes, record the temperature reported by the printer&#8217;s thermistor attached to the heater, the temperature reported by my FLIR camera of the center of the build surface on the upper face of the aluminum plate, and (once I thought of it) the temperature my FLIR sees toward the edge of the build surface.</li>
<li>Wait until the platform temperature reaches a steady state.</li>
<li>If needed (and I already know it will be), raise the setpoint enough for the actual platform temperature to reach 100&deg;C and wait for steady state.</li>
<li>Raise the setpoint again to 125&deg;C (empirically best on this printer for grey eSUN ABS+, something I&#8217;ve been using recently) and again wait for the actual platform temperature to reach a steady state.</li>
</ol>
<p>And here&#8217;s what that looks like, after logging data into Google Sheets for convenience and then passing it through gnuplot:</p>
<p><a href="http://www2.neufeld.newton.ks.us/images/electronics/2023/08/15/20230815 platform heater temps -- as-built.png"><img src="http://www2.neufeld.newton.ks.us/images/electronics/2023/08/15/20230815 platform heater temps -- as-built.png" alt="Chart of Voron 2.4 build platform temperatures" /></a></p>
<p>Here are some important takeaways:</p>
<ul>
<li>The factory thermistor thinks the platform has reached steady-state temperature after 15 minutes but it takes another 5 for the center of the print surface to reach steady-state temperature.  This lag needs to be accounted for in preheating procedure; but (at this stage) it looks like we can preheat this Voron&#8217;s platform in 20 minutes, not an hour as sometimes suggested.</li>
<li>Once in the general range of ABS printing temperature, small adjustments take only 5 minutes to make at the factory thermistor and 10 minutes at the actual build surface.</li>
<li>The center of the build surface is about 10&deg;C cooler than the factory thermistor at a <em>target</em> temperature of 100-110&deg;C and 11-12&deg;C cooler at an <em>actual surface</em> temperature around 110&deg;C.</li>
<li>The edge of this print surface runs about 5&deg;C cooler than the center &#8212; 15&deg;C cooler than the factory thermistor &#8212; at a target temperature of 100-110&deg;C and about 8&deg;C cooler than the center when the center is at 110&deg;C.  If you&#8217;re dialing in platform temperature for best adhesion by printing small test parts at the center and then change to printing something large, the periphery is not at your target temperature.  Worse, if you&#8217;re printing a plate of parts, the ones further from the center may lack the target temperature on their entire first layer.</li>
</ul>
<p>What to do about this?</p>
<ul>
<li>Adjust slicer filament settings until the filament works, and keep a custom filament profile for the Voron vs the Prusa, like I have been.  I don&#8217;t like lying to my slicer about what&#8217;s really happening and I don&#8217;t like customizing filament for each different printer.  (It&#8217;s bad enough having to tune it for different build surfaces.)</li>
<li>Adjust Klipper&#8217;s thermistor settings to compensate for the difference between the thermistor attached to the heating pad and the temperature of the build surface, like others have done.  I don&#8217;t like lying to my firmware about what&#8217;s really happening and the NTC thermistor response curve means that tuning it for ABS temperatures means it&#8217;ll still be off at PLA temperatures, and vice-versa.</li>
<li>Find a way for the printer to measure the actual temperature of the build surface.  This would be great but complicated; any contact sensor would be in the way of the print and the print would be in the way of any non-contact sensor.</li>
<li>Consider and test alternate thermistor placement.</li>
</ul>
<p>And regardless of the path chosen:</p>
<ul>
<li>Continue paying heed to the steady-state temperature difference between the center and edge of the build surface, and expect to compromise by choosing the perimeter temperature and letting the center be hotter.</li>
</ul>
<p><!--<br />
<a href="http://www2.neufeld.newton.ks.us/images/electronics/2023/08/15/Screen_20230815_193500.png"><img src="http://www2.neufeld.newton.ks.us/images/electronics/2023/08/15/Screen_20230815_193500.png" alt="" /></a><br />
&#8211;> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.neufeld.newton.ks.us/electronics/?feed=rss2&#038;p=2248</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Voron 2.4 Heated Build Platform, Part 2:  Z Probe Repeatability</title>
		<link>http://www.neufeld.newton.ks.us/electronics/?p=2213</link>
		<comments>http://www.neufeld.newton.ks.us/electronics/?p=2213#comments</comments>
		<pubDate>Sat, 15 Jul 2023 15:39:46 +0000</pubDate>
		<dc:creator>Keith Neufeld</dc:creator>
				<category><![CDATA[3D Printing]]></category>
		<category><![CDATA[Voron]]></category>

		<guid isPermaLink="false">http://www.neufeld.newton.ks.us/electronics/?p=2213</guid>
		<description><![CDATA[I regard the next step in the foundation of consistent first-layer behavior as the repeatability of the Z probe. The Z limit switch is used to set the height of the nozzle above the center of the build platform; but the Voron 2.4 has a separate Z stepper for each corner and uses the toolhead&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>I regard the next step in the foundation of consistent first-layer behavior as the repeatability of the Z probe.</p>
<p>The Z limit switch is used to set the height of the nozzle above the center of the build platform; but the Voron 2.4 has a separate Z stepper for each corner and uses the toolhead&#8217;s inductive Z probe to tram the gantry by reading the height above the platform at each corner of the printer and then adjusting the corners until the gantry is parallel to the build platform.</p>
<p><a href="http://www2.neufeld.newton.ks.us/images/electronics/2023/06/28/IMG_20230628_190407_0492.JPG"><img src="http://www2.neufeld.newton.ks.us/images/electronics/2023/06/28/IMG_20230628_190407_0492_mid.jpg" alt="Voron 2.4 inductive probe" /></a></p>
<p>If the Z probe&#8217;s measurements are insufficiently repeatable, the tramming procedure may set the gantry out of parallel to the build platform, causing the nozzle-to-platform gap to vary (even on a perfectly flat platform, which I do not have) as the toolhead moves to different X-Y coordinates.</p>
<p>Klipper provides another macro to test the Z probe repeatability.  Move the nozzle to a safe spot, call the macro, and it takes and reports several readings.  It then moves the nozzle to the position where the probe was (according to the probe offsets in <code>printer.cfg</code>) &#8212; I don&#8217;t know why &#8212; so for repeated probe tests, move the toolhead back to the same spot before starting the next reading.</p>
<p><span id="more-2213"></span></p>
<p><code><br />
g0 x175 y175<br />
probe_calibrate<br />
Recv: // probe at 175.000,175.000 is z=4.185500<br />
Recv: // probe at 175.000,175.000 is z=4.183000<br />
Recv: // probe at 175.000,175.000 is z=4.180500<br />
abort</p>
<p>g0 y175<br />
probe_calibrate<br />
Recv: // probe at 175.000,175.000 is z=4.195500<br />
Recv: // probe at 175.000,175.000 is z=4.190500<br />
Recv: // probe at 175.000,175.000 is z=4.190500<br />
abort</p>
<p>...<br />
Recv: // probe at 175.000,175.000 is z=4.203000<br />
Recv: // probe at 175.000,175.000 is z=4.198000<br />
Recv: // probe at 175.000,175.000 is z=4.198000</p>
<p>...<br />
Recv: // probe at 175.000,175.000 is z=4.203000<br />
Recv: // probe at 175.000,175.000 is z=4.198000<br />
Recv: // probe at 175.000,175.000 is z=4.198000</p>
<p>...<br />
Recv: // probe at 175.000,175.000 is z=4.203000<br />
Recv: // probe at 175.000,175.000 is z=4.200500<br />
Recv: // probe at 175.000,175.000 is z=4.200500<br />
</code></p>
<p>The standard deviation of these 15 samples is 0.0074 mm &#8212; as with the Z limit switch, repeatable enough to be adequate for first-layer performance.  Expected, but good to confirm.</p>
<p>Note that this is again a test at ambient temperature.  Repeatability needs to be confirmed at operating temperature as well; but I&#8217;m starting by removing the variable of heat and checking the bare minimum sensor behavior.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.neufeld.newton.ks.us/electronics/?feed=rss2&#038;p=2213</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Voron 2.4 Heated Build Platform, Part 1B: Z Limit Switch Repeatability &#8212; Using Your Tools Correctly</title>
		<link>http://www.neufeld.newton.ks.us/electronics/?p=2229</link>
		<comments>http://www.neufeld.newton.ks.us/electronics/?p=2229#comments</comments>
		<pubDate>Sat, 15 Jul 2023 15:23:44 +0000</pubDate>
		<dc:creator>Keith Neufeld</dc:creator>
				<category><![CDATA[3D Printing]]></category>
		<category><![CDATA[Voron]]></category>

		<guid isPermaLink="false">http://www.neufeld.newton.ks.us/electronics/?p=2229</guid>
		<description><![CDATA[Last week I started measuring the repeatability of my Voron 2.4&#8242;s Z limit switch and got very not-repeatable results. Since the first layer&#8217;s ability to stick to the build platform relies on a repeatable height above the build platform which in turn relies on a repeatable measurement from the Z limit switch, this had to [...]]]></description>
			<content:encoded><![CDATA[<p><a href="?p=2206">Last week I started measuring the repeatability of my Voron 2.4&#8242;s Z limit switch</a> and got very not-repeatable results.</p>
<p>Since the first layer&#8217;s ability to stick to the build platform relies on a repeatable height above the build platform which in turn relies on a repeatable measurement from the Z limit switch, this had to be corrected before proceeding &#8212; lack of repeatability here breaks everything the printer is trying to do!  So I needed to find and correct the source of that deviation.</p>
<p>My first thought was to take apart the switch assembly and see whether anything had gone wrong between the plunger pin and the switch.  But before I even got that far,</p>
<p><a href="http://www2.neufeld.newton.ks.us/images/electronics/2023/07/08/IMG_20230708_190302_0493-crop.jpg"><img src="http://www2.neufeld.newton.ks.us/images/electronics/2023/07/08/IMG_20230708_190302_0493-crop_mid.jpg" alt="Voron 2.4 Z limit switch" /></a></p>
<p>I found all these filament droppings (oozed out of an idle hot nozzle &#8212; call them fwarf?) piled on and around the switch assembly.  Although the only way I could imagine them impacting a reading like my previous trial would be if one had laid on top of the pin during a reading &#8212; and I&#8217;d been sitting there to see that none had &#8212; I figured I&#8217;d better clean them out and rerun the collection of calibration samples.</p>
<p>And while doing so, I found what appears to have been the actual problem:</p>
<p><a href="http://www2.neufeld.newton.ks.us/images/electronics/2023/07/15/IMG_20230715_083631_0503.JPG"><img src="http://www2.neufeld.newton.ks.us/images/electronics/2023/07/15/IMG_20230715_083631_0503_mid.jpg" alt="Feeler gauges on Voron 2.4 build platform" /></a></p>
<p>When performing the first Z_ENDSTOP_CALIBRATION, when I got the nozzle closer to the platform than the thickness of my 0.10-mm feeler gauge, I swung the 0.02-mm feeler gauge out of its place in the holder and it delaminated and split in two.  Uh, <em>what?????</em>  Oh.  Oh, it&#8217;s so thin that the 0.03-mm feeler gauge was stuck to the back of it and I swung both of them out together.  I &#8230; uh &#8230; wonder how many times I&#8217;ve done that before.  Randomly.  On some of the measurements and not others.</p>
<p><span id="more-2229"></span></p>
<p>Okay, so I took out the pivot screw holding the stack of gauges together, removed just the two gauges I needed, and repeated the sample collection, this time with much more satisfying results:</p>
<table align="center">
<tr>
<td>1</td>
<td>-0.453</td>
</tr>
<tr>
<td>2</td>
<td>-0.463</td>
</tr>
<tr>
<td>3</td>
<td>-0.453</td>
</tr>
<tr>
<td>4</td>
<td>-0.453</td>
</tr>
<tr>
<td>5</td>
<td>-0.453</td>
</tr>
<tr>
<td>6</td>
<td>-0.453</td>
</tr>
<tr>
<td>7</td>
<td>-0.443</td>
</tr>
<tr>
<td>8</td>
<td>-0.443</td>
</tr>
<tr>
<td>9</td>
<td>-0.453</td>
</tr>
<tr>
<td>10</td>
<td>-0.443</td>
</tr>
<tr>
<td>11</td>
<td>-0.443</td>
</tr>
<tr>
<td>12</td>
<td>-0.443</td>
</tr>
<tr>
<td>13</td>
<td>-0.433</td>
</tr>
<tr>
<td>14</td>
<td>-0.443</td>
</tr>
<tr>
<td>15</td>
<td>-0.433</td>
</tr>
<tr>
<td>16</td>
<td>-0.433</td>
</tr>
<tr>
<td>17</td>
<td>-0.433</td>
</tr>
<tr>
<td>18</td>
<td>-0.433</td>
</tr>
<tr>
<td>19</td>
<td>-0.443</td>
</tr>
<tr>
<td>20</td>
<td>-0.443</td>
</tr>
<tr>
<td>&#8212;-</td>
<td>&#8212;&#8212;&#8211;</td>
</tr>
<tr>
<td>avg</td>
<td>-0.445</td>
</tr>
<tr>
<td>stddev</td>
<td>0.009</td>
</tr>
</table>
<p>I see a slow drift to a lower magnitude that I can&#8217;t explain; but that drift is on the order of 0.015 mm over the course of 40 minutes of measurement <em>and</em> I think with proper first-layer tuning, I can work with that much deviation.</p>
<p>So, once using my tools correctly, I&#8217;ve confirmed to my satisfaction that the Z endstop provides a sufficiently-repeatable measurement to be the foundation of good first layers.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.neufeld.newton.ks.us/electronics/?feed=rss2&#038;p=2229</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Voron 2.4 Heated Build Platform, Part 1A: Z Limit Switch Repeatability</title>
		<link>http://www.neufeld.newton.ks.us/electronics/?p=2206</link>
		<comments>http://www.neufeld.newton.ks.us/electronics/?p=2206#comments</comments>
		<pubDate>Wed, 28 Jun 2023 02:51:07 +0000</pubDate>
		<dc:creator>Keith Neufeld</dc:creator>
				<category><![CDATA[3D Printing]]></category>
		<category><![CDATA[Voron]]></category>

		<guid isPermaLink="false">http://www.neufeld.newton.ks.us/electronics/?p=2206</guid>
		<description><![CDATA[I have quite some difficulty with first layers on my Voron 2.4, so let&#8217;s take a foray into investigating the build platform and related components and configurations, shall we? My generation of Voron 2.4, configured as recommended at the time, finds mechanical position Z=0 (nozzle exactly touching build surface) by pushing the tip of the [...]]]></description>
			<content:encoded><![CDATA[<p>I have quite some difficulty with first layers on my Voron 2.4, so let&#8217;s take a foray into investigating the build platform and related components and configurations, shall we?</p>
<p><a href="http://www2.neufeld.newton.ks.us/images/electronics/2023/06/27/IMG_0479.JPG"><img src="http://www2.neufeld.newton.ks.us/images/electronics/2023/06/27/IMG_0479_mid.jpg" alt="Voron 2.4 probing Z limit switch" /></a></p>
<p><em>My generation</em> of Voron 2.4, <em>configured as recommended at the time</em>, finds mechanical position Z=0 (nozzle exactly touching build surface) by pushing the tip of the nozzle down onto a (heat-resistant) stainless-steel pin [the lonely white dot below the toolhead], triggering the Z<sub>min</sub> limit switch, and then applying the recorded offset between the trigger position and the build surface.</p>
<p>This is brilliant in that it automatically compensates for different nozzle lengths and even compensates for nozzle thermal expansion, and the evil opposite of brilliant in that you have to make a new Klipper <code>printer.cfg</code> file <em>for each different build surface</em> and they tell you in the Klipper forums that you&#8217;re doing it wrong if you ask for a better way to maintain different offsets for different surfaces.  And then the Voron team invents the <a href="https://github.com/VoronDesign/Voron-Tap">Voron Tap</a>, which is a better way but which I haven&#8217;t implemented yet on this printer because reasons.</p>
<p>Oh dear me, I seem to have meandered a bit.  I think I was about to say that the first step of figuring out inconsistent first-layer behavior would be to check the repeatability of the Z limit switch.  Yes, that was it.</p>
<p><span id="more-2206"></span></p>
<p>To do this, I used the <a href="https://docs.vorondesign.com/community/howto/120decibell/z_endstop_configuration.html">procedure from the Voron documentation</a>, which is all done from Octoprint&#8217;s Terminal tab and which goes like this:</p>
<p><code>bed_mesh_clear<br />
g28<br />
quad_gantry_level<br />
g28<br />
</code></p>
<p>Clear any stored mesh bed leveling so that the coordinates used aren&#8217;t being translated in any way.  Home all axes as a baseline, then level the X-Y gantry, then home the axes again to avoid potentially nontrivial sine errors if the gantry did have to be leveled.</p>
<p><code>g0 x175 y175<br />
z_endstop_calibrate<br />
testz z=-9<br />
testz z=-.1<br />
...<br />
testz z=-.01<br />
...<br />
</code></p>
<p>Move to the center of the build platform and run Klipper&#8217;s built-in Z endstop calibration macro.  On my printer, that starts about 10 mm above the surface, so make a large relative move to get close to the surface, then a series of smaller relative moves while probing with a 0.1-mm feeler gauge.  When that no longer passes between the nozzle and build surface, switch to even smaller relative moves and a 0.02-mm feeler gauge until the first step at which <em>that</em> no longer passes.</p>
<p><a href="http://www2.neufeld.newton.ks.us/images/electronics/2023/06/27/IMG_0474.JPG"><img src="http://www2.neufeld.newton.ks.us/images/electronics/2023/06/27/IMG_0474_mid.jpg" alt="Voron 2.4 z_endstop_calibrate" /></a></p>
<p><code>testz z=-.01<br />
accept<br />
Recv: // stepper_z: position_endstop: -0.543<br />
g0 z10<br />
</code></p>
<p>At the first step when the 0.02-mm feeler gauge no longer passes, the previous step (0.01 mm higher) was the last point at which the feeler gauge did fit, so move 0.01 mm lower to have the nozzle exactly touching the build surface.  Terminate the macro, read out the resulting probe offset, and raise the nozzle away from the build surface.</p>
<p>Normally this would be done with the nozzle and build platform preheated to the desired printing temperature so they&#8217;ve undergone any thermal expansion; but for checking limit switch repeatability, I left everything at room temperature to reduce one variable.</p>
<p>Here are the results of multiple calibrations, <em>each time</em> homing all axes, leveling the gantry, homing all axes, and calibrating with the feeler gauges:</p>
<table align="center">
<tr>
<td>-0.543</td>
</tr>
<tr>
<td>-0.543</td>
</tr>
<tr>
<td>-0.533</td>
</tr>
<tr>
<td>-0.552</td>
</tr>
<tr>
<td>-0.533</td>
</tr>
<tr>
<td>-0.533</td>
</tr>
<tr>
<td>-0.523</td>
</tr>
<tr>
<td>-0.533</td>
</tr>
<tr>
<td>0.157</td>
</tr>
<tr>
<td>-0.433</td>
</tr>
<tr>
<td>-0.433</td>
</tr>
<tr>
<td>-0.443</td>
</tr>
<tr>
<td>-0.433</td>
</tr>
<tr>
<td>-0.423</td>
</tr>
<tr>
<td>-0.433</td>
</tr>
</table>
<p>As you can see, my Z limit switch delivers very repeatable results, varying mainly by at which iteration I decided the feeler gauge no longer fit under the &#8230; excwhat???</p>
<p>Something happened there, which changed the trigger position by over half a millimeter, then returned it almost to where it was but still a tenth of a millimeter different.  I don&#8217;t know about y&#8217;all, but a <em>twentieth</em> of a millimeter makes a substantial difference in my first-layer behavior; so if this switch&#8217;s trigger position is going to vary that much, it can never be part of a reliable calibration procedure.</p>
<p>It would be nice to know what happened.  Sneak preview:  It doesn&#8217;t seem to be an issue with the inductive Z probe.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.neufeld.newton.ks.us/electronics/?feed=rss2&#038;p=2206</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Voron 2.4 &#8212; First 3-mm Filament Prints</title>
		<link>http://www.neufeld.newton.ks.us/electronics/?p=2196</link>
		<comments>http://www.neufeld.newton.ks.us/electronics/?p=2196#comments</comments>
		<pubDate>Sun, 16 Oct 2022 23:57:45 +0000</pubDate>
		<dc:creator>Keith Neufeld</dc:creator>
				<category><![CDATA[3D Printing]]></category>
		<category><![CDATA[Voron]]></category>

		<guid isPermaLink="false">http://www.neufeld.newton.ks.us/electronics/?p=2196</guid>
		<description><![CDATA[Nobody wants to talk about printing 3-mm filament on a Voron, but I have filament I want to use that was only available in 3&#160;mm. So I ordered a bunch of vitamins and remixed the AfterBurner extruder and E3Dv6 hotend holder and here we are, making test prints with ancient MakerBot ABS before moving on [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www2.neufeld.newton.ks.us/images/electronics/2022/10/16/IMG_20221016_151941_0455-white-balance.jpg"><img src="http://www2.neufeld.newton.ks.us/images/electronics/2022/10/16/IMG_20221016_151941_0455-white-balance_mid.jpg" alt="test block printed in 3-mm filament" /></a></p>
<p>Nobody wants to talk about printing 3-mm filament on a Voron, but I have filament I want to use that was only available in 3&nbsp;mm.  So I ordered a bunch of vitamins and remixed the AfterBurner extruder and E3Dv6 hotend holder and here we are, making test prints with ancient MakerBot ABS before moving on to the new stuff.</p>
<p><a href="http://www2.neufeld.newton.ks.us/images/electronics/2022/10/16/IMG_20221016_184323_0467-white-balance.jpg"><img src="http://www2.neufeld.newton.ks.us/images/electronics/2022/10/16/IMG_20221016_184323_0467-white-balance_mid.jpg" alt="3DBenchy printed on Voron 2.4 in 3-mm filament" /></a></p>
<p>Benchy can certainly use some tuning (at least a tad more cooling) but is reasonably respectable for sixty minutes of slowly pushing 3-mm filament through a 0.4-mm nozzle.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.neufeld.newton.ks.us/electronics/?feed=rss2&#038;p=2196</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Voron 2.4 Build &#8212; Bed Mesh Leveling Part 1: Correct Configuration</title>
		<link>http://www.neufeld.newton.ks.us/electronics/?p=2182</link>
		<comments>http://www.neufeld.newton.ks.us/electronics/?p=2182#comments</comments>
		<pubDate>Sun, 18 Sep 2022 17:00:01 +0000</pubDate>
		<dc:creator>Keith Neufeld</dc:creator>
				<category><![CDATA[3D Printing]]></category>
		<category><![CDATA[Voron]]></category>

		<guid isPermaLink="false">http://www.neufeld.newton.ks.us/electronics/?p=2182</guid>
		<description><![CDATA[The Voron community comes across as antagonistic about a number of issues, one of which is: If your build surface is perfectly flat, there&#8217;s no need for bed mesh leveling! Well, if your build surface is perfectly flat, good for you. Even then, it would be more accurate to say that if your Voron 2.4 [...]]]></description>
			<content:encoded><![CDATA[<p>The Voron community comes across as antagonistic about a number of issues, one of which is:  If your build surface is perfectly flat, there&#8217;s no need for bed mesh leveling!</p>
<p>Well, if your build surface is perfectly flat, good for you.</p>
<p>Even then, it would be more accurate to say that if your Voron 2.4 build surface is perfectly flat, the Voron is intrinsically incapable of using bed mesh leveling to improve it.  (The Voron 2.4 levels the gantry to be parallel to the build surface by probing near the four corners.  If the plane of the build surface isn&#8217;t square to the vertical members of the frame, the Voron has no way of determining that it&#8217;s always going to print non-rectangular parallelograms in the X-Z and/or Y-Z planes.  But I digress.)</p>
<p><a href="http://www2.neufeld.newton.ks.us/images/electronics/2022/09/18/IMG_20220918_105151_0436-white-balance.jpg"><img src="http://www2.neufeld.newton.ks.us/images/electronics/2022/09/18/IMG_20220918_105151_0436-white-balance_mid.jpg" alt="parts 3D printed without and with bed mesh leveling" /></a></p>
<p>My aluminum heat spreader is <em>not</em> perfectly flat because it came in a kit from Fysetc rather than from a milling machine with a fly cutter; and my Voron 2.4 benefits tremendously from bed mesh leveling.  (Above, without; below, with.)</p>
<p>To take my mesh to the next level, it&#8217;ll help to get the bed mesh configuration correct.  The <a href="https://docs.vorondesign.com/tuning/secondary_printer_tuning.html">provided configuration</a> is a useful starting point but can be improved significantly.</p>
<p><span id="more-2182"></span></p>
<h3>Introduction</h3>
<p>Bed mesh leveling is a means of dealing with irregularities in a 3D printer&#8217;s build surface.  Think of it as terrain-following radar for an experimental aircraft that we might send Clint Eastwood to steal.  If we try to print the first layer planar when the build surface is varying, the first layer will be deposited at different heights and different amounts of squish above the build surface, causing different amounts of stick.  Mesh leveling adapts the first layer to be nonplanar and follow the curvature of the build surface, then &#8220;fades&#8221; back to planar printing over the first several layers of the print.</p>
<p>To learn what terrain it needs to follow, mesh leveling probes the surface one time, or once before each print, typically using a probe attached to the toolhead.  Inductive probes measure the distance to the metal underneath the build surface (so they don&#8217;t know the actual distance to the top of the surface); contact probes measure the distance to the top of the surface (so they don&#8217;t know the depth of any texture).  The Fysetc parts kit for the Voron 2.4 includes an inductive probe.</p>
<h3>Probe X-Y Offset</h3>
<p><code>bed_mesh_clear<br />
g28<br />
quad_gantry_level<br />
g28<br />
</code></p>
<p>The first thing I wanted to confirm was the offset from the nozzle to the most-sensitive spot of the probe so that I can later set the mesh probing perimeters accordingly.  To do this, I:</p>
<ol>
<li>cleared the existing mesh (important to do before any calibration operation to ensure that the firmware isn&#8217;t modifying your Z coordinates according to a mesh)</li>
<li>homed the printer to set the Z offset</li>
<li>did a quad gantry level to set the gantry planar to the build surface</li>
<li>homed again (important to do after the gantry leveling so the Z offset is relative to the trammed gantry)</li>
</ol>
<p><a href="http://www2.neufeld.newton.ks.us/images/electronics/2022/09/16/IMG_20220916_193937_0427-tilt.jpg"><img src="http://www2.neufeld.newton.ks.us/images/electronics/2022/09/16/IMG_20220916_193937_0427-tilt_mid.jpg" alt="Testing Voron AfterBurner probe sensitivity" /></a></p>
<p>Then I:</p>
<ol>
<li>sent the printhead to the center of the build area (<code>g0 x175 y175</code>)</li>
<li>used OctoPrint&#8217;s Control menu to jog the printhead high enough to center a piece of metal underneath the nozzle (the nozzle being the point from which X-Y coordinates are measured)</li>
<li>jogged the printhead to position the probe over the piece of metal and jogged the printhead around until I found the X-Y coordinates at which the probe triggered highest (at the furthest distance, meaning at the X-Y offset with greatest sensitivity)</li>
<li>issued <code>m114</code> to query the current coordinates and found that to be 22 mm behind the nozzle (close to the 25 mm in the sample config)</li>
<li>entered that into my <code>printer.cfg</code> file</li>
</ol>
<p><code>[probe]<br />
...<br />
y_offset: 22.0<br />
</code></p>
<h3>Probe-able Perimeter</h3>
<p>The provided configuration probed 40 mm away from the perimeter of the build area, which gave some very odd results that are important in my next post.</p>
<p>I used OctoPrint&#8217;s Control to jog the toolhead to each edge of the build surface, testing the height at which the probe triggered, to determine how close to each edge it&#8217;s able to measure the height reliably.  I found a dropoff in sensitivity about 4 mm from the side edges, so I decided to probe within 10 mm of the sides for a margin of safety.</p>
<p>At the front of the build platform, the relative positions of the nozzle and probe mean that the probe can&#8217;t get closer than 22 mm to the front edge, which is fine.  At the back of the build platform, sensitivity dropped off around toolhead position Y<sub>nozzle</sub>=319, which means Y<sub>probe</sub>=341, or 9 mm forward from the back edge; so probe as far back as toolhead position Y<sub>nozzle</sub>=315 for a margin of safety.</p>
<p><code>[bed_mesh]<br />
...<br />
#       probe with nozzle at Y=0, probe at Y=22<br />
mesh_min: 10, 22<br />
#       probe with nozzle at Y=315, probe at Y=337<br />
mesh_max: 340,337<br />
</code></p>
<p>Paste in the sample configuration from the Voron page and then update with our new information.  I found the <a href="https://www.klipper3d.org/Bed_Mesh.html">Klipper bed mesh configuration instructions</a> confusing, but here&#8217;s the scoop:  The min and max probing positions are specified as the <em>probe</em> coordinates and the probing process takes into account the offset specified earlier.</p>
<p>I updated the configuration and added comments that disambiguate the coordinates.  This configuration to probe closer to the edges of the build surface relieved the worst of the oddities that I&#8217;ll describe later.</p>
<h3>OctoPrint Bed Mesh Visualizer Inverted Y Axis</h3>
<p><a href="http://www2.neufeld.newton.ks.us/images/electronics/2022/09/18/IMG_20220918_101758_0434-crop.jpg"><img src="http://www2.neufeld.newton.ks.us/images/electronics/2022/09/18/IMG_20220918_101758_0434-crop_mid.jpg" alt="Testing Voron 2.4 bed mesh leveling with shimmed corner" /></a></p>
<p>I had one more peculiarity in my bed mesh results to understand, so I shimmed up a corner of the spring steel build surface with a stack of masking tape (heaters off &#8212; for real mesh testing, you want everything hot so it takes into account the same thermal expansion that occurs during warmup for a print; but for this test, I don&#8217;t want baked masking tape); reran the homing, gantry level, and homing; and ran a <code>bed_mesh_calibrate</code> with 11&#215;11 probing for testing.</p>
<p>The bed mesh visualizer is an OctoPrint plugin &#8212; go to Wrench / <code>OctoPrint</code> / <code>Plugin Manager</code> / <code>+ Get More</code> and enter <code>Bed Visualizer</code> to install it.  Then go to the <code>Bed Visualizer</code> tab, <code>Update Mesh Now</code>, and drag the view around to examine your probed build surface mesh.</p>
<p><a href="http://www2.neufeld.newton.ks.us/images/electronics/2022/09/18/20220918-Voron-2.4-bed-mesh-incorrect-y.png"><img src="http://www2.neufeld.newton.ks.us/images/electronics/2022/09/18/20220918-Voron-2.4-bed-mesh-incorrect-y_mid.png" alt="Voron 2.4 bed mesh visualizer with incorrect Y axis" /></a></p>
<p>Yeah, my shimmed spot is in the front left corner and it&#8217;s being reported in the back left corner.  That&#8217;s not right.</p>
<p>Bed Visualizer has controls to flip and to rotate the view and I didn&#8217;t know yet whether my results were flipped in Y or rotated CW.  I repeated the test with the shim in the front right corner and the high spot moved to the back right; so I knew that Bed Visualizer was flipping my Y axis.</p>
<p><a href="http://www2.neufeld.newton.ks.us/images/electronics/2022/09/18/20220918-Voron-2.4-bed-mesh-correct-y.png"><img src="http://www2.neufeld.newton.ks.us/images/electronics/2022/09/18/20220918-Voron-2.4-bed-mesh-correct-y_mid.png" alt="Voron 2.4 bed mesh visualizer with correct Y axis" /></a></p>
<p>After going to Bed Visualizer / gear / <code>Collection</code>, checking <code>Flip Y-Axis</code>, saving, and re-updating the mesh, I now have a correct visualization of the terrain of my build surface.  Which (the build surface) is awful.  Ignoring my shim, it has 0.4 mm variance between the high and low spots.  We&#8217;ll have to do something about that.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.neufeld.newton.ks.us/electronics/?feed=rss2&#038;p=2182</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Voron 2.4 Build &#8212; Z Limit Switch Y Position</title>
		<link>http://www.neufeld.newton.ks.us/electronics/?p=2172</link>
		<comments>http://www.neufeld.newton.ks.us/electronics/?p=2172#comments</comments>
		<pubDate>Wed, 14 Sep 2022 00:17:18 +0000</pubDate>
		<dc:creator>Keith Neufeld</dc:creator>
				<category><![CDATA[3D Printing]]></category>
		<category><![CDATA[Voron]]></category>

		<guid isPermaLink="false">http://www.neufeld.newton.ks.us/electronics/?p=2172</guid>
		<description><![CDATA[The Voron 2.4 has a Z home switch off the back end of the build plate with a steel pin on top. The hot nozzle tip can press the steel pin without melting anything; so once you calibrate the height offset between the switch&#8217;s trigger point and the surface of your build sheet, you have [...]]]></description>
			<content:encoded><![CDATA[<p>The Voron 2.4 has a Z home switch off the back end of the build plate with a steel pin on top.  The hot nozzle tip can press the steel pin without melting anything; so once you calibrate the height offset between the switch&#8217;s trigger point and the surface of your build sheet, you have absolute repeatable positioning of the height of the tip above your build surface.  As long as you never ever change to a different build surface.</p>
<p><a href="http://www2.neufeld.newton.ks.us/images/electronics/2022/09/12/IMG_20220912_182412_0421-crop.JPG"><img src="http://www2.neufeld.newton.ks.us/images/electronics/2022/09/12/IMG_20220912_182412_0421-crop_mid.jpg" alt="Voron 2.4 Z limit switch" /></a></p>
<p>If, on the other hand, the Z pin is positioned further back than the tip of the nozzle can travel and the hotend&#8217;s silicone sock is pressing the Z pin, results may vary from minute to minute.  Literally.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.neufeld.newton.ks.us/electronics/?feed=rss2&#038;p=2172</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Voron 2.4 Build &#8212; Initial Startup Checks</title>
		<link>http://www.neufeld.newton.ks.us/electronics/?p=2154</link>
		<comments>http://www.neufeld.newton.ks.us/electronics/?p=2154#comments</comments>
		<pubDate>Tue, 30 Aug 2022 00:24:04 +0000</pubDate>
		<dc:creator>Keith Neufeld</dc:creator>
				<category><![CDATA[3D Printing]]></category>
		<category><![CDATA[Voron]]></category>

		<guid isPermaLink="false">http://www.neufeld.newton.ks.us/electronics/?p=2154</guid>
		<description><![CDATA[With the Spider mainboard online and talking to OctoPrint, a cabling issue corrected, and a pinning issue I-thought-dealt-with-but-actually-no, documenting-soon, it was time to work through Voron&#8217;s initial startup checks to verify all pinning and basic functionality. The document&#8217;s order of operations is fantastic; but too often it says what to do and doesn&#8217;t say how [...]]]></description>
			<content:encoded><![CDATA[<p>With the <a href="?p=2139">Spider mainboard online and talking to OctoPrint</a>, <a href="?p=2148">a cabling issue corrected</a>, and a pinning issue I-thought-dealt-with-but-actually-no, documenting-soon, it was time to work through Voron&#8217;s <a href="https://docs.vorondesign.com/build/startup/">initial startup checks</a> to verify all pinning and basic functionality.  The document&#8217;s order of operations is fantastic; but too often it says what to do and doesn&#8217;t say how to do it.  Let&#8217;s fill in some gaps.</p>
<p><span id="more-2154"></span></p>
<h3>Verify Thermistors and Heaters</h3>
<p><a href="http://www2.neufeld.newton.ks.us/images/electronics/2022/08/28/20220828-Voron-OctoPrint-temperature.png"><img src="http://www2.neufeld.newton.ks.us/images/electronics/2022/08/28/20220828-Voron-OctoPrint-temperature_mid.png" alt="OctoPrint temperature graph of Voron 2.4" /></a></p>
<p>Thermistors are working; they show room temperature.  Heaters are working; they heat their respective components and the thermistors read the temperature accordingly.  Also this hotend is pretty snappy about getting up to printing temperature even without a silicone sock, and I&#8217;m not sure why it&#8217;s faster than (for example) my Enders, which also use 24V.  Possibly a higher-current/power heating cartridge, haven&#8217;t checked.</p>
<h3>Verify Stepper Motors</h3>
<p><a href="http://www2.neufeld.newton.ks.us/images/electronics/2022/08/28/Spider-v1.1-stepper-section.png"><img src="http://www2.neufeld.newton.ks.us/images/electronics/2022/08/28/Spider-v1.1-stepper-section_mid.png" alt="Stepper motor section of Spider v1.1 mainboard layout" /></a></p>
<p>Test operation and confirm that each axis is configured where it&#8217;s actually cabled, check.  Except that initially, any attempt to move my B motor (identified in <code>printer.cfg</code> as <code>stepper_x</code> and I assume that&#8217;s because it&#8217;s labeled that way on the PCB silkscreen but I don&#8217;t know yet how the Klipper firmware knows that &#8220;X&#8221; means &#8220;B&#8221;) caused the Klipper firmware to lock up.  I successfully moved the driver, cable, and configuration of the B motor from the X socket to the E4 socket and had it running fine there; then when I moved it back to X to troubleshoot the issue, it just worked.  Okay, I&#8217;ll just &#8230; leave it there??</p>
<h3>Verify Endstops AKA Limit Switches</h3>
<p>This is my separate issue, now dealt with, soon-to-be-documented.</p>
<h3>Verify Homing X and Y</h3>
<p>Check.  For those of you like me who haven&#8217;t memorized all the gcodes, note from the Voron instructions that you can send <code>g28 x</code> and <code>g28 y</code> to test homing individually, with one hand on the E-stop button, before using OctoPrint&#8217;s control panel button to home both.</p>
<h3>Configure and Test Z Limit Switch</h3>
<p>The Voron instructions are missing critical steps that the firmware requires you to do before executing the listed steps.  Here&#8217;s a path I found that worked; there may be others.</p>
<p><a href="http://www2.neufeld.newton.ks.us/images/electronics/2022/08/28/IMG_20220828_103537_0387-white-balance.JPG"><img src="http://www2.neufeld.newton.ks.us/images/electronics/2022/08/28/IMG_20220828_103537_0387-white-balance_mid.jpg" alt="Voron 2.4 extruder positioned over Z limit switch" /></a></p>
<ol>
<li>Home the X and Y axes.</li>
<li>We need the nozzle to be pretty low over the Z limit switch pin, but the printer won&#8217;t let us move the Z axis until we&#8217;ve homed Z, but the printer won&#8217;t let us home Z until we&#8217;ve defined the X-Y coordinates for the Z limit switch pin, but we can&#8217;t find the coordinates of the Z limit switch pin until we lower the nozzle.
<ol>
<li>Disable the stepper motors.  I used the OctoPrint control panel&#8217;s <code>Motors off</code> button.</li>
<li>Manually and gently push the gantry down pretty far until the nozzle isn&#8217;t much higher than the build platform (and consequently the Z pin).</li>
</ol>
</li>
<li>Under software control, move the nozzle until it&#8217;s directly over the Z pin.  I used the OctoPrint control panel again.  Note that the Z pin should be directly left of the nozzle after Y homing &#8212; that is, the Z limit switch pin should be at Y<sub>max</sub>.  If it&#8217;s not, then the Z pin and possibly build plate should be moved accordingly.</li>
<li>Query the printer for its current position.  I used the OctoPrint terminal to send <code>M114</code>; mine returned <code>X:260.000 Y:350.000 Z:10.000 E:0.000</code>.</li>
<li>Enter these X and Y coordinates into <code>printer.cfg</code> &#8212; like <code>home_xy_position:260,350</code> &#8212; and restart the Klippy host software.</li>
<li>Home X and Y (I used OctoPrint&#8217;s X-Y home button) and then Z while ready to hit E-stop.  My homing works.</li>
</ol>
<h3>Locate Origin and Configure</h3>
<p>The Voron 2.4&#8242;s X limit switch is on the right and the Y limit switch actuates on the back; so the Voron homes to the back right and Klipper sets the current X and Y coordinates to the respective <code>position_endstop</code> values when homing.  These values are predefined to 350 mm for my printer and need to be adjusted to be the actual distance from the origin in the front left to the home position in the back right.</p>
<p>Because we&#8217;ve set the Z limit switch X,Y coordinates based on the X,Y endstops being at (350,350), the Z limit switch X,Y coordinates also need to be translated by the same vector as the home position.</p>
<p>I found the Voron instructions to be algorithmically correct but, on the first pass, not clear what was being accomplished and how.  Here&#8217;s my version:</p>
<p><a href="http://www2.neufeld.newton.ks.us/images/electronics/2022/08/28/IMG_20220828_112434_0391-annotated.JPG"><img src="http://www2.neufeld.newton.ks.us/images/electronics/2022/08/28/IMG_20220828_112434_0391-annotated_mid.jpg" alt="Voron 2.4 toolhead at front left of printer" /></a></p>
<ol>
<li>Home the X-Y axes.</li>
<li>Under software control, jog the toolhead as far to the front left as possible without (A) physically ramming the side or front of the gantry and (B) exiting the firmware&#8217;s current idea of the coordinate space (which it won&#8217;t let you do).  Query the current position with <code>M114</code>.<br />
My toolhead is as close as I care to get it to the left edge at X = 2 mm and hadn&#8217;t reached the front of the build platform at Y = 0 mm.</li>
<li>In the <code>[stepper_x]</code> and <code>[stepper_y]</code> sections of <code>printer.cfg</code>:
<ul>
<li>Adjust <code>position_endstop</code> accordingly.</li>
<li>Adjust <code>position_max</code> to the new <code>position_endstop</code> value, because the Voron 2.4&#8242;s limit switches are at max X and Y travel.</li>
<li>I set my X <code>position_endstop</code> and <code>position_max</code> to 348 to reflect that my X has 2 mm less travel than the nominal 350 mm.</li>
<li>I set my Y <code>position_endstop</code> and <code>position_max</code> to 360 to reflect that my Y endstop is off the back end of my build platform and I need it to allow me to move it further to find out where the front is.</li>
</ul>
</li>
</ol>
<p>Then I restarted Klippy and again jogged the toolhead toward the front left corner.  It now knew not to travel further left than where I had stopped it before; and I could now move it far enough forward to get the gantry almost to the frame at what <code>M114</code> revealed was Y = 4 mm; so I updated the Y <code>position_endstop</code> and <code>position_max</code> to 356.</p>
<p>Finally, I had reconfigured the coordinates of the home position by (-2,+6) so I needed to make the same change to the coordinates of the Z limit switch.  In the <code>[safe_z_home]</code> section, I adjusted <code>home_xy_position</code> from 260,350 to 258,356.</p>
<p>One more restart and I can now home X-Y, home Z, and issue <code>g0 x0 y0</code> to move the toolhead as far to the front left as I care for it to go.</p>
<h3>Verify Inductive Probe Operation</h3>
<p><a href="http://www2.neufeld.newton.ks.us/images/electronics/2022/08/28/IMG_20220828_121611_0398-white-balance.JPG"><img src="http://www2.neufeld.newton.ks.us/images/electronics/2022/08/28/IMG_20220828_121611_0398-white-balance_mid.jpg" alt="Voron Afterburner toolhead with inductive probe triggered" /></a></p>
<p>My probe triggers when getting close to the build surface and passes the repeatability check with a standard deviation of just over 0.002 mm, within spec.  You can even see the warm lava glow of the probe&#8217;s LED oozing around the cold end and out the cooling fan.</p>
<p>I note that without my spring steel sheet build surface, my probe doesn&#8217;t trigger <em>at all</em> on the exposed fridge magnet.  Let&#8217;s remember never to probe with a hot nozzle and missing steel sheet.</p>
<h3>PID Tuning</h3>
<p><a href="http://www2.neufeld.newton.ks.us/images/electronics/2022/08/28/20220828-Voron-2.4-PID-tuning-temperatures.png"><img src="http://www2.neufeld.newton.ks.us/images/electronics/2022/08/28/20220828-Voron-2.4-PID-tuning-temperatures_mid.png" alt="Temperatures during Voron 2.4 bed and hotend PID tuning" /></a></p>
<p>The PID tuning worked fine, although &#8230; you gonna leave that much overshoot on the nozzle temperature?</p>
<p>I&#8217;ll need to remember to retune the bed when I have the build chamber enclosed.  I did have the silicone sock installed on the heat block, so the nozzle tuning should be pretty realistic.</p>
<p><a href="http://www2.neufeld.newton.ks.us/images/electronics/2022/08/28/20220828-Voron-2.4-PID-tuning-bed.png"><img src="http://www2.neufeld.newton.ks.us/images/electronics/2022/08/28/20220828-Voron-2.4-PID-tuning-bed_mid.png" alt="Voron 2.4 bed PID tuning results" /></a></p>
<p><a href="http://www2.neufeld.newton.ks.us/images/electronics/2022/08/28/20220828-Voron-2.4-PID-tuning-nozzle.png"><img src="http://www2.neufeld.newton.ks.us/images/electronics/2022/08/28/20220828-Voron-2.4-PID-tuning-nozzle_mid.png" alt="Voron 2.4 nozzle PID tuning results" /></a></p>
<p>The tuning gave me these results and offered to write them to <code>printer.cfg</code> for me; but I&#8217;ve been allergic to mixing hand-editing and automated writes of configuration files since testing webmin in the late 90s and watching it delete valid DHCP and DNS configurations that it hadn&#8217;t learned to parse yet; so I entered these values into <code>printer.cfg</code> by hand.</p>
<h3>Run Quad Gantry Leveling</h3>
<p>Done; works.  Also it&#8217;s really neat.</p>
<h3>Measure and Set Z Limit Switch Offset</h3>
<p><a href="http://www2.neufeld.newton.ks.us/images/electronics/2022/08/28/20220828-Klipper-z-endstop-calibrate.png"><img src="http://www2.neufeld.newton.ks.us/images/electronics/2022/08/28/20220828-Klipper-z-endstop-calibrate_mid.png" alt="Klipper showing results of Z limit switch offset measurement" /></a></p>
<p>Klipper has a nice procedure that walks through bringing the nozzle down to the build surface, then reporting the value to which to set the Z limit switch offset.  I used a 0.1-mm feeler gauge and plan to go back and test further with a 0.01-mm feeler gauge, as that level of precision really does make a difference in first-layer performance.</p>
<p>As with other measurements, I copied this into <code>printer.cfg</code> myself rather than have Klippy save it for me.</p>
<h3>Calibrate Extruder Steps</h3>
<p>This is the last step of the initial startup instructions &#8230; and I need to defer it to a separate post.  Right now my extruder motor is having trouble feeding filament and is skipping steps, so I have more work to do before calibration.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.neufeld.newton.ks.us/electronics/?feed=rss2&#038;p=2154</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Voron 2.4 Build &#8212; Figuring Out Spider Mainboard Fan Connections</title>
		<link>http://www.neufeld.newton.ks.us/electronics/?p=2148</link>
		<comments>http://www.neufeld.newton.ks.us/electronics/?p=2148#comments</comments>
		<pubDate>Sat, 27 Aug 2022 22:04:03 +0000</pubDate>
		<dc:creator>Keith Neufeld</dc:creator>
				<category><![CDATA[3D Printing]]></category>
		<category><![CDATA[Voron]]></category>

		<guid isPermaLink="false">http://www.neufeld.newton.ks.us/electronics/?p=2148</guid>
		<description><![CDATA[With OctoPrint talking to the Klippy host software on the Pi talking to the Klipper firmware on the Spider mainboard and the Voron&#8217;s LCD lit up and control panel working, I could see that the firmware was able to read hotend and platform temperatures and I used the printer&#8217;s control panel to test each of [...]]]></description>
			<content:encoded><![CDATA[<p>With OctoPrint talking to the Klippy host software on the Pi talking to the Klipper firmware on the Spider mainboard and the Voron&#8217;s LCD lit up and control panel working, I could see that the firmware was able to read hotend and platform temperatures and I used the printer&#8217;s control panel to test each of the two heaters.  The heaters worked; but I noticed that when heating the hotend, the part-cooling fan came on and the heat break fan didn&#8217;t.  Probably the fan connections were swapped?</p>
<p>I&#8217;d wired the printer per <a href="https://github.com/FYSETC/FYSETC-SPIDER/blob/main/images/VORON2.4_SPIDER_V22_WIRING.jpg">Fysetc&#8217;s diagram for this printer on a later revision of their Spider board</a> because it was the only diagram I could find at the time and I wanted to be able to use a sample configuration file as a starting point rather than do the whole pin configuration from scratch.  Tempting though it was to just swap the two fan plugs on the mainboard and be done with it, I went back to the <a href="https://github.com/FYSETC/FYSETC-SPIDER/blob/main/images/VORON2.4_SPIDER_V22_WIRING.jpg">wiring diagram</a> from the <a href="https://github.com/FYSETC/FYSETC-SPIDER">Fysetc Spider board GitHub page</a> first for a closer look.</p>
<p><a href="http://www2.neufeld.newton.ks.us/images/electronics/2022/08/27/20220827-Voron-2.4-Spider-toolhead-fan-wiring.png"><img src="http://www2.neufeld.newton.ks.us/images/electronics/2022/08/27/20220827-Voron-2.4-Spider-toolhead-fan-wiring_mid.png" alt="Fysetc Spider 2.2 wiring diagram for Voron 2.4 printer -- heater and part-cooling fans" /></a></p>
<p>Oh.  Oh, I see.  I had previously noticed that Fysetc had labeled both of them as 4010 fans; but I hadn&#8217;t noticed that they had swapped the labels of which fan served which function.  I had originally connected my fans by tracing which function was connected to which Spider port; but with the functions swapped on the diagram, my wiring was swapped on my board.  I now changed my wiring to match the Fysetc diagram&#8217;s intent (and the sample <code>printer.cfg</code>&#8216;s configuration) and noted the error in the wiring diagram here for later reference.  The fans now behaved as they should.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.neufeld.newton.ks.us/electronics/?feed=rss2&#038;p=2148</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Voron 2.4 Build &#8212; Spider Mainboard Klipper Firmware Installation and Startup</title>
		<link>http://www.neufeld.newton.ks.us/electronics/?p=2139</link>
		<comments>http://www.neufeld.newton.ks.us/electronics/?p=2139#comments</comments>
		<pubDate>Sat, 27 Aug 2022 16:17:47 +0000</pubDate>
		<dc:creator>Keith Neufeld</dc:creator>
				<category><![CDATA[3D Printing]]></category>
		<category><![CDATA[Voron]]></category>

		<guid isPermaLink="false">http://www.neufeld.newton.ks.us/electronics/?p=2139</guid>
		<description><![CDATA[After running the Spider mainboard test firmware as a sanity check of the Spider&#8217;s operation and LCD cabling, several paths are available to get Klipper installed onto the Spider. My factors were: not feeling like continuing to power the Pi from an external source, even during the firmware process not feeling like continuing to re-jumper [...]]]></description>
			<content:encoded><![CDATA[<p>After <a href="?p=2129">running the Spider mainboard test firmware</a> as a sanity check of the Spider&#8217;s operation and LCD cabling, several paths are available to get Klipper installed onto the Spider.  My factors were:</p>
<ul>
<li>not feeling like continuing to power the Pi from an external source, even during the firmware process</li>
<li>not feeling like continuing to re-jumper the Spider board for DFU programming</li>
<li>my Spider should now have a working 32K bootloader installed</li>
</ul>
<p>That led me directly to SD-card firmware installation, which was easy-peasey since I have another *nix-ey computer available for one step.</p>
<p><span id="more-2139"></span></p>
<p>The <a href="https://docs.vorondesign.com/build/software/spider_klipper.html">Voron instructions for installing Klipper onto a Spider board</a> are clear and thorough; I&#8217;m first noting the short path I took through their branching options, then adding some build-specific details not in the instructions.</p>
<h3>Build the Firmware</h3>
<p>The <a href="?p=2129">OctoKlipperPi image I chose</a> had the Klipper source code already installed, so the Pi was the obvious place to compile it; and by running <code>type make</code> (or <code>which make</code> for you BSD-snorting younguns) I could see that <code>make</code> was already installed as well.  So it was just:</p>
<p><code>cd klipper<br />
make clean<br />
make menuconfig</code></p>
<p>Then pick all the Spider-related options listed on the Voron documentation page, then:</p>
<p><code>make</code></p>
<p>to build the Klipper firmware.  According to my Pi, compilation took 1m1.830s .  The first network newsreader I used took about 26 hours to compile on my NCR Tower computer a little larger than a box fan.</p>
<h3>Flash the Spider</h3>
<p>That firmware needs to go onto an SD card as a plain file (not as a card image), which is tricky to do on a Pi that&#8217;s using its SD card socket to hold the OS it&#8217;s running on.  From my Linux workstation, copy the firmware file from the Pi to a local SD card, renaming it to be recognized by the Spider bootloader&#8217;s firmware updater:</p>
<p><code>scp voron24:klipper/out/klipper.bin /run/media/neufeld/0403-0201/firmware.bin<br />
</code></p>
<p>Then power off the Spider (I powered off the entire Voron power supply), insert the SD card into the Spider, power on, and it flashes new firmware.  After that, confirm that the Pi sees the Spider&#8217;s USB connection:</p>
<p><code>$ ls /dev/serial/by-id<br />
usb-Klipper_stm32f446xx_25004E000B50563046363120-if00<br />
</code></p>
<h3>Configure Octoprint</h3>
<p>OctoPrint was already installed thanks to the Pi image I used, so <em>all</em> of the action steps in the <a href="https://docs.vorondesign.com/build/software/installing_octoprint.html">Voron OctoPrint installation instructions</a> were already done for me.</p>
<p><a href="http://www2.neufeld.newton.ks.us/images/electronics/2022/08/27/20220822-OctoPrint-update.png"><img src="http://www2.neufeld.newton.ks.us/images/electronics/2022/08/27/20220822-OctoPrint-update_mid.png" alt="OctoPrint update prompt" /></a></p>
<p>OctoPrint did politely prompt me to let it update itself &#8212; in spite of my already having run <code>apt-get upgrade</code> &#8212; which I allowed it to do and which occurred seamlessly.</p>
<p><a href="http://www2.neufeld.newton.ks.us/images/electronics/2022/08/27/20220827-OctoPrint-control-panel.png"><img src="http://www2.neufeld.newton.ks.us/images/electronics/2022/08/27/20220827-OctoPrint-control-panel.png" alt="OctoPrint control panel" /></a></p>
<p>With the update done, pressing OctoPrint&#8217;s <code>Connect</code> button successfully connects to <em>the Klipper host software running on the Pi</em>, which I understand is called Klippy.  We&#8217;re not yet talking to <em>the Klipper firmware installed on the Spider mainboard</em>.</p>
<h3>Configure Klipper</h3>
<p><a href="http://www2.neufeld.newton.ks.us/images/electronics/2022/08/27/20220827-Klipper-no-printer-cfg.png"><img src="http://www2.neufeld.newton.ks.us/images/electronics/2022/08/27/20220827-Klipper-no-printer-cfg_mid.png" alt="Klipper status response with no printer.cfg" /></a></p>
<p>Going to OctoPrint&#8217;s Terminal tab and sending a <code>status</code> command to Klippy tells us that we don&#8217;t have a Klipper <code>printer.cfg</code> file yet.</p>
<p>The <a href="https://docs.vorondesign.com/build/software/configuration.html">Voron software configuration instructions</a> walk through configuring <code>printer.cfg</code> for whatever board and wiring you may have, and the first step is downloading a sample <code>printer.cfg</code> file as a starting point.</p>
<p>Voron provides a sample <code>printer.cfg</code> configuration file for the Fysetc Spider mainboard and Fysetc provides a sample <code>printer.cfg</code> configuration file for the Voron 2.4 printer.  Um, which to choose?  Well, let&#8217;s put them both on the Pi for easy comparison, and then &#8230; pick the Fysetc sample file, since Fysetc provided the only documentation recommending how to wire your components to your Spider &#8230; wait, what&#8217;s this I see?  Looks like Voron has provided <a href="https://docs.vorondesign.com/build/electrical/v2_spider_wiring.html">Spider wiring instructions</a> since the time I started planning my wiring.  The stepper connections are definitely different between the Fysetc and Voron diagrams, so I&#8217;ll start with the Fysetc sample file that hopefully matches my Fysetc wiring diagram.</p>
<p><code>wget -O printer.cfg-voron https://raw.githubusercontent.com/VoronDesign/Voron-2/Voron2.4/firmware/klipper_configurations/Spider/Voron2_Spider_Config.cfg<br />
wget -O printer.cfg-fysetc https://raw.githubusercontent.com/FYSETC/FYSETC-SPIDER/main/firmware/Klipper/printer.cfg</p>
<p>cp printer.cfg-fysetc printer.cfg<br />
</code></p>
<p>With a <code>printer.cfg</code> file present, the OctoKlipper <code>Klipper</code> tab <code>Restart</code> <code>Host</code> button or typing <code>restart</code> into the terminal will make Klippy have another look for a configuration file.</p>
<p><a href="http://www2.neufeld.newton.ks.us/images/electronics/2022/08/27/20220827-Klipper-undefined-pins.png"><img src="http://www2.neufeld.newton.ks.us/images/electronics/2022/08/27/20220827-Klipper-undefined-pins_mid.png" alt="Klipper status response with undefined configuration" /></a></p>
<p>Then checking <code>status</code> again shows that Klippy is unhappy because we haven&#8217;t defined some required pins, so I edited <code>printer.cfg</code> and uncommented lines pertaining to my build configuration:</p>
<p><code>[heater_bed]<br />
...<br />
##  Uncomment below for SpiderVersion 1.x<br />
sensor_pin: PC3 # TB Position</p>
<p>[heater_fan hotend_fan]<br />
##      Hotend Fan - FAN0 Connector<br />
##  Uncomment below for SpiderVersion 1.x<br />
pin: PB0</p>
<p>[fan]<br />
##      Print Cooling Fan - FAN1 Connector<br />
##  Uncomment below for SpiderVersion 1.x<br />
pin: PB1</p>
<p>[stepper_x]<br />
...<br />
##      Uncomment for 350mm build<br />
position_endstop: 350<br />
position_max: 350</p>
<p>[stepper_y]<br />
...<br />
##      Uncomment for 350mm build<br />
position_endstop: 350<br />
position_max: 350</p>
<p>[stepper_z]<br />
...<br />
##      Uncomment below for 350mm build<br />
position_max: 340</p>
<p>[quad_gantry_level]<br />
...<br />
##      Gantry Corners for 350mm Build<br />
##      Uncomment for 350mm build<br />
gantry_corners:<br />
        -60,-10<br />
        410,420<br />
##      Probe points<br />
points:<br />
        50,25<br />
        50,275<br />
        300,275<br />
        300,25</p>
<p>[gcode_macro G32]<br />
gcode:<br />
    ...<br />
    ##  Uncomment for 350mm build<br />
    G0 X175 Y175 Z30 F3600<br />
</code></p>
<p>Restarting Klippy and checking status again:</p>
<p><a href="http://www2.neufeld.newton.ks.us/images/electronics/2022/08/27/20220827-Klipper-undefined-serial.png"><img src="http://www2.neufeld.newton.ks.us/images/electronics/2022/08/27/20220827-Klipper-undefined-serial_mid.png" alt="Klipper status response with undefined serial communication" /></a></p>
<p>Now it doesn&#8217;t hang up on configuration but the Klippy host software on the Pi is unable to connect to the Klipper firmware on the Spider.  So I paste in the USB serial device ID obtained earlier:</p>
<p><code>serial: /dev/serial/by-id/usb-Klipper_stm32f446xx_25004E000B50563046363120-if00<br />
</code></p>
<p><a href="http://www2.neufeld.newton.ks.us/images/electronics/2022/08/27/20220827-Klipper-ready.png"><img src="http://www2.neufeld.newton.ks.us/images/electronics/2022/08/27/20220827-Klipper-ready_mid.png" alt="Klipper status response when ready" /></a></p>
<p>Restart Klippy, check status, and we&#8217;re connected.</p>
<p><a href="http://www2.neufeld.newton.ks.us/images/electronics/2022/08/27/IMG_20220827_104837_0383-crop.JPG"><img src="http://www2.neufeld.newton.ks.us/images/electronics/2022/08/27/IMG_20220827_104837_0383-crop_mid.jpg" alt="Voron 2.4 LCD" /></a></p>
<p>Even more exciting, Klippy is now able to send Klipper its first text to display on the LCD!  This is starting to look like it might be a real thing.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.neufeld.newton.ks.us/electronics/?feed=rss2&#038;p=2139</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
