<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>CNC on Schallbert's Blog</title><link>https://blog.schallbert.de/en/tags/cnc/</link><description>Recent content in CNC on Schallbert's Blog</description><generator>Hugo</generator><language>en</language><lastBuildDate>Sun, 08 Mar 2026</lastBuildDate><atom:link href="https://blog.schallbert.de/en/tags/cnc/index.xml" rel="self" type="application/rss+xml"/><item><title>Engrave Stainless Steel A2 / AISI304</title><link>https://blog.schallbert.de/en/engrave-aisi304-stainless-steel/</link><pubDate>Sun, 08 Mar 2026</pubDate><author>Schallbert</author><guid>https://blog.schallbert.de/en/engrave-aisi304-stainless-steel/</guid><description type="html">&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2026-03-08-Engrave-Stainless-thumb.avif"&#10; class="post-cover"&#10; alt="Image: A tapered engraving tool for stainless stell application"&#10; title="Engrave Stainless Steel A2 / AISI304" /&gt;&#10;&lt;h2 id="why-this-attempt"&gt;Why this attempt?&lt;/h2&gt;&#10;&lt;p&gt;I was asked if I could engrave an auxiliary anchor for a sailing yacht. This anchor is made of &lt;code&gt;10mm&lt;/code&gt; thick stainless steel sheet and, with dimensions of &lt;code&gt;389x630mm&lt;/code&gt;, fits my engraving machine.&lt;/p&gt;&#10;&lt;p&gt;I&amp;rsquo;ve never worked with this material before and was so curious that I accepted the job.&lt;/p&gt;&#10;&lt;h2 id="the-material"&gt;The Material&lt;/h2&gt;&#10;&lt;p&gt;The anchor is made of AISI 304 stainless steel. Other names for this alloy are &amp;lsquo;18/10&amp;rsquo;, &amp;lsquo;18/8&amp;rsquo; (referring to its chromium/nickel content), or &amp;lsquo;V2A/A2&amp;rsquo; (referring to its development from experimental melts or its production process, specifically being &amp;ldquo;&lt;strong&gt;A&lt;/strong&gt;ir-hardened&amp;rdquo; or by alloy group). It is relatively malleable and therefore frequently used in industrial applications.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2026-03-08-Anker-AISI304-total.avif" alt="Image: Arrow-shaped anchor with non-polished steel surface made of AISI304 stainless steel"&gt;&lt;/figure&gt;&#10;&lt;p&gt;However, this stainless steel has a few disadvantages for machining: Its thermal conductivity is quite low. Therefore, little heat is transferred to the material, which causes the milling cutter to get pretty hot. Additionally, the material is tough. The chip doesn&amp;rsquo;t detach well from the tool, easily creating &lt;a href="https://de.wikipedia.org/wiki/Aufbauschneide" target="_blank" rel="noopener noreferrer" class="external-link"&gt;built-up edges&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;. This results in imperfections in the milling path. If the cutter pushes chips ahead of it, the material isn&amp;rsquo;t completely cut, and burrs tend to form. Furthermore, stainless steel is work-hardening: if the cutter rubs or dwells on the material, the pressure it exerts alters the material surface, making it harder than the tool itself.&lt;/p&gt;&#10;&lt;p&gt;All these properties combined lead to high tool wear and a tight requirements on cooling. The cutting parameters must also be kept in a narrow range.&lt;/p&gt;&#10;&lt;h2 id="the-tool"&gt;The Tool&lt;/h2&gt;&#10;&lt;p&gt;I&amp;rsquo;m choosing an engraving cutter from &lt;a href="https://shop.vhf.de/articleGroups/Gravierfraeser-fuer-Edelstahl-W_G_GFV.htm" target="_blank" rel="noopener noreferrer" class="external-link"&gt;vhf&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; specifically designed for machining stainless steel. With a &lt;code&gt;6mm&lt;/code&gt; shank diameter, but only a 4mm cutting diameter, a short straight cutting edge, a &lt;code&gt;60°&lt;/code&gt; engraving angle, and a &lt;code&gt;0.4mm&lt;/code&gt; tip diameter, the tool appears compact and sturdy. The cutter is coated with an &lt;a href="https://www.harveytool.com/resources/tool-coatings" target="_blank" rel="noopener noreferrer" class="external-link"&gt;AlTiN&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; coating.&lt;/p&gt;&#10;&lt;p&gt;Will the thin tip withstand the milling forces and heat generated?&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2026-03-08-Gravierfr%c3%a4ser.avif" alt="Image: Coated carbide tapered engrave mill cutter for stainless steel"&gt;&lt;/figure&gt;&#10;&lt;h2 id="discussion-about-milling-parameters"&gt;Discussion about milling parameters&lt;/h2&gt;&#10;&lt;p&gt;In the forum &lt;a href="https://cnczone.nl/viewtopic.php?f=22&amp;amp;t=24339" target="_blank" rel="noopener noreferrer" class="external-link"&gt;cnczone.nl&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; I&amp;rsquo;m asking for recommendations on depth of cut, feed rate, and spindle speed for my solid carbide end mill.&lt;/p&gt;&#10;&lt;p&gt;My internet research&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt; suggests a target cutting speed for AISI 304 of approximately &lt;code&gt;60m/min&lt;/code&gt; and a feed per tooth between &lt;code&gt;0.02mm&lt;/code&gt; and &lt;code&gt;0.05mm&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;I also called the milling cutter manufacturer and asked for recommendations for optimal use on a soft machine like mine. The manufacturer said I absolutely had to use cooling, ideally with plenty of emulsion on the material. His recommendation for the first attempt, using this milling cutter, was:&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;S15000 F600 Z-0.1 (vhf-Proposal)&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;I was explained that frequent changes of direction are to be expected when engraving, and the goal should be to guide the machine as smoothly as possible with short acceleration paths. This would largely prevent chatter marks.&lt;/p&gt;&#10;&lt;p&gt;From the forum, I received values between &lt;code&gt;F240&lt;/code&gt; and &lt;code&gt;F800&lt;/code&gt; at maximum spindle speed.&lt;/p&gt;&#10;&lt;p&gt;I&amp;rsquo;m incorporating my experience with machining steel from previous articles &lt;a href="https://blog.schallbert.de/en/milling-secc/"&gt;milling SECC&lt;/a&gt; and &lt;a href="https://blog.schallbert.de/en/milling-steel/"&gt;machining steel&lt;/a&gt;, setting a feed per tooth of &lt;code&gt;0.04mm&lt;/code&gt;. I&amp;rsquo;m adjusting the spindle speed to match the cutting speed of &lt;code&gt;60m/min&lt;/code&gt;. I like to cut quickly through the material, but with a very shallow depth of cut. This results in the following values for the given cutting edge geometry:&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;S30000 F1200 Z-0.1 (Schallbert)&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;With this spindle speed and feed rate, I&amp;rsquo;m exactly double the recommendation from &lt;em&gt;vhf&lt;/em&gt;. I choose a fast feed rate to minimize frictional heat at the cutter and transfer more heat to the chip. I keep the depth of cut low to reduce forces acting on the workpiece. This should result in higher engraving accuracy and better detail.&lt;/p&gt;&#10;&lt;p&gt;I consider a total engraving depth of &lt;code&gt;0.2mm&lt;/code&gt; enough.&lt;/p&gt;&#10;&lt;h3 id="machine-kinematics"&gt;Machine Kinematics&lt;/h3&gt;&#10;&lt;p&gt;As described above, spindle speed and feed rate are aligned to each other. It is important to check whether the set feed rate can actually be achieved. Depending on the machine&amp;rsquo;s acceleration capability, as well as the size and shape of the engraving, the machine may, on average, operate at a much lower feed rate due to the numerous changes in direction.&lt;/p&gt;&#10;&lt;p&gt;Therefore, the spindle speed and feed rate must be adjusted to the realistically achievable values. These can be observed with the machine in simulation mode. In my case, the machine acceleration is so high relative to the size of the engraving that I can almost always operate at target speed. Want an example calculation?&lt;/p&gt;&#10;&lt;p&gt;The machine requires the following time to accelerate from standstill to the set feed rate of &lt;code&gt;F1200&lt;/code&gt;:&lt;/p&gt;&#10;$$a_{machine} = 400\frac{mm}{s^2}, v_{feedrate} = 1200\frac{mm}{min} = 20\frac{mm}{s}$$$$t = \frac{20}{400} = 50ms$$&lt;p&gt;So, I only have very short periods where the machine is rubbing against the material more than cutting it.&lt;/p&gt;&#10;&lt;h2 id="preparing-the-engraving-process"&gt;Preparing the Engraving Process&lt;/h2&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2026-03-08-AISI304-Cooling.avif" alt="Image: Material on the milling bed. Vacuum on, cooling fluid applied. Ready to mill."&gt;&lt;/figure&gt;&#10;I only work with metal very rarely. Therefore, I don&amp;rsquo;t have any ready-made cutting or cooling emulsion on hand. As a substitute, I use Ballistol spray and a little water. I rub the oil into the surface. For the &lt;code&gt;10x15cm&lt;/code&gt; image area, I add about a tablespoon of water.&lt;/p&gt;&#10;&lt;p&gt;To my surprise, the two form an emulsion on their own.&lt;/p&gt;&#10;&lt;p&gt;I plan to clamp the stock using my vacuum table and position it centrally using locator pins. I close the recesses for handle and stem insert with coated waxed paper (&lt;em&gt;Pro tip! Inexpensive, super tear-resistant, environmentally friendly, almost airtight, easy to work with&lt;/em&gt;).&lt;/p&gt;&#10;&lt;p&gt;After switching on the vacuum pump, I discover that the armature isn&amp;rsquo;t sitting completely flat on one side. Instead of &lt;code&gt;-0.7 bar&lt;/code&gt;, I&amp;rsquo;m only getting &lt;code&gt;-0.4 bar&lt;/code&gt;. This isn&amp;rsquo;t critical for the low forces involved in engraving. However, it will be difficult to maintain a consistent line width.&lt;/p&gt;&#10;&lt;p&gt;My solution is to scale down the milling design. Due to the smaller size, differences in line width will be hardly noticeable.&lt;/p&gt;&#10;&lt;h2 id="procedure"&gt;Procedure&lt;/h2&gt;&#10;&lt;p&gt;Before performing the engraving, I run the machine in simulation mode. During this process, I discover two very slow plunge steps. The CAM software likely creates these because of the plunge ramp I set, which it auto-applies to very short lines.&lt;/p&gt;&#10;&lt;p&gt;I correct this by manually setting plunge points.&lt;/p&gt;&#10;&lt;p&gt;Now I&amp;rsquo;m running the milling job. The emulsion stays in place despite the spindle fan. The noise level is significantly lower during the first depth of cut than during the second - but it never becomes unpleasant. Vibrations are minimal. Even with the more complex logo, the milling process takes barely five minutes.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2026-03-08-Gravur-Petrel.avif" alt="Image: Petrel logo engraved onto stainless steel anchor"&gt;&lt;/figure&gt;&#10;&lt;h2 id="result"&gt;Result&lt;/h2&gt;&#10;&lt;p&gt;I&amp;rsquo;m really happy. Based on my observations in the forums, I hadn&amp;rsquo;t expected such a good result on my hobby machine. Virtually no chatter marks, clean milling channels, and only slight burr formation at the stop and return points. However, the material remains in the milling channel and doesn&amp;rsquo;t create any perceptible edges. Even in detail, the milled finish is quite attractive.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2026-03-08-Gravur-Ford.avif" alt="Image: Ford logo engraved onto stainless steel anchor"&gt;&lt;/figure&gt;&#10;&lt;p&gt;The following video shows some details of the milling process. My last remaining question: Is the slightly rough noise of the milling cutter during the second depth of cut an indication of increased tool wear due to material hardening?&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center media-frame--video"&gt;&#10; &lt;div class="media-video"&gt;&lt;iframe&#10; src="https://makertube.net/videos/embed/7KNuywPo47HWq85FXDmyJE"&#10; title="Engraving Stainless Steel"&#10; loading="lazy"&#10; allow="autoplay; fullscreen; picture-in-picture"&#10; allowfullscreen&#10; style="width: 100%; height: auto; min-height: 315px; aspect-ratio: 16/9;"&#10; &gt;&lt;/iframe&gt;&lt;/div&gt;&#10; &lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;Engraving Stainless Steel&lt;/span&gt;&lt;a href="https://makertube.net/videos/embed/7KNuywPo47HWq85FXDmyJE" class="attr-link" target="_blank" rel="noopener noreferrer"&gt;↗&lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;div class="footnotes" role="doc-endnotes"&gt;&#10;&lt;hr&gt;&#10;&lt;ol&gt;&#10;&lt;li id="fn:1"&gt;&#10;&lt;p&gt;&lt;a href="https://www.machining-custom.com/blog/304-stainless-steel-cnc-turning-characteristics-and-technology.html" target="_blank" rel="noopener noreferrer" class="external-link"&gt;Quelle1: VNT Hardware&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; &lt;a href="https://www.machiningdoctor.com/mds/?matId=1750" target="_blank" rel="noopener noreferrer" class="external-link"&gt;Quelle2: Machiningdoctor&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; &lt;a href="https://www.cncoptimization.com/resources/tables/stainless-speeds-feeds/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;Quelle3: CNC Optimization&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;/div&gt;&#10;</description></item><item><title>Automate tool length measurement</title><link>https://blog.schallbert.de/en/edingcnc-macro-explained/</link><pubDate>Tue, 10 Feb 2026</pubDate><author>Schallbert</author><guid>https://blog.schallbert.de/en/edingcnc-macro-explained/</guid><description type="html">&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2026-02-10-tls-thumb.avif"&#10; class="post-cover"&#10; alt="Image: Drawing of Tool Length Sensor on stock material with distance spindle collet, visualizing Z0 measurement"&#10; title="Automate tool length measurement" /&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2026-02-10-tls.avif" alt="Image: Image: Drawing of Tool Length Sensor on stock material with distance to the spindle collet, visualizing Z0 measurement"&gt;&lt;/figure&gt;&#10;I keep receiving questions about my &lt;a href="https://blog.schallbert.de/en/macros-for-cnc/"&gt;post on CNC macros&lt;/a&gt;. In this article, I&amp;rsquo;d like to provide some answers and share details on measuring and compensating for different tool lengths.&lt;/p&gt;&#10;&lt;h2 id="question-how-does-the-macro-calculate-the-tool-length"&gt;Question: How does the macro calculate the tool length?&lt;/h2&gt;&#10;&lt;p&gt;In the section &lt;a href="https://blog.schallbert.de/en/macros-for-cnc/#function-measure-tool-length"&gt;Measuring Tool Length&lt;/a&gt;, the following code appears:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;G53&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;G00&lt;/span&gt; Z&lt;span style="color:#f92672"&gt;[&lt;/span&gt;zSafety&lt;span style="color:#f92672"&gt;]&lt;/span&gt; ; &lt;span style="color:#75715e"&gt;# Go to safety height (machine coordinates)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;G53&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;G00&lt;/span&gt; X&lt;span style="color:#f92672"&gt;[&lt;/span&gt;xPosTls&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Y&lt;span style="color:#f92672"&gt;[&lt;/span&gt;xPosTls&lt;span style="color:#f92672"&gt;]&lt;/span&gt; ; &lt;span style="color:#75715e"&gt;# Go to tool length sensor&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;3&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;G53&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;G00&lt;/span&gt; Z&lt;span style="color:#f92672"&gt;[&lt;/span&gt;zSpindleTip &lt;span style="color:#f92672"&gt;+&lt;/span&gt; toolLengthEst &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;10&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt; ;&lt;span style="color:#75715e"&gt;# Move Z down to 10mm above estimated tool tip&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;What happens in lines &lt;code&gt;1-3&lt;/code&gt;?&#10;If &lt;code&gt;Z=0&lt;/code&gt; is the highest position in the machine coordinate system (move with &lt;code&gt;G53&lt;/code&gt;), are &lt;code&gt;zSpindleTip&lt;/code&gt; and &lt;code&gt;toolLengthEst&lt;/code&gt; negative values?&lt;/p&gt;&#10;&lt;h3 id="answer"&gt;Answer:&lt;/h3&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;This line moves the machine to the value stored in variable &lt;a href="https://github.com/Schallbert/macro_edingCNC_sorotec/blob/a547e36c0f47490464e1fdb56d1a4b0e706b44fe/macro.cnc#L341" target="_blank" rel="noopener noreferrer" class="external-link"&gt;#4506&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;. For me, it is &lt;code&gt;0&lt;/code&gt;, i.e. maximum Z height. This value is permanently stored (see &lt;a href="https://github.com/Schallbert/macro_edingCNC_sorotec/tree/main?tab=readme-ov-file#permanent" target="_blank" rel="noopener noreferrer" class="external-link"&gt;here&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;) and must be set beforehand in the macro setup dialogue.&lt;/li&gt;&#10;&lt;li&gt;Executes a movement to the tool length sensor (WZLS) in the machine coordinate system. To do this, I have positioned my sensor at a fixed point on the machine.&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;zSpindleTip&lt;/code&gt; (variable &lt;code&gt;#4509&lt;/code&gt;) refers to the height on the &lt;code&gt;Z-axis&lt;/code&gt; at which the spindle nose clears the tool length sensor. This value is negative. Why? The maximum value of the Z-axis is &lt;code&gt;zero&lt;/code&gt; when it is at the very top of the machine&amp;rsquo;s travel. If you lower the axis from this point to the tool length sensor (WZLS), you are moving it in the negative Z-direction. If you add the estimated tool length &lt;code&gt;toolLengthEst&lt;/code&gt; and a safety margin of &lt;code&gt;10mm&lt;/code&gt; (in case you made a mistake in the tool length estimation), but remain below the mechanical stop of the Z-axis, the value is still negative. However, the spindle nose now has sufficient clearance to the tool tip, because the virtual tool and safety margin have now been added.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;Pro tip: In the &amp;lsquo;Variables&amp;rsquo; tab of EdingCNC, you can view the values of a variable bank. Enter a bank, e.g. &lt;code&gt;#4500&lt;/code&gt;, and you will see the live values of all ten variables.&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;To understand this properly, it is a good idea to run the CNC software in simulation mode alongside for dry testing with live variables in parallel.&#10;Concrete example:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;zSafety &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; ;&lt;span style="color:#75715e"&gt;# machine coordinates, Z-axis at top notch&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;zSpindleTip &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;86&lt;/span&gt;&lt;span style="color:#f92672"&gt;.&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;43&lt;/span&gt; ;&lt;span style="color:#75715e"&gt;# machine coordinates, where empty spindle collet touches TLS&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;toolLengthEst &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;35&lt;/span&gt; ;&lt;span style="color:#75715e"&gt;# the length the tool is protruding from spindle collet&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;G53&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;G00&lt;/span&gt; Z&lt;span style="color:#f92672"&gt;[-&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;86&lt;/span&gt;&lt;span style="color:#f92672"&gt;.&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;43&lt;/span&gt; &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;35&lt;/span&gt; &lt;span style="color:#f92672"&gt;+&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;10&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt; &lt;span style="color:#75715e"&gt;# = -41.32mm, so below max Z height&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I provide the variable names in my macro repository &lt;a href="https://github.com/Schallbert/macro_edingCNC_sorotec/tree/main?tab=readme-ov-file#permanent" target="_blank" rel="noopener noreferrer" class="external-link"&gt;on GitHub&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;&#10;&lt;h3 id="question-how-do-i-calculate-the-workpiece-height-after-a-tool-measurement"&gt;Question: How do I calculate the workpiece height after a tool measurement?&lt;/h3&gt;&#10;&lt;p&gt;The following scenario: You measure the tool and then determine the workpiece height using a macro. If you now change the tool length without calling the tool change macro, the workpiece zero point is no longer correct. With a shorter tool, the zero point is &amp;rsquo;too low&amp;rsquo;; with a longer one, it is &amp;rsquo;too high&amp;rsquo;.&lt;/p&gt;&#10;&lt;p&gt;How can this problem be solved?&lt;/p&gt;&#10;&lt;h3 id="answer-several-solutions"&gt;Answer: Several solutions&lt;/h3&gt;&#10;&lt;p&gt;In my view, there are three solutions to the problem.&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Always run tool length changes through the tool change macro. You can just re-enter the same tool number there.&lt;/li&gt;&#10;&lt;li&gt;Reset the Z0 point via workpiece measurement (not recommended&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;)&lt;/li&gt;&#10;&lt;li&gt;Without a macro: Use the &lt;code&gt;G92&lt;/code&gt; command to shift the Z coordinate system. Example follows.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2026-02-10-Enter-G92.avif" alt="Image: Coordinate shift G92 executed in the CNC software&amp;#39;s control terminal"&gt;&lt;/figure&gt;&#10;&lt;h3 id="solution-3-shift-the-coordinate-system"&gt;Solution #3: Shift the coordinate system&lt;/h3&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2026-02-10-coordshift-before.avif" alt="Image: CNC coordinate window showing machine and workpiece coordinates before shifting to reflect a tool change"&gt;&lt;/figure&gt;&#10;You can shift the workpiece coordinate system using the command &lt;a href="https://www.linuxcnc.org/docs/html/gcode/g-code.html#gcode:g92" target="_blank" rel="noopener noreferrer" class="external-link"&gt;&lt;code&gt;G92 Coordinate System Offset&lt;/code&gt;&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;. When executed, the number passed for the selected axis is adopted as the new value in the workpiece coordinate system.&lt;/p&gt;&#10;&lt;p&gt;In this case, we only want to shift the relative position and thus compensate for the difference in tool lengths.&lt;/p&gt;&#10;&lt;p&gt;Let&amp;rsquo;s assume that the old tool &lt;code&gt;T17&lt;/code&gt; has a free length of &lt;code&gt;32mm&lt;/code&gt; and the new tool (again &lt;code&gt;T17&lt;/code&gt;, as in this example we are simply changing tools or using a finishing tool with the same cutting data) has a free length of &lt;code&gt;24mm&lt;/code&gt;. The new value is shorter, and therefore the zero point must be moved down by &lt;code&gt;8mm&lt;/code&gt;. &amp;lsquo;Downwards&amp;rsquo; is a negative value on the Z-axis in the coordinate system.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;;&lt;span style="color:#75715e"&gt;# Pseudocode&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;;&lt;span style="color:#75715e"&gt;# (each CamelCaseWord represents a variable ID like #5003):&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;G92&lt;/span&gt; Z&lt;span style="color:#f92672"&gt;[&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;CurrentPositionZ&lt;/span&gt; &lt;span style="color:#f92672"&gt;+&lt;/span&gt; (&lt;span style="color:#66d9ef"&gt;OldToolLength&lt;/span&gt; &lt;span style="color:#f92672"&gt;-&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;NewToolLength&lt;/span&gt;)&lt;span style="color:#f92672"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;;&lt;span style="color:#75715e"&gt;# 20mm + (32mm - 24mm ) = 20mm + 8mm = 28mm &lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="offset-of-workpiece-zero-vs-workpiece-coordinate-system"&gt;Offset of workpiece zero vs. workpiece coordinate system&lt;/h3&gt;&#10;&lt;p&gt;This calculation may seem confusing at first, as it shifts the coordinate system upwards. But this is precisely what is required to maintain the workpiece zero point relative to the tool tip: the tool is &lt;code&gt;8mm&lt;/code&gt; shorter. Since we do not shift the workpiece zero point downwards, the coordinate system must be shifted upwards. This compensates for the now longer distance between the tool tip and the workpiece.&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Coordinate System&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Tool tip position Z [mm]&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Workpiece position Z [mm]&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Tool top position Z [mm]&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Workpiece position Z [mm]&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Before shift&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Before shift&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;After shift&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;After shift&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Workpiece&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;20&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;0&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;28&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;0&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Machine&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;-41.42&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;-61,42&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;-41.42&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;-69,42&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2026-02-10-coordshift-after.avif" alt="Image: CNC&amp;#39;s coodinate window showing machine and workpiece coordinates after shift to reflect a change of tools. The shift only affects workpiece coordinates."&gt;&lt;/figure&gt;&#10;Note that shifting the coordinate system changes the position of the tool tip in the &lt;em&gt;workpiece coordinate system&lt;/em&gt; without the Z-axis actually moving. The &lt;em&gt;machine coordinate system&lt;/em&gt; remains unaffected by this change. However, as the Z-axis now has to travel a greater distance to reach the workpiece, its position in the machine coordinate system is lower by &lt;code&gt;-8mm&lt;/code&gt;.&lt;/p&gt;&#10;&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;&#10;&lt;p&gt;The macros only work under certain conditions:&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;The tool length has been measured beforehand, or tool changes are always performed through the macro.&lt;/li&gt;&#10;&lt;li&gt;The workpiece zero point has been determined with known tool length.&lt;/li&gt;&#10;&lt;li&gt;There hasn&amp;rsquo;t been any emergency stop or other critical error in between. This would clear the volatile memory for the relevant variables.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="footnotes" role="doc-endnotes"&gt;&#10;&lt;hr&gt;&#10;&lt;ol&gt;&#10;&lt;li id="fn:1"&gt;&#10;&lt;p&gt;In my view, re-measuring the workpiece height in the Z-axis after a tool change adjusts the wrong parameter. In reality, it is not the height of the workpiece that has changed, but the position of the tool tip. I would therefore always prefer to adjust the parameter that has actually changed.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;/div&gt;&#10;</description></item><item><title>Steel sheet (SECC) milling</title><link>https://blog.schallbert.de/en/milling-secc/</link><pubDate>Mon, 22 Dec 2025</pubDate><author>Schallbert</author><guid>https://blog.schallbert.de/en/milling-secc/</guid><description type="html">&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2025-12-22-HTPC-slotted-thumb.avif"&#10; class="post-cover"&#10; alt="Image: additional slots in HTPC case (SECC) for better cooling"&#10; title="Steel sheet (SECC) milling" /&gt;&#10;&lt;h2 id="the-project"&gt;The Project&lt;/h2&gt;&#10;&lt;p&gt;This is a PC case made of &lt;code&gt;0.8mm&lt;/code&gt; thick, galvanized steel sheet &amp;ldquo;SECC&amp;rdquo;. It dates from the early 2000s and was recently fitted with new internal components.&lt;/p&gt;&#10;&lt;h2 id="the-challenge"&gt;The Challenge&lt;/h2&gt;&#10;&lt;p&gt;Due to the now much more powerful graphics card (&lt;a href="https://de.wikipedia.org/wiki/Thermal_Design_Power" target="_blank" rel="noopener noreferrer" class="external-link"&gt;TDP&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; &lt;code&gt;200W&lt;/code&gt;) and the cramped design as an &lt;a href="https://de.wikipedia.org/wiki/Home_Theater_Personal_Computer" target="_blank" rel="noopener noreferrer" class="external-link"&gt;HTPC&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;, the resulting heat loss could not be dissipated as desired, resulting in temperatures around &lt;code&gt;50°C&lt;/code&gt; inside the case under load. That&amp;rsquo;s far too high for my liking.&lt;/p&gt;&#10;&lt;h3 id="the-specifications"&gt;The Specifications&lt;/h3&gt;&#10;&lt;p&gt;The graphics card follows current, common designs: A metal radiator covers the entire surface of the PCB. Its fins are oriented perpendicular to the socket, and the flat fans mounted on it (&lt;code&gt;3x80mm&lt;/code&gt;) push the air through the baffles toward the motherboard and case lid.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2025-12-22-graka-target-1080.avif" alt="Image: The graphics card for which cooling shall be optimized."&gt;&lt;/figure&gt;&#10;&lt;p&gt;Unfortunately, there are only a few millimeters of space between the graphics card and the case lid. Therefore, I want to add extra holes to the lid at precisely this point. The case already has &lt;code&gt;3mm&lt;/code&gt; diameter ventilation holes in a &lt;code&gt;10x19mm 45°&lt;/code&gt; grid pattern on the sides. I will now try to apply this pattern to the ventilation holes for the graphics card. This brings me to a total of 133, which I&amp;rsquo;d rather not mark, center-punch, and machine by hand for convenience.&lt;/p&gt;&#10;&lt;p&gt;So I create a drawing in CAD and then a drilling cycle program for my milling machine.&lt;/p&gt;&#10;&lt;h2 id="tool-1-3mm-drill-bit"&gt;Tool 1: 3mm Drill Bit&lt;/h2&gt;&#10;&lt;p&gt;I do have a few hardware store steel drill bits made of standard high-speed steel (HSS) lying around, but some of them are in poor condition. So I use an unused steel drill bit from my Dremel set.&lt;/p&gt;&#10;&lt;h3 id="drilling-parameters"&gt;Drilling Parameters&lt;/h3&gt;&#10;&lt;p&gt;It has a light gray, metallic color and looks so similar to uncoated solid carbide tools that I (mistakenly) assume it is carbide. Therefore, I selected the following parameters:&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;3mm solid carbide drill bit for steel, 2 flutes: S17000 F470 Z-0.2, retraction 0.5mm&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;As usual, I work completely dry, meaning I don&amp;rsquo;t use any coolant.&lt;/p&gt;&#10;&lt;h3 id="drilling-preparation"&gt;Drilling Preparation&lt;/h3&gt;&#10;&lt;p&gt;To prepare the workpiece, I apply masking tape to the section of the housing where the holes will later be drilled. Using the maximum drilling depth, I only penetrate the material minimally. Since the masking tape remains intact this way, I don&amp;rsquo;t lose vacuum through exposed holes in the vacuum table.&lt;/p&gt;&#10;&lt;p&gt;I place the housing cover, outer side down, on the machine bed and cover any unused holes in my vacuum table with a rubber mat. Then I position the gantry close to the holes so that the spindle doesn&amp;rsquo;t collide with the housing wall during the machining path. I also remove the move to park position &lt;code&gt;G28&lt;/code&gt; from the milling file, as the housing cover is now in the way. After the Z-axis is raised from the last hole, the program ends with &lt;code&gt;M30&lt;/code&gt; (stop and rewind).&lt;/p&gt;&#10;&lt;h3 id="the-result"&gt;The Result&lt;/h3&gt;&#10;&lt;p&gt;To cut to the chase: The drill bit didn&amp;rsquo;t last. I noticed something was wrong after just a few seconds from the sound of the machine: It was suddenly much quieter than before.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2025-12-22-hss-meltdown.avif" alt="Image: The HSS drill only lasts to the fourth hole of 133, then its tip is gone."&gt;&lt;/figure&gt;&#10;&lt;p&gt;I managed a measly 3 out of 133 holes this way. After that, the tip of the drill bit was stuck in one of the partially completed holes and seemed to be welded to it.&lt;/p&gt;&#10;&lt;h3 id="problem-analysis"&gt;Problem Analysis&lt;/h3&gt;&#10;&lt;p&gt;Apparently, the drill bit wasn&amp;rsquo;t made of solid carbide at all, and therefore I was using completely unsuitable parameters. I posted the symptoms in two forums (&lt;a href="https://hobbyline.info/forum/index.php?thread/687-2-schneider-stahlblech-wie-anwenden/&amp;amp;postID=12837#post12837" target="_blank" rel="noopener noreferrer" class="external-link"&gt;Hobbyline&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; and &lt;a href="https://www.cnczone.nl/viewtopic.php?t=23051" target="_blank" rel="noopener noreferrer" class="external-link"&gt;cnczone&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;) and received the information that I should have been using &lt;code&gt;S1000 F30&lt;/code&gt; (!) if I wanted to drill a few more holes.&lt;/p&gt;&#10;&lt;h3 id="the-solution"&gt;The Solution&lt;/h3&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2025-12-22-slots.avif" alt="Image: Slot milling solves the problem as I can use a carbide endmill now"&gt;&lt;/figure&gt;&#10;So I&amp;rsquo;m switching to carbide end mills. I only have one in my collection that was made for steel. However, it has a larger diameter, so I have to adjust my design.&lt;/p&gt;&#10;&lt;p&gt;Now I&amp;rsquo;m creating slots in CAD, which are &lt;code&gt;6mm&lt;/code&gt; wide and &lt;code&gt;22mm&lt;/code&gt; long, positioned at a &lt;code&gt;45°&lt;/code&gt; angle above the graphics card radiator.&lt;/p&gt;&#10;&lt;h2 id="tool-2-6mm-solid-carbide-end-mill"&gt;Tool 2: 6mm Solid Carbide End Mill&lt;/h2&gt;&#10;&lt;p&gt;I&amp;rsquo;m applying my already &lt;a href="https://blog.schallbert.de/en/milling-steel/"&gt;proven milling technique&lt;/a&gt; for SECC and refining it further: High spindle speed, high feed rate, shallow depth of cut.&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;6mm solid carbide end mill, AlTiN-coated, 2 flutes, 0.2mm 45° chamfer: S10600 F880 Z-0.18&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;figure class="media-frame media-frame--center media-frame--video"&gt;&#10; &lt;div class="media-video"&gt;&lt;iframe&#10; src="https://makertube.net/videos/embed/hoqrsaBrW2nrjszyJTPEpC"&#10; title="Cutting SECC steel of my PC case"&#10; loading="lazy"&#10; allow="autoplay; fullscreen; picture-in-picture"&#10; allowfullscreen&#10; style="width: 100%; height: auto; min-height: 315px; aspect-ratio: 16/9;"&#10; &gt;&lt;/iframe&gt;&lt;/div&gt;&#10; &lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;Cutting SECC steel of my PC case&lt;/span&gt;&lt;a href="https://makertube.net/videos/embed/hoqrsaBrW2nrjszyJTPEpC" class="attr-link" target="_blank" rel="noopener noreferrer"&gt;↗&lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;h3 id="cut-quality"&gt;Cut Quality&lt;/h3&gt;&#10;&lt;p&gt;The cut edges are burr-free, high-gloss, and razor-sharp. Therefore, a chamfer needs to be applied. I do this by hand with a scraper and utility knife, which I quickly regret: I can&amp;rsquo;t get it as clean and even as I&amp;rsquo;d like.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2025-12-22-slots-complete.avif" alt="Image: SECC surface quality after milling &amp;amp; de-burr"&gt;&lt;/figure&gt;&#10;&lt;p&gt;Not so bad: I get a neatly finished case with significantly improved cooling practically for free (apart from the learning curve). In the image above, the graphics card&amp;rsquo;s radiator is clearly visible through the new slots in the case.&lt;/p&gt;&#10;</description></item><item><title>Milling Albizia/Albasia</title><link>https://blog.schallbert.de/en/albasia-on-cnc/</link><pubDate>Mon, 06 Oct 2025</pubDate><author>Schallbert</author><guid>https://blog.schallbert.de/en/albasia-on-cnc/</guid><description type="html">&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2025-10-06-albasia-on-cnc-thumb.avif"&#10; class="post-cover"&#10; alt="Image: Macro shot of Albasia plywood, layer view"&#10; title="Milling Albizia/Albasia" /&gt;&#10;&lt;h2 id="what-is-albasia"&gt;What is Albasia?&lt;/h2&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2025-10-06-albasia-samplecolors.avif" alt="Image: Albasia sandwich material samples with colored melamine surface"&gt;&lt;/figure&gt;&#10;Albasia wood (&lt;a href="https://en.wikipedia.org/wiki/Falcataria_falcata" target="_blank" rel="noopener noreferrer" class="external-link"&gt;Falcataria falcata&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;), also known as Albizia, is a very light softwood. It is found primarily in &lt;a href="https://www.plywoodworking.com/exploring-albasia-wood-a-sustainable-solution-for-the-timber-industry.html" target="_blank" rel="noopener noreferrer" class="external-link"&gt;Southeast Asia&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; and grows rapidly, which improves its &lt;a href="https://www.juergensen.de/news/albasia-sperrholz-unsere-gruene-loesung-fuer-die-industrie/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;sustainability rating&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;. Its color varies between whitish-yellow and pastel brown-pink, but is significantly lighter than beech or oak.&lt;/p&gt;&#10;&lt;p&gt;In Europe, it is usually sold as plywood. This mitigates disadvantages such as the strong tendency to shrink and warp.&lt;/p&gt;&#10;&lt;p&gt;The density of Albasia is about 15% lower than that of the already very light poplar wood. It forms long fibers as it grows, which impairs its machinability. Because it also provides good insulation due to its numerous air pockets, it is often used in vehicle interiors (campers, boats, etc.). To compensate for its low strength, Albasia multiplex is often offered as a sandwich panel rather than raw.&lt;/p&gt;&#10;&lt;h3 id="sandwich-technology-achieves-good-material-properties"&gt;Sandwich technology achieves good material properties&lt;/h3&gt;&#10;&lt;p&gt;My test material has a &lt;code&gt;0.8mm&lt;/code&gt; thick layer of high-pressure laminate (HPL) applied on both sides. The surface is available in colored melamine decors and can be ordered with a hardened finish, which makes it matte and scratch-resistant.&lt;/p&gt;&#10;&lt;h3 id="are-albasia-composite-panels-suitable-for-outdoor-use"&gt;Are Albasia composite panels suitable for outdoor use?&lt;/h3&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;&amp;ldquo;Our panels are not intended for outdoor use.&amp;rdquo; - EpicPLY, Retailer&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;Even though the material was developed for interior construction, I&amp;rsquo;m currently testing the weather resistance of the panels with an experiment. I&amp;rsquo;m screwing the composite panels together at right angles, butting them together so that one side of the coating and the other side of the wood edge are directly exposed to the elements. I&amp;rsquo;ve sealed one exposed edge with hard oil and left the other untreated. Now I&amp;rsquo;m hanging the structure outside on the balcony for a year and will then see how the material behaves - an update will follow in a separate post!&lt;/p&gt;&#10;&lt;section class="hugo-gallery"&gt;&#10; &lt;div class="hugo-gallery__frame"&gt;&#10; &lt;div class="hugo-gallery__grid" role="list"&gt;&lt;a&#10; class="hugo-gallery__thumb"&#10; href="#gallery-full-0"&#10; aria-label="Image: test material and tools: plywood sample, srews, drills"&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2025-10-06-albasia-outdoor-test-setup.avif"&#10; alt="Image: test material and tools: plywood sample, srews, drills"&#10; class="hugo-gallery__thumb-img"&#10; loading="lazy"&gt;&#10; &lt;/a&gt;&lt;a&#10; class="hugo-gallery__thumb"&#10; href="#gallery-full-1"&#10; aria-label="Image: Albasia weather test mounted outside"&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2025-10-06-albasia-outdoor-test-mount.avif"&#10; alt="Image: Albasia weather test mounted outside"&#10; class="hugo-gallery__thumb-img"&#10; loading="lazy"&gt;&#10; &lt;/a&gt;&lt;a&#10; class="hugo-gallery__thumb"&#10; href="#gallery-full-2"&#10; aria-label="Image: Comparison of oiled and raw plywood surface on day0 of test. Both look fresh and new."&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2025-10-06-albasia-outdoor-test-surface.avif"&#10; alt="Image: Comparison of oiled and raw plywood surface on day0 of test. Both look fresh and new."&#10; class="hugo-gallery__thumb-img"&#10; loading="lazy"&gt;&#10; &lt;/a&gt;&lt;/div&gt;&lt;div class="hugo-gallery__caption"&gt;&#10; Setup for weathering and screw mounting tests with Albizia plywood.&#10; &lt;/div&gt;&lt;/div&gt;&#10;&#10; &lt;div class="hugo-gallery__full" aria-live="polite"&gt;&lt;figure&#10; id="gallery-full-0"&#10; class="hugo-gallery__figure media-frame media-frame--center"&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2025-10-06-albasia-outdoor-test-setup.avif"&#10; alt="Image: test material and tools: plywood sample, srews, drills"&gt;&lt;figcaption&gt;Vorbereitung für den Schraubentest&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure&#10; id="gallery-full-1"&#10; class="hugo-gallery__figure media-frame media-frame--center"&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2025-10-06-albasia-outdoor-test-mount.avif"&#10; alt="Image: Albasia weather test mounted outside"&gt;&lt;figcaption&gt;Der zusammengesetzte Testaufbau ist zur Bewitterung angebracht.&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure&#10; id="gallery-full-2"&#10; class="hugo-gallery__figure media-frame media-frame--center"&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2025-10-06-albasia-outdoor-test-surface.avif"&#10; alt="Image: Comparison of oiled and raw plywood surface on day0 of test. Both look fresh and new."&gt;&lt;figcaption&gt;Am Tag 0: Beide Oberflächen sehen noch frisch aus.&lt;/figcaption&gt;&lt;/figure&gt;&lt;/div&gt;&#10;&lt;/section&gt;&#10;&#10;&lt;p&gt;My expectation: unlike birch plywood and similar to poplar wood, Albasia will not be suitable for outdoor use. I assume that the fibers in the edge area will absorb water and cause the material to swell. This would quickly lead to its decay. Furthermore, I consider the risk of insect infestation to be high because the fibers are really soft and can be easily peeled off. Therefore, I would only use it indoors.&lt;/p&gt;&#10;&lt;h3 id="screw-connections"&gt;Screw connections&lt;/h3&gt;&#10;&lt;p&gt;Despite its light core, the Albasia composite panel is easy to screw together and, with a &amp;ldquo;screw pull-out strength of 120kg&amp;rdquo; for a &lt;code&gt;4mm&lt;/code&gt; wood screw, is in a &amp;ldquo;very stable range&amp;rdquo;, according to my dealer.&lt;/p&gt;&#10;&lt;p&gt;As a layperson I can&amp;rsquo;t make much sense of such figures, so I conduct a small experiment. I take a &lt;code&gt;4x35mm&lt;/code&gt; wood screw and look at the specified tightening torques. For my manufacturer, the following applies:&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;strong&gt;Parameter&lt;/strong&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;strong&gt;Value&lt;/strong&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Pull-out parameter \( f_{ax,k} \)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;14 N/mm²&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Torsional strength \( f_{tor,k} \)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;3 Nm&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Screw-in torque \( R_{tor,mean} \)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;\( \frac{f_{tor,k}}{R_{tor,mean}} \) ≥ 1.5&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Pre-drilling in softwood&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2.5 mm&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Pre-drilling in hardwood&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;3 mm&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;&lt;a href="https://www.spax.com/de-de/p/universalschraube-teilgewinde-senkkopf-t-star-plus-4cut-wirox.html?variant=0191010400353" target="_blank" rel="noopener noreferrer" class="external-link"&gt;Source&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;Now I&amp;rsquo;m checking if I can butt-join two boards with the specified tightening torque. For this, I&amp;rsquo;m using a torque screwdriver. But I don&amp;rsquo;t even get to the point where the mechanism engages: the screw starts to pull itself through the surface layer before that happens. I estimate the maximum torque before the screw &amp;ldquo;disappears&amp;rdquo; into the material to be only &lt;code&gt;0.8Nm&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;Now I&amp;rsquo;m checking if I can butt-join two boards with the specified tightening torque.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center media-frame--video"&gt;&#10; &lt;div class="media-video"&gt;&lt;video controls&gt;&#10; &lt;source src="https://blog.schallbert.de/assets/video/posts/2025-10-06-albasia-fastener-test.mp4" type="video/mp4"&gt;&#10; Your browser does not support the video tag.&#10; &lt;/video&gt;&lt;/div&gt;&#10; &lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;Video: Trying to tighten a screw to the correct torque in wood.&lt;/span&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;This method certainly allows for stable screw connections, but I would always proceed carefully when tightening, use a generous number of screws, and additionally choose dowel or form-fitting connection methods.&lt;/p&gt;&#10;&lt;h2 id="albasia-on-the-cnc-router"&gt;Albasia on the CNC router&lt;/h2&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--left"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2025-10-06-6mm-schlicht.avif" alt="Image: fine-cutting Albasia with a 6mm carbide endmill"&gt;&lt;/figure&gt;&#10;Albasia can be processed with a CNC router like any other softwood. Problems typical of softwoods, such as tear-outs or fiber clusters, are to be expected here as well. In addition, the hard coating makes machining even more difficult due to different parameter selection requirements.&lt;/p&gt;&#10;&lt;h3 id="which-router-bits-are-suitable-for-machining"&gt;Which router bits are suitable for machining?&lt;/h3&gt;&#10;&lt;p&gt;The material is challenging for the router bit. I had already had bad experiences with milling HPL in the article &lt;a href="https://blog.schallbert.de/en/cnc-router-overload/"&gt;about overloading my router motor&lt;/a&gt;. However, the material at that time had a much higher proportion of hard paper fibers compared to Albasia composite (chips were light brown and interspersed with many &amp;ldquo;dots&amp;rdquo;), which blunted the router bit in record time.&lt;/p&gt;&#10;&lt;p&gt;I use solid carbide router bits with chip breaker and minimal helix (15°) to process the long wood fibers. Otherwise, they quickly clog the extraction system and accumulate around the router bit, which can pose a fire hazard.&lt;/p&gt;&#10;&lt;p&gt;For edge processing, I&amp;rsquo;ve had good experiences with compressive router bits like the quarter round bit. If you only plunge slightly into the material, a V-cut is also suitable. With a greater plunge depth, half-round &amp;ldquo;ball-nose&amp;rdquo; router bits achieve a nice milling finish.&lt;/p&gt;&#10;&lt;p&gt;The image shows a comparison. On the right, the raw material has a green-gray coating, cut on a panel saw. On the left, in purple, is the workpiece I CNC-milled. The cutting pattern is clearly different and the surface machined with the milling cutter is much cleaner and without any tears.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2025-10-06-albasia-mill-vs-saw.avif" alt="Image: Albasia / Albizia plywood sandwiched between HPL coatings. Saw cut reveals to be much more coarse with pull-outs versus the milled surface."&gt;&lt;/figure&gt;&#10;&lt;p&gt;If you&amp;rsquo;re using chipbreaking cutters in the full groove, it&amp;rsquo;s worth adding a finishing pass with a straight-toothed cutter and high feed rates with only a small infeed of &lt;code&gt;0.2mm&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;All cutters must have the following in common:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;a cutting edge as sharp as possible (no coating!)&lt;/li&gt;&#10;&lt;li&gt;a high cutting speed (don&amp;rsquo;t use diameters that are too small)&lt;/li&gt;&#10;&lt;li&gt;a relatively high feed rate.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;I was able to achieve a high surface quality with single-flute cutters. The large chip channel ensures good removal, but chipping can sometimes be problematic when single-passing with full engagement. The cutting load is quite high.&lt;/p&gt;&#10;&lt;h3 id="which-parameters"&gt;Which parameters?&lt;/h3&gt;&#10;&lt;p&gt;Albasia is so soft that it offers little resistance to the milling machine&amp;rsquo;s axis drives. The cutting speed should be set high; online sources recommend around &lt;code&gt;500m/min&lt;/code&gt; as a guideline. I&amp;rsquo;ve tried feed rates up to &lt;code&gt;6000mm/min&lt;/code&gt;. As I only machined small workpieces, even higher feed rates would hardly offer any time advantage due to the constant changes in direction. An additional finishing pass is mandatory due to chipbreaker marks.&lt;/p&gt;&#10;&lt;p&gt;I&amp;rsquo;ve noted a good compromise between milling time and surface quality for various cutters below. However, I only use the engraving cutters in the HPL layer, which is why I reduce the feed and speed slightly.&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Tool (s = number of cutting edges)&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Feed rate F [mm/min]&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Speed S [rpm]&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Z feed [mm]&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;XY feed [mm]&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Solid carbide 2s chipbreaking 15° 6mm&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;4200&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;24000&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;12&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2.7&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Solid carbide 2s straight 6mm&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;3700&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;26500&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;21&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;0.2&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Solid carbide V-cut 3s 90° 10mm&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;3000&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;21000&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;0.27&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;0.1&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Solid carbide radius cutter 2s 6mm&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;3000&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;21000&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;0.27&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;0.1&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Solid carbide quarter round 4s r2 6mm&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;3600&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;15000&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h3 id="finishing-pass"&gt;Finishing pass&lt;/h3&gt;&#10;&lt;p&gt;The following video shows the finishing process after roughing a &lt;code&gt;145x145mm&lt;/code&gt; workpiece. Due to the small lateral infeed, hardly any fiber strings form, and the low feed rate ensures a very high surface quality despite the slight twist of the cutter.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center media-frame--video"&gt;&#10; &lt;div class="media-video"&gt;&lt;video controls&gt;&#10; &lt;source src="https://blog.schallbert.de/assets/video/posts/2025-10-06-albasia-schlicht.mp4" type="video/mp4"&gt;&#10; Your browser does not support the video tag.&#10; &lt;/video&gt;&lt;/div&gt;&#10; &lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;CNC finishing of Albasia composite material&lt;/span&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;h2 id="engraving"&gt;Engraving&lt;/h2&gt;&#10;&lt;p&gt;With coated Albasia panels, engraving is ideally done in the top layer. If the material is not penetrating the substrate, problems with tearing and loose fibers can be avoided. Since the top layer is not very thick, the choice quickly falls on V-shaped cutters with an obtuse angle or a flattened tip.&lt;/p&gt;&#10;&lt;p&gt;Alternatively, pockets of 3D engravings can be cleared with end mills, if the CAM program offers such an option. This creates completely smooth &amp;ldquo;floors&amp;rdquo;. Alternatively, radius cutters can be used due to their gently rising geometry in the lower area. If the CAM program does not support 3D engraving with radius cutters, the cutter geometry can be approximated as described in the article &lt;a href="https://blog.schallbert.de/en/halftone-image-on-dibond/#simulation-radius-cutter"&gt;Halftone Images on Dibond&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;I have prepared two examples in the image below: The CR code in the upper half was created with a &lt;code&gt;6mm&lt;/code&gt; radius cutter at a &lt;code&gt;0.2mm&lt;/code&gt; plunge depth. The resulting dots and lines feel soft and pleasant thanks to the smooth transitions. The lettering in the lower half of the image was milled with an engraving cutter and a depth of up to &lt;code&gt;7mm&lt;/code&gt;. While this beautifully showcases the natural wood tone, small letter heights like this (max. &lt;code&gt;30mm&lt;/code&gt;) tend to cause breakouts in letters with &amp;ldquo;islands&amp;rdquo; (a, e, b, o, etc.).&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2025-10-06-albasia-engrave-compare.avif" alt="Image: Albasia sandwich material engraved. Upper part using a radius endmill not penetrating the HPL cover, yields a dark and very clean finish but lacks contrast. Lower part with a classic 60° V-cut with a brighter wooden finish but with artifacts"&gt;&lt;/figure&gt;&#10;&lt;h2 id="working-with-color"&gt;Working with Color&lt;/h2&gt;&#10;&lt;p&gt;The contrast of the engravings is OK, but the legibility is far from perfect. Therefore, it makes sense to ink the engravings. I experimented with a few colors; you can see some impressions in the image below.&lt;/p&gt;&#10;&lt;h3 id="which-varnish"&gt;Which varnish?&lt;/h3&gt;&#10;&lt;p&gt;The board comes with a protective film to protect the colored coating. This makes it super easy to apply spray paint if I leave the protective film on the workpiece for engraving. I used standard water-based acrylic varnish (top right), spray paint with metallic particles (below), and a solvent-based permanent marker (top left).&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2025-10-25-engrave-compare.avif" alt="Image: Impressions of colored engravings of the name *Schallbert* and the QR code to this website."&gt;&lt;/figure&gt;&#10;&lt;p&gt;The varnishing process was easy. The abrasion resistance of the surfaces engraved in HPL is high with color applied. If you engrave through to the wood, the fibers will stand up slightly due to the varnishing, which is very time-consuming to correct later and not beneficial to the overall impression.&lt;/p&gt;&#10;&lt;h3 id="please-note-protective-film"&gt;Please note: Protective film&lt;/h3&gt;&#10;&lt;p&gt;The varnishing process should be started immediately after engraving, if possible, and not days or even weeks later. Otherwise, the protective film tends to peel off or bubble at the edges of the engraving, and the color is drawn into areas where it doesn&amp;rsquo;t belong by capillary action. Unfortunately, this visibly ruined the gold-blue version of my test series.&lt;/p&gt;&#10;&lt;h2 id="conclusion-what-is-albasia-for"&gt;Conclusion: What is Albasia for?&lt;/h2&gt;&#10;&lt;p&gt;All in all, I would consider Albasia to be one of the more docile materials for CNC machining, accepting a wide range of feed parameters while maintaining a high surface quality. A challenge is its tendency to form long fibers. Due to the gluing in the multiplex composite, poor quality of individual inner layers can become apparent late in the processing, which then leads to scrap and time wasted.&lt;/p&gt;&#10;&lt;p&gt;It&amp;rsquo;s also suitable as an engraving material, but the coating alone would be sufficient for this, and the small engraving depths place strict limits. Therefore, the engraving can at best be a nice addition to the actual use of the panels.&lt;/p&gt;&#10;&lt;p&gt;The coating makes the material quite suitable for furniture construction. If you work with concealed edges, I can even imagine it being used in the kitchen. Because it has high flexural stability and the coating&amp;rsquo;s impressive hardness, it&amp;rsquo;s a surface suitable for everyday use. The panel material is feather-light, making it ideal for mobile applications in visible areas.&lt;/p&gt;&#10;&lt;p&gt;However, it&amp;rsquo;s nowhere near as robust as birch plywood. I wouldn&amp;rsquo;t trust the material to withstand stressed joints; for bolted connections, I would maximize surface area and always use furniture connectors (i.e., avoid wood screws).&lt;/p&gt;&#10;</description></item><item><title>passtdas - a helper for your CNC</title><link>https://blog.schallbert.de/en/passtdas/</link><pubDate>Mon, 08 Sep 2025</pubDate><author>Schallbert</author><guid>https://blog.schallbert.de/en/passtdas/</guid><description type="html">&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2025-09-08-passtdas-thumb.avif"&#10; class="post-cover"&#10; alt="Image: Visualizazion of how passtdas analyzes and determines workpiece edges"&#10; title="passtdas - a helper for your CNC" /&gt;&#10;&lt;h2 id="the-problem"&gt;The Problem&lt;/h2&gt;&#10;&lt;p&gt;A friend of mine wrote to me. He uses a CNC gantry milling machine as a hobby, just like me, and often produces unique pieces. However, the resulting leftovers are sometimes too valuable to throw away. To maximize material utilization, he tries to use these offcuts as blanks for future projects.&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;&amp;ldquo;Do you know how I can find out on the machine whether my milled part fits on the blank?&amp;rdquo; - Anonymous&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;This happens: According to the dimensions, the workpiece just fits on the blank. If you set the zero point even slightly incorrectly, the milling cutter will move beyond the workpiece boundaries, and scrap it is.&lt;/p&gt;&#10;&lt;h2 id="the-solution"&gt;The Solution&lt;/h2&gt;&#10;&lt;p&gt;It would be great if the machine followed the contour of the workpiece before starting the milling process, wouldn&amp;rsquo;t it? This way, you could easily find out whether the blank is actually completely within the workpiece boundaries.&lt;/p&gt;&#10;&lt;p&gt;Since I can&amp;rsquo;t find a quick solution online right away, I&amp;rsquo;m thinking about writing my own software to implement this. So I&amp;rsquo;m getting to work.&lt;/p&gt;&#10;&lt;p&gt;TODO: ADD VIDEO LINK&lt;/p&gt;&#10;&lt;h2 id="the-software"&gt;The Software&lt;/h2&gt;&#10;&lt;p&gt;For a quick prototype, I choose the high-level language &lt;a href="https://www.python.org/downloads/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;python&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;. Why? I have a fairly good command of &lt;em&gt;python&lt;/em&gt;, libraries for the necessary geometric calculations are available, and the written program can be easily compiled into an all-in-one file.&lt;/p&gt;&#10;&lt;p&gt;The program is designed to read machine instructions (G-code) and analyze the milling paths. The positions at which the maximum and minimum X and Y values are approached in the milling program are to be saved and output as a motion command in a path file.&lt;/p&gt;&#10;&lt;p&gt;If this program is loaded onto the machine, an &amp;ldquo;extreme value&amp;rdquo; determined in this way is approached and the Z-axis is lowered from the safety height to the measuring height. The program is then paused so that the operator can make adjustments to the workpiece position. Only by entering another start command will the next extreme value be reached, and so on.&lt;/p&gt;&#10;&lt;p&gt;This program will be called &lt;em&gt;passtdas&lt;/em&gt;.&lt;/p&gt;&#10;&lt;h3 id="program-type"&gt;Program type&lt;/h3&gt;&#10;&lt;p&gt;I&amp;rsquo;m choosing a console program with few parameters:&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Shortcut&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Parameter name&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Description&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;-f&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;--file&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;The source file to be analyzed. Required.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;-s&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;--zsafety&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Safety height the machine will do flyovers with. Optional.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;-p&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;--zprobe&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Probe height the machine will pinpoint to. Optional.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;The two height parameters are given default values, so they don&amp;rsquo;t always have to be specified.&lt;/p&gt;&#10;&lt;h3 id="input"&gt;Input&lt;/h3&gt;&#10;&lt;p&gt;&lt;em&gt;passtdas&lt;/em&gt; reads files and searches them line by line for motion commands like &lt;code&gt;G00, G01, G02, G03&lt;/code&gt;. While the analysis is simple for linear movements like &lt;code&gt;G00, G01&lt;/code&gt; - linear movements can be expressed using point-to-point connections whose extreme values cannot lie between the points - it can be quite challenging for circular segments.&lt;/p&gt;&#10;&lt;p&gt;The height information on the Z-axis is also read and saved. This allows the machining technician to quickly check whether the maximum milling depth matches the desired one.&lt;/p&gt;&#10;&lt;p&gt;If the G-code file contains no instructions or incorrectly formulated instructions, &lt;em&gt;passtdas&lt;/em&gt; displays corresponding error messages and aborts the analysis.&lt;/p&gt;&#10;&lt;h3 id="definition-of-circular-segments"&gt;Definition of Circular Segments&lt;/h3&gt;&#10;&lt;p&gt;Background: Circular segments can be defined in two ways in G-code.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;...&lt;span style="color:#f92672"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;G00 X5.660 Y-0.000 Z10.000&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;G02 X-5.660 Y0.000 R5.660 F1600&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;...&lt;span style="color:#f92672"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Command:&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;&amp;ldquo;Move a circular arc clockwise from point &lt;code&gt;X5.66 Y0&lt;/code&gt; with radius &lt;code&gt;5.66mm&lt;/code&gt; to point &lt;code&gt;X-5.66 Y0&lt;/code&gt; with feed rate &lt;code&gt;1600mm/min&lt;/code&gt; at height &lt;code&gt;10mm&lt;/code&gt;.&amp;rdquo;&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;Drawing these commands creates a hanging semicircle. Circles can be defined using three points. However, only two points are given. The third point must be calculated from the specified arc radius using the start and end points.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2025-09-08-arcr.avif" alt="Image: drawing an arc using given radius, start- and endpoint"&gt;&lt;/figure&gt;&#10;&lt;p&gt;&lt;em&gt;Task: Find the extreme points of this arc in the XY plane.&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;But an arc can also be defined like this:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;...&lt;span style="color:#f92672"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;G00 X-2.5696 Y5.0431&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;G03 X-4.6258 Y3.2616 Z-0.5000 I2.5696 J-5.0431&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;...&lt;span style="color:#f92672"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Command:&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;&amp;ldquo;Traverse a circular arc counterclockwise from point &lt;code&gt;X-2.56 Y5.04&lt;/code&gt; with center coordinates &lt;code&gt;I2.56 J-5.04&lt;/code&gt; to point &lt;code&gt;X-4.62 Y3.26&lt;/code&gt;.&amp;rdquo;&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;Drawing these commands creates a short circular segment in the upper left quadrant. Although three points (start and end points, as well as the center of the circle) are given, it can sometimes be difficult to determine whether an extreme value is being reached somewhere along the arc.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2025-09-08-arcij.avif" alt="Image: drawing an arc using center point, start- and endpoint"&gt;&lt;/figure&gt;&#10;&lt;p&gt;&lt;em&gt;Task: Find the extreme points of this circle in the XY range.&lt;/em&gt;&lt;/p&gt;&#10;&lt;h3 id="calculating-the-extreme-points-of-circle-segments"&gt;Calculating the extreme points of circle segments&lt;/h3&gt;&#10;&lt;p&gt;A circle segment can have up to four additional extreme points, depending on its range: X+, Y+, X-, Y-. For a full circle, these are always the coordinate intersection points as seen from the radius.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;get_extremes_from_arc&lt;/span&gt;(arc, coordinates):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# [...]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; x_plus_radius &lt;span style="color:#f92672"&gt;=&lt;/span&gt; [center_x &lt;span style="color:#f92672"&gt;+&lt;/span&gt; radius, center_y, xyz[&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;]]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; y_plus_radius &lt;span style="color:#f92672"&gt;=&lt;/span&gt; [center_x, center_y &lt;span style="color:#f92672"&gt;+&lt;/span&gt; radius, xyz[&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;]]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; x_minus_radius &lt;span style="color:#f92672"&gt;=&lt;/span&gt; [center_x &lt;span style="color:#f92672"&gt;-&lt;/span&gt; radius, center_y, xyz[&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;]]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; y_minus_radius &lt;span style="color:#f92672"&gt;=&lt;/span&gt; [center_x, center_y &lt;span style="color:#f92672"&gt;-&lt;/span&gt; radius, xyz[&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;]]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; extremevalue_order &lt;span style="color:#f92672"&gt;=&lt;/span&gt; [x_plus_radius, y_plus_radius, x_minus_radius, y_minus_radius]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; (arc[&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;] &lt;span style="color:#f92672"&gt;-&lt;/span&gt; arc[&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;]) &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# crossing the 0° line (x-axis), handle overflow with nested if below&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; arc[&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;] &lt;span style="color:#f92672"&gt;+=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;360&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; result &lt;span style="color:#f92672"&gt;=&lt;/span&gt; []&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; crossing_angle &lt;span style="color:#f92672"&gt;in&lt;/span&gt; range(&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;721&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;90&lt;/span&gt;):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; crossing_angle &lt;span style="color:#f92672"&gt;in&lt;/span&gt; range(int(arc[&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;]), int(arc[&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;] &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;)):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; i &lt;span style="color:#f92672"&gt;=&lt;/span&gt; int(crossing_angle &lt;span style="color:#f92672"&gt;/&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;90&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; i &lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; i &lt;span style="color:#f92672"&gt;-=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;4&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; result&lt;span style="color:#f92672"&gt;.&lt;/span&gt;append(extremevalue_order[i])&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# [...]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If the circle center and radius are known, the swept angle can be determined from the start and end points. This makes it clear whether the circle&amp;rsquo;s start and/or end points themselves represent extreme values, or whether additional extreme values arise from sweeping over a coordinate origin. It is precisely what the above code example does.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2025-09-08-arcext.avif" alt="Image: Possible coordinate extreme values of an arc segment"&gt;&lt;/figure&gt;&#10;&lt;h3 id="data-table"&gt;Data table&lt;/h3&gt;&#10;&lt;p&gt;All possible extreme values (two for a line, up to four for a circle segment) are now collected in a data table. Once each G-code line has been evaluated and the list is thus complete, the maximum and minimum values for each axis are determined from this list.&lt;/p&gt;&#10;&lt;p&gt;This ultimately creates four XYZ coordinates, which describe the maximum extent of the workpiece for each spatial direction.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2025-09-08-ext.avif" alt="Image: Visual example of an extreme value dataset for a simple geometry"&gt;&lt;/figure&gt;&#10;&lt;p&gt;At the same time, the program searches all commands to the Z-axis and remembers the maximum plunge depth.&lt;/p&gt;&#10;&lt;h3 id="output"&gt;Output&lt;/h3&gt;&#10;&lt;p&gt;The command-line program has no visual output. Therefore, I&amp;rsquo;ll limit myself to creating a simulation program for the milling machine in which the workpiece extension is approached and paused at each point:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;G90&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Go to coordinate zero&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;MSG &lt;span style="color:#e6db74"&gt;&amp;#34;Zmin of this job: -1.0&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;G00 Z40&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;G00 X0 Y0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;G01 Z15 F1200&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;MSG &lt;span style="color:#e6db74"&gt;&amp;#34;PathPreview: Hit START to go to Ymin: [&amp;#39;0.0&amp;#39;, &amp;#39;-5.66&amp;#39;]&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;M00&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;G00 Z40&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;G00 X0.0 Y-5.66&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;G01 Z15 F1200&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;MSG &lt;span style="color:#e6db74"&gt;&amp;#34;PathPreview: Hit START to go to Xmin: [&amp;#39;-5.66&amp;#39;, &amp;#39;0.0&amp;#39;]&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;M00&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;G00 Z40&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;G00 X-5.66 Y0.0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;G01 Z15 F1200&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;MSG &lt;span style="color:#e6db74"&gt;&amp;#34;PathPreview: Hit START to go to Ymax: [&amp;#39;0.0&amp;#39;, &amp;#39;5.66&amp;#39;]&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;M00&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;G00 Z40&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;G00 X0.0 Y5.66&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;G01 Z15 F1200&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;MSG &lt;span style="color:#e6db74"&gt;&amp;#34;PathPreview: Hit START to go to Xmax: [&amp;#39;5.66&amp;#39;, &amp;#39;0.0&amp;#39;]&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;M00&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;G00 Z40&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;G00 X5.66 Y0.0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;G01 Z15 F1200&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# [...]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The above example traverses the extreme values of a circle with &lt;code&gt;r=5.66mm&lt;/code&gt;. It always moves to a safety height of &lt;code&gt;Z40&lt;/code&gt; to cover the points and, upon arrival, slowly moves the Z axis at &lt;code&gt;F1200&lt;/code&gt; to the target height of &lt;code&gt;Z15&lt;/code&gt;. It is important that the zero point in &lt;code&gt;Z&lt;/code&gt; has been correctly measured beforehand - otherwise, a collision with the workpiece may occur.&lt;/p&gt;&#10;&lt;h2 id="testing-and-verification"&gt;Testing and Verification&lt;/h2&gt;&#10;&lt;p&gt;To see if the program works as expected, I created three test files:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Unit tests: Tests individual functions in the program, e.g., whether line and circle segments are correctly recognized&lt;/li&gt;&#10;&lt;li&gt;Integration tests: Tests whether functions function correctly in conjunction, e.g., the correct calculation of extreme values based on input values&lt;/li&gt;&#10;&lt;li&gt;End-to-end tests: These tests check the entire function chain, e.g., whether incorrectly formatted input files are recognized&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2025-09-08-unittest.avif" alt="Image: Test result summary for passtdas"&gt;&lt;/figure&gt;&#10;&lt;p&gt;Finally, I create several test files with the program and move to the extreme values generated from them with my CNC.&lt;/p&gt;&#10;&lt;h2 id="open-source-software"&gt;Open-source software&lt;/h2&gt;&#10;&lt;p&gt;The source code for &lt;em&gt;passtdas&lt;/em&gt; is available for free on &lt;a href="https://github.com/Schallbert/passtdas" target="_blank" rel="noopener noreferrer" class="external-link"&gt;GitHub&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;, but must be interpreted using Python.&lt;/p&gt;&#10;&lt;p&gt;I&amp;rsquo;ll build a user-friendly and easy-to-use program once enough people have expressed a desire for it.&lt;/p&gt;&#10;</description></item><item><title>Halftones on Dibond</title><link>https://blog.schallbert.de/en/halftone-image-on-dibond/</link><pubDate>Tue, 25 Feb 2025</pubDate><author>Schallbert</author><guid>https://blog.schallbert.de/en/halftone-image-on-dibond/</guid><description type="html">&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2025-02-25-bloglogo-stipple-thumb.jpg"&#10; class="post-cover"&#10; alt="Image: halftone image engraved with my CNC"&#10; title="Halftones on Dibond" /&gt;&#10;&lt;p&gt;Lately, I rediscovered Dibond (aluminium sandwich panel) as a material for machining. I use it less and less for environmental reasons - composite materials are not something I consider particularly sustainable or recyclable. Nevertheless, the beautiful surfaces always have a certain attraction for me. Now then - let&amp;rsquo;s get down to business!&lt;/p&gt;&#10;&lt;h2 id="blog-logo-as-a-point-cloud"&gt;Blog logo as a point cloud&lt;/h2&gt;&#10;&lt;p&gt;I was now able to throw an image created by Stipplegen onto the milling machine. To do this I had to solve a problem that was still present in the previous post &lt;a href="https://blog.schallbert.de/en/halftone-cnc/"&gt;Milling grayscale images with the CNC&lt;/a&gt;: In my most frequently used CAM tool, milling paths for point-based halftone images can hardly be created because each of the over 2200 points would have to be individually assigned a milling operation.&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;CADasCAM&lt;/em&gt;, on the other hand, allows you to add entire groups of elements to one and the same milling action. Now I asked myself which milling cutter I should best work with in Dibond, since I only have a very thin covering layer available.&lt;/p&gt;&#10;&lt;h3 id="simulation-radius-cutter"&gt;Simulation radius cutter&lt;/h3&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2025-02-25-r2-ballnose-approximation.jpg" alt="Image: my drawing for V-cut to radius cutter approximation"&gt;&lt;/figure&gt;&#10;I decided on a radius cutter with a half-round head. However, the CAM has no calculation rule for this, so it cannot be selected without further ado. After consulting the manufacturer, the idea came up to simulate the radius cutter for the CAM using a V-cut with a flattened tip, but actually using the ball head on the milling machine.&lt;/p&gt;&#10;&lt;p&gt;In order to get suitable values here, I made a few drawings. The table below contains approximate values for the case where the immersion depth does not exceed &lt;code&gt;0.3mm&lt;/code&gt;. I was now able to carry out the path calculation in the CAM and even adhere to a depth limit of &lt;code&gt;0.22mm&lt;/code&gt;. The flattest areas have an engraving depth of just &lt;code&gt;0.10mm&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;When calculating the path, it is important to note that the retraction heights should be as low as possible. Then the Z-axis of the machines does not have to move up so far for every point. I consider a value of &lt;code&gt;0.5mm&lt;/code&gt; to be appropriate.&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Radius milling cutter&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Simulation by V-Cut&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;r=3mm&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;140°, 1.0mm flattening&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;r=2mm&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;140°, 0.5mm flattening&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h3 id="milling-process"&gt;Milling process&lt;/h3&gt;&#10;&lt;p&gt;The motif size for the engraving is &lt;code&gt;180x180mm&lt;/code&gt; and I mill with the following values: &lt;code&gt;Radius cutter 2s r3 6mm, S20000, F1800&lt;/code&gt;. I pierce the protective film of the Dibond plate, the thickness of which I do not compensate for. I use a small amount of lubricant to improve quality of cut. After just &lt;code&gt;11&lt;/code&gt; minutes, the milling process is finished.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2025-02-25-r2-bloglogo-stipple.avif" alt="Image: Bloglogo as halftone dot image in Dibond, black"&gt;&lt;/figure&gt;&#10;&lt;h3 id="observations"&gt;Observations&lt;/h3&gt;&#10;&lt;p&gt;The motif is much clearer in this attempt. Unfortunately, I still have a clear problem with the surface flatness. For example, the engraving in the middle area on the right is too deep (built-up edge - see video - that&amp;rsquo;s where the milling machine is at the end), while the engraving depth at the very top right and top center does not seem sufficient.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;The milling machine and milling cutter have no problem with the material at all. The engraving process sounds a bit like working with a box column drill, interrupted by positioning noises from the stepper motors.&lt;/li&gt;&#10;&lt;li&gt;The type of aluminum &lt;em&gt;AlMg1&lt;/em&gt; used for Dibond is soft and chewy. It is not well suitable for machining.&lt;/li&gt;&#10;&lt;li&gt;Milling cutters tend to create &lt;a href="https://en.wikipedia.org/wiki/Built_up_edge" target="_blank" rel="noopener noreferrer" class="external-link"&gt;built-up edges&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;, which increase cutter radius and worsen the cutting quality.&lt;/li&gt;&#10;&lt;li&gt;The protective film prevents tears and chip edges.&lt;/li&gt;&#10;&lt;li&gt;Applying a little lubricant is a good idea.&lt;/li&gt;&#10;&lt;li&gt;Even on a vacuum table, every speck of dust under the workpiece ruins the milling work. A few hundredths of a millimeter difference in height has a major impact on the point size and leads to distortions.&lt;/li&gt;&#10;&lt;li&gt;The machine bed must be absolutely flat or the machine must have high-quality, active height compensation; e.g. by means of prior surface measurement using an &lt;a href="https://blog.schallbert.de/en/touching-off/"&gt;edge finder&lt;/a&gt;. My control software even supports the procedure under the name &lt;em&gt;ZheightComp&lt;/em&gt;.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="conclusion"&gt;Conclusion&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;I really like Dibond as a material, but it doesn&amp;rsquo;t seem to return my affection.&lt;/li&gt;&#10;&lt;li&gt;With my technical means, I can&amp;rsquo;t produce engravings that are repeatable and of good quality.&lt;/li&gt;&#10;&lt;li&gt;Maybe I should use plastic or wood instead. Or use a laser&amp;hellip;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Finally, a short time-lapse video of the milling process.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center media-frame--video"&gt;&#10; &lt;div class="media-video"&gt;&lt;iframe&#10; src="https://makertube.net/videos/embed/qTd6Ad2QStCp5AiWmrHZem"&#10; title="Halftone on CNC - Part2"&#10; loading="lazy"&#10; allow="autoplay; fullscreen; picture-in-picture"&#10; allowfullscreen&#10; style="width: 100%; height: auto; min-height: 315px; aspect-ratio: 16/9;"&#10; &gt;&lt;/iframe&gt;&lt;/div&gt;&#10; &lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;Halftone on CNC - Part2&lt;/span&gt;&lt;a href="https://makertube.net/videos/embed/qTd6Ad2QStCp5AiWmrHZem" class="attr-link" target="_blank" rel="noopener noreferrer"&gt;↗&lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;h2 id="saturn-as-ascii-art"&gt;Saturn as ASCII art&lt;/h2&gt;&#10;&lt;p&gt;Halftone images can of course also be created with patterns instead of lines, waves and dots. As an example, I prepared the image of the planet Saturn from &lt;a href="https://asciiart.website/index.php?art=nature/astronomy" target="_blank" rel="noopener noreferrer" class="external-link"&gt;Christopher Johnson&amp;rsquo;s ASCII art&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; for the CNC machine.&lt;/p&gt;&#10;&lt;h3 id="cadcam"&gt;CAD/CAM&lt;/h3&gt;&#10;&lt;p&gt;To get the aspect ratio correct, a font is required in which each character has the same type width. I choose the TrueType font &lt;em&gt;Courier New&lt;/em&gt; and adjust the font size and line spacing so that the motif fits on my material and the engraving does not perforate the cover layer.&lt;/p&gt;&#10;&lt;p&gt;This forces me to use a &lt;code&gt;1/8&amp;quot; engraving bit with a 36° tip angle and 0.1mm flattening&lt;/code&gt;. I would have preferred a radius cutter here: In soft Dibond, acute-angled endmills cause material to bulge and smear. This leads to unclean lines and a rough surface. However, since the workpiece is very small, the font would be much too wide.&lt;/p&gt;&#10;&lt;p&gt;The path calculation shows that I have to choose bold letters on the workpiece, which is only &lt;code&gt;80x80mm&lt;/code&gt; in size, in order to even reach my minimum depth of &lt;code&gt;0.08mm&lt;/code&gt;.&lt;/p&gt;&#10;&lt;h3 id="production"&gt;Production&lt;/h3&gt;&#10;&lt;p&gt;I made the image of Saturn twice: on &lt;code&gt;80x80mm&lt;/code&gt; to test the maximum resolution in the material and on &lt;code&gt;180x180mm&lt;/code&gt; (image below) to check contrast and wider letters.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2025-02-25-halftone-saturn.avif" alt="Image: Halftone image of Saturn from my CNC machine. Image rights: asciiart.website"&gt;&lt;/figure&gt;&#10;&lt;p&gt;I am happy with the result. The contrast is high and the silver-white surface of the aluminum (oxide) looks really classy on the matt black paint.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center media-frame--video"&gt;&#10; &lt;div class="media-video"&gt;&lt;iframe&#10; src="https://makertube.net/videos/embed/wxcEMorVuY3hVZkseFjXyU"&#10; title="Halftone on CNC - Part3"&#10; loading="lazy"&#10; allow="autoplay; fullscreen; picture-in-picture"&#10; allowfullscreen&#10; style="width: 100%; height: auto; min-height: 315px; aspect-ratio: 16/9;"&#10; &gt;&lt;/iframe&gt;&lt;/div&gt;&#10; &lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;Halftone on CNC - Part3&lt;/span&gt;&lt;a href="https://makertube.net/videos/embed/wxcEMorVuY3hVZkseFjXyU" class="attr-link" target="_blank" rel="noopener noreferrer"&gt;↗&lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;h2 id="qr-codes"&gt;QR codes&lt;/h2&gt;&#10;&lt;p&gt;While I&amp;rsquo;m already working with Dibond: I&amp;rsquo;ll try cutting a few QR codes with a radius bit.&#10;This time I&amp;rsquo;m using different machines.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2025-02-25-qr-dibond.avif" alt="Image: QR-codengrave tests in dibond with a radius cutter"&gt;&lt;/figure&gt;&#10;&lt;h3 id="on-the-hobbyline"&gt;On the Hobbyline&lt;/h3&gt;&#10;&lt;p&gt;I engrave in black on the Hobbyline provided to me in overclocked engraving mode. I fix the workpiece with a few dots of double-sided tape. I mill dry. Observations:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;The engraving depth seems to increase with increasing line length (built-up cutting edge, milling cutter smears into the material)&lt;/li&gt;&#10;&lt;li&gt;In some cases the paint surface at the milling edge bulges upwards&lt;/li&gt;&#10;&lt;li&gt;Very dirty milling channels, strong direction dependency&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="on-the-basicline"&gt;On the Basicline&lt;/h3&gt;&#10;&lt;p&gt;Here I naturally use my vacuum table and benefit from the much more stable structure. I use a small amount of lubricant. I was curious to see whether the white material still allows sufficient contrast. Observations:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;My &lt;a href="https://blog.schallbert.de/en/projects/qr-codengrave/"&gt;QR-codeengrave&lt;/a&gt; software must be operated correctly. Otherwise, zero points and size ratios shift, as here. Result: My cell phone does not recognize the QR code 😐&lt;/li&gt;&#10;&lt;li&gt;The much better hold down prevents major differences in milling channel width.&lt;/li&gt;&#10;&lt;li&gt;Nevertheless, you can see the machine&amp;rsquo;s exit points and sometimes also dragged chips.&lt;/li&gt;&#10;&lt;li&gt;The milling quality is still not satisfactory.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="conclusion-1"&gt;Conclusion&lt;/h2&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2023-11-01_smallparts-thumb.jpg" alt="Image: single-flute cutter for PMMA/Acrylics."&gt;&lt;/figure&gt;&#10;In the future, I will have to treat Dibond in a similar way to acrylic glass: use very sharp endmills that cut the material properly. Ideally, single-flute cutters with a hawk&amp;rsquo;s beak and corner bevel (soft edges), center-cutting, and a decent twist. E.g. &lt;a href="https://shop.vhf.de/articleGroups/Einzahnfraeser-mit-Stirnradius-W_F_ES_SCR.htm" target="_blank" rel="noopener noreferrer" class="external-link"&gt;this one (link to vhf)&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;. This - I believe - prevents material displacement into the even softer core material and also moves chips upwards in the chip channel so that they cannot stick or get under the milling cutter a second time.&lt;/p&gt;&#10;&lt;p&gt;I should also work with rapid feed rates. Then the material does not heat up too much. Using a little lubricant and applying protective film contributes to better milling results. Further processing instructions can be found, for example, &lt;a href="https://www.cnc-aus-holz.at/index.php?thread/2397-aluverbundplatte-dibond-gravieren/&amp;amp;postID=27536#post27536" target="_blank" rel="noopener noreferrer" class="external-link"&gt;in the CNC-aus-Holz forum&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;. It may be worth browsing.&lt;/p&gt;&#10;</description></item><item><title>CNC-made greyscale images</title><link>https://blog.schallbert.de/en/halftone-cnc/</link><pubDate>Mon, 27 Jan 2025</pubDate><author>Schallbert</author><guid>https://blog.schallbert.de/en/halftone-cnc/</guid><description type="html">&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2025-01-27_bloglogo-thumb.avif"&#10; class="post-cover"&#10; alt="Image: TSP-paths of my blog&amp;#39;&amp;#39;s logo"&#10; title="CNC-made greyscale images" /&gt;&#10;&lt;p&gt;Up until now, I have always created images as engravings in solid colors. This allows texts like &lt;a href="https://blog.schallbert.de/en/negative-carving-with-estlcam/"&gt;this one&lt;/a&gt;, but also &lt;a href="https://blog.schallbert.de/en/engrave-multicolor/"&gt;drawings&lt;/a&gt; and &lt;a href="https://blog.schallbert.de/en/makerfaire-ruhr/#preparation"&gt;real images&lt;/a&gt; to be produced with high contrast and attractively.&lt;/p&gt;&#10;&lt;h2 id="the-goal"&gt;The goal&lt;/h2&gt;&#10;&lt;p&gt;With solid color representation, many details cannot be reproduced. But now I would like to bring a photo into the material. Ideally, this should happen quickly, without manual rework and with high image quality.&lt;/p&gt;&#10;&lt;p&gt;My CAM tool provides a &amp;ldquo;halftone image&amp;rdquo; function for this, which I will experiment with below. Here, too, it is unlikely to get good results of the machine straight away. In addition, the creation of such images is very time-consuming.&lt;/p&gt;&#10;&lt;p&gt;Therefore, at the end of the article I will give a few tips and tricks that can help you achieve good results more quickly.&lt;/p&gt;&#10;&lt;h2 id="a-little-color-knowledge-rasterization"&gt;A little color knowledge: Rasterization&lt;/h2&gt;&#10;&lt;p&gt;The problem of wanting to represent an entire color space with only a few available colors is hundreds of years old. While color gradients can be excellently drawn by mixing colors in the analog world and also on the screen using different luminance values of the three color channels in pixels, not every application has a large number of colors available.&lt;/p&gt;&#10;&lt;p&gt;Printers, for example&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;. They usually only have the three basic colors &lt;code&gt;cyan (C)&lt;/code&gt; - a shade of turquoise, &lt;code&gt;magenta (M)&lt;/code&gt; - a shade of pink, &lt;code&gt;yellow (Y)&lt;/code&gt; - yellow and &lt;code&gt;key (K)&lt;/code&gt; - usually black - at their disposal. From these they then have to create the illusion of all possible colors, because they cannot mix the pigments due to their high opacity. Otherwise the last color applied would dominate or the color would simply run plain. This results in the need to use dot grid or other rasterization processes.&lt;/p&gt;&#10;&lt;h3 id="halftones-halftone-image"&gt;Halftones (halftone image)&lt;/h3&gt;&#10;&lt;p&gt;One of these raster processes is called &lt;em&gt;halftone&lt;/em&gt;. This involves using colored dots or patterns of different line thicknesses to simulate a &lt;a href="https://en.wikipedia.org/wiki/Halftone" target="_blank" rel="noopener noreferrer" class="external-link"&gt;color tone&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;, which the eye can no longer resolve from a certain distance and therefore &amp;ldquo;averages&amp;rdquo; together with the surrounding free space and possibly other colored dots to form a tone value.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2025-01-27_bloglogo_9600dots.avif" alt="Image: 9600 dots stipple image of my blog&amp;#39;s logo"&gt;&lt;/figure&gt;&#10;&lt;p&gt;This process is suitable for &lt;a href="https://hackaday.com/2011/07/28/creating-halftone-pictures-with-a-cnc-machine/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;production using a CNC milling machine&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;, provided that the surface of the workpiece to be processed has a different color than the core material.&lt;/p&gt;&#10;&lt;p&gt;There are many different production processes for halftones, in which the arrangement of the dots, lines, pattern shape, etc. can sometimes differ greatly. On the CNC, the engraving material used, the required resolution and the desired tool determine the process, since good quality cannot be achieved with every combination.&lt;/p&gt;&#10;&lt;h3 id="dithering"&gt;Dithering&lt;/h3&gt;&#10;&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Dither#Digital_photography_and_image_processing" target="_blank" rel="noopener noreferrer" class="external-link"&gt;Dithering&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; is more commonly used for display on screens. Unlike with the halftone process, the strength or size of colored dots or patterns does not vary, but rather the spatial distribution of differently colored dots that are sprinkled into the base color. This creates the impression of a mixed color.&lt;/p&gt;&#10;&lt;p&gt;Here, too, there are various generation methods: diffusion, noise, patterns, &lt;a href="https://en.wikipedia.org/wiki/Floyd%E2%80%93Steinberg_dithering" target="_blank" rel="noopener noreferrer" class="external-link"&gt;Floyd-Steinberg algorithm&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;&amp;hellip;&lt;/p&gt;&#10;&lt;h2 id="material-selection"&gt;Material selection&lt;/h2&gt;&#10;&lt;p&gt;I&amp;rsquo;ve tried out a lot here. The best materials are those with a homogeneous composition and a high contrast between the surface and core color. In addition, the layer thickness of the surface material should not be too large, as it has to be completely pierced and very large individual dots are then quickly required. The surface is ideally matt. Silk, metallic or high gloss surfaces create a viewing angle dependency that affects the recognizability of the motif.&lt;/p&gt;&#10;&lt;p&gt;In addition, the material should be completely flat to the milling surface, as otherwise the dot size varies undesirably.&lt;/p&gt;&#10;&lt;h3 id="suitable-materials-"&gt;Suitable materials 👍&lt;/h3&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Core material&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Coating&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Special feature&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Medium-density fiberboard&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Primer + paint&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Do not overlap the milling path&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Aluminum composite material&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Paint or film&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Mill to a maximum depth of 0.18mm&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Acrylic glass (PMMA)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Paint or film&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Use XT (low thickness tolerance)&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;The least effort for me is processing finished painted aluminum composite material. Practically no preparatory or post processing is required here. However, it is important to limit the milling depth to &lt;code&gt;0.18mm&lt;/code&gt;. Otherwise the PU core will be deformed or tear-outs will occur.&lt;/p&gt;&#10;&lt;p&gt;Applying a film can be a good solution if you don&amp;rsquo;t want to spend time applying paint. Unfortunately, I&amp;rsquo;m not particularly skilled at working with film. I&amp;rsquo;m constantly creating air bubbles or inclusions of tiny dust particles. After the milling process, the resulting defects in the height profile are clearly visible in the form of holes in the material that are too large. Plus, when cutting through those bubbles, there&amp;rsquo;s no adhesive force between film and surface material which can lead to film rip-offs.&lt;/p&gt;&#10;&lt;h3 id="unsuitable-materials-"&gt;Unsuitable materials 👎&lt;/h3&gt;&#10;&lt;p&gt;In my opinion, the materials listed here are not well suitable for creating halftone images. I have uploaded a few pictures of unsuccessful attempts here. Often, one reason for failure is that the image resolution is too high for the material.&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Core material&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Coating&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Base&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Medium density fiberboard&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Veneer&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Layer thickness too high&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Medium density fiberboard&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Metal film&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Paper core of the metal film is white&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Aluminum composite material&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Metal, brushed&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Material &amp;ldquo;mushy&amp;rdquo;, poor resolution&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Aluminum composite material&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;None, PU core&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Aluminum pressed into core, poor resolution&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Soft aluminum alloys&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Paint or film&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Aluminum smears, poor resolution&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--left"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2025-01-27-3guys_perfect.avif" alt="Image: 3 guys as halftone image on metalized MDF"&gt;&lt;/figure&gt;&#10;Here I&amp;rsquo;m experimenting with the pixel density. In the lower area I arranged them too closely so that the coating comes off during milling. On my engraving CNC, such an image on a plate measuring &lt;code&gt;15x10cm&lt;/code&gt; takes about &lt;code&gt;15 minutes&lt;/code&gt; despite overclocking. The material is not well suited for such high resolutions because of the metallic shine, the risk of tearing, hardly achievable surface adhesion, and the high layer thickness.&lt;/p&gt;&#10;&lt;h2 id="halftone-images-requirements-for-the-cnc"&gt;Halftone images: Requirements for the CNC&lt;/h2&gt;&#10;&lt;p&gt;For once, the problem here is not related to holding forces, milling forces or difficulties in holding down. On the contrary, when milling images, low forces are applied and that mostly in Z-direction where the machines have highest stability reserve.&lt;/p&gt;&#10;&lt;p&gt;The complexity of the jobs is the problem. The portal has to cover long distances and constantly brake and accelerate along the way. This puts a lot of strain on the power drivers, stepper motors and bearings of the linear spindles.&lt;/p&gt;&#10;&lt;h3 id="wavesstrokeslines"&gt;Waves/strokes/lines&lt;/h3&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2025-01-27-anywhereamps_halftonegrid.avif" alt="Image: Halftone wave-grid image of AnywhereAmps1.2 compared to original image"&gt;&lt;/figure&gt;&#10;&lt;p&gt;In the segment process, the machine moves across an image line by line. Brightness information is usually transferred via milling depth, so that particularly dark areas produce wider lines when using an engraving cutter. This process is ideal for milling in foam, MDF and acrylic glass. It can also be carried out quite quickly because the machine remains in contact with the material and positioning processes are only required for line jumps.&lt;/p&gt;&#10;&lt;h3 id="dot-process"&gt;Dot process&lt;/h3&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2025-01-27-bloglogo_stipple.avif" alt="Image: bloglogo made of 2000 Vonoroi stipples"&gt;&lt;/figure&gt;&#10;Here the size of dots is changed so that sometimes larger and sometimes smaller stipples are created in the material.&lt;/p&gt;&#10;&lt;p&gt;Halftone images using a dot process require a relatively long time on the machine. What can be done in half an hour with a hobby laser easily takes two hours with a CNC machine of the same size and resolution (here too there are &lt;a href="https://blog.schallbert.de/en/cnc-tuning-kinematics/"&gt;optimization options&lt;/a&gt;).&lt;/p&gt;&#10;&lt;p&gt;To produce such images, the machine has to move the Z axis extremely often. When milling points, it has to switch between safety height and material engagement once for each &amp;ldquo;pixel&amp;rdquo;.&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;Example: If &lt;code&gt;400x400&lt;/code&gt; points are milled (that would be a pretty poorly resolved image at pixel scale), the machine has to set its Z axis in motion &lt;code&gt;32000&lt;/code&gt; times!&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;Therefore, the safety height should only be a few tenths above the workpiece surface, e.g. &lt;code&gt;0.5mm&lt;/code&gt;. To protect the heavy Y axis, it makes sense to process the image line by line on the X axis using &lt;em&gt;CAM&lt;/em&gt;. This way, the Y axis is only moved for line jumps.&lt;/p&gt;&#10;&lt;p&gt;A light gantry milling machine with little mass on the Z axis is advantageous here. It should be well lubricated and the axis guides cleaned. At the same time, it doesn&amp;rsquo;t need to be super stiff as not to oscillate due to the many abrupt movements.&lt;/p&gt;&#10;&lt;p&gt;For stepper motors and drivers, these jobs are marathon races. Their temperatures should always be kept under close observation. I recommend not running the machine with halftone images in continuous operation. The axis and portal loads, on the other hand, are negligible: the machine is hardly exposed to any load in the X and Y directions, as it is mostly in contact with the material downwards and only minimally to create conical indentations.&lt;/p&gt;&#10;&lt;h3 id="labyrinthline-segments"&gt;Labyrinth/line segments&lt;/h3&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2025-01-27-bloglogo_tsp.avif" alt="Image: TSP-paths my bloglogo connecting 9600 Vonoroi stipples"&gt;&lt;/figure&gt;&#10;If the entire image is to be covered in just one go, a &amp;ldquo;travelling salesman problem&amp;rdquo; (&lt;a href="https://en.wikipedia.org/wiki/Travelling_salesman_problem" target="_blank" rel="noopener noreferrer" class="external-link"&gt;TSP&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;) must first be solved, such as &lt;a href="https://www.evilmadscientist.com/2012/stipplegen-weighted-voronoi-stippling-and-tsp-paths-in-processing/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;EvilMadScientist&amp;rsquo;s&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; software &lt;em&gt;Stipplegen2&lt;/em&gt; is capable of. In this process, the density of line segments per area is increased if an area is to appear particularly dark. Such images can be completed quickly on the CNC machine, as they only allow the Z axis to dip once.&lt;/p&gt;&#10;&lt;p&gt;The disadvantages of this process are the low achievable resolution (a lot of points are required) and the low contrast, because all lines are the same thickness.&lt;/p&gt;&#10;&lt;h2 id="cnc-tools"&gt;CNC tools&lt;/h2&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-01-27-graver.avif" alt="Image: This CNC graver is a good tool for halftone image fabrication"&gt;&lt;/figure&gt;&#10;The creation of halftone images is engraving work. It is therefore recommended to use gravers with a &lt;code&gt;60°&lt;/code&gt; or &lt;code&gt;90°&lt;/code&gt; tip angle and an engraving width of &lt;code&gt;0-0.5mm&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;If the motif is small, an engraving width of 0 may well be chosen. The tip angle should be large if you do not want to or cannot mill deeply or if the &amp;ldquo;light color&amp;rdquo; is the core color of the material. This avoids deep shadows that darken the image.&lt;/p&gt;&#10;&lt;p&gt;If you are machining painted aluminum composite panels, I can recommend half-round cutters with &lt;code&gt;r&amp;lt;2mm&lt;/code&gt; and a very low depth of cut at or below &lt;code&gt;0.18mm&lt;/code&gt;. However, this assumes that the machine bed is face-milled and therefore very evenly aligned.&lt;/p&gt;&#10;&lt;h2 id="manufacturing"&gt;Manufacturing&lt;/h2&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2025-01-27-bloglogo_tsp_machined.avif" alt="Image: TSP-paths on aluminium sandwich"&gt;&lt;/figure&gt;&#10;Image: Attempting to engrave my blog logo as a TSP path with 9600 edges on black painted aluminium composite material. I used a &lt;code&gt;1/8&amp;quot; 36° graver, 0.1mm engrave width&lt;/code&gt;. At the bottom of the image you can see that the material is a little convex and can therefore no longer be reached by the graver.&lt;/p&gt;&#10;&lt;h3 id="image-preparation"&gt;Image preparation&lt;/h3&gt;&#10;&lt;p&gt;The image should have a high resolution and be in greyscale. Ideally it should have high contrast and use the entire greyscale spectrum.&lt;/p&gt;&#10;&lt;p&gt;The image is now loaded either into a CAM tool that supports the creation of halftone images - e.g. from &lt;a href="https://gadgets.vectric.com/v8/halftoner" target="_blank" rel="noopener noreferrer" class="external-link"&gt;Vectric&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;, Estlcam - or into an editing tool that can create point clouds or paths, e.g. &lt;a href="https://www.evilmadscientist.com/2012/stipplegen2/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;Stipplegen2&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; or Inkscape.&lt;/p&gt;&#10;&lt;p&gt;There I always try out a few different settings depending on the material used, desired cutter and image effect. You can often see there whether the image production would work and you can assess whether the resolution is suitable for the material used.&lt;/p&gt;&#10;&lt;h3 id="how-to-get-good-results"&gt;How to get good results&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Prefer large dimensions: The larger the image is chosen, the less noticeable material inhomogeneities and torn-out spots are.&lt;/li&gt;&#10;&lt;li&gt;Allow a large observation distance: The further the image is positioned from the viewer, the sharper the resolution is perceived. Before it eventually appears too small 😆&lt;/li&gt;&#10;&lt;li&gt;Take the angle of incidence of light into account: If the material is half-matte, metallic or even high-gloss, the image quality depends very much on the viewing angle and the distance to the light source. The shinier the material, the smaller the area in which the image can be clearly seen.&lt;/li&gt;&#10;&lt;li&gt;Use homogeneous, non-smearing materials. I have achieved the best results with acrylic glass.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="cnc-run"&gt;CNC run&lt;/h3&gt;&#10;&lt;p&gt;There is one thing you need to bring with you here: time. Below are a few video clips from my experiments (time lapse).&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center media-frame--video"&gt;&#10; &lt;div class="media-video"&gt;&lt;iframe&#10; src="https://makertube.net/videos/embed/n7CnjF5CUn1sidg6mxYhvL"&#10; title="Halftone on CNC - Part1"&#10; loading="lazy"&#10; allow="autoplay; fullscreen; picture-in-picture"&#10; allowfullscreen&#10; style="width: 100%; height: auto; min-height: 315px; aspect-ratio: 16/9;"&#10; &gt;&lt;/iframe&gt;&lt;/div&gt;&#10; &lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;Halftone on CNC - Part1&lt;/span&gt;&lt;a href="https://makertube.net/videos/embed/n7CnjF5CUn1sidg6mxYhvL" class="attr-link" target="_blank" rel="noopener noreferrer"&gt;↗&lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;div class="footnotes" role="doc-endnotes"&gt;&#10;&lt;hr&gt;&#10;&lt;ol&gt;&#10;&lt;li id="fn:1"&gt;&#10;&lt;p&gt;Exceptions prove the rule. Of course there are versions of both screens and printers that get around this problem: They use subpixels with additional colors and can thus cover larger color spaces or - as is common in gravure printing (magazines, packaging, etc.) - use a higher number of colors or color mixtures whose tonal values are closer to the required halftones.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;/div&gt;&#10;</description></item><item><title>Multicolor engravings</title><link>https://blog.schallbert.de/en/engrave-multicolor/</link><pubDate>Mon, 30 Dec 2024</pubDate><author>Schallbert</author><guid>https://blog.schallbert.de/en/engrave-multicolor/</guid><description type="html">&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-12-30-multicolorengrave-thumb.jpg"&#10; class="post-cover"&#10; alt="Image: multicolored sign &amp;#39;&amp;#39;Helft Waldbraende verhueten&amp;#39;&amp;#39;"&#10; title="Multicolor engravings" /&gt;&#10;&lt;h2 id="the-project-idea"&gt;The project idea&lt;/h2&gt;&#10;&lt;p&gt;A few weeks ago I was out in the forest. There I saw a beautiful, old sign with the inscription &amp;ldquo;Help prevent wildfires&amp;rdquo;. A drawing style like ink from olden times. I took a photo without further ado.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-12-30_waldbrand-original.jpg" alt="Image: An old *prevent forest fires* sign"&gt;&lt;/figure&gt;&#10;&lt;p&gt;Unfortunately, the sign is quite faded and looks pretty flat as a photo. So I decided to make a three-dimensional copy of the sign with the help of my CNC engraving machine, which would take a little time but not cost much.&lt;/p&gt;&#10;&lt;h2 id="from-jpg-to-svg"&gt;From &lt;code&gt;.jpg&lt;/code&gt; to &lt;code&gt;.svg&lt;/code&gt;&lt;/h2&gt;&#10;&lt;p&gt;Before I can create a job for the CNC, I have to prepare the image and put it into vector form. My CAM program can&amp;rsquo;t do much with pixel graphics. I would like to create the image as a &amp;ldquo;carve&amp;rdquo;, i.e. use a tapered engraving cutter to carve the areas of the image that should later appear in color. For this I also need a color separation, as the image should later have white, red and black areas in the milled version.&lt;/p&gt;&#10;&lt;h3 id="image-preparation"&gt;Image preparation&lt;/h3&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-12-30_waldbrand-cleaned.jpg" alt="Image: Preparing the image for trace operation"&gt;&lt;/figure&gt;&#10;For this I use common image editing programs such as &lt;a href="https://www.gimp.org/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;gimp&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; and &lt;a href="https://www.getpaint.net/index.html" target="_blank" rel="noopener noreferrer" class="external-link"&gt;paint.net&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;. I use the &lt;em&gt;curves&lt;/em&gt; tool to increase contrast, straighten the perspective using 3D rotation and then use the &lt;em&gt;crop&lt;/em&gt; tool to get the desired image section. I then erase image defects, dirt or artifacts caused by increasing the contrast. Finally, I add a little sharpness and do a tone separation so that I get pure colors rather than red tones or greyscale.&lt;/p&gt;&#10;&lt;p&gt;Now I export the image as &lt;code&gt;.jpg&lt;/code&gt; and import it into &lt;a href="https://inkscape.org/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;Inkscape&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;&#10;&lt;h3 id="path-conversion"&gt;Path conversion&lt;/h3&gt;&#10;&lt;p&gt;Here I first scale the image so that it fits on an A4 page. I also create a small &lt;code&gt;1mm x 1mm&lt;/code&gt; square at the bottom left of the image, which will later serve as the zero point for the two color layer images in the CAM, but will not be milled itself.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-12-30_waldbrand-trace.jpg" alt="Image: tracer in Inkscape"&gt;&lt;/figure&gt;&#10;&lt;p&gt;As already described in an earlier &lt;a href="https://blog.schallbert.de/en/path-from-image/#inkscape"&gt;article on path conversion&lt;/a&gt;, I use the trace function and can isolate the red and black areas in separate layers using different brightness thresholds. The &amp;ldquo;red&amp;rdquo; layer initially also contains the black image areas. However, I can subtract layers from each other so that after this action only the red parts of the image remain.&lt;/p&gt;&#10;&lt;p&gt;I then simplify the paths and remove any path artifacts that were created incorrectly. I export the &amp;ldquo;red&amp;rdquo; and &amp;ldquo;black&amp;rdquo; layers as &lt;code&gt;.svg&lt;/code&gt; files.&lt;/p&gt;&#10;&lt;h2 id="path-planning-in-cam"&gt;Path planning in CAM&lt;/h2&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--left"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-12-30-feuertrace.jpg" alt="Image: *red* areas to be cut"&gt;&lt;/figure&gt;&#10;In CAM I have to plan two jobs - one for each color. The unprocessed image areas should appear white. The engraving of the first job will be laid out with red color, and the second engraving should later appear deep black.&lt;/p&gt;&#10;&lt;p&gt;So I first import the &amp;ldquo;red&amp;rdquo; SVG file, select a scaling appropriate for DIN A4, set the zero point at the bottom left and then start creating the carve paths.&lt;/p&gt;&#10;&lt;h3 id="job1-red-areas"&gt;Job1: &amp;ldquo;red&amp;rdquo; areas&lt;/h3&gt;&#10;&lt;p&gt;I set a depth limit of &lt;code&gt;2mm&lt;/code&gt; and select a &lt;code&gt;6mm 90°&lt;/code&gt; graver with one cutting edge and &lt;code&gt;0.5mm&lt;/code&gt; flattening at the tip for the engraving. For clearing larger engraved areas, I select a &lt;code&gt;3mm&lt;/code&gt; two-cutter for wood and mill with &lt;code&gt;60%&lt;/code&gt; lateral feed. I set the speed for both milling cutters to &lt;code&gt;24000rpm&lt;/code&gt; and the feed to &lt;code&gt;3000mm/min&lt;/code&gt;.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--left"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-12-30-waldtrace.jpg" alt="Image: *black* areas to be cut"&gt;&lt;/figure&gt;&#10;&lt;h3 id="job2-black-areas"&gt;Job2: &amp;ldquo;black&amp;rdquo; areas&lt;/h3&gt;&#10;&lt;p&gt;For the black areas, I allow a higher depth of &lt;code&gt;2.8mm&lt;/code&gt; for Job2 and save myself the clearing cutter as fewer connected areas have to be removed here. The greater depth should make the black even darker and the motif more three-dimensional.&lt;/p&gt;&#10;&lt;h2 id="fabrication"&gt;Fabrication&lt;/h2&gt;&#10;&lt;p&gt;For the project, I use a black medium density fiber board (MDF). I paint it several times with white acrylic paint until I have a homogeneous and well-covering surface. After everything has dried, I apply a self-adhesive film. Professionals use stencil films (masking films), e.g. from Orafol, but I make do with a much simpler wrapping film for books. Not perfect, as its adhesion is not sufficient for small areas - but good enough for me.&lt;/p&gt;&#10;&lt;h3 id="red-flames"&gt;Red flames&lt;/h3&gt;&#10;&lt;p&gt;Now I run the first job on the milling machine. To do this, I use double-sided tape to attach the workpiece to the milling machine&amp;rsquo;s working area and align it properly so that the zero point can be set easily.&lt;/p&gt;&#10;&lt;p&gt;As soon as the milling job was complete, I put screws in the T-slots of the base plate on the edges of the workpiece. This allows me to position it with repeatable accuracy. Then I remove it from the machine bed, clean it with a brush and apply red spray paint. Unfortunately, this immediately soaks into the MDF (see video below). The flames therefore remain black. I try again, again without success. So I have to go back to the shop and buy a much more viscous paint to apply with a brush.&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;If MDF is to be painted, spray paint is not suitable because of its low viscosity: it soaks in and leaves hardly any pigment on the surface.&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;After waiting again until the flames have dried, I mount the workpiece on the machine bed again.&lt;/p&gt;&#10;&lt;h3 id="black-firs"&gt;Black firs&lt;/h3&gt;&#10;&lt;p&gt;Now I run the second job through. This is significantly faster despite not using the clearing cutter, as there is no need to change tools.&#10;I then remove the protective film from the workpiece and clean it thoroughly.&lt;/p&gt;&#10;&lt;p&gt;How beautiful the sign turned out!&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-12-30-multicolorengrave.jpg" alt="Image: carving complete: My copy of *Preventing forest fires*."&gt;&lt;/figure&gt;&#10;&lt;h2 id="video-of-the-3d-engraving"&gt;Video of the 3D engraving&lt;/h2&gt;&#10;&lt;p&gt;There is another time-lapse video for this project, provided on my PeerTube channel.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center media-frame--video"&gt;&#10; &lt;div class="media-video"&gt;&lt;iframe&#10; src="https://makertube.net/videos/embed/briT2e8qbbY6uWFFmv688n"&#10; title="multicolorEngrave"&#10; loading="lazy"&#10; allow="autoplay; fullscreen; picture-in-picture"&#10; allowfullscreen&#10; style="width: 100%; height: auto; min-height: 315px; aspect-ratio: 16/9;"&#10; &gt;&lt;/iframe&gt;&lt;/div&gt;&#10; &lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;multicolorEngrave&lt;/span&gt;&lt;a href="https://makertube.net/videos/embed/briT2e8qbbY6uWFFmv688n" class="attr-link" target="_blank" rel="noopener noreferrer"&gt;↗&lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;h2 id="what-could-be-improved"&gt;What could be improved&lt;/h2&gt;&#10;&lt;p&gt;Looking back, there are often things in my projects that can be done better. When I look at the video, two things stand out to me:&lt;/p&gt;&#10;&lt;h3 id="1-path-quality-determines-milling-quality"&gt;1. Path quality determines milling quality&lt;/h3&gt;&#10;&lt;p&gt;I wanted to get to the result as quickly as possible and therefore did not remove all path artifacts when converting the pixel image to vector graphics. These appear on the finished product as small islands and points that were milled with less depth than the rest. This is best seen in the red areas of the image. In reality, this is hardly noticeable. In the video, however, you can see that the milling machine needs additional time to work out these areas.&lt;/p&gt;&#10;&lt;h3 id="2-cam-strategy-costs-time"&gt;2. CAM strategy costs time&lt;/h3&gt;&#10;&lt;p&gt;My program for milling planning runs milling paths for clearing, outlines and chiseling from top to bottom, line by line. This means that an incredible number of positioning commands are required for non-connected paths. In the worst case each point is approached three times.&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;G00&lt;/code&gt; commands are bad here because they take a lot of time and cause the machine to move unnecessarily. This problem can only be solved with a more advanced CAM tool.&lt;/p&gt;&#10;</description></item><item><title>Milling steel</title><link>https://blog.schallbert.de/en/milling-steel/</link><pubDate>Mon, 10 Jun 2024</pubDate><author>Schallbert</author><guid>https://blog.schallbert.de/en/milling-steel/</guid><description type="html">&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-06-10-siemens-thumb.jpg"&#10; class="post-cover"&#10; alt="Image: PC towers with CNC-made window"&#10; title="Milling steel" /&gt;&#10;&lt;p&gt;For our retro gaming booth at the &lt;a href="https://blog.schallbert.de/en/makerfaire-ruhr/"&gt;Maker Faire Ruhr 2024&lt;/a&gt; I milled cutouts in PC cases. I would now like to tell the story behind and share suitable parameters for machining steel on &amp;ldquo;soft&amp;rdquo; hobby machines.&lt;/p&gt;&#10;&lt;h3 id="but-be-careful"&gt;But be careful!&lt;/h3&gt;&#10;&lt;p&gt;First of all, I would like to mention that I made some safety-related stupid mistakes that should definitely be avoided in the future:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Never handle rotating machine parts with gloves on!&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#10;&lt;li&gt;Coolants and lubricants must be suitable for the intended purpose; risk of smoke and fire!&lt;/li&gt;&#10;&lt;li&gt;Protective and barrier devices must be firmly mounted and must not be bypassed!&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;So if you are dedicated to occupational and operational safety, you should not watch the video provided below.&lt;/p&gt;&#10;&lt;h2 id="the-workpiece"&gt;The workpiece&lt;/h2&gt;&#10;&lt;p&gt;I have to work on steel sheets from PC cases (MIDI towers) with a thickness of &lt;code&gt;0.7mm-0.9mm&lt;/code&gt;. The material is galvanized, cold-rolled steel (&lt;a href="https://www.cosasteel.com/secc-steel/#SECC_Material_Specification" target="_blank" rel="noopener noreferrer" class="external-link"&gt;SECC&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;), i.e. a cheap and relatively easy-to-work type of steel with a low carbon content and a small admixture of other alloying elements.&lt;/p&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-06-10-cad-pcwindow-opensea.jpg" alt="Image: PC tower case service flap drawing"&gt;&lt;/figure&gt;&#10;This type of steel is used for sheet metal in automobile construction and many household appliances, especially in &amp;ldquo;white goods&amp;rdquo;, and is also often used in vending machine and switchboard construction. This milling work can therefore be transferred to various other areas of application.&lt;/p&gt;&#10;&lt;p&gt;The dimensions of the housing sides are between &lt;code&gt;35x45xm&lt;/code&gt; and &lt;code&gt;52x50cm&lt;/code&gt;, so they all fit on my machine. With one exception, the side panels lie flat with their visible side and without cutouts, so my vacuum table can easily be used to hold them down.&lt;/p&gt;&#10;&lt;p&gt;The side wall of a housing has gill-like perforations for ventilation and a recess for a handle. For the grille I use cling film to maintain the vacuum pressure, while the loss of vacuum is accepted when milling the handle recess.&lt;/p&gt;&#10;&lt;h3 id="cadcam"&gt;CAD/CAM&lt;/h3&gt;&#10;&lt;p&gt;The cutouts to be made are all geometrically simple and take into account &lt;code&gt;r=1.5*milling radius&lt;/code&gt; for curves. The window for the &amp;ldquo;sea PC&amp;rdquo; is designed in two parts and is intended to represent a storm scene at sea.&lt;/p&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-06-10-cad-pcwindow-opensea-detail.jpg" alt="Image: CAD detail drawing for open-sea-PC"&gt;&lt;/figure&gt;&#10;The window is &lt;code&gt;0.25mm&lt;/code&gt; smaller all around than the recess, which results in an almost play-free fit and looks very professional.&lt;/p&gt;&#10;&lt;p&gt;In the CAM I set up counter-rotating milling, which is advisable for less rigid machines like mine when machining hard and tough materials. The machine runs a little smoother and quieter this way - but it still shakes and vibrates considerably.&lt;/p&gt;&#10;&lt;p&gt;For the depth of cut, I choose a value that is four hundredths of a millimeter less than the material thickness. This way, I practically only leave a wafer-thin film of paint and corrosion protection, but I don&amp;rsquo;t wear out the adhesion promoter mat.&lt;/p&gt;&#10;&lt;h3 id="milling-parameters"&gt;Milling parameters&lt;/h3&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-06-10-cutter.jpg" alt="Image: endmill for cutting steel"&gt;&lt;/figure&gt;&#10;Compared to machining wood, the cutting speeds for steel are significantly lower. While I can work with &lt;code&gt;450m/min&lt;/code&gt; in birch multiplex, various cutting data calculators like &lt;a href="https://www.machiningdoctor.com/de/calculators/speeds-and-feeds-calculator/#f1p5" target="_blank" rel="noopener noreferrer" class="external-link"&gt;this one&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; recommend values between &lt;code&gt;80m/min&lt;/code&gt; and &lt;code&gt;200m/min&lt;/code&gt;. This results in a parameter set like &lt;code&gt;S4250u/min, F255mm/min&lt;/code&gt; for my two-cutter made of micro-grain carbide, for example.&lt;/p&gt;&#10;&lt;p&gt;This cutter has cutting edges bevelled at a &lt;code&gt;45°&lt;/code&gt; angle of &lt;code&gt;0.2mm&lt;/code&gt; in length and a helix of &lt;code&gt;30°&lt;/code&gt;. To increase the service life, it is coated with a &lt;a href="https://en.wikipedia.org/wiki/Titanium_aluminium_nitride" target="_blank" rel="noopener noreferrer" class="external-link"&gt;TiAlN&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; alloy approximately &lt;code&gt;3µm&lt;/code&gt; thick using the vacuum process &lt;a href="https://de.wikipedia.org/wiki/Physikalische_Gasphasenabscheidung" target="_blank" rel="noopener noreferrer" class="external-link"&gt;PVD&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;After consulting the cutter manufacturer, I preselected parameters on my machine, which I then adjusted in test runs and was thus able to achieve a higher depth of cut at a lower chip temperature (no more blue chips). Here are the values that I ultimately used for machining:&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Milling cutter&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Cutter geometry&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Speed&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Feedrate XY&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Feedrate Z&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Depth per pass&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;6mm, Solid Carbide&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2Flutes 30°, l=12, 45°0.2Fase&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;6000u/min&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;550mm/min&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;250mm/min&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;0.8mm&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;aside class="update-box update-box--note" role="note"&gt;&#10; &lt;span class="update-box__icon" aria-hidden="true"&gt;&#10; ℹ️&#10; &lt;/span&gt;&#10;&#10; &lt;div class="update-box__body"&gt;&#10; &lt;div class="update-box__heading"&gt;&#10; &lt;strong class="update-box__title"&gt;&#10; &#10; Update: Milling parameters&#10; &#10; &lt;/strong&gt;&#10;&#10; &lt;time datetime="2025-12-04T00:00:00Z"&gt;&#10; 2025-12-04&#10; &lt;/time&gt;&#10; &#10; &lt;/div&gt;&#10;&#10; &#10; &lt;div class="update-box__content"&gt;&#10; After a few questions in various forums on the subject, I have gained new insights that will significantly change my milling parameters for future projects. Further read: &lt;a href="https://blog.schallbert.de/en/milling-secc/"&gt;milling SECC steel&lt;/a&gt;, &lt;a href="https://blog.schallbert.de/en/engrave-aisi304-stainless-steel/"&gt;Engrave stainless steel&lt;/a&gt;&#10; &lt;/div&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/aside&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;When machining steel, pay attention to beveled cutting edges for the milling cutters&lt;/li&gt;&#10;&lt;li&gt;Increase the feed rate, reduce the depth of cut (especially applies to &amp;ldquo;soft&amp;rdquo; machines)&lt;/li&gt;&#10;&lt;li&gt;Dry milling is less problematic than I thought&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;This &lt;a href="https://www.youtube.com/watch?v=WzT4HJalwAs" target="_blank" rel="noopener noreferrer" class="external-link"&gt;Youtube video by Stefan Gotteswinter&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; explains very clearly the advantage of lower chip thicknesses when using beveled cutting edges. This works best when the depth of cut is not greater than the length of the bevel at the end of the cutting edge.&#10;I am also advised on &lt;a href="https://www.cnczone.nl/viewtopic.php?t=23051" target="_blank" rel="noopener noreferrer" class="external-link"&gt;cnczone&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; to choose a &amp;ldquo;high-speed milling&amp;rdquo; approach.&lt;/p&gt;&#10;&lt;p&gt;For my two-cutter, I adjust the cutting data so that I drastically reduce the depth of cut, but increase the feed and speed:&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Milling cutter&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Cutter geometry&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Speed&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Feed XY&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Feed Z&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Depth per pass&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;6mm two-cutter&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2Flutes 30°, l=12, 45°0.2chamfer&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;10600rpm&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;970mm/min&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;450mm/min&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;0.2mm&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;I am really looking forward to testing these values in practice.&lt;/p&gt;&#10;&lt;h2 id="preparing-the-milling-process"&gt;Preparing the milling process&lt;/h2&gt;&#10;&lt;p&gt;As this is my first time working with steel, I had to run a few errands and try things out beforehand.&lt;/p&gt;&#10;&lt;h3 id="cooling-lubricant"&gt;Cooling lubricant&lt;/h3&gt;&#10;&lt;p&gt;Cooling is essential here to protect the milling cutter, says the milling cutter manufacturer. So I got myself a syringe with which I can apply lubricant precisely. But: which product should I choose?&lt;/p&gt;&#10;&lt;p&gt;For just three parts, I don&amp;rsquo;t buy a minimum quantity lubrication or cooling lubricants from industrial supplies. So I try out products available at home:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Spray lubricant WD40: Not suitable for me. Evaporates quickly, smells.&lt;/li&gt;&#10;&lt;li&gt;Sewing machine oil / fine oil: Not suitable. Very liquid (flows into vacuum holes), smokes and stinks.&lt;/li&gt;&#10;&lt;li&gt;Rapeseed oil for frying: Wonderful! Lubricates well, relatively viscous, low odor, hardly any smoke development.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="chip-protection"&gt;Chip protection&lt;/h3&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-06-10-chipprotector.jpg" alt="Image: This tube made of acrylic glass protects from flying chips"&gt;&lt;/figure&gt;&#10;The metal chips created during processing are short, hot and sharp-edged. They tend to get caught in clothing and fly so far that even at a distance of more than a meter from the machine, plenty of chips still arrive.&lt;/p&gt;&#10;&lt;p&gt;So I sawed off a segment from an acrylic glass tube with a diameter of &lt;code&gt;20cm&lt;/code&gt;, slotted it and hung it on the Z-axis as a chip protection.&lt;/p&gt;&#10;&lt;p&gt;My mistake here: I relied on the Acrylic&amp;rsquo;s clamping force alone and did not additionally attach the chip protection with screws. Fortunately, it only jammed when the last part was being made.&lt;/p&gt;&#10;&lt;h2 id="milling"&gt;Milling&lt;/h2&gt;&#10;&lt;p&gt;You&amp;rsquo;ll notice immediately that the machine does not have the necessary rigidity to process steel. As soon as the milling cutter plunges into the material, the machine begins to rattle and shake. Nevertheless, it bravely fights its way through the material, while I am always ready with a drop of oil at the milling path.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center media-frame--video"&gt;&#10; &lt;div class="media-video"&gt;&lt;iframe&#10; src="https://makertube.net/videos/embed/jbtp1jvVi2GLvJq1GdhmgF"&#10; title="Milling Steel!"&#10; loading="lazy"&#10; allow="autoplay; fullscreen; picture-in-picture"&#10; allowfullscreen&#10; style="width: 100%; height: auto; min-height: 315px; aspect-ratio: 16/9;"&#10; &gt;&lt;/iframe&gt;&lt;/div&gt;&#10; &lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;Milling Steel!&lt;/span&gt;&lt;a href="https://makertube.net/videos/embed/jbtp1jvVi2GLvJq1GdhmgF" class="attr-link" target="_blank" rel="noopener noreferrer"&gt;↗&lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;The spindle has more than enough reserves available even at the low speed. However, when positioning the workpiece, I make sure to work as centrally as possible on the ball screw of the Y-axis. This is where the machine experiences the least torsional forces. The chips look good to my eyes.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-06-10-chips.jpg" alt="Image: steel chip quality"&gt;&lt;/figure&gt;&#10;&lt;p&gt;The noise changes when milling: I have more vibrations in the machine when I mill in the Y direction than when only the X-axis moves. I will look into this phenomenon in more detail later.&lt;/p&gt;&#10;&lt;h2 id="the-result"&gt;The result&lt;/h2&gt;&#10;&lt;p&gt;After machining on the CNC, I can simply cut out the windows with a cutter knife.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center media-frame--video"&gt;&#10; &lt;div class="media-video"&gt;&lt;video controls&gt;&#10; &lt;source src="https://blog.schallbert.de/assets/video/posts/2024-06-10-cuttingsteel.mp4" type="video/mp4"&gt;&#10; Your browser does not support the video tag.&#10; &lt;/video&gt;&lt;/div&gt;&#10; &lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;Video: Cutting the cutout with a cutter knife&lt;/span&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;I quickly remove the (minimal) burrs with a file.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-06-10-pcwindow-opensea.jpg" alt="Image: Cutout completed and cleaned"&gt;&lt;/figure&gt;&#10;&lt;p&gt;Then I make windows out of transparent acrylic glass, thickness &lt;code&gt;3mm&lt;/code&gt;, which I provide with a &lt;code&gt;10mm&lt;/code&gt; wide fold at depth of &lt;code&gt;1mm&lt;/code&gt; all around. This takes into account the thickness of the double-sided adhesive tape for fitting and the pane sits flush with the PC case.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-06-10-siemens.jpg" alt="Image: The ready-built PC"&gt;&lt;/figure&gt;&#10;&lt;p&gt;The picture above shows a &lt;code&gt;Celsius 1000 Workstation&lt;/code&gt; case from Siemens, which now looks really classy with a simple window.&lt;/p&gt;&#10;&lt;div class="footnotes" role="doc-endnotes"&gt;&#10;&lt;hr&gt;&#10;&lt;ol&gt;&#10;&lt;li id="fn:1"&gt;&#10;&lt;p&gt;Gloves can be torn away if they accidentally come into contact with the milling cutter. This can result in serious hand injuries.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;/div&gt;&#10;</description></item><item><title>CNC Tuning #3</title><link>https://blog.schallbert.de/en/cnc-tuning-pathinterpreter/</link><pubDate>Sat, 04 May 2024</pubDate><author>Schallbert</author><guid>https://blog.schallbert.de/en/cnc-tuning-pathinterpreter/</guid><description type="html">&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-04-20-G64RD-thumb.jpg"&#10; class="post-cover"&#10; alt="Image: Thumbnail of endmill cutting forces"&#10; title="CNC Tuning #3" /&gt;&#10;&lt;p&gt;This is the final part of my series on optimizing manufacturing time on CNC milling machines. It focuses on the path interpreter of the CNC control software.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://blog.schallbert.de/en/cnc-tuning-gcode/"&gt;&lt;em&gt;Part 1&lt;/em&gt;: Better G-Code&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://blog.schallbert.de/en/cnc-tuning-kinematics/"&gt;&lt;em&gt;Part 2&lt;/em&gt;: Turning up kinematic parameters&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;The control software path interpreter is responsible for reading the instructions from &lt;code&gt;G-Code&lt;/code&gt; and translating them into machine movements. For example, if &lt;code&gt;G01 X100 Y200 Z-2.0 F2000 S18000&lt;/code&gt; is to be executed, the interpreter must take into account the kinematic parameters of the machine: which ramp is used to accelerate to the target feed, whether the desired feed is even permissible, and from which point braking must be carried out again in order to reach the target point exactly. The data obtained in this way is finally translated into a step sequence for the three stepper motors, loaded into a buffer memory and finally output to the motor amplifier stages in real time.&lt;/p&gt;&#10;&lt;h2 id="step-3-optimizing-the-path-interpreter"&gt;Step 3: Optimizing the path interpreter&lt;/h2&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-05-04-laf-settings.jpg" alt="Image: Look Ahead Feed in the CNC control software"&gt;&lt;/figure&gt;&#10;Many control software providers have programmed integrated milling path filters, which can be configured using the &lt;code&gt;G64&lt;/code&gt; command or via the menu. I&amp;rsquo;ll link a few examples from different manufacturers here, where you can read about specific details:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://www.datron.com/resources/blog/toolpath-filter-achieves-a-perfect-surface-finish/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;&amp;ldquo;Toolpath filter&amp;rdquo; von Datron&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://docs.edingcnc.com/settings/trajectory" target="_blank" rel="noopener noreferrer" class="external-link"&gt;&amp;ldquo;Look Ahead Feed&amp;rdquo; von EdingCNC&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="http://wiki.linuxcnc.org/cgi-bin/wiki.pl?TrajectoryControl" target="_blank" rel="noopener noreferrer" class="external-link"&gt;&amp;ldquo;Path Blending&amp;rdquo; von LinuxCNC&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;The trick now is to find a configuration that suits both milling job and machine kinematics. It&amp;rsquo;s always about a compromise between production speed and path tolerance. If you want to run at high feed rate, sharp edges are actually rounded, connected line segments are approached within a tolerance band or paths are simplified so that path points outside the acceleration that can be achieved by the machine are not just a pass-by.&lt;/p&gt;&#10;&lt;h3 id="basics-what-is-look-ahead-feed"&gt;Basics: What is Look Ahead Feed?&lt;/h3&gt;&#10;&lt;p&gt;This means that the path interpreter of the control software is already looking at the next operation(s) while executing the current milling operation - the algorithm checks how it must brake and accelerate again ahead of time and how to best interconnect, interleave or filter path segments. I explain the physics behind it &lt;a href="https://blog.schallbert.de/en/portal-milling-setup/#acceleration"&gt;in the CNC setup article&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;This can save a lot of time, the milling process becomes more fluid and the machine experiences less stress. In addition to avoiding acceleration and braking processes, parameter &lt;code&gt;G64&lt;/code&gt; can be used to set whether and how milling path filters are allowed to change the planned trajectory in order to further optimize for higher path speeds.&lt;/p&gt;&#10;&lt;h3 id="ideal-for-engraving-operations"&gt;Ideal for engraving operations&lt;/h3&gt;&#10;&lt;p&gt;Such options can be used excellently in engraving operations: higher tolerances are usually OK here, and slightly rounded edges are often acceptable. With 3D engravings, milling through the many paths takes a long time, and a lot of time can be saved here.&lt;/p&gt;&#10;&lt;p&gt;Since I use EdingCNC, I can only give tips for parameters of this control software. Now let&amp;rsquo;s go into detail about the settings!&lt;/p&gt;&#10;&lt;h3 id="milling-path-tolerance-g64-p"&gt;Milling path tolerance &lt;code&gt;G64 P*&lt;/code&gt;&lt;/h3&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-05-04-lafblending.jpg" alt="Image: Look Ahead Feed G64 CNC corner blending"&gt;&lt;/figure&gt;&#10;This parameter specifies the general tolerance of path accuracy to the control software.&lt;/p&gt;&#10;&lt;p&gt;I have set my machine so that it allows deviations from the specified milling path of up to &lt;code&gt;LAF blending tolerance = 0.3mm&lt;/code&gt; in engraving mode. Alternatively, the configuration can be done using command &lt;code&gt;G64 P0.3&lt;/code&gt;. In the picture I have sketched how such a setting can work in practice: The milling path (white) consists of &lt;code&gt;G01&lt;/code&gt; line segments. The tolerance is marked with the help of circles. The path interpreter of the control software can now independently define circle segments so that the highest possible path speed is achieved within the tolerance.&lt;/p&gt;&#10;&lt;p&gt;The path determined in this way (turquoise) resembles a spline curve. It should be noted that all lines can be affected by this setting - even those that have strict tolerance requirements. If this is not desired, a smaller value should be used here.&lt;/p&gt;&#10;&lt;h3 id="path-rounding-g64-r"&gt;Path rounding &lt;code&gt;G64 R*&lt;/code&gt;&lt;/h3&gt;&#10;&lt;p&gt;If two line segments meet at an angle of up to &lt;code&gt;LAF full speed blending angle threshold = 12°&lt;/code&gt;, the machine will try to follow the angle exactly without braking. For larger angles, travel is carried out at reduced speed with a tolerance defined by &lt;code&gt;G64 P*&lt;/code&gt;. This configuration is programmed with &lt;code&gt;G64 R12&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;The values here must be set with great caution because they lead to acceleration peaks on the machine. Large values can cause step losses and increased wear on the CNC milling machine. To achieve this, the path speed and accuracy are maintained optimally.&lt;/p&gt;&#10;&lt;h3 id="path-rounding-at-reduced-feed-g64-s-d"&gt;Path rounding at reduced feed &lt;code&gt;G64 S* D*&lt;/code&gt;&lt;/h3&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-05-04-G64RD.jpg" alt="Image: Look Ahead Feed G64 CNC corner radius"&gt;&lt;/figure&gt;&#10;This configuration gives the control software the ability to round edges up to the set tolerance value: &lt;code&gt;LAF reduced speed path smoothing delta = 0.001mm&lt;/code&gt;. In combination with the rounding, the angle up to which this rounding should be carried out must be set: &lt;code&gt;LAF reduced speed path smoothing angle threshold = 0°&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;This function is best programmed in combination with path rounding at full feed like so: &lt;code&gt;G64 R* S* D*&lt;/code&gt;. The advantage here is that line segments are followed very precisely as shown in the picture, and at the same time the edges are rounded off in a finely adjustable way. Up to the angle defined via &lt;code&gt;R&lt;/code&gt;, the path is followed exactly, even at full feed.&lt;/p&gt;&#10;&lt;p&gt;If very large angles are set at &lt;code&gt;S&lt;/code&gt;, there will be greater rounding corresponding to &lt;code&gt;D&lt;/code&gt;. However, if the angle specified in the milling program exceeds the configured value, the algorithm falls back to the values stored in &lt;code&gt;P&lt;/code&gt; or to the exact path following mode.&lt;/p&gt;&#10;&lt;h3 id="path-simplification-g64-q"&gt;Path simplification &lt;code&gt;G64 Q*&lt;/code&gt;&lt;/h3&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-05-04-lafcombine.jpg" alt="Image: Look Ahead Feed G64, path combine setting"&gt;&lt;/figure&gt;&#10;If the G-code file contains numerous, very short line segments (as is often the case when creating paths from image files), this function can help by simplifying the milling paths. The number behind the parameter indicates the tolerance up to which line segments are merged into a line.&lt;/p&gt;&#10;&lt;p&gt;This setting relieves the load on the machine&amp;rsquo;s buffer memory and at the same time increases the average path feed rate. I think this setting is particularly interesting for engraving operations when working with &amp;ldquo;noisy&amp;rdquo; data and there was no option in CAD to reduce the number of paths.&lt;/p&gt;&#10;&lt;h3 id="acceleration-filter-g64-f"&gt;Acceleration filter &lt;code&gt;G64 F*&lt;/code&gt;&lt;/h3&gt;&#10;&lt;p&gt;Using these parameters, the acceleration peaks that may be generated by Look Ahead Feed can be mitigated. The minimum value to be set is determined by the quotient of the selected feed for the operation and the maximum speed of the machine.&lt;/p&gt;&#10;&lt;p&gt;Example: &lt;code&gt;Fmin = Foperate / Fg00&lt;/code&gt;, with &lt;code&gt;Fg00 = 12000mm/min&lt;/code&gt; and &lt;code&gt;Foperate = 5000mmm/min&lt;/code&gt;, &lt;code&gt;Fmin = 0.42&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;So at a feed rate of &lt;code&gt;5000mm/min&lt;/code&gt; the maximum possible acceleration of the machine is called up and the curve radii are set so that they are ran at a constant path speed. All values greater than or equal to &lt;code&gt;Fmin = 1&lt;/code&gt; are inherently safe, regardless of the selected feed rate.&lt;/p&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-05-04-accelfilter.jpg" alt="Image: acceleration filter for G64 operation"&gt;&lt;/figure&gt;&#10;This parameter was introduced for better processing of elastic materials such as rubber or cork, where a constant feed speed is critical and path stability is of secondary importance. The parameter is used in combination with &lt;code&gt;G64 R*&lt;/code&gt;. The following programming for the example above would call up the full capacity of the machine: &lt;code&gt;G64 R120 F0.42&lt;/code&gt;, whereby &lt;code&gt;F5000&lt;/code&gt; is used, &lt;code&gt;F12000&lt;/code&gt; is the maximum feed of the machine and acute angles up to &lt;code&gt;120°&lt;/code&gt; are taken without braking at all.&lt;/p&gt;&#10;&lt;p&gt;If I apply these values to my machine, the image shown opposite is created. A rectangle with an edge length of &lt;code&gt;25 x 100mm&lt;/code&gt; should be made here. The target trajectory is again shown in white. The turquoise curve shows the curve with a constant path speed that was driven by programming the acceleration filter. The lower the feed in relation to the maximum feed and the higher the acceleration of the machine is set, the smaller the necessary radius becomes.&lt;/p&gt;&#10;&lt;p&gt;However, in my experience, this parameter is not used for engraving and milling solid materials.&lt;/p&gt;&#10;&lt;h2 id="my-configuration-for-the-hobbyline-4530"&gt;My configuration for the Hobbyline 4530&lt;/h2&gt;&#10;&lt;p&gt;I played around with the various LAF settings at the cost of a lot of blanks to learn and improve parameter settings. I achieved the shortest production times by previously optimizing the kinematic parameters with the following configuration:&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;&lt;code&gt;G64 Q0.3 R12 D0.3 S120&lt;/code&gt;&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;With that I tell the machine the following:&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;&amp;ldquo;Use the look-ahead feed algorithm and try to merge short line segments less than &lt;code&gt;0.3mm&lt;/code&gt; in length. Try not to reduce feed rate when two line segments are at an angle of less than &lt;code&gt;12°&lt;/code&gt;. At larger angles up to &lt;code&gt;120°&lt;/code&gt;, rounding can be done with up to &lt;code&gt;r=0.3mm&lt;/code&gt; tolerance. For even larger angles, the specified path must be followed. If necessary, brake to a standstill.&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;h2 id="conclusion"&gt;Conclusion&lt;/h2&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-05-04-duplicated-software.jpg" alt="Image: dual install of CNC control software for different purposes"&gt;&lt;/figure&gt;&#10;Since the parameter optimization for engraving operation took me quite far away from the parameter set for normal milling operation, I simply installed my control program a second time.&lt;/p&gt;&#10;&lt;p&gt;There I was then able to specify the speed, axis acceleration and path parameterization separately. Now I have the best of both worlds on one machine:&lt;/p&gt;&#10;&lt;p&gt;A very precise, smooth milling operation with the following parameters:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;Fmax XY 12000mm/min&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;Fmax Z 4800mm/min&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;Amax X 1000mm/s²&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;Amax Y 1000mm/s²&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;Amax Z 1000mm/s²&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;G64 P0.1 R6&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;And via the other link an extremely fast engraving operation:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;Fmax XY 12000mm/min&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;Fmax Z 4800mm/min&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;Amax X 4000mm/s²&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;Amax Y 3200mm/s²&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;Amax Z 1600mm/s²&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;G64 Q0.3 R12 D0.3 S120&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="and-where-is-the-proof"&gt;And where is the proof?&lt;/h2&gt;&#10;&lt;p&gt;The embedded video shows the same engraving project with four different levels of optimization:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;top left: stock configuration of the machine, standard milling paths from CAD/CAM&lt;/li&gt;&#10;&lt;li&gt;top right: Speed and acceleration increased to &amp;ldquo;milling mode&amp;rdquo;&lt;/li&gt;&#10;&lt;li&gt;bottom left: Look Ahead feed switched on &lt;code&gt;G64 P0.3&lt;/code&gt;, milling paths optimized in CAM&lt;/li&gt;&#10;&lt;li&gt;bottom right: Optimized for &amp;ldquo;engraving mode&amp;rdquo; as described above, CAM flyover reduced to &lt;code&gt;2mm&lt;/code&gt; and empty runs minimized&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;figure class="media-frame media-frame--center media-frame--video"&gt;&#10; &lt;div class="media-video"&gt;&lt;iframe&#10; src="https://makertube.net/videos/embed/2EWe1ZvVW9TKY6k3XtpmWF"&#10; title="Tuned Engraving: Compare"&#10; loading="lazy"&#10; allow="autoplay; fullscreen; picture-in-picture"&#10; allowfullscreen&#10; style="width: 100%; height: auto; min-height: 315px; aspect-ratio: 16/9;"&#10; &gt;&lt;/iframe&gt;&lt;/div&gt;&#10; &lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;Tuned Engraving: Compare&lt;/span&gt;&lt;a href="https://makertube.net/videos/embed/2EWe1ZvVW9TKY6k3XtpmWF" class="attr-link" target="_blank" rel="noopener noreferrer"&gt;↗&lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;</description></item><item><title>CNC Tuning #2</title><link>https://blog.schallbert.de/en/cnc-tuning-kinematics/</link><pubDate>Sat, 27 Apr 2024</pubDate><author>Schallbert</author><guid>https://blog.schallbert.de/en/cnc-tuning-kinematics/</guid><description type="html">&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-04-27-kinematics-thumb.jpg"&#10; class="post-cover"&#10; alt="Image: Thumbnail of a CNC machine&amp;#39;&amp;#39;s portal X-Axis"&#10; title="CNC Tuning #2" /&gt;&#10;&lt;p&gt;This is the second part of my series on optimising production time on CNC milling machines. It focuses on the kinematic machine parameters for engraving operations.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://blog.schallbert.de/en/cnc-tuning-gcode/"&gt;&lt;em&gt;Part 1&lt;/em&gt;: Better G-code&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://blog.schallbert.de/en/cnc-tuning-pathinterpreter/"&gt;&lt;em&gt;Part 3:&lt;/em&gt; Tuning path interpreter&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="step-2-tuning-the-kinematic-parameters-of-the-portal-milling-machine"&gt;Step 2: Tuning the kinematic parameters of the portal milling machine&lt;/h2&gt;&#10;&lt;p&gt;I have explained the theoretical basics in detail in the &lt;a href="https://blog.schallbert.de/en/portal-milling-setup/"&gt;article on CNC control configuration&lt;/a&gt;. After many tests and consultation with the manufacturer, I recorded my problems with it and the associated solutions in &lt;a href="https://blog.schallbert.de/en/projects/one-year-zerspanobert/#velocityerror"&gt;Conclusion on one year of CNC operation&lt;/a&gt;. The following sections apply the above findings to a demonstration machine that I was able to borrow.&lt;/p&gt;&#10;&lt;h3 id="travelling-speed-in-rapid-traverse"&gt;Travelling speed in rapid traverse&lt;/h3&gt;&#10;&lt;p&gt;For the demo machine, I was able to increase the rapid traverse speed from the suggested &lt;code&gt;Fxy = 4m/min&lt;/code&gt; and &lt;code&gt;Fz = 2.4m/min&lt;/code&gt; to &lt;code&gt;Fxy = 12m/min&lt;/code&gt; and &lt;code&gt;Fz = 4.8m/min&lt;/code&gt;. If I set all three axes in motion simultaneously, I get a combined step frequency of &lt;code&gt;96kHz&lt;/code&gt; due to the pitch of the ball screws and the microstep configuration (8 per full step) of the motors, which is below the maximum step frequency of &lt;code&gt;125kHz&lt;/code&gt; of the controller.&lt;/p&gt;&#10;&lt;h3 id="acceleration-in-rapid-traverse"&gt;Acceleration in rapid traverse&lt;/h3&gt;&#10;&lt;p&gt;The manufacturer&amp;rsquo;s specifications recommend &lt;code&gt;aXY = 300mm/s²&lt;/code&gt; and &lt;code&gt;aZ = 200mm/s²&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;I increased the acceleration in several steps and ended up with &lt;code&gt;aXY = 1000mm/s²&lt;/code&gt; and &lt;code&gt;aZ = 400mm/s²&lt;/code&gt; in a first round. In my experience, these values are easily possible for this small and light machine with a travel of only &lt;code&gt;30x45x14cm&lt;/code&gt; for normal operation. They greatly increase the production speed, because every change of direction, including those in the material grip at &lt;code&gt;G01, G02, G03&lt;/code&gt;, are now carried out faster by a factor of &lt;code&gt;3&lt;/code&gt; / &lt;code&gt;2.5&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;I have often operated the machine this way and I have also driven stably and safely with these values at the &lt;a href="https://blog.schallbert.de/en/makerfaire-ruhr/"&gt;maker faire&lt;/a&gt;. The following video shows the milling machine engraving the letter &amp;ldquo;e&amp;rdquo; with values specified above.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center media-frame--video"&gt;&#10; &lt;div class="media-video"&gt;&lt;iframe&#10; src="https://makertube.net/videos/embed/vvmwT8e6vWnj5zbuqMdUfN"&#10; title="TunedEngraving: Teaser"&#10; loading="lazy"&#10; allow="autoplay; fullscreen; picture-in-picture"&#10; allowfullscreen&#10; style="width: 100%; height: auto; min-height: 315px; aspect-ratio: 16/9;"&#10; &gt;&lt;/iframe&gt;&lt;/div&gt;&#10; &lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;TunedEngraving: Teaser&lt;/span&gt;&lt;a href="https://makertube.net/videos/embed/vvmwT8e6vWnj5zbuqMdUfN" class="attr-link" target="_blank" rel="noopener noreferrer"&gt;↗&lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;After that, however, I wanted to know how far I could take it. True to the motto described above&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;&amp;ldquo;If you don&amp;rsquo;t cross the line, you don&amp;rsquo;t know where it is&amp;rdquo;&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;I first tested what massive step losses sound like on this machine. So I blocked one axis with a wooden beam and carefully ran into it:&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center media-frame--video"&gt;&#10; &lt;div class="media-video"&gt;&lt;video controls&gt;&#10; &lt;source src="https://blog.schallbert.de/assets/video/posts/2024-04-27-soundoflosingsteps.mp4" type="video/mp4"&gt;&#10; Your browser does not support the video tag.&#10; &lt;/video&gt;&lt;/div&gt;&#10; &lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;Massive step loss soundcheck&lt;/span&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;The clearly audible chattering occurs when the motor starts up, but several full steps are lost at target speed. If the rotor is already &amp;ldquo;lost&amp;rdquo; when the motor starts up, the motor only chirps without setting the axis in motion at all. If the motor only loses a few steps, but is at target speed, there is a rough and scratchy sound.&lt;/p&gt;&#10;&lt;p&gt;I chose the X-axis for the experiment because it is the easiest to lock. I also blocked it in the &lt;code&gt;X+&lt;/code&gt; direction. Reason: this machine does not have a professional fixed bearing to absorb the compressive and tensile forces of the ball screw. Instead, compressive forces in the direction of the stepper motor are safely absorbed by a flange mounted on the spindle, which presses against ball bearings located in the portal cheek.&lt;/p&gt;&#10;&lt;p&gt;Tensile forces, on the other hand, are mainly absorbed by the motor bearings - I didn&amp;rsquo;t want to take any risks here.&#10;So now the noise caused by sudden and jerky step loss is known - overclocking can begin!&lt;/p&gt;&#10;&lt;p&gt;My approach:&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;double the acceleration of one axis of the machine&lt;/li&gt;&#10;&lt;li&gt;jog around the axis in question, listening for strange noises and observing the axis movement&lt;/li&gt;&#10;&lt;li&gt;repeat the previous steps until massive step losses occur&lt;/li&gt;&#10;&lt;li&gt;reduce acceleration to the average value between &amp;ldquo;works&amp;rdquo; and &amp;ldquo;does not work&amp;rdquo;&lt;/li&gt;&#10;&lt;li&gt;repeat the previous step until the machine runs smoothly&lt;/li&gt;&#10;&lt;li&gt;perform all steps for the other axes as well&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;This is how I ended up with &lt;code&gt;aXY = 4000mm/s²&lt;/code&gt;, &lt;code&gt;aZ = 1600mm/s²&lt;/code&gt;, which is unbelievable for such a hobby machine. This is now an order of magnitude higher than the recommended values.&lt;/p&gt;&#10;&lt;p&gt;The small milling machine also seems to run stably here and the engravings produced look good. However, I could not imagine that I was still operating the stepper motors, driver stages and power supply unit within their specifications. That&amp;rsquo;s why I took measurements.&lt;/p&gt;&#10;&lt;h3 id="electrical-measurements"&gt;Electrical measurements&lt;/h3&gt;&#10;&lt;p&gt;The power supply unit is specified with &lt;code&gt;3.7A&lt;/code&gt; at &lt;code&gt;36V&lt;/code&gt;. I must therefore not exceed this value permanently, neither in rapid traverse &lt;code&gt;G00&lt;/code&gt; nor in material engagement. As explained above, the rapid traverse in engraving mode is decisive due to the lower milling forces, so I have to pay particular attention to the simultaneous movement of several axes.&lt;/p&gt;&#10;&lt;p&gt;The motors can each handle a continuous current of &lt;code&gt;3.0A&lt;/code&gt;, so they don&amp;rsquo;t limit me here. In the electrical tests, I only check whether the energy consumption of the system remains within limits.&lt;/p&gt;&#10;&lt;h4 id="test-setup"&gt;Test setup&lt;/h4&gt;&#10;&lt;p&gt;I connect the multimeter known from &lt;a href="https://blog.schallbert.de/en/measure-inrush-current/"&gt;this article&lt;/a&gt; directly to the output of the power supply unit and record voltage and current. For the experiment, I simulate the production of the engraving linked in the video above and in two runs first carry out a temporally coarse-resolution power factor analysis (&lt;code&gt;2Hz&lt;/code&gt;), followed by a fine-resolution current determination with &lt;code&gt;20kHz&lt;/code&gt;.&lt;/p&gt;&#10;&lt;h4 id="results"&gt;Results&lt;/h4&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-04-27-powerdiagram-engrave.jpg" alt="Image: Power diagram for tuned engraving"&gt;&lt;/figure&gt;&#10;&lt;p&gt;The figure above shows voltage, current, effective and reactive power. It can be seen that the reactive power (&lt;code&gt;green&lt;/code&gt;) always shows short peaks when several axles accelerate into rapid traverse at the same time. The power consumption of an axis in &lt;code&gt;G01/G02/G03, blue&lt;/code&gt; is on average around &lt;code&gt;45W&lt;/code&gt;, similar to that of constant speed in rapid traverse.&lt;/p&gt;&#10;&lt;p&gt;The power supply unit is able to keep the voltage &lt;code&gt;orange&lt;/code&gt; fairly constant and even under full load only drops by just under &lt;code&gt;0.2V&lt;/code&gt;. Only the current value looked a little too smooth to me. At this point I suspected that the time resolution was too low and decided to repeat the experiment focussing on the current.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-04-27-currentdiagram-engrave.jpg" alt="Image: Current diagram for tuned engraving"&gt;&lt;/figure&gt;&#10;&lt;p&gt;And indeed. The higher temporal resolution shows that the current consumption during acceleration of several axes shows peaks that are higher than the values already known.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-04-27-currentpeak-engrave.jpg" alt="Image: Zoomed-in current draw for axis acceleration"&gt;&lt;/figure&gt;&#10;&lt;p&gt;Movements on the Y-axis, which must set the entire portal in motion, are creating current spikes, especially when the other axes are still moving or have just stopped. This is related to the stepper motor drivers. They continue to brake the motors at full power for about &lt;code&gt;0.5s&lt;/code&gt; after stopping. The resulting overlay makes the tips look even more dramatic.&lt;/p&gt;&#10;&lt;h4 id="peak-load-benchmark"&gt;Peak load benchmark&lt;/h4&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-04-27-loadtest.jpg" alt="Image: Zoomed-in current draw for axis acceleration"&gt;&lt;/figure&gt;&#10;Well then let&amp;rsquo;s take it to the extreme with an acceleration benchmark. Will the power supply be able to maintain the output voltage even under full load while accelerating all motors at the same time?&lt;/p&gt;&#10;&lt;p&gt;To test this, I wrote G-code that makes all axes simultaneously accelerate to maximum speed and then decelerate to zero again. Then it will return to the starting point under the same conditions and repeat the whole thing.&lt;/p&gt;&#10;&lt;p&gt;In this way I can find out whether the power supply has enough reserves to handle load peaks and at the same time see whether the motors are already losing steps to a large extent. On average, the applied power is &lt;code&gt;95W&lt;/code&gt; and the supply voltage drops by &lt;code&gt;0.28V&lt;/code&gt; to &lt;code&gt;35.72V&lt;/code&gt;. The power supply must deliver a peak of &lt;code&gt;5.14A&lt;/code&gt;, which is almost &lt;code&gt;40%&lt;/code&gt; above the rated current.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center media-frame--video"&gt;&#10; &lt;div class="media-video"&gt;&lt;video controls&gt;&#10; &lt;source src="https://blog.schallbert.de/assets/video/posts/2024-04-20-benchmark.mp4" type="video/mp4"&gt;&#10; Your browser does not support the video tag.&#10; &lt;/video&gt;&lt;/div&gt;&#10; &lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;Benchmark&lt;/span&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;If you listen closely, the machine sounds a bit rough right at the start of the benchmark, but then it settles down. Lost steps can sound like this too. It is therefore very important to monitor the machine with all your senses.&lt;/p&gt;&#10;&lt;h3 id="mechanical-testing"&gt;Mechanical testing&lt;/h3&gt;&#10;&lt;p&gt;Now for the final test: During the rapid traverse benchmark, I put additional load on the axes by pulling on the respective axis with my arm while the program is running. The Z and X axes continue to run stably. However, with the portal axis Y I notice that the machine now sounds different. Somehow rough, as if you were lightly dragging a rasp over a wooden board.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-04-27-steplossy.jpg" alt="Image: Y-axis reveals massive step loss"&gt;&lt;/figure&gt;&#10;&lt;p&gt;If I apply a large load, the stepper motor on this axis no longer even starts, but just chirps. It can no longer follow the pulses of the power amplifier. So I now reduce the acceleration step by step until the motor can accelerate the portal axis repeatably and without audible step losses, even under medium load. Here I end up with a still fast &lt;code&gt;[aX = 4000mm/s² aY = 3200mm/s² aZ = 1600mm/s²]&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;In a final step, after repeating the benchmark five times, I carry out another reference run and look at the control software logs. All axes are now unobtrusive in terms of step losses.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-04-27-steplossxz.jpg" alt="Image: XZ-axis without step loss"&gt;&lt;/figure&gt;&#10;&lt;h3 id="appeals-for-cnc-tuning"&gt;Appeals for CNC tuning&lt;/h3&gt;&#10;&lt;p&gt;Please be careful when tuning your machine. Get it to know properly before you start. Listen carefully and optimize axis by axis one after the other. Take time for tests, verifications and experiments.&lt;/p&gt;&#10;&lt;p&gt;Even if you have a portal milling machine that is very similar to mine, other dimensions make a huge difference in terms of stiffness and therefore possible travel speed and acceleration. Even the state of maintenance, smoother shafts, different guides, etc. can mean that you end up running different values than me.&lt;/p&gt;&#10;&lt;p&gt;No professional equipment is required to explore the limits of the machine. Not even a dial gauge, since step losses can also be determined with sufficient precision using the reference switches.&lt;/p&gt;&#10;&lt;p&gt;All I found from the electrical measurements above is that the manufacturer did a good job designing the machine and no component is undersized. On the contrary, this machine is ideal for overclocking.&lt;/p&gt;&#10;&lt;p&gt;And now on to the last &lt;a href="https://blog.schallbert.de/en/cnc-tuning-pathinterpreter/"&gt;&lt;em&gt;Part 3:&lt;/em&gt; Optimize the path interpreter&lt;/a&gt;.&lt;/p&gt;&#10;</description></item><item><title>CNC Tuning #1</title><link>https://blog.schallbert.de/en/cnc-tuning-gcode/</link><pubDate>Sat, 20 Apr 2024</pubDate><author>Schallbert</author><guid>https://blog.schallbert.de/en/cnc-tuning-gcode/</guid><description type="html">&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-04-20-camtuned-thumb.jpg"&#10; class="post-cover"&#10; alt="Image: Thumbnail of CAM simulation for G-code optimizing"&#10; title="CNC Tuning #1" /&gt;&#10;&lt;p&gt;This is the first part of my series on optimising production time on CNC milling machines. It focuses on the use of CAD and CAM tools to generate more efficient G-code.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://blog.schallbert.de/en/cnc-tuning-kinematics/"&gt;&lt;em&gt;Part 2&lt;/em&gt;: Turning up kinematic parameters&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://blog.schallbert.de/en/cnc-tuning-pathinterpreter/"&gt;&lt;em&gt;Part 3:&lt;/em&gt; Optimise path interpreter&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;There are various measures to reduce production time with a CNC machine. Firstly, however, it should be analysed why this is desired and what possible disadvantages result from it.&lt;/p&gt;&#10;&lt;h2 id="why-at-all"&gt;Why at all?&lt;/h2&gt;&#10;&lt;p&gt;From a commercial point of view, shorter production times ensure a higher throughput of parts and thus enable a higher turnover in a given period of time. In addition, the investment in the machine is amortised more quickly.&lt;/p&gt;&#10;&lt;p&gt;As a hobbyist, shorter production times are particularly interesting if the aim is to produce very complex geometries or when performing real 3D-milling. Here, machine times can easily amount to several hours per part and the potential savings are therefore particularly large.&lt;/p&gt;&#10;&lt;p&gt;For me, as in teaching, the scientific idea takes centre stage: I want to find out where the limit of the machine lies. I want to know why it is there. I will try to operate it stably within its limits. Still, wear and tear must be kept under control.&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;However, in order to know this limit precisely, it must first be crossed. How else would I know where it is?&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;h3 id="what-are-the-possible-disadvantages"&gt;What are the possible disadvantages?&lt;/h3&gt;&#10;&lt;p&gt;Certain components of an &amp;ldquo;overclocked&amp;rdquo; machine could wear out faster than usual. These include power supply units and motor output stages, for example, which have to cope with higher transient currents. Bearings and guides are subjected to greater stress due to higher accelerations. Rotating spindles and machine frames have to absorb the resulting stronger and more rapidly changing forces and vibrations and may show signs of fatigue or loosening connections earlier.&lt;/p&gt;&#10;&lt;p&gt;In extreme cases, the machine can even be damaged when the limits are reached: There is a high probability that step losses&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt; will occur beyond the limit. This is not a problem in test operation. However, the assumed position then no longer matches the actual position and there is a risk of a &amp;ldquo;crash&amp;rdquo; - if care is not taken. Here is a pretty good &lt;a href="https://www.youtube.com/watch?v=C_9dM1wx0Sg" target="_blank" rel="noopener noreferrer" class="external-link"&gt;Youtube video by &lt;em&gt;gammaflow&lt;/em&gt; on the subject of avoiding step losses&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;If the milling paths are changed in CAD or CAM in favour of shorter production times, this can also have negative effects on cut, edge and surface quality.&lt;/p&gt;&#10;&lt;p&gt;A compromise must also be made when optimising the path interpreter of the control software: Higher production speed is bought with lower accuracy and/or higher machine wear.&lt;/p&gt;&#10;&lt;h3 id="which-measures-are-not-discussed"&gt;Which measures are not discussed?&lt;/h3&gt;&#10;&lt;p&gt;I will not consider here the optimisation of the feed rate &lt;code&gt;F&lt;/code&gt; and speed &lt;code&gt;S&lt;/code&gt; of the selected cutter during machining. These parameters depend on the material to be machined, the endmill geometry, the capabilities of the machine and the courage of the operator, so I cannot suggest any generally applicable tunings.&lt;/p&gt;&#10;&lt;p&gt;I must also exclude another major influencing factor here: The machining strategy of the CAM program in relation to rapid traverse. My CAM program does not allow me to intervene very deeply, so I always have to work manually in the G-code to optimise the last few percent of production time, which is correspondingly error-prone.&lt;/p&gt;&#10;&lt;h2 id="tuning-in-three-steps"&gt;Tuning in three steps&lt;/h2&gt;&#10;&lt;p&gt;In my optimisation, I proceeded in three steps, which can be implemented independently of each other. Each step brought me clearly noticeable improvements. This article focuses on engraving operation for several reasons:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Engraving usually allows for greater tolerances than other modes of operation. This allows greater rounding, which leads to lower accelerations, enabling higher feed rates on average&lt;/li&gt;&#10;&lt;li&gt;The milling forces to be expected are lower: No cutting all the way through, hardly any energy required for chip displacement, smaller chip volume than with end mills&lt;/li&gt;&#10;&lt;li&gt;This allows the machine to be operated closer to its mechanical and electrical limits&lt;/li&gt;&#10;&lt;li&gt;More optimisation potential due to larger G-code files on average&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="step-1-better-g-code"&gt;Step 1: Better G-code&lt;/h2&gt;&#10;&lt;p&gt;This section follows the credo &lt;code&gt;Garbage in, garbage out&lt;/code&gt;. In other words: If my G-code is already bad, the machine can never achieve optimum production times. So what characterises &amp;ldquo;bad&amp;rdquo; G-code in terms of production time?&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Excessively complex and long, possibly file sizes in the megabyte range&lt;/li&gt;&#10;&lt;li&gt;Extremely many interpolation points and a lot of short line segments&lt;/li&gt;&#10;&lt;li&gt;A bunch of &amp;ldquo;empty runs&amp;rdquo; in rapid traverse on XY with the Z-axis raised&lt;/li&gt;&#10;&lt;li&gt;Many retractions of the Z-axis to safety height&lt;/li&gt;&#10;&lt;li&gt;Frequent machine waiting times (spindle run-up, coolant pump, controller buffer full)&lt;/li&gt;&#10;&lt;li&gt;Excessive superfinishing even with B surfaces&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="but-how-should-i-simplify-my-g-code"&gt;But how should I simplify my G-code?&lt;/h3&gt;&#10;&lt;p&gt;Short question, long answer: It starts in CAD and may not end in CAM.&lt;/p&gt;&#10;&lt;h3 id="example-cad"&gt;Example CAD&lt;/h3&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-04-20-bline.jpg" alt="Image: Letter &amp;#39;B&amp;#39; in CAM, drawn as a set of line segments"&gt;&lt;/figure&gt;&#10;Let&amp;rsquo;s assume we want to mill some letters. Our CAD program has a bunch of great fonts for this. We now create a DXF file for the CAM. In the CAM, when we zoom in, we suddenly see that all the letters consist of very short line segments instead of circle segments or &lt;a href="https://en.wikipedia.org/wiki/Spline_%28mathematics%29" target="_blank" rel="noopener noreferrer" class="external-link"&gt;splines&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;. The result: The CAM will generate &lt;code&gt;G01&lt;/code&gt; movements, i.e. &amp;ldquo;linear moves&amp;rdquo; or a sequence of lines.&lt;/p&gt;&#10;&lt;p&gt;The connected paths require the machine to change direction very often. Consequently, it must always decelerate before the connection point and then accelerate again. The machine cannot therefore travel at a constant speed, as this would require infinite acceleration at the bend point.&lt;/p&gt;&#10;&lt;p&gt;There are solutions to this problem, which are ideally used together:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Set the CAD programme to create splines or curves instead of line segments whenever possible&lt;/li&gt;&#10;&lt;li&gt;Simplify the drawing by reducing the number of support points&lt;/li&gt;&#10;&lt;li&gt;Increased use of radii and splines at edges, avoidance of angles&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;In my case, the first option was not available, so I now use a different programme for engraving fonts than for my usual drawings. As a result, I can now express lettering in line and arc segments. The milling time required for this is halved and at the same time the G-code manages with fewer lines. In addition, the cuts become rounder and adheres even more closely to the initially selected font.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-04-20-bsplinevsline.jpg" alt="Image: Letter &amp;#39;B&amp;#39; in CAM, twice, once per spline, once as line segments"&gt;&lt;/figure&gt;&#10;&lt;p&gt;Gimp and Inkscape provide good examples of simplifying paths by reducing vertices - I have already shown this for Inkscape in my &lt;a href="https://blog.schallbert.de/en/path-from-image/#inkscape"&gt;article on image-to-path conversion&lt;/a&gt;. With just a few clicks, you can obtain drawing data at the expense of accuracy, some of which can be produced much faster.&lt;/p&gt;&#10;&lt;p&gt;As an end mill cannot produce a pocket with &lt;code&gt;r=0&lt;/code&gt; in the corners anyway, I have got into the habit of rounding off all corners and edges in CAD. Not only do parts produced in this way fit better in the hand, they are also quicker to produce - the time savings add up, especially on slow and sluggish machines.&lt;/p&gt;&#10;&lt;h3 id="example-cam"&gt;Example CAM&lt;/h3&gt;&#10;&lt;p&gt;In CAM, I can save a little time by increasing the use of approach points and ramps. I usually place them on the shortest line segment and thus save one braking/acceleration process. With the plunge type, the advantage of &amp;ldquo;ramp&amp;rdquo; over &amp;ldquo;helix&amp;rdquo; is that all paths of the cutter are effective paths and I can drive through without additional axis accelerations. Depending on the ramp gradient, however, the milling path is longer as overlaps occur.&lt;/p&gt;&#10;&lt;p&gt;The clever selection of clearing infeeds and strategies for pockets to suit the material, milling cutter and desired surface finish has a much greater effect on the production time. In many cases, trochoidal milling&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt; produces longer files and takes more time on the machine than the classic &amp;ldquo;lawnmower&amp;rdquo;, which simply files the pocket. For the clearing infeed, I like to choose large values above &amp;lsquo;60%&amp;rsquo; for materials such as wood and acrylic glass - unless the bottom of the pocket has to meet particularly high quality standards.&lt;/p&gt;&#10;&lt;p&gt;In my opinion, it is quickest for engravings not to use a second cutter for pocket clearing. Instead, use an engraving bit with a flattened tip - similar to those for my &lt;a href="https://blog.schallbert.de/en/cut-dibond-tests/"&gt;tests with Dibond&lt;/a&gt;. This takes longer to clear, but I can compensate for this by increasing the engrave depth and a fairly wide flattening of &lt;code&gt;1.5mm&lt;/code&gt;. I use a clearing infeed in XY of &lt;code&gt;1mm&lt;/code&gt; with such a milling cutter. What remains is the time advantage due to fewer tool changes.&lt;/p&gt;&#10;&lt;h3 id="but-how-can-i-reduce-the-empty-runs"&gt;But how can I reduce the empty runs?&lt;/h3&gt;&#10;&lt;p&gt;At last a few crisp, short answers:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Lower retraction height in &lt;code&gt;Z&lt;/code&gt; (I use &lt;code&gt;5mm&lt;/code&gt; but &lt;code&gt;2mm&lt;/code&gt; would probably also work for me)&lt;/li&gt;&#10;&lt;li&gt;Optimise the milling strategy in the CAM to &amp;ldquo;minimum paths&amp;rdquo;&lt;/li&gt;&#10;&lt;li&gt;For nesting: Make sure that the geometry is not produced line by line, but part by part.&lt;/li&gt;&#10;&lt;li&gt;If in doubt, optimise the G-code by hand. Worthwhile if the CAM program cannot work well enough and many identical parts have to be produced&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="and-where-is-the-problem-with-retractions-of-the-z-axis"&gt;And where is the problem with retractions of the Z-axis?&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Retractions occur very frequently, especially in engraving operations&lt;/li&gt;&#10;&lt;li&gt;the loss of time adds up&lt;/li&gt;&#10;&lt;li&gt;When re-engaging, the material is usually not moved at rapid traverse but at the speed intended for the milling cutter with &lt;code&gt;G01&lt;/code&gt;.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Good planning of the milling sequence in the CAM can bring an improvement here. As many sections as possible should be connected and produced in one go without retractions. In CAM, rapid traverse should be used for retraction and re-entry in &amp;lsquo;Z&amp;rsquo;.&lt;/p&gt;&#10;&lt;h3 id="how-do-i-reduce-waiting-times"&gt;How do I reduce waiting times?&lt;/h3&gt;&#10;&lt;p&gt;Cooling lubricant switching processes, spindle speed changes or tool changes are associated with waiting times that can usually be easily reduced:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Allow minimal quantity lubrication to flow during the whole job sequence&lt;/li&gt;&#10;&lt;li&gt;using as few tools as possible at the same speed for a product&lt;/li&gt;&#10;&lt;li&gt;Use stops to simplify machine loading and avoid having to set zero points again and again&lt;/li&gt;&#10;&lt;li&gt;If the machine is operated with completely different parameters for engraving and milling operation, it is advisable to install the control software twice with the appropriate parameter sets in each case. This eliminates the need to always change the configuration.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Continue in &lt;a href="https://blog.schallbert.de/en/cnc-tuning-kinematics/"&gt;&lt;em&gt;Part 2&lt;/em&gt;: Turning up kinematic parameters&lt;/a&gt;.&lt;/p&gt;&#10;&lt;div class="footnotes" role="doc-endnotes"&gt;&#10;&lt;hr&gt;&#10;&lt;ol&gt;&#10;&lt;li id="fn:1"&gt;&#10;&lt;p&gt;Step losses occur when the axis of a stepper motor no longer rotates synchronously with the step sequence given by the controller, but instead travels fewer or more steps than dictated. Step loss is almost always caused by inadequate system design (e.g. insufficient or unstable supply voltage, output stages that are too weak or not adapted to the motor) or overloading of the stepper motor. Rarely, however, step losses can be symptoms of defects such as bearing seizure, winding short circuit or blown buffer capacitors.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li id="fn:2"&gt;&#10;&lt;p&gt;Trochoidal milling is not a bad practice. It has other strengths, but is rarely useful in engraving.&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;/div&gt;&#10;</description></item><item><title>Vacuum clamping</title><link>https://blog.schallbert.de/en/vacuum-clamping/</link><pubDate>Tue, 02 Apr 2024</pubDate><author>Schallbert</author><guid>https://blog.schallbert.de/en/vacuum-clamping/</guid><description type="html">&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-04-02-cuttingforces-thumb.jpg"&#10; class="post-cover"&#10; alt="Image: Thumbnail of endmill cutting forces"&#10; title="Vacuum clamping" /&gt;&#10;&lt;p&gt;As I mentioned in the &lt;a href="https://blog.schallbert.de/en/makerfaire-ruhr/#delays"&gt;Maker Faire Ruhr 2024 article&lt;/a&gt;, I had major problems clamping my workpieces for the production of spirographs.&lt;/p&gt;&#10;&lt;p&gt;In this article, I would like to go into this in more detail, analyze the causes and finally present a few possible solutions.&lt;/p&gt;&#10;&lt;p&gt;What I can anticipate: All problems can be solved with knowledge of the causes and a little time, planning and material expenditure.&lt;/p&gt;&#10;&lt;h2 id="the-problem"&gt;The problem&lt;/h2&gt;&#10;&lt;p&gt;As usual, I had defined the path planning for the spirographs in such a way that I first had the inner areas (pockets, parts, holes) milled and then the outer areas. Cut-outs and chamfers were to be produced at the very end. I also planned to machine the parts on both sides so that the backs of the gears would also have broken edges and smooth transitions.&lt;/p&gt;&#10;&lt;h3 id="vacuum-loss"&gt;Vacuum loss&lt;/h3&gt;&#10;&lt;p&gt;In my first attempt, I proceeded as I had already successfully done in the &lt;a href="https://blog.schallbert.de/en/projects/spirograph/"&gt;spirograph project&lt;/a&gt; with the material acrylic glass: The back is machined first, but not milled all the way through. After turning the workpiece, only the chamfer cutter should be used to cut out and break the edges at the same time.&lt;/p&gt;&#10;&lt;p&gt;This worked perfectly well for the first clamping.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center media-frame--video"&gt;&#10; &lt;div class="media-video"&gt;&lt;video controls&gt;&#10; &lt;source src="https://blog.schallbert.de/assets/video/posts/2024-04-02-spiro-back.mp4" type="video/mp4"&gt;&#10; Your browser does not support the video tag.&#10; &lt;/video&gt;&lt;/div&gt;&#10; &lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;Back machining of the spirographs.&lt;/span&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;With the second one, however, so much negative pressure was lost when the surface was pierced that the material detached from the vacuum table and took on its original, slight curvature. So I had to stop the milling process and think of another strategy to hold it down.&lt;/p&gt;&#10;&lt;p&gt;At this point, I couldn&amp;rsquo;t really explain why so much more pressure was being lost than during production in acrylic glass.&lt;/p&gt;&#10;&lt;h3 id="cling-film"&gt;Cling film&lt;/h3&gt;&#10;&lt;p&gt;I tried to counteract the pressure loss with cling film. This resulted in several consequential problems: If the cutter passes through the film, it is caught by the cutter when milling closed contours and wrapped around it at lightning speed. The cutter no longer cuts, but only rubs against the material, which very quickly leads to heat marks on the wood.&lt;/p&gt;&#10;&lt;p&gt;But even if I attach the cling film in advance: As I cut out parts, the &lt;em&gt;local negative pressure&lt;/em&gt; on the part is already so small when it first enters the groove already present on the underside that it can hardly be held in place.&lt;/p&gt;&#10;&lt;h3 id="twisting-of-the-workpiece"&gt;Twisting of the workpiece&lt;/h3&gt;&#10;&lt;p&gt;For the second attempt, I adapted the strategy: The end mill would mill through the workpiece, so I didn&amp;rsquo;t need a second set-up. I wanted to optionally realize the edge breaking on the back side later via a holder clamped on the table, into which I would be able to insert the parts.&lt;/p&gt;&#10;&lt;p&gt;While cutting out the parts still worked without any problems (again, milling the &amp;ldquo;inner&amp;rdquo; parts first), I ran into major problems when applying the chamfer to the front. The gears began to twist and the template with the ring gear could not be held down at all.&lt;/p&gt;&#10;&lt;h3 id="too-little-time"&gt;Too little time&lt;/h3&gt;&#10;&lt;p&gt;I therefore had to resort to using holders specially made for the workpieces when machining the front side. Their design and manufacture took time that I had not planned for at this point.&lt;/p&gt;&#10;&lt;p&gt;Before the trade fair, I wasn&amp;rsquo;t able to do an in-depth analysis - a quick solution had to be found.&lt;/p&gt;&#10;&lt;h2 id="the-causes"&gt;The causes&lt;/h2&gt;&#10;&lt;p&gt;With a few weeks&amp;rsquo; hindsight, I can now say that several factors led to the problems. A difficult geometry, unfavorable material properties and certain peculiarities of the vacuum table design all came together. But let&amp;rsquo;s get to the bottom of it all here.&lt;/p&gt;&#10;&lt;h3 id="workpiece"&gt;Workpiece&lt;/h3&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-04-02-rawmaterial.jpg" alt="Image: Veneered MDF raw material"&gt;&lt;/figure&gt;&#10;The raw material is medium density fiberboard of &lt;code&gt;10mm&lt;/code&gt; thickness. It is covered on one side with &lt;code&gt;0.75mm&lt;/code&gt; thick olive wood veneer. This material is inherently problematic for processing on a vacuum table:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Due to veneering and storage, the boards are slightly curved&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;, so they want to stand out from my vacuum table.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;MDF is permeable to air, so the vacuum pump has to deal with larger leakage currents than usual (I only get &lt;code&gt;300mBar&lt;/code&gt; when clamping the panel instead of the usual &lt;code&gt;800mBar&lt;/code&gt; without leakage currents). The low material thickness intensifies this effect.&lt;/li&gt;&#10;&lt;li&gt;MDF is not only permeable to air vertically to the panel plane, but also horizontally. This greatly reduces the holding forces in the vicinity of milled grooves, as air can now also penetrate the material laterally, thus additionally increasing the leakage currents.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;The video linked here &lt;a href="https://www.youtube.com/watch?v=osJik4XjZTY" target="_blank" rel="noopener noreferrer" class="external-link"&gt;Youtube: Displacement force measurements by &lt;em&gt;Anton CNC&lt;/em&gt;&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; clearly shows how different materials behave on a vacuum table with a porous surface. Also highly recommended on this topic is this video &lt;a href="https://www.youtube.com/watch?v=jk7Clrvtlmo" target="_blank" rel="noopener noreferrer" class="external-link"&gt;YouTube: Determining holding force during machining by &lt;em&gt;vakuumtischDE&lt;/em&gt;&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; to get an impression of the load the workpiece can be under during the milling process.&lt;/p&gt;&#10;&lt;h3 id="geometry"&gt;Geometry&lt;/h3&gt;&#10;&lt;p&gt;My design for the spirographs is not particularly easy to hold down:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;The template with ring gear has thin walls of only about &lt;code&gt;2cm&lt;/code&gt; thickness. They are thickest on the left and right sides, but have a large recess in the middle through which air can penetrate the material in all directions, thus reducing the holding forces.&lt;/li&gt;&#10;&lt;li&gt;The gear wheel has holes to accommodate pins. The contact pressure is reduced around the holes.&lt;/li&gt;&#10;&lt;li&gt;The teeth of the ring gear and gearwheel are so exposed that they can make virtually no contribution to the holding force due to cross currents of air in the material. At the same time, however, the tooth heads provide a large lever for twisting or shifting the workpiece: an unfavorable pairing.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-04-02-spirograph-on-vacuum-table.jpg" alt="Image: Spirograph on vacuum table: hole grid overlay"&gt;&lt;/figure&gt;&#10;&lt;p&gt;If I take this as a basis for practice, only the vacuum holes inside the circle in the image above are capable of generating any significant clamping forces. However, these are again close to the center and therefore offer little resistance to twisting of the workpiece. In addition, the gear wheel here has several holes and therefore additional &amp;ldquo;leaks&amp;rdquo;.&lt;/p&gt;&#10;&lt;h3 id="milling-forces"&gt;Milling forces&lt;/h3&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-04-02-cuttingforces-z.jpg" alt="Image: Cutting forces XY"&gt;&lt;/figure&gt;&#10;The forces introduced into the material by the tool (the milling cutter) always act in the XY direction and, in the case of V-cut milling cutters and end mills with spiral/twist, also in the Z direction.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Forces due to feed: The faster the material is moved through, the stronger the forces in the XY direction act on the material in the direction of travel.&lt;/li&gt;&#10;&lt;li&gt;Forces due to cutter rotation (conventional or climb-milling): If an end mill without twist is used, forces are generated orthogonally in the plane of the traverse direction. So if I move in the positive X-direction, the milling cutter will also exert a force in the Y-direction, which is introduced by its own rotation: In conventional milling operation, the cutter wants to avoid the material, so it is deflected towards &lt;code&gt;Y+&lt;/code&gt; (as &lt;a href="https://blog.schallbert.de/en/cnc-router-overload/"&gt;clearly shown in this article&lt;/a&gt;). In the opposite direction, the deflection direction is inverse and the cutter wants to deflect towards &lt;code&gt;Y-&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;Forces due to cutter geometry: If the cutter has a spiral or is angled in its geometry, additional forces act in the Z direction. With Vcut and downcut cutters, the material is pressed onto the machine bed, whereas with upcut spiral cutters, the chip is ejected as desired. However, the workpiece also experiences a force that can lift it off the machine bed in extreme cases.&#10;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-04-02-cuttingforces-xy.jpg" alt="Image: Cutting forces Z"&gt;&lt;/figure&gt;&lt;/li&gt;&#10;&lt;li&gt;If milling is carried out in the full groove (i.e. the milling cutter is engaged over its entire diameter instead of moving along the edge of the workpiece), the forces transverse to the milling direction increase even more: In the image, it moves in the opposite direction at the upper edge of the groove, which pushes the milling cutter &amp;ldquo;away from the material&amp;rdquo;, i.e. downwards in the image. At the same time, it moves in synchronization at the lower edge of the groove, which pulls it &amp;ldquo;into the material&amp;rdquo; - also downwards.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="vacuum-clamping-system"&gt;Vacuum clamping system&lt;/h3&gt;&#10;&lt;p&gt;As described in the articles &lt;a href="https://blog.schallbert.de/en/cnc-vacuum-pumps/"&gt;about vacuum pumps&lt;/a&gt; and &lt;a href="https://blog.schallbert.de/en/why-vacuum-table/"&gt;vacuum tables&lt;/a&gt;, I have a dry-running rotary vane pump connected to a perforated grid vacuum table. When processing porous materials, this combination is just as problematic as grid vacuum tables with small-volume pumps:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;My hole-grid vacuum table has blind holes with a vacuum channel of &lt;code&gt;0.5mm&lt;/code&gt; diameter in their center. This constriction relieves the pump when holes are uncovered, as it does not have to provide the full air flow that the &lt;code&gt;5mm&lt;/code&gt; bore allows. However, the hole can build up less negative pressure due to its limited air flow in combination with MDF.&lt;/li&gt;&#10;&lt;li&gt;Due to the high leakage currents, my vacuum pump is at its limit with its volume flow. Other pump types are much better suited here (see &lt;a href="https://blog.schallbert.de/en/cnc-vacuum-pumps/#radial-blower"&gt;radial blower&lt;/a&gt;, &lt;a href="https://blog.schallbert.de/en/cnc-vacuum-pumps/#sidechannel-compressor"&gt;side channel compressor&lt;/a&gt;).&lt;/li&gt;&#10;&lt;li&gt;A vacuum table generally only clamps downwards (in the Z direction). However, forces in the XY direction must also be absorbed to prevent the workpiece from shifting or rotating. These are coupled to the vacuum on the workpiece via the &lt;a href="https://blog.schallbert.de/en/cnc-vacuum-pumps/#lateral-force"&gt;coefficient of static friction µ&lt;/a&gt; (and can be influenced by material pairing and surface properties), but if the latter is too low, the workpiece is not held reliably.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-04-02-vacuumtable-channels-porousmaterials.jpg" alt="Image: Air flow system of vacuum table and porous material"&gt;&lt;/figure&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Although the vacuum channels are located in a &lt;code&gt;10mm&lt;/code&gt; grid, the distance relevant for the leakage flow is only &lt;code&gt;5mm&lt;/code&gt;. This is because the edges of the blind holes (each &lt;code&gt;5mm&lt;/code&gt; in diameter) are at this distance from each other, so that the air flow has to travel a shorter distance across the material than through it.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h4 id="comparison-with-the-resistance-network"&gt;Comparison with the resistance network&lt;/h4&gt;&#10;&lt;p&gt;The actual clamping force can be easily estimated by imagining the pump, vacuum table and workpiece as an electrical network. I have prepared a model for this and present it below.&lt;/p&gt;&#10;&lt;h4 id="resistors-vacuum-table-workpiece"&gt;Resistors: Vacuum table, workpiece&lt;/h4&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-04-02-tableworkpiece.jpg" alt="Image: Vacuum table and workpiece"&gt;&lt;/figure&gt;&#10;The suction holes of the vacuum table represent resistors for the air flow, which are connected in parallel. The workpiece is again connected in series as a resistor, which is connected with its other pole to &amp;ldquo;ground&amp;rdquo;, i.e. the ambient air pressure.&lt;/p&gt;&#10;&lt;h4 id="vacuum-manifold--switch-pressure-gauge--voltmeter"&gt;Vacuum manifold = switch, pressure gauge = voltmeter&lt;/h4&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-04-02-manoswitch.jpg" alt="Image: Vacuum manifold and manometer"&gt;&lt;/figure&gt;&#10;The pressure gauge in the suction channel can be seen as a voltage meter. I take the vacuum distributor with its valves for switching the vacuum sections as an electrical switching device. If the switch is closed, it establishes the connection between pump and vacuum table. If it is open, it blocks the air flow.&lt;/p&gt;&#10;&lt;h4 id="vacuum-pump--voltage-source"&gt;Vacuum pump = voltage source&lt;/h4&gt;&#10;&lt;p&gt;In this picture, the pump represents a voltage source, which in my case can provide a maximum of &lt;code&gt;U = 8V&lt;/code&gt; corresponding to &lt;code&gt;-800mBar&lt;/code&gt;. Due to the internal resistance of &lt;code&gt;0.2Ohm&lt;/code&gt; present in real voltage sources, it can generate a short-circuit current of &lt;code&gt;I = 40A&lt;/code&gt;, analogous to the &lt;code&gt;40m³/h&lt;/code&gt; flow rate. This comparison is of course not physically correct, because I would have to work with mass flows instead of volume flows. In addition, the flow rate is not linearly related to the pressure everywhere in the characteristic diagram and the resistance values I have assumed are only reference values. In my opinion, it is nevertheless suitable for modeling the situation under steady-state conditions.&lt;/p&gt;&#10;&lt;p&gt;With workpiece materials such as acrylic glass or metal, the air flow is close to zero, so their &amp;ldquo;resistance&amp;rdquo; is extremely high. This causes most of the tension (negative pressure) to drop here, so that the workpiece is firmly clamped.&lt;/p&gt;&#10;&lt;p&gt;When using airtight materials, all is well with the world: the pressure gauge correctly indicates the pressure on the material when the workpiece is still unprocessed. Even in the case of milled holes, only the resistance of the material &amp;ldquo;in series&amp;rdquo; to the affected suction holes is set to zero. This means that the negative pressure and therefore the holding force on the part itself is hardly reduced.&lt;/p&gt;&#10;&lt;p&gt;If you look closely, you can see that the pressure gauge measures the pressure difference upstream of the vacuum manifold. Its value is therefore only meaningful for the clamping force if the workpiece has a very high flow resistance.&lt;/p&gt;&#10;&lt;h4 id="special-case-of-porous-materials"&gt;Special case of porous materials&lt;/h4&gt;&#10;&lt;p&gt;The situation is completely different with porous materials such as MDF:&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-04-02-porousmaterial-circuitdiagram.jpg" alt="Image: equivalent circuit diagram for porous material on a vacuum table"&gt;&lt;/figure&gt;&#10;&lt;p&gt;Here, the contact resistance of the material is only just an order of magnitude higher than that of the vacuum holes. I determined the values through tests on the vacuum table. They are based on pressure measurements, calculations of the workpiece surface, and the number of active suction holes covered by the material. Two effects should be particularly emphasized here, which made holding down even more difficult for me:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Pay attention to the resistances in the material in parallel to the contact resistance in the &lt;code&gt;Z direction&lt;/code&gt;. They are caused by the fact that the air can now also move through the material &amp;ldquo;between the holes&amp;rdquo;.&lt;/li&gt;&#10;&lt;li&gt;On the right-hand side of the picture you can see what happens when the workpiece protrudes into an inactive vacuum area: The suction holes are connected to each other with virtually no resistance by means of vacuum channels in the table. As the workpiece allows &amp;ldquo;transverse air flow&amp;rdquo; in the &lt;code&gt;XY&lt;/code&gt; direction, significantly less resistance has to be overcome by connecting the suction holes than for penetration in the &lt;code&gt;Z&lt;/code&gt; direction. This means that only &lt;code&gt;R29&lt;/code&gt; and &lt;code&gt;R22||R21&lt;/code&gt; are still in series. If the workpiece covers several inactive hole fields, &lt;code&gt;R22&lt;/code&gt; approaches 0.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;As a result, the resistances upstream of &lt;code&gt;R19&lt;/code&gt;, namely &lt;code&gt;R18||(R29+(R21||R22))&lt;/code&gt;, become so small that the pump practically only draws ambient air here and can hardly apply any clamping force at this point. The cross air flow also affects the pressure drop of &lt;code&gt;R17, R15&lt;/code&gt; via &lt;code&gt;R25&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;Now the small suction holes act as voltage dividers, so that a not inconsiderable part of the negative pressure &amp;ldquo;sticks&amp;rdquo; to them.&lt;/p&gt;&#10;&lt;p&gt;This means that the pressure displayed on the pressure gauge no longer corresponds to the conditions on the workpiece: Although I still get &lt;code&gt;-200mBar&lt;/code&gt; displayed here, the clamping force is reduced precisely at the most sensitive points for holding down&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-04-02-resnetwork.jpg" alt="Image: Simplified equivalent circuit diagram for a vacuum clamping system"&gt;&lt;/figure&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;at the edge of the workpiece&lt;/li&gt;&#10;&lt;li&gt;in areas adjacent to those where the workpiece is not actively sucked in&lt;/li&gt;&#10;&lt;li&gt;as well as at every through-milling and a certain radius&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;to almost zero.&lt;/p&gt;&#10;&lt;p&gt;For all other areas, &lt;a href="https://en.wikipedia.org/wiki/Kirchhoff%27s_circuit_laws" target="_blank" rel="noopener noreferrer" class="external-link"&gt;Kirchhoff&amp;rsquo;s laws&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; apply: A voltage divider is formed consisting of the pump&amp;rsquo;s internal resistance, the vacuum system and the penetration resistance of the workpiece. Only the voltage still on the workpiece determines the hold-down force. It is - I repeat myself now - possibly &lt;em&gt;much lower&lt;/em&gt; than a glance at the pressure gauge would suggest.&lt;/p&gt;&#10;&lt;h2 id="solutions"&gt;Solutions&lt;/h2&gt;&#10;&lt;p&gt;Quite a lot of theory for the banal realization that the workpiece is twisted on the machine bed, isn&amp;rsquo;t it? I have the following solutions in my quiver for such a problem:&lt;/p&gt;&#10;&lt;h3 id="pump--vacuum-table"&gt;Pump / vacuum table&lt;/h3&gt;&#10;&lt;p&gt;When working with porous materials, it is important that the table itself has a low flow resistance. This is the only way to ensure that the majority of the negative pressure falls on the workpiece, resulting in a higher clamping force. According to the motto &amp;ldquo;a lot helps a lot&amp;rdquo;, a pump with a higher flow rate, a table with larger suction openings and a vacuum distributor with larger hose diameters would be appropriate here. However, this is out of question for me.&lt;/p&gt;&#10;&lt;h3 id="adhesion-agent"&gt;Adhesion agent&lt;/h3&gt;&#10;&lt;p&gt;I could try using a coarser-meshed rubber mat. With a &lt;code&gt;20mm&lt;/code&gt; hole pattern, the resistance for the cross air flow is tripled, so that the outer areas are no longer affected by the pressure loss to such an extent. Such a mat also has more rubber surface area, which increases static friction.&lt;/p&gt;&#10;&lt;p&gt;Adhesive tape instead of cling film on the material surface solves the problem of catching in the cutter and closes the pores of the material locally, which can improve the holding force in critical areas.&lt;/p&gt;&#10;&lt;p&gt;Of course, conventional methods such as applying double-sided adhesive tape or screwing down the workpiece can also be used on a vacuum table. But I don&amp;rsquo;t do that - because then I would have to admit to myself that my vacuum table is not suitable for all cases.&lt;/p&gt;&#10;&lt;h3 id="fixture-and-taps"&gt;Fixture and taps&lt;/h3&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-04-02-spirofixtures.jpg" alt="Image: Fixture for holding my gears in place"&gt;&lt;/figure&gt;&#10;This solution aims to prevent the workpiece from twisting and shifting. The vacuum table is only used here to hold down the workpiece, while a suitably manufactured holder absorbs forces in the &amp;lsquo;XY direction&amp;rsquo;. The picture shows holders for the template and the gear wheel, which fulfill this task. They are attached to the machine bed and require a precise zero point in order to be able to break the workpieces edges without misalignment.&lt;/p&gt;&#10;&lt;p&gt;I use a clearance fit with &lt;code&gt;0.1mm&lt;/code&gt; between the components. If the clearance is smaller, I need too much force to insert. If I use larger values, the workpieces can be twisted too much.&lt;/p&gt;&#10;&lt;p&gt;With this variant, I can straighten warped workpieces, continue to produce very fine engravings and still make sure that nothing slips.&lt;/p&gt;&#10;&lt;p&gt;The disadvantages are time and material required for planning and producing individual fixtures or templates.&lt;/p&gt;&#10;&lt;h3 id="modification-of-the-workpiece"&gt;Modification of the workpiece&lt;/h3&gt;&#10;&lt;p&gt;This is obvious: I can change the properties of the workpiece so that it becomes impermeable to air. For example, I can cover the underside with a film to improve the static friction.&lt;/p&gt;&#10;&lt;p&gt;If, like me, you don&amp;rsquo;t like using plastic: I have found that baking paper / cling film made from unbleached cellulose hardly lets any air through. I&amp;rsquo;ll soon be trying out covering materials or covering areas affected by milling with it instead of plastic film.&lt;/p&gt;&#10;&lt;div class="footnotes" role="doc-endnotes"&gt;&#10;&lt;hr&gt;&#10;&lt;ol&gt;&#10;&lt;li id="fn:1"&gt;&#10;&lt;p&gt;If such a problem occurs regularly, grid vacuum tables with a sealing cord are an excellent solution: Here, a linear seal is used to seal the outer edges of the workpiece against the ambient air pressure so that the edges of the workpiece have no chance of curving upwards. With my perforated grid table, however, the entire surface of the rubber mat acts as a seal, so that the curvature is in the form of a contact line on the mat. However, lines do not have a surface area, and my table can only hold down through this. Incidentally, this is also the reason why flexible materials such as films can be pulled off the vacuum table so easily.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;/div&gt;&#10;</description></item><item><title>Maker Faire Ruhr 2024</title><link>https://blog.schallbert.de/en/makerfaire-ruhr/</link><pubDate>Mon, 25 Mar 2024</pubDate><author>Schallbert</author><guid>https://blog.schallbert.de/en/makerfaire-ruhr/</guid><description type="html">&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-02-23-maker-faire-logo-thumb.jpg"&#10; class="post-cover"&#10; alt="Image: Maker Faire Ruhr Logo / Banner"&#10; title="Maker Faire Ruhr 2024" /&gt;&#10;&lt;h2 id="preparation"&gt;Preparation&lt;/h2&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-02-23-maker-faire-logo.jpg" alt="Image: Maker Faire Logo"&gt;&lt;/figure&gt;&#10;Since the beginning of January, two of my friends and I have been preparing for the &lt;a href="https://www.makerfaire-ruhr.com/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;Maker Faire Ruhr&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; at the &lt;a href="https://www.dasa-dortmund.de/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;DASA Dortmund&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;. In the course of this, I veneered fiberboard, cut out blanks for engravings, procured tablecloths, machined PC housings, milled gear wheels, programmed LED strips, designed a stand sign, set up a CNC machine, optimized it for engraving and so on&amp;hellip;&lt;/p&gt;&#10;&lt;p&gt;As the deadline approached, things got tight. A lot of time and coordination goes into preparing for a trade faire like this.&lt;/p&gt;&#10;&lt;h3 id="projects"&gt;Projects&lt;/h3&gt;&#10;&lt;p&gt;At the faire I wanted to present some of my most beautiful projects such as &lt;a href="https://blog.schallbert.de/en/projects/seifenbutler/"&gt;Seifenbutler&lt;/a&gt;, my oversized &lt;a href="https://blog.schallbert.de/en/projects/spirograph/"&gt;spirographs&lt;/a&gt; and allow visitors to have their own signs &lt;a href="https://blog.schallbert.de/en/negative-carving-with-estlcam/"&gt;engraved&lt;/a&gt;, even with &lt;a href="https://blog.schallbert.de/en/projects/qr-codengrave/"&gt;QR code&lt;/a&gt; if required.&lt;/p&gt;&#10;&lt;p&gt;To make the milling work quicker, I made blanks that only had to be engraved later. I also had to make the spirographs in advance because of the double-sided machining required.&lt;/p&gt;&#10;&lt;h3 id="machines"&gt;Machines&lt;/h3&gt;&#10;&lt;p&gt;I was able to convince a few companies to lend me machines and parts for the faire:&lt;/p&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--left"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/1year_cnc/sorotec.jpg" alt="Image: Sorotec logo"&gt;&lt;/figure&gt;&#10;From &lt;a href="https://www.sorotec.de/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;Sorotec&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; I borrowed a &amp;ldquo;Hobbyline4530&amp;rdquo;, their smallest and lightest machine.&lt;/p&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--left"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/1year_cnc/stritzelberger.jpg" alt="Bild: Stritzelberger Logo"&gt;&lt;/figure&gt;&#10;The company &lt;a href="https://vakuumtisch.de/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;Stritzelberger&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; provided me with a vacuum table that matches the machine, including a suitable pump.&lt;/p&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--left"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/1year_cnc/eding.jpg" alt="Image: EdingCNC logo"&gt;&lt;/figure&gt;&#10;&lt;a href="https://edingcnc.com/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;EdingCNC&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; supported me in setting up their software, lent me exhibitors for the latest control hardware and finally even came by my stand live for an exchange.&lt;/p&gt;&#10;&lt;h3 id="the-stand-sign"&gt;The stand sign&lt;/h3&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-02-23-schallbert-standschild.jpg" alt="Image: My plan for a great booth sign"&gt;&lt;/figure&gt;&#10;I came up with something very special for the stand sign: a planetary gear! Three moving gears revolve around a fixed sun wheel. In order to be able to suspend the stand shield and keep the gear without edges, a centered axle for the planetary carriers was out of the question.&lt;/p&gt;&#10;&lt;p&gt;This task is performed by a ring gear concealed by the sun gear and held by three ball bearings (image: arranged at a 120° angle, mounted on the teeth of the sun gear). It is driven by a stepper motor with a reduction ratio of 1:5. The ring gear has mounts for the planet carriers. This frees up the middle section of the sun wheel, where I can fit the drive motor, lighting and shield mounts.&lt;/p&gt;&#10;&lt;p&gt;A video on my PeerTube channel shows how I built the stand sign using my CNC.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center media-frame--video"&gt;&#10; &lt;div class="media-video"&gt;&lt;iframe&#10; src="https://makertube.net/videos/embed/xsLhWWygyJbtJGwUGrKvVE"&#10; title="Making of Standschild (Maker Faire Ruhr)"&#10; loading="lazy"&#10; allow="autoplay; fullscreen; picture-in-picture"&#10; allowfullscreen&#10; style="width: 100%; height: auto; min-height: 315px; aspect-ratio: 16/9;"&#10; &gt;&lt;/iframe&gt;&lt;/div&gt;&#10; &lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;Making of Standschild (Maker Faire Ruhr)&lt;/span&gt;&lt;a href="https://makertube.net/videos/embed/xsLhWWygyJbtJGwUGrKvVE" class="attr-link" target="_blank" rel="noopener noreferrer"&gt;↗&lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;h3 id="delays"&gt;Delays&lt;/h3&gt;&#10;&lt;p&gt;As always with such major undertakings, a few things went wrong during the preparations:&lt;/p&gt;&#10;&lt;h4 id="detachment-of-the-vacuum-during-the-production-of-the-spirographs"&gt;Detachment of the vacuum during the production of the spirographs&lt;/h4&gt;&#10;&lt;p&gt;I wanted to make the spirographs from veneered MDF, as the material is very attractive to look at and at the same time stable enough not to be damaged by rough handling. So I covered &lt;code&gt;10mm&lt;/code&gt; thick medium density fiberboard with olive wood veneer (time consuming!) and then routed it on my portal router.&lt;/p&gt;&#10;&lt;p&gt;As I use a &lt;a href="https://blog.schallbert.de/en/why-vacuum-table/"&gt;vacuum clamping system&lt;/a&gt;, it is key to achieve a certain vacuum level. Otherwise the workpieces won&amp;rsquo;t stay in place. MDF is permeable to air, so the pump has a lot to do even when the panel has not yet been processed. Unfortunately, the geometry of my design for the spirographs is such that the surface remaining for clamping continues to decrease considerably during machining.&lt;/p&gt;&#10;&lt;p&gt;In the end, I had the problem that the gears wanted to turn at the latest when machining the edges of the back. Even my desperate attempts to maintain sufficient negative pressure by applying large amounts of cling film to the workpiece failed.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-03-25-spirograph.jpg" alt="Image: Spirograph under test"&gt;&lt;/figure&gt;&#10;&lt;p&gt;So instead of the planned ten spirographs, I only received four - the rest were rejects. &lt;em&gt;Note&lt;/em&gt;: MDF can only be used on my vacuum clamping system for large workpieces.&lt;/p&gt;&#10;&lt;h4 id="problematic-gear-pairing-on-the-spirograph"&gt;Problematic gear pairing on the spirograph&lt;/h4&gt;&#10;&lt;p&gt;Unfortunately, the first spirograph made of MDF was not really usable: one tooth was constantly jammed on the flank of the ring gear and refused to mesh. The reason for this was that I had not provided any backlash and had manufactured the tooth heads without a radius.&lt;/p&gt;&#10;&lt;p&gt;As a result, the gear wheel must always be pressed firmly against the ring gear to enable the next tooth engagement. If the gear wheel slips out just a few tenths of a millimeter, it locks. &lt;em&gt;Remedy&lt;/em&gt;: Provide both gear and ring gear tooth heads with &lt;code&gt;r=3.0mm&lt;/code&gt; and design the gear pairing with backlash of &lt;code&gt;a=0.25mm&lt;/code&gt;.&lt;/p&gt;&#10;&lt;h4 id="incorrectly-engraved-lettering-on-the-large-stand-plate"&gt;Incorrectly engraved lettering on the large stand plate&lt;/h4&gt;&#10;&lt;p&gt;I made two mistakes here and unfortunately produced a lot of rejects. On the first attempt, I had overlooked to mirror the gear wheel for the rear machining. I thought this wasn&amp;rsquo;t necessary because the gear itself is mirror-symmetrical. Unfortunately, however, the retaining pins were not embedded with mirror symmetry, so that the back was not aligned with the front.&lt;/p&gt;&#10;&lt;p&gt;On the second attempt - see video above - I had fixed this, but forgot to adjust the zero point according to the new centering pin position on the back. Fortunately, I noticed this during processing and was able to correct it.&lt;/p&gt;&#10;&lt;h4 id="retro-pc-window-production"&gt;Retro-PC window production&lt;/h4&gt;&#10;&lt;p&gt;On one of the three retro PCs, I placed the back of the housing on the machine bed rotated by 180°. The window was therefore milled &amp;ldquo;upside down&amp;rdquo;, which I only noticed after finishing the milling job. Fortunately, my friend was able to file and bend the latches so that the back of the housing could also be attached to the PC &amp;ldquo;upside down&amp;rdquo;.&lt;/p&gt;&#10;&lt;p&gt;During the production of the last window, the chip guard got caught in the workpiece&amp;rsquo;s splay and broke because I couldn&amp;rsquo;t get the machine to stop in time. This could only happen because the chip guard became loose due to the vibrations during machining. &lt;em&gt;Note&lt;/em&gt;: The milling machine is not a toy. So don&amp;rsquo;t make any compromises or use half-baked makeshift solutions!&lt;/p&gt;&#10;&lt;h2 id="the-maker-faire-ruhr-2024"&gt;The Maker Faire Ruhr 2024&lt;/h2&gt;&#10;&lt;p&gt;The fair itself was great. I received a very friendly welcome and DASA gave me excellent support with unloading and all other logistics. The stand assigned to me was also great: very large, well located, with plenty of power sockets - what more could you want?&lt;/p&gt;&#10;&lt;p&gt;I had a company visit my stand, family and friends came and even some people from the CNC forums and a few colleagues from work came to see me. I couldn&amp;rsquo;t have wished for more.&lt;/p&gt;&#10;&lt;h3 id="set-up"&gt;Set-up&lt;/h3&gt;&#10;&lt;p&gt;Fortunately, we had a forklift to help us unload.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center media-frame--video"&gt;&#10; &lt;div class="media-video"&gt;&lt;video controls&gt;&#10; &lt;source src="https://blog.schallbert.de/assets/video/posts/2024-03-25-unloading.mp4" type="video/mp4"&gt;&#10; Your browser does not support the video tag.&#10; &lt;/video&gt;&lt;/div&gt;&#10; &lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;Unloading the CNC&lt;/span&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;Everything else was manual work and not much different from setting up for a music concert: Moving tables, laying power cables, installing the lighting system, setting up exhibits.&lt;/p&gt;&#10;&lt;section class="hugo-gallery"&gt;&#10; &lt;div class="hugo-gallery__frame"&gt;&#10; &lt;div class="hugo-gallery__grid" role="list"&gt;&lt;a&#10; class="hugo-gallery__thumb"&#10; href="#gallery-full-0"&#10; aria-label="Image: Vacuumpump and -table"&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2024-02-23-vacuumpump.jpg"&#10; alt="Image: Vacuumpump and -table"&#10; class="hugo-gallery__thumb-img"&#10; loading="lazy"&gt;&#10; &lt;/a&gt;&lt;a&#10; class="hugo-gallery__thumb"&#10; href="#gallery-full-1"&#10; aria-label="Image: CNC machine, ready to run."&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2024-02-23-hobbyline_readytorun.jpg"&#10; alt="Image: CNC machine, ready to run."&#10; class="hugo-gallery__thumb-img"&#10; loading="lazy"&gt;&#10; &lt;/a&gt;&lt;a&#10; class="hugo-gallery__thumb"&#10; href="#gallery-full-2"&#10; aria-label="Image: Signs for my projects that I&amp;#39;ll showcase."&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2024-02-23-standschilder.jpg"&#10; alt="Image: Signs for my projects that I&amp;#39;ll showcase."&#10; class="hugo-gallery__thumb-img"&#10; loading="lazy"&gt;&#10; &lt;/a&gt;&lt;a&#10; class="hugo-gallery__thumb"&#10; href="#gallery-full-3"&#10; aria-label="Image: Retrogaming sign for another booth"&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2024-02-23-retrogaming_sign.jpg"&#10; alt="Image: Retrogaming sign for another booth"&#10; class="hugo-gallery__thumb-img"&#10; loading="lazy"&gt;&#10; &lt;/a&gt;&lt;a&#10; class="hugo-gallery__thumb"&#10; href="#gallery-full-4"&#10; aria-label="Image: Beautiful scrap - residue piece of PMMA in form of a wave"&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2024-02-23-pmma_wave.jpg"&#10; alt="Image: Beautiful scrap - residue piece of PMMA in form of a wave"&#10; class="hugo-gallery__thumb-img"&#10; loading="lazy"&gt;&#10; &lt;/a&gt;&lt;a&#10; class="hugo-gallery__thumb"&#10; href="#gallery-full-5"&#10; aria-label="Image: The side panel of a midi-tower PC: now with a window"&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2024-02-23-pcwindow_sea.jpg"&#10; alt="Image: The side panel of a midi-tower PC: now with a window"&#10; class="hugo-gallery__thumb-img"&#10; loading="lazy"&gt;&#10; &lt;/a&gt;&lt;a&#10; class="hugo-gallery__thumb"&#10; href="#gallery-full-6"&#10; aria-label="Image: Schallbert&amp;#39;s booth on Maker Faire Ruhr 2024"&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2024-03-25-DerStand.jpg"&#10; alt="Image: Schallbert&amp;#39;s booth on Maker Faire Ruhr 2024"&#10; class="hugo-gallery__thumb-img"&#10; loading="lazy"&gt;&#10; &lt;/a&gt;&lt;a&#10; class="hugo-gallery__thumb"&#10; href="#gallery-full-7"&#10; aria-label="Image: 2000s-retro-PCs set up and ready to play."&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2024-03-25-Gaming.jpg"&#10; alt="Image: 2000s-retro-PCs set up and ready to play."&#10; class="hugo-gallery__thumb-img"&#10; loading="lazy"&gt;&#10; &lt;/a&gt;&lt;a&#10; class="hugo-gallery__thumb"&#10; href="#gallery-full-8"&#10; aria-label="Image: CNC machine detail view"&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2024-03-25-StandDetail.jpg"&#10; alt="Image: CNC machine detail view"&#10; class="hugo-gallery__thumb-img"&#10; loading="lazy"&gt;&#10; &lt;/a&gt;&lt;a&#10; class="hugo-gallery__thumb"&#10; href="#gallery-full-9"&#10; aria-label="Image: Visitors on Saturday"&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2024-03-25-Besucher.jpg"&#10; alt="Image: Visitors on Saturday"&#10; class="hugo-gallery__thumb-img"&#10; loading="lazy"&gt;&#10; &lt;/a&gt;&lt;a&#10; class="hugo-gallery__thumb"&#10; href="#gallery-full-10"&#10; aria-label="Image: Schallbert&amp;#39;s booth, rear view"&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2024-03-25-Backstage.jpg"&#10; alt="Image: Schallbert&amp;#39;s booth, rear view"&#10; class="hugo-gallery__thumb-img"&#10; loading="lazy"&gt;&#10; &lt;/a&gt;&lt;a&#10; class="hugo-gallery__thumb"&#10; href="#gallery-full-11"&#10; aria-label="Image: Many more visitors on Sunday."&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2024-03-25-Menschenmenge.jpg"&#10; alt="Image: Many more visitors on Sunday."&#10; class="hugo-gallery__thumb-img"&#10; loading="lazy"&gt;&#10; &lt;/a&gt;&lt;/div&gt;&lt;div class="hugo-gallery__caption"&gt;&#10; Impressionen von der Maker Faire Ruhr 2024.&#10; &lt;/div&gt;&lt;/div&gt;&#10;&#10; &lt;div class="hugo-gallery__full" aria-live="polite"&gt;&lt;figure&#10; id="gallery-full-0"&#10; class="hugo-gallery__figure media-frame media-frame--center"&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2024-02-23-vacuumpump.jpg"&#10; alt="Image: Vacuumpump and -table"&gt;&lt;figcaption&gt;Hier wird der Vakuumtisch in Betrieb genommen und getestet.&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure&#10; id="gallery-full-1"&#10; class="hugo-gallery__figure media-frame media-frame--center"&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2024-02-23-hobbyline_readytorun.jpg"&#10; alt="Image: CNC machine, ready to run."&gt;&lt;figcaption&gt;Die CNC-Maschine für die Messe. Fertig eingerichtet und betriebsbereit.&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure&#10; id="gallery-full-2"&#10; class="hugo-gallery__figure media-frame media-frame--center"&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2024-02-23-standschilder.jpg"&#10; alt="Image: Signs for my projects that I&amp;#39;ll showcase."&gt;&lt;figcaption&gt;Selbstgefräster Schilder für die dargestellten Projekte.&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure&#10; id="gallery-full-3"&#10; class="hugo-gallery__figure media-frame media-frame--center"&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2024-02-23-retrogaming_sign.jpg"&#10; alt="Image: Retrogaming sign for another booth"&gt;&lt;figcaption&gt;Das Standschild für einen guten Freund, der Retro-PCs und -Spiele ausstellt.&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure&#10; id="gallery-full-4"&#10; class="hugo-gallery__figure media-frame media-frame--center"&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2024-02-23-pmma_wave.jpg"&#10; alt="Image: Beautiful scrap - residue piece of PMMA in form of a wave"&gt;&lt;figcaption&gt;Schöner Abfall - ein Reststück Acrylglas in Form einer Welle&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure&#10; id="gallery-full-5"&#10; class="hugo-gallery__figure media-frame media-frame--center"&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2024-02-23-pcwindow_sea.jpg"&#10; alt="Image: The side panel of a midi-tower PC: now with a window"&gt;&lt;figcaption&gt;Das Gegenstück zur Welle: Ein PC mit einzigartigem Fenster, selbstgefräst.&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure&#10; id="gallery-full-6"&#10; class="hugo-gallery__figure media-frame media-frame--center"&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2024-03-25-DerStand.jpg"&#10; alt="Image: Schallbert&amp;#39;s booth on Maker Faire Ruhr 2024"&gt;&lt;figcaption&gt;Die LED-Streifen sind fertig programmiert und alles steht an seinem Platz.&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure&#10; id="gallery-full-7"&#10; class="hugo-gallery__figure media-frame media-frame--center"&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2024-03-25-Gaming.jpg"&#10; alt="Image: 2000s-retro-PCs set up and ready to play."&gt;&lt;figcaption&gt;Retro-2000er-PCs sind aufgebaut und vernetzt. Bereit zum Spielen.&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure&#10; id="gallery-full-8"&#10; class="hugo-gallery__figure media-frame media-frame--center"&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2024-03-25-StandDetail.jpg"&#10; alt="Image: CNC machine detail view"&gt;&lt;figcaption&gt;Die betriebsbereite CNC-Maschine auf der Messe.&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure&#10; id="gallery-full-9"&#10; class="hugo-gallery__figure media-frame media-frame--center"&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2024-03-25-Besucher.jpg"&#10; alt="Image: Visitors on Saturday"&gt;&lt;figcaption&gt;Bereits einige Besucher, Maker und Interessierte am Samstag.&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure&#10; id="gallery-full-10"&#10; class="hugo-gallery__figure media-frame media-frame--center"&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2024-03-25-Backstage.jpg"&#10; alt="Image: Schallbert&amp;#39;s booth, rear view"&gt;&lt;figcaption&gt;Backstage des betriebsbereiten Standes.&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure&#10; id="gallery-full-11"&#10; class="hugo-gallery__figure media-frame media-frame--center"&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2024-03-25-Menschenmenge.jpg"&#10; alt="Image: Many more visitors on Sunday."&gt;&lt;figcaption&gt;Doch am Sonntag war noch viel mehr los.&lt;/figcaption&gt;&lt;/figure&gt;&lt;/div&gt;&#10;&lt;/section&gt;&#10;&#10;&lt;h3 id="visitors"&gt;Visitors&lt;/h3&gt;&#10;&lt;p&gt;I can draw a positive balance for my first Maker Faire: There were really a lot of people at our stand and I hardly had a few minutes to rest - there was always something to talk about, to present my projects or to talk about the machine on display. But that was exactly what attracted us to this format. What&amp;rsquo;s more, the technology worked, the machine ran smoothly and all the things I had prepared so long in advance (such as the stand sign) could be exhibited or shown in operation.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center media-frame--video"&gt;&#10; &lt;div class="media-video"&gt;&lt;video controls&gt;&#10; &lt;source src="https://blog.schallbert.de/assets/video/posts/2024-03-25-short_engrave.mp4" type="video/mp4"&gt;&#10; Your browser does not support the video tag.&#10; &lt;/video&gt;&lt;/div&gt;&#10; &lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;QR-Codengrave Demonstration&lt;/span&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;h3 id="what-i-would-still-do-differently-next-time"&gt;What I would still do differently next time&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;The Maker Faire is not a sales fair in terms of setup, but a huge show &amp;amp; tell. That&amp;rsquo;s why I wouldn&amp;rsquo;t book a paid sales stand again, because in my case it wasn&amp;rsquo;t worth it.&lt;/li&gt;&#10;&lt;li&gt;One or two more people to look after the stand would be great. Then we could take turns.&lt;/li&gt;&#10;&lt;li&gt;More material for the spirographs! All of the pens we brought were broken by the end of the event and had run out of paper by the middle of the second day.&lt;/li&gt;&#10;&lt;li&gt;More presentations / demos. The milling machine was often running, but there was a lack of templates and requests from the visitors. Next time I will take more of my own designs with me and produce them for demo purposes even without a request.&lt;/li&gt;&#10;&lt;li&gt;Prepare better links to the website, because a QR code alone doesn&amp;rsquo;t help everyone.&lt;/li&gt;&#10;&lt;li&gt;More coffee: The supply of hot drinks (and now that I write it, food too) was undersized and unfortunately not as tasty as I would have liked. So it&amp;rsquo;s better to make own sandwiches and bring own thermos flasks.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;</description></item><item><title>Multi-language site - l10n</title><link>https://blog.schallbert.de/en/jekyll-polyglot-language-support/</link><pubDate>Tue, 14 Nov 2023</pubDate><author>Schallbert</author><guid>https://blog.schallbert.de/en/jekyll-polyglot-language-support/</guid><description type="html">&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2023-11-14_translations_polyglot_flags-thumb.jpg"&#10; class="post-cover"&#10; alt="Image: Flags that can be clicked on to change display language"&#10; title="Multi-language site - l10n" /&gt;&#10;&lt;p&gt;Providing a website in different languages is called &amp;ldquo;internationalization&amp;rdquo; - in short &lt;a href="https://en.wikipedia.org/wiki/Internationalization_and_localization" target="_blank" rel="noopener noreferrer" class="external-link"&gt;i16n&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; or &amp;ldquo;localization&amp;rdquo; - &lt;code&gt;l10n&lt;/code&gt;. If you search these abbreviations in the web, you&amp;rsquo;ll find a lot of useful material. By the way, the numbers in the brief version stand for the letter count in the word&amp;rsquo;s center.&lt;/p&gt;&#10;&lt;h2 id="motivation"&gt;Motivation&lt;/h2&gt;&#10;&lt;p&gt;Right from the start, I was asked to &lt;a href="https://hobbyline.info/forum/index.php?thread/603-blog-artikel-zur-portalfr%C3%A4se/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;prepare a German version&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; of this website. To date I considered this &lt;a href="https://hobbyline.info/forum/index.php?thread/603-blog-artikel-zur-portalfr%C3%A4se/&amp;amp;postID=7619#post7619" target="_blank" rel="noopener noreferrer" class="external-link"&gt;too much effort&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; and this only changed half a year ago when I was verbally asked by multiple people independently from each other.&lt;/p&gt;&#10;&lt;p&gt;So I invested half a year of evenings to get the heavy lifting done, transcribing roughly 80 articles. But I still wasn&amp;rsquo;t quite done.&lt;/p&gt;&#10;&lt;h2 id="jekyll-extension"&gt;Jekyll extension&lt;/h2&gt;&#10;&lt;p&gt;I looked at a couple of extensions for Jekyll dedicated to multilingual support like &lt;a href="https://demondehellis.github.io/en/posts/how-to-make-jekyll-blog-multilingual/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;demondehellis&amp;rsquo;s plugin-free solution&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;, &lt;a href="https://github.com/untra/polyglot" target="_blank" rel="noopener noreferrer" class="external-link"&gt;untra&amp;rsquo;s polyglot plugin&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;, &lt;a href="https://github.com/kurtsson/jekyll-multiple-languages-plugin" target="_blank" rel="noopener noreferrer" class="external-link"&gt;kurtsson&amp;rsquo;s jekyll-multiple-languages-plugin&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; and some other solutions to publish a website in multiple languages.&lt;/p&gt;&#10;&lt;p&gt;So I had to decide for one. The plugin-less solution was out quickly because I wanted a concise naming convention where identical posts in different languages have identical names. Plus, I wanted interlinks to be persistent for the selected language. Something would have to keep language pots separated.&lt;/p&gt;&#10;&lt;p&gt;After some research, I found &lt;a href="https://leo3418.github.io/collections/multilingual-jekyll-site/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;leo3418&amp;rsquo;s&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; wonderful series of blog posts for implementing Polyglot - and so I decided to go with that one.&lt;/p&gt;&#10;&lt;h3 id="polyglot-installation"&gt;Polyglot: Installation&lt;/h3&gt;&#10;&lt;p&gt;Installation of PolyGlot is simple because both the documentation in the &lt;a href="https://github.com/untra/polyglot" target="_blank" rel="noopener noreferrer" class="external-link"&gt;repository&amp;rsquo;s&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;&lt;code&gt;readme.md&lt;/code&gt; and leo3418&amp;rsquo;s related &lt;a href="https://leo3418.github.io/collections/multilingual-jekyll-site/set-up-polyglot.html" target="_blank" rel="noopener noreferrer" class="external-link"&gt;post&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; do instruct these first steps in detail. They do this so well so I won&amp;rsquo;t lose another word about it here.&lt;/p&gt;&#10;&lt;h3 id="restructuring-the-website"&gt;Restructuring the website&lt;/h3&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2023-11-14_folderstructure.jpg" alt="image: updated folder structure for this site"&gt;&lt;/figure&gt;&#10;Polyglot offers two possibilities to adapt the site&amp;rsquo;s structure for multilanguage support:&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Use the language abbreviation in the post&amp;rsquo;s filename like this: &lt;code&gt;2023-11-14-jekyll-polyglot-language-support-en.md&lt;/code&gt;, repeat for each article in a different language with the appropriate abbreviation&lt;/li&gt;&#10;&lt;li&gt;Create folders named like the language code, e.g. &lt;code&gt;/en&lt;/code&gt; and put all english content in there, but keep file names the same between languages.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;I decided for the latter option out of laziness - I didn&amp;rsquo;t want to rename existing articles. Polyglot manages to stick to the same language when navigating a site. If you, for instance, click &lt;a href="https://blog.schallbert.de/en/milling-small-parts/"&gt;https://schallbert.de/milling-small-parts/&lt;/a&gt;, Polyglot will assume you want the English version to be presented and thus provide it. Where this doesn&amp;rsquo;t work anymore is section titles as they are translated themselves, invalidating attached links, so the section link &lt;a href="https://blog.schallbert.de/en/jekyll-polyglot-language-support/#restructuring-the-website"&gt;#restructuring-the-website&lt;/a&gt; will lead to a 404 fault when called in the German version.&lt;/p&gt;&#10;&lt;p&gt;Thus, when using section titles, the full post&amp;rsquo;s path has to be noted.&lt;/p&gt;&#10;&lt;aside class="update-box update-box--note" role="note"&gt;&#10; &lt;span class="update-box__icon" aria-hidden="true"&gt;&#10; ℹ️&#10; &lt;/span&gt;&#10;&#10; &lt;div class="update-box__body"&gt;&#10; &lt;div class="update-box__heading"&gt;&#10; &lt;strong class="update-box__title"&gt;&#10; &#10; Permalink-IDs&#10; &#10; &lt;/strong&gt;&#10;&#10; &lt;time datetime="2026-05-11T00:00:00Z"&gt;&#10; 2026-05-11&#10; &lt;/time&gt;&#10; &#10; &lt;/div&gt;&#10;&#10; &#10; &lt;div class="update-box__content"&gt;&#10; Alternatively, you can assign a language-independent ID to the heading so that the anchor links pointing to the headings remain identical. Example: &lt;code&gt;## Restructuring the website {#website-restructuring}&lt;/code&gt;, accessed via the link &lt;code&gt;#website-restructuring&lt;/code&gt;.&#10; &lt;/div&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/aside&gt;&#10;&lt;h3 id="translating-page-title-navigation-header-footer"&gt;Translating page title, navigation, header, footer&lt;/h3&gt;&#10;&lt;p&gt;This is getting a little more complicated. Jekyll&amp;rsquo;s &lt;code&gt;_config.yml&lt;/code&gt; is intended for one version of the website only, so we cannot just create two variants of this file and expect it to work. To still enable full translation, we&amp;rsquo;ll have to overwrite language sensitive parameters like &lt;code&gt;site.title&lt;/code&gt; or &lt;code&gt;site.description&lt;/code&gt; externally depending on selected locale.&lt;/p&gt;&#10;&lt;p&gt;I have solved this adding &lt;code&gt;l10n.yml&lt;/code&gt; files in the &lt;code&gt;_data&lt;/code&gt; folder that covers these parameters for each language, and then packing them into a language-code folder like we&amp;rsquo;re used to do with our posts. To show their content, the relevant liquid parameters in &lt;code&gt;html&lt;/code&gt; files (&lt;code&gt;_includes&lt;/code&gt; folder) have to be modified to now search there instead of taking the standard config. Example: &lt;code&gt;{{ site.data.ui-text[site.data.l10n.locale].follow_label | remove: &amp;quot;:&amp;quot; | default: &amp;quot;Follow&amp;quot; }}&lt;/code&gt;. German version of this site will show &lt;strong&gt;FOLGEN:&lt;/strong&gt; while the English one says &lt;strong&gt;FOLLOW:&lt;/strong&gt;.&lt;/p&gt;&#10;&lt;h3 id="language-selector"&gt;Language selector&lt;/h3&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2023-11-14_translations_polyglot_flags.jpg" alt="image: footer section of this website"&gt;&lt;/figure&gt;&#10;Of course I want to offer the option to select a locale on every page. To do this, I added the language code and its flag to the footer. On click, it will reload the page in the requested locale. The following code I wrote in Liquid enables this behavior:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{&lt;span style="color:#f92672"&gt;%&lt;/span&gt; raw &lt;span style="color:#f92672"&gt;%&lt;/span&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{&lt;span style="color:#f92672"&gt;%&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; lang in site.languages &lt;span style="color:#f92672"&gt;%&lt;/span&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {&lt;span style="color:#f92672"&gt;%&lt;/span&gt; assign url_parts &lt;span style="color:#f92672"&gt;=&lt;/span&gt; page.url &lt;span style="color:#f92672"&gt;|&lt;/span&gt; split: &lt;span style="color:#e6db74"&gt;&amp;#34;/&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;%&lt;/span&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {&lt;span style="color:#f92672"&gt;%&lt;/span&gt; assign lang_code &lt;span style="color:#f92672"&gt;=&lt;/span&gt; lang &lt;span style="color:#f92672"&gt;%&lt;/span&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {&lt;span style="color:#f92672"&gt;%&lt;/span&gt; assign collection_name &lt;span style="color:#f92672"&gt;=&lt;/span&gt; url_parts[&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;] &lt;span style="color:#f92672"&gt;%&lt;/span&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {&lt;span style="color:#f92672"&gt;%&lt;/span&gt; assign post_url &lt;span style="color:#f92672"&gt;=&lt;/span&gt; url_parts &lt;span style="color:#f92672"&gt;|&lt;/span&gt; last &lt;span style="color:#f92672"&gt;%&lt;/span&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {&lt;span style="color:#f92672"&gt;%&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; lang &lt;span style="color:#f92672"&gt;==&lt;/span&gt; site.default_lang &lt;span style="color:#f92672"&gt;%&lt;/span&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {&lt;span style="color:#f92672"&gt;%&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; collection_name &lt;span style="color:#f92672"&gt;==&lt;/span&gt; post_url &lt;span style="color:#f92672"&gt;%&lt;/span&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {&lt;span style="color:#f92672"&gt;%&lt;/span&gt; assign lang_url &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;/&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; append: post_url &lt;span style="color:#f92672"&gt;%&lt;/span&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {&lt;span style="color:#f92672"&gt;%&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;else&lt;/span&gt; &lt;span style="color:#f92672"&gt;%&lt;/span&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {&lt;span style="color:#f92672"&gt;%&lt;/span&gt; assign lang_url &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;/&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; append: collection_name &lt;span style="color:#f92672"&gt;|&lt;/span&gt; append: &lt;span style="color:#e6db74"&gt;&amp;#34;/&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; append: post_url &lt;span style="color:#f92672"&gt;%&lt;/span&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {&lt;span style="color:#f92672"&gt;%&lt;/span&gt; endif &lt;span style="color:#f92672"&gt;%&lt;/span&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {&lt;span style="color:#f92672"&gt;%&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;else&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; url_parts.size &lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt; &lt;span style="color:#f92672"&gt;%&lt;/span&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {&lt;span style="color:#f92672"&gt;%&lt;/span&gt; assign lang_url &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;/&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; append: lang_code &lt;span style="color:#f92672"&gt;|&lt;/span&gt; append: &lt;span style="color:#e6db74"&gt;&amp;#34;/&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;%&lt;/span&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {&lt;span style="color:#f92672"&gt;%&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; collection_name &lt;span style="color:#f92672"&gt;==&lt;/span&gt; post_url &lt;span style="color:#f92672"&gt;%&lt;/span&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {&lt;span style="color:#f92672"&gt;%&lt;/span&gt; assign lang_url &lt;span style="color:#f92672"&gt;=&lt;/span&gt; lang_url &lt;span style="color:#f92672"&gt;|&lt;/span&gt; append: post_url &lt;span style="color:#f92672"&gt;%&lt;/span&gt;} &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {&lt;span style="color:#f92672"&gt;%&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;else&lt;/span&gt; &lt;span style="color:#f92672"&gt;%&lt;/span&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {&lt;span style="color:#f92672"&gt;%&lt;/span&gt; assign lang_url &lt;span style="color:#f92672"&gt;=&lt;/span&gt; lang_url &lt;span style="color:#f92672"&gt;|&lt;/span&gt; append: collection_name &lt;span style="color:#f92672"&gt;|&lt;/span&gt; append: lang_url &lt;span style="color:#f92672"&gt;|&lt;/span&gt; append: post_url &lt;span style="color:#f92672"&gt;%&lt;/span&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {&lt;span style="color:#f92672"&gt;%&lt;/span&gt; endif &lt;span style="color:#f92672"&gt;%&lt;/span&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {&lt;span style="color:#f92672"&gt;%&lt;/span&gt; endif &lt;span style="color:#f92672"&gt;%&lt;/span&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;a href&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34; {{ lang_url }}&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;{{ site.data[lang].l10n.lang_name }}&lt;span style="color:#f92672"&gt;&amp;lt;/&lt;/span&gt;a&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{&lt;span style="color:#f92672"&gt;%&lt;/span&gt; endfor &lt;span style="color:#f92672"&gt;%&lt;/span&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{&lt;span style="color:#f92672"&gt;%&lt;/span&gt; endraw &lt;span style="color:#f92672"&gt;%&lt;/span&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Here I&amp;rsquo;m splitting the current page &lt;code&gt;url&lt;/code&gt;. The last section will be the &lt;code&gt;post_url&lt;/code&gt;. The algo assumes that the first part is the post&amp;rsquo;s collection name, e.g. &lt;code&gt;posts-hardware&lt;/code&gt;. The following logic inserts the language code into the url if and where needed so that the correct full url is built depending on the used collection and page navigation depth.&lt;/p&gt;&#10;&lt;h2 id="publishing"&gt;Publishing&lt;/h2&gt;&#10;&lt;p&gt;I was pretty proud of this elegant way of selecting languages. I thing it all fits in nicely and the multi-language support potentially adds a good number of readers. The big downer is the duplicated work for creating each post in two languages.&lt;/p&gt;&#10;&lt;p&gt;Unfortunately, the site now wasn&amp;rsquo;t compatible anymore with Github Pages - the auto release would show each page twice instead of keeping them separated by language. Two options remained: &lt;a href="https://blog.schallbert.de/en/struggling-github-actions/"&gt;creating custom Github Actions&lt;/a&gt; to publish on Github Pages, or to &lt;a href="https://blog.schallbert.de/en/projects/move-blog-to-own-server/"&gt;move the whole site to an own server&lt;/a&gt;. I&amp;rsquo;ll decide for the latter to be on the safe side regarding data protection regulations because in that case I can make sure the hoster is situated in Germany.&lt;/p&gt;&#10;&lt;p&gt;Well, this upcoming project is too big to take on in this post.&lt;/p&gt;&#10;</description></item><item><title>Milling small parts</title><link>https://blog.schallbert.de/en/milling-small-parts/</link><pubDate>Wed, 01 Nov 2023</pubDate><author>Schallbert</author><guid>https://blog.schallbert.de/en/milling-small-parts/</guid><description type="html">&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2023-11-01_smallparts-thumb.jpg"&#10; class="post-cover"&#10; alt="Image: Milled small part, size comparison to a coin"&#10; title="Milling small parts" /&gt;&#10;&lt;h2 id="why-milling"&gt;Why milling?&lt;/h2&gt;&#10;&lt;p&gt;It is sometimes hard to manufacture small parts in low quantities, especially when their dimensional tolerances have to be low. In this case, die casting wouldn&amp;rsquo;t be economical. Hobbyist 3D-printing machines wouldn&amp;rsquo;t deliver the low tolerances I need and affordable lasers wouldn&amp;rsquo;t be able to cut parts that are 2.5D (i.e. that don&amp;rsquo;t have an even surface). Plus, I&amp;rsquo;m not a fan of ordering parts from sweat shops half a globe away.&lt;/p&gt;&#10;&lt;p&gt;But still, milling these parts is perfectly possible. This video shows how:&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center media-frame--video"&gt;&#10; &lt;div class="media-video"&gt;&lt;iframe&#10; src="https://makertube.net/videos/embed/64TS5d5cp2eNqf8SSPvY77"&#10; title="Milling Small Parts"&#10; loading="lazy"&#10; allow="autoplay; fullscreen; picture-in-picture"&#10; allowfullscreen&#10; style="width: 100%; height: auto; min-height: 315px; aspect-ratio: 16/9;"&#10; &gt;&lt;/iframe&gt;&lt;/div&gt;&#10; &lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;Milling Small Parts&lt;/span&gt;&lt;a href="https://makertube.net/videos/embed/64TS5d5cp2eNqf8SSPvY77" class="attr-link" target="_blank" rel="noopener noreferrer"&gt;↗&lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;h3 id="what-accessories-are-required"&gt;What accessories are required?&lt;/h3&gt;&#10;&lt;p&gt;All you need is:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;A vacuum table&lt;/li&gt;&#10;&lt;li&gt;Vacuum pump, preferably supporting deep vacuum levels&lt;/li&gt;&#10;&lt;li&gt;Some plastic wrap&lt;/li&gt;&#10;&lt;li&gt;A Vacuum fleece&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="what-is-that-part-for"&gt;What is that part for?&lt;/h2&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2023-11-01_smallparts_soapbutler.jpg" alt="Image: Video splash preview with soapbutler"&gt;&lt;/figure&gt;&#10;&lt;p&gt;The part I&amp;rsquo;m fabricating in the video belongs to one of my &lt;a href="https://blog.schallbert.de/en/projects/seifenbutler/"&gt;soap butlers&lt;/a&gt;. The current version can be mounted to any shower rail with diameter &lt;code&gt;18-25mm&lt;/code&gt;, and needs this small part for clamping securely to the rail. It is in contact with the rail from the rear and both locks the soap butler in place, limiting its possible &amp;ldquo;wobble&amp;rdquo; movement in Z-direction.&lt;/p&gt;&#10;&lt;p&gt;This way, not only soap bar shampoos can be placed here, but also much heavier shampoo bottles.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2023-11-01_soapbutler_shampoobottle.jpg" alt="Image: black soapbutler holding a shampoo bottle"&gt;&lt;/figure&gt;&#10;&lt;p&gt;The part has to fit in snugly as it shall be able to slide without noticeable play, but still has to move effortlessly to adjust to different shower rail diameters.&lt;/p&gt;&#10;&lt;h2 id="what-else-do-i-need-to-consider"&gt;What else do I need to consider?&lt;/h2&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;plastic wrap: make sure the cutouts you do are not too big. Else, the plastic wrap will be pulled in by the endmill, wrap it, and leave marks on the workpiece. It imbalances the cutter and may cause additional damage this way. To avoid this, use double-sided tape to secure the wrap where you do the cutouts.&lt;/li&gt;&#10;&lt;li&gt;vacuum fleece: Note that the fleece will be compressed when you apply vacuum. Z-zero height of workpiece surface has to be taken with vacuum applied to get accurate results.&lt;/li&gt;&#10;&lt;li&gt;Don&amp;rsquo;t cut all the way through. Leave an onion skin. Its strength depends on the material you work with. For PMMA I use &lt;code&gt;0.3mm&lt;/code&gt;, for wood &lt;code&gt;0.7mm&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;I don&amp;rsquo;t account for wrap strength. I know that thicker protective wraps e.g. for PMMA and Dibond have a strength of &lt;code&gt;20-30µm&lt;/code&gt; (where I calculate with it), so I&amp;rsquo;d assume the plastic wrap I use is less than &lt;code&gt;10µm&lt;/code&gt; which is in the magnitude of machine accuracy.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;</description></item><item><title>DIY edge finder</title><link>https://blog.schallbert.de/en/touching-off/</link><pubDate>Sun, 21 May 2023</pubDate><author>Schallbert</author><guid>https://blog.schallbert.de/en/touching-off/</guid><description type="html">&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2023-05-21_edgefinder-thumb.jpg"&#10; class="post-cover"&#10; alt="Image: DIY low-cost edge finder"&#10; title="DIY edge finder" /&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2023-05-21_edge_taperedtool.jpg" alt="Image: getting XY0 of a workpiece visually"&gt;&lt;/figure&gt;&#10;As a CNC operator, I sometimes do have to know where my workpiece ends. Therefore I need its edges&amp;rsquo; &lt;code&gt;X/Y&lt;/code&gt; coordinates. I was kind of solving this problem to date by using a tapered tool which I would manually position above the workpiece corner the best I could, visually controlling its position with help of my phone&amp;rsquo;s camera zoom.&lt;/p&gt;&#10;&lt;h2 id="the-problem"&gt;The problem&lt;/h2&gt;&#10;&lt;p&gt;This is relatively quick to setup and accuracy is high enough for most jobs. But it depends on the line of sight where even slight deviations create large errors so you have to be pretty thorough. When I started doing &lt;a href="https://blog.schallbert.de/en/cut-dibond/"&gt;double-sided workpieces like this&lt;/a&gt;, I felt the accuracy just is not high enough anymore.&lt;/p&gt;&#10;&lt;h2 id="solution"&gt;Solution&lt;/h2&gt;&#10;&lt;p&gt;I was discussing my problem with the machine manufacturer, thinking they might hint me towards buying an edge detector &amp;ldquo;3D finder&amp;rdquo; or similar product. But wrong I was!&#10;Instead, I was able to build an edge finder that did not cost me anything at all and in no time.&lt;/p&gt;&#10;&lt;h3 id="method"&gt;Method&lt;/h3&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2023-05-21_build.jpg" alt="Image: Things needed to construct the edge finder"&gt;&lt;/figure&gt;&#10;Roy was like &amp;ldquo;Well, really the only thing you need is a ball bearing. Put it onto a pole and mount it like any other tool. Have the spindle turn at low RPM. Then slowly have the machine move towards the workpiece edge. Once the outer ring of the bearing stops, you&amp;rsquo;ll hear and see it, and stop the machine movement. That&amp;rsquo;s the position you are searching for. Offset it with the bearing&amp;rsquo;s radius and you&amp;rsquo;re done.&amp;rdquo;&lt;/p&gt;&#10;&lt;h3 id="the-build"&gt;The build&lt;/h3&gt;&#10;&lt;p&gt;I was intrigued by that idea. As I don&amp;rsquo;t have access to a good hardware store that sells bearings and stuff nearby, I was searching the household. And voilà, my kids own a fidget spinner they didn&amp;rsquo;t use for a while. So I&amp;hellip; snitched it. It contains a 22mm bearing with 8mm bore. Ok next - what should I use as a shaft?&lt;/p&gt;&#10;&lt;aside class="update-box update-box--note" role="note"&gt;&#10; &lt;span class="update-box__icon" aria-hidden="true"&gt;&#10; ℹ️&#10; &lt;/span&gt;&#10;&#10; &lt;div class="update-box__body"&gt;&#10; &lt;div class="update-box__heading"&gt;&#10; &lt;strong class="update-box__title"&gt;&#10; &#10; Also well-suited: Ball bearings from inline skates, skateboards etc.&#10; &#10; &lt;/strong&gt;&#10;&#10; &lt;time datetime="2023-06-04T00:00:00Z"&gt;&#10; 2023-06-04&#10; &lt;/time&gt;&#10; &#10; &lt;/div&gt;&#10;&#10; &#10; &lt;div class="update-box__content"&gt;&#10; Right after publishing this blog entry, a reader informed me that inline skates are also a perfect source for ball bearings in the household.&#10; &lt;/div&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/aside&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2023-05-21_edgefinder.jpg" alt="Image: The mounted edge finder"&gt;&lt;/figure&gt;&#10;I went for a dull drill bit, cut it in half, shoved the bearing on and added a drop of glue to secure it in place - Done!&lt;/p&gt;&#10;&lt;h2 id="execution"&gt;Execution&lt;/h2&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Mount the edgefinder and jog the machine close to the workpiece you&amp;rsquo;d like to measure.&lt;/li&gt;&#10;&lt;li&gt;Have the spindle turn at low RPM, e.g. &lt;code&gt;S500&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;Optional: To keep things simple, switch to machine coordinates&lt;/li&gt;&#10;&lt;li&gt;Make the machine move towards the workpiece, e.g. with command &lt;code&gt;G01 X5.0 F1&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;Prepare to hit &amp;ldquo;routine stop&amp;rdquo; once the bearing stops turning&lt;/li&gt;&#10;&lt;li&gt;Note down machine coordinates of where you stopped or set &lt;code&gt;G92&lt;/code&gt; offset to here&lt;/li&gt;&#10;&lt;li&gt;Repeat with other axes if required&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;figure class="media-frame media-frame--center media-frame--video"&gt;&#10; &lt;div class="media-video"&gt;&lt;video controls&gt;&#10; &lt;source src="https://blog.schallbert.de/assets/video/posts/2023-05-22_edgefinder_action.mp4" type="video/mp4"&gt;&#10; Your browser does not support the video tag.&#10; &lt;/video&gt;&lt;/div&gt;&#10; &lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;Simple edgefinder in action.&lt;/span&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;</description></item><item><title>Hardware Test</title><link>https://blog.schallbert.de/en/testing-hardware/</link><pubDate>Sun, 23 Apr 2023</pubDate><author>Schallbert</author><guid>https://blog.schallbert.de/en/testing-hardware/</guid><description type="html">&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2023-04-23_subsystem_test-thumb.jpg"&#10; class="post-cover"&#10; alt="Image: Subsystem boundary diagram"&#10; title="Hardware Test" /&gt;&#10;&lt;h2 id="a-new-drive"&gt;A new drive&lt;/h2&gt;&#10;&lt;p&gt;Recently, I bought a &lt;a href="https://blog.schallbert.de/en/projects/spindle-upgrade/"&gt;spindle upgrade&lt;/a&gt;. I now switched to a 3-phase induction motor with forced air cooling that requires a Variable Frequency Drive so I can set different speeds. The system takes the same analogue 0-10V signal as my previous motor. For the numerical controller it looks the same with one exception: The VFD can now create an emergency stop signal if something goes wrong.&lt;/p&gt;&#10;&lt;p&gt;As you can imagine, the new spindle subsystem is by far more complex than the old one. I had to buy, wire, and setup a dedicated electric control box.&lt;/p&gt;&#10;&lt;h2 id="so-why-testing"&gt;So why testing?&lt;/h2&gt;&#10;&lt;p&gt;With higher complexity comes higher risk of failure. There are more electrical and mechanical parts involved that each can behave incorrectly or even be destroyed if connected improperly. As I am just a human being who makes mistakes, I&amp;rsquo;d better not jump in at the deep end. So, while wiring everything up, I wondered how such a system should be systematically tested.&lt;/p&gt;&#10;&lt;h2 id="test-strategy"&gt;Test Strategy&lt;/h2&gt;&#10;&lt;p&gt;I borrowed the different test scopes from my job in the software industry. I think they fit in quite well:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Unit&lt;/strong&gt;: Test that verifies behavior of a component of the system in isolation. All external influences are removed or mocked away. Example: Check if the blower turns if supplied with its nominal voltage.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Integration&lt;/strong&gt;: These tests integrate different components that provide a common functionality. Example: Verify that spindle cooling works with delayed shutdown.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Subsystem&lt;/strong&gt;: Test that verifies the correct interaction of all components within a subsystem. Example: The spindle speed changes when feeding the analogue input of the VFD with different voltages.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;System (End2End)&lt;/strong&gt;: Tests that verify a system from the end-user perspective. Example: When pressing the emergency off switch of the CNC, does the VFD bring the spindle to a halt safely?&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2023-04-23_test_scopes.jpg" alt="Image: different test scopes of my CNC system"&gt;&lt;/figure&gt;&#10;&lt;h3 id="verify-early"&gt;Verify early&lt;/h3&gt;&#10;&lt;p&gt;From my experience, it makes sense to perform tests at the earliest possible point in time. After the spindle was delivered, I was able to check right away whether all bearings were smooth-running, if the fan would turn when voltage was applied, and see whether the motor windings were within expected resistance range, and so on. I could do these unit-level tests even before I started building or wiring the control box.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center media-frame--video"&gt;&#10; &lt;div class="media-video"&gt;&lt;video controls&gt;&#10; &lt;source src="https://blog.schallbert.de/assets/video/posts/2023-04-23-blowertest.mp4" type="video/mp4"&gt;&#10; Your browser does not support the video tag.&#10; &lt;/video&gt;&lt;/div&gt;&#10; &lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;Unit test: Spindle cooling fan&lt;/span&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;This might save a lot of troubleshooting when something doesn&amp;rsquo;t seem to work correctly during comissioning. And if you find something this early, you can directly get in touch with the manufacturer of the affected component to request an exchange while not being blocked on the other end.&lt;/p&gt;&#10;&lt;h3 id="bottom-up-testing"&gt;Bottom-up testing&lt;/h3&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2023-04-23_test_pyramid.jpg" alt="Image: my test pyramid"&gt;&lt;/figure&gt;&#10;The four levels of testing are my verification strategy here. I try to have many simple and quick early test on unit level, and just a few complex system tests that each involve a multitude of preparation and test steps, being executed just once upon initial startup when the build is complete.&lt;/p&gt;&#10;&lt;p&gt;When you look at the concept of the &lt;a href="https://martinfowler.com/testing/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;test pyramid&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; that is used a lot in software testing, it may be applicable for hardware tests as well to some extent, maybe with a different number of layers and varying names for the levels of integration.&lt;/p&gt;&#10;&lt;h2 id="test-plan"&gt;Test plan&lt;/h2&gt;&#10;&lt;p&gt;I don&amp;rsquo;t usually write test plans for hobby projects because the systems I design are rarely as complex as this. Plus, most of them do not require dangerous voltages to operate unlike this one.&lt;/p&gt;&#10;&lt;p&gt;To better visualize the system, I drew a layout of all components with the most important inputs and outputs.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2023-04-23_system_layout.jpg" alt="Image: motor spindle subsystem layout"&gt;&lt;/figure&gt;&#10;&lt;p&gt;From that image, I derived a test plan. I tried to cover each component&amp;rsquo;s interactions with each other, ending up in more unit than system test cases.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2023-04-23_test_plan.jpg" alt="Image: A test plan for the motor spindle subsystem"&gt;&lt;/figure&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--center media-frame--video"&gt;&#10; &lt;div class="media-video"&gt;&lt;video controls&gt;&#10; &lt;source src="https://blog.schallbert.de/assets/video/posts/2023-04-23-powersupplytest.mp4" type="video/mp4"&gt;&#10; Your browser does not support the video tag.&#10; &lt;/video&gt;&lt;/div&gt;&#10; &lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;Unit test: Supply &amp;#43;24V rail OK&lt;/span&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;Here I checked whether the cooling fan power supply operates correctly.&lt;/p&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--center media-frame--video"&gt;&#10; &lt;div class="media-video"&gt;&lt;video controls&gt;&#10; &lt;source src="https://blog.schallbert.de/assets/video/posts/2023-04-23-relaytest.mp4" type="video/mp4"&gt;&#10; Your browser does not support the video tag.&#10; &lt;/video&gt;&lt;/div&gt;&#10; &lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;Unit test: Time delay setting OK&lt;/span&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;With this test I verify that the cooling fan relay configuration and activation work as expected. For the purpose of this test, I selected shorter delay times than in the later application.&lt;/p&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--center media-frame--video"&gt;&#10; &lt;div class="media-video"&gt;&lt;video controls&gt;&#10; &lt;source src="https://blog.schallbert.de/assets/video/posts/2023-04-23-vfdtest.mp4" type="video/mp4"&gt;&#10; Your browser does not support the video tag.&#10; &lt;/video&gt;&lt;/div&gt;&#10; &lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;Integration test: VFD initial operation&lt;/span&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;The variable frequency drive is able to turn the spindle in the correct direction of rotation at different speeds.&lt;/p&gt;&#10;&lt;h2 id="test-execution"&gt;Test execution&lt;/h2&gt;&#10;&lt;p&gt;Of course, there were many more hardware-based tests that I didn&amp;rsquo;t mention in the above plan. Things like is the spindle correctly aligned to the Z-axis? Have I fastened all clamps with the appopriate torque? Are all connectors inserted and locked?&lt;/p&gt;&#10;&lt;p&gt;Before trying to run through material on the CNC I performed all the tests and actually found one issue on the system level: I had a pinning error in the spindle speed analogue output of the numerical controller&amp;rsquo;s signal harness so that the spindle motor system wouldn&amp;rsquo;t start despite the run signal being present.&lt;/p&gt;&#10;&lt;p&gt;This just took minutes to figure out because I had subsystem-tested the VFD before (Test case: &amp;ldquo;Reacts to speed command&amp;rdquo;), knowing that it cannot be the culprit.&lt;/p&gt;&#10;&lt;h2 id="documents"&gt;Documents&lt;/h2&gt;&#10;&lt;p&gt;In case you plan on adding a VFD-controlled spindle motor to your machine, please find my full test plan below.&lt;/p&gt;&#10;&lt;p&gt;&lt;a href="https://blog.schallbert.de/assets/docs/SpindleTests.pdf"&gt;VFD-controlled spindle motor test plan&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;But please take this plan with a grain of salt and note the usual disclaimer:&lt;/p&gt;&#10;&lt;p&gt;⚠️ &lt;strong&gt;Risk of electric shock.&lt;/strong&gt; ⚠️&lt;/p&gt;&#10;&lt;p&gt;This kind of system should only be built or worked on by professionals. Especially avoid touching live parts or VFD components before the VFD&amp;rsquo;s bleeder resistors have had enough time to discharge the intermediate circuit&amp;rsquo;s bulk capacitors.&lt;/p&gt;&#10;</description></item><item><title>Dibond Tests</title><link>https://blog.schallbert.de/en/cut-dibond-tests/</link><pubDate>Fri, 10 Mar 2023</pubDate><author>Schallbert</author><guid>https://blog.schallbert.de/en/cut-dibond-tests/</guid><description type="html">&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2023-03-10_dibond_test-thumb.jpg"&#10; class="post-cover"&#10; alt="Image: Dibond engrave test runs"&#10; title="Dibond Tests" /&gt;&#10;&lt;p&gt;Note: The engravings I disuss in this article are relatively fine. Font size is between 3mm and 6mm, and workpiece size is 80x80mm. Viewed at a distance of an ell or more, the quality issues are not apparent and the overall impression is quite good. Still, I wanted to improve.&lt;/p&gt;&#10;&lt;h2 id="further-quality-tuning-on-dibond"&gt;Further quality tuning on Dibond&lt;/h2&gt;&#10;&lt;p&gt;After I got mediocre results with my &lt;a href="https://blog.schallbert.de/en/cut-dibond/"&gt;previous milling project&lt;/a&gt;, I decided to do some more test runs in Dibond. Before I started those, I noted down possible causes for rough cutting edges that I saw earlier.&lt;/p&gt;&#10;&lt;p&gt;Then, I&amp;rsquo;ll try to rule out noise factors to track down root causes, and in a further step I will do my best to eliminate most of the issues.&lt;/p&gt;&#10;&lt;h3 id="possible-causes-for-poor-quality"&gt;Possible causes for poor quality&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://blog.schallbert.de/en/cut-dibond-tests/#cutter-inspection"&gt;Worn-out or dull cutter&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://blog.schallbert.de/en/cut-dibond-tests/#cutter-geometry"&gt;Cutter geometry&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://blog.schallbert.de/en/cut-dibond-tests/#speed-feed"&gt;Improper Feed / Speed parameters&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://blog.schallbert.de/en/cut-dibond-tests/#milling-style"&gt;Climb milling vs. conventional milling&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://blog.schallbert.de/en/cut-dibond-tests/#engrave-depth"&gt;Too shallow engrave depth&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://blog.schallbert.de/en/cut-dibond-tests/#machine-vibrations"&gt;Machine vibrations&lt;/a&gt; on portal acceleration and/or deceleration, especially on Y-axis&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://blog.schallbert.de/en/cut-dibond-tests/#spindle-mount"&gt;Router motor mount not stiff enough&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://blog.schallbert.de/en/cut-dibond-tests/#spindle-imbalance"&gt;Imbalanced cutter / collet&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="cutter-inspection"&gt;Cutter inspection&lt;/h3&gt;&#10;&lt;p&gt;I&amp;rsquo;m not an expert on cutters, but I cannot imagine that a carbide bit is worn out after half an hour of cutting through &lt;code&gt;0.3mm&lt;/code&gt;thick &lt;code&gt;AlMg1&lt;/code&gt; which is the harder compound of Dibond composite material. Also, the cutting edge seems to be in a good shape. The only thing I noticed was that there seems to be a thin layer of Aluminium sticking to the tip of the bit. Maybe this affects cut quality?&lt;/p&gt;&#10;&lt;p&gt;Carefully, I removed the aluminium residues with a trimming knife and minimal sanding. As good as new!&lt;/p&gt;&#10;&lt;aside class="update-box update-box--warn" role="note"&gt;&#10; &lt;span class="update-box__icon" aria-hidden="true"&gt;&#10; ⚠️&#10; &lt;/span&gt;&#10;&#10; &lt;div class="update-box__body"&gt;&#10; &lt;div class="update-box__heading"&gt;&#10; &lt;strong class="update-box__title"&gt;&#10; &#10; Use cutter with one material only&#10; &#10; &lt;/strong&gt;&#10;&#10; &lt;time datetime="2023-10-30T00:00:00Z"&gt;&#10; 2023-10-30&#10; &lt;/time&gt;&#10; &#10; &lt;/div&gt;&#10;&#10; &#10; &lt;div class="update-box__content"&gt;&#10; I used the same engraving chisels - which have been in use for about 4 hours by now - to work with acrylic (PMMA). The cut is rougher than with new engraving cutters. Acrylic requires very sharp tools. I therefore recommend always using one tool for each material.&#10; &lt;/div&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/aside&gt;&#10;&lt;h3 id="cutter-geometry"&gt;Cutter geometry&lt;/h3&gt;&#10;&lt;p&gt;The cutters I&amp;rsquo;m using for this test do not have chip flutes to guide shavings away from the place of cut. There are others on the market which do provide one and I wonder if it makes a difference. Maybe a spiral flute could improve quality of cut?&lt;/p&gt;&#10;&lt;p&gt;Background behind that thesis is that for cutting letters, my CAM won&amp;rsquo;t use the defined dive ramp but plunges straight into the material. When you have a closer look at the images below, you might even see marks in the clearcoat around the place where the cutter hit Z0, shearing the surface away but not yet expediting the chip away from the cut.&lt;/p&gt;&#10;&lt;p&gt;On the other side, a spiral flute will try to pull the aluminium layer upwards. As it is &amp;ldquo;only&amp;rdquo; thermally bonded to the polyethylene core, adhesive force might be too low, especially with fine engravings or letters like &amp;ldquo;e, a, o, R, B&amp;hellip;&amp;rdquo;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;Summary&lt;/em&gt;: Buy spiral flute engrave cutters, try them, and document the results 😅&lt;/p&gt;&#10;&lt;h3 id="speed-feed"&gt;Improper Speed / Feed parameters&lt;/h3&gt;&#10;&lt;p&gt;I double-checked required spindle RPM for my engrave cutter which is single-flute. I again got a value higher than my maximum speed of &lt;code&gt;24000RPM&lt;/code&gt;, so I can confirm to use my motor&amp;rsquo;s maximum speed with that bit.&lt;/p&gt;&#10;&lt;p&gt;To try out other feed rates, I created a quick 2D design in my CAD and had my CAM run it in different feeds: &lt;code&gt;F600mm/min&lt;/code&gt;, &lt;code&gt;F800mm/min&lt;/code&gt;, and &lt;code&gt;F1000mm/min&lt;/code&gt;.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2023-03-10_workpiece.jpg" alt="Image: My Test workpiece with tryout engravings"&gt;&lt;/figure&gt;&#10;&lt;p&gt;There are a lot of things that we can observe here:&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Look at the labels for the different feed rates. The font is so small, that the engrave cutter won&amp;rsquo;t even fully cut through the upper Aluminium layer. It rather &amp;ldquo;mashes&amp;rdquo; the aluminium into the polyethylene layer below, and squeezes the aluminium sideways.&lt;/li&gt;&#10;&lt;li&gt;Although I change the feed rates by as much as 20% per spiral turn, quality of cut remains the same. This confirms that for my &lt;code&gt;6mm 0.5tip 90°&lt;/code&gt; cutter in Dibond, a feed rate of &lt;code&gt;F1000mm/min&lt;/code&gt; is fine.&lt;/li&gt;&#10;&lt;li&gt;It is clear to see that the &amp;ldquo;outer&amp;rdquo; edges of the engrave operation are rough. I can feel this when I stroke the workpiece with my finger.&lt;/li&gt;&#10;&lt;li&gt;The &amp;ldquo;inner&amp;rdquo; edges of the engravings are really smooth, though. They gleam in contrary to their matte counterparts.&lt;/li&gt;&#10;&lt;li&gt;The black, inner parts of the spiral are shaped very even and without cutter marks or a lot of remaining chips.&lt;/li&gt;&#10;&lt;li&gt;The capital &amp;ldquo;T&amp;rdquo; of the word test runs looks a bit strange as there are vertical marks. Let&amp;rsquo;s come to this later.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;&lt;em&gt;Summary&lt;/em&gt;: Speed and feed parameters are fine and don&amp;rsquo;t seem to be the culprit for poor machining quality in this case.&lt;/p&gt;&#10;&lt;h3 id="milling-style"&gt;Climb milling vs. conventional milling&lt;/h3&gt;&#10;&lt;p&gt;To get a clear view on the effects of &lt;a href="https://blog.schallbert.de/en/portal-milling/#milling-style"&gt;milling strategy&lt;/a&gt;, let&amp;rsquo;s take a detailed look at the spiral.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2023-03-10_spiral.jpg" alt="Image: Detail view of the spiral, cut with the engrave bit"&gt;&lt;/figure&gt;&#10;&lt;p&gt;It is easy to see that the outer cut has very clean edges while the inner one has not. The spiral has been milled outwards to inwards, and the spindle turns clockwise. The groove was cut in a single pass for the narrower line, and with a smoothing increment of &lt;code&gt;Z-0.1mm&lt;/code&gt; for the wider one.&lt;/p&gt;&#10;&lt;p&gt;This means that conventional milling has been applied to the outer edge of the groove, and the inner edge was machined with climb milling, i.e. the cutter was moving in the direction of cut and not against it.&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;Summary&lt;/em&gt;: Although climb milling is preferred on a CNC for various reasons, this is not true for aluminium composite materials like Dibond. Here, conventional milling is the strategy to choose if you want clean chamfers.&lt;/p&gt;&#10;&lt;h3 id="engrave-depth"&gt;Too shallow engrave depth&lt;/h3&gt;&#10;&lt;p&gt;&lt;em&gt;Summary&lt;/em&gt;: As the images above show, it is a problem if the aluminium layer is not fully broken through. In some follow-up experiments I tested a minimum viable engrave depth and ended up with a value of ~150% of the aluminium layer&amp;rsquo;s strength, in my case that is &lt;code&gt;0.45mm&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;Note that this constraint might only be valid for V-cutters that don&amp;rsquo;t feature spiral cuts or cutter flutes.&lt;/p&gt;&#10;&lt;h3 id="too-high-engrave-depth"&gt;Too high engrave depth&lt;/h3&gt;&#10;&lt;p&gt;This was a guess that came up when looking at the images from my &lt;a href="https://blog.schallbert.de/en/cut-dibond/#quality-analysis"&gt;previous experiment with Dibond&lt;/a&gt;. To compare, I created two spiral engrave paths with different depths of &lt;code&gt;Z-0.5mm&lt;/code&gt; and &lt;code&gt;Z-1.0mm&lt;/code&gt;. While the former wouldn&amp;rsquo;t make any difference when I add another pass for smoothing, it makes the latter engrave look a little more clean.&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;Summary&lt;/em&gt;: For deeper engraves, smoothing runs are helpful but not a must. Instead, a much bigger lever to improve quality is to use conventional milling only.&lt;/p&gt;&#10;&lt;h3 id="machine-vibrations"&gt;Machine vibrations&lt;/h3&gt;&#10;&lt;p&gt;Remember the test texts carrying strange marks? At the beginning I thought this was due to the brushed-look surface: It is not actually brushed but imprinted under high pressure using rollers. But when I had a closer look, another assumption came to my mind: Machine vibrations.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2023-03-10_text.jpg" alt="Image: Test texts with different feed rates."&gt;&lt;/figure&gt;&#10;&lt;p&gt;The texts have been made with different feeds, where &lt;code&gt;6&lt;/code&gt; indicates &lt;code&gt;600mm/min&lt;/code&gt; and so on. Below on the right I have prepared a second image that has an extra zoom into the &amp;ldquo;t&amp;quot;s for better comparison of the feed rates. Actually, the quicker engrave settings look better than the slower ones.&lt;/p&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2023-03-10_ts.jpg" alt="Image: Macro zoom into the `t`&amp;#39;s of the text."&gt;&lt;/figure&gt;&#10;I have been excercising the limits of my machine a lot in the past half a year. I came up with pretty high values on acceleration and maximum velocity which I verified the machine was capable to work with.&#10;&amp;ldquo;Unusually high&amp;rdquo; is actually what the manufacturer of my controller software said when I contacted their support with an unrelated issue about a warning message &lt;a href="https://blog.schallbert.de/en/projects/one-year-zerspanobert/#velocityerror"&gt;&amp;ldquo;Velocity was higher than max!&amp;rdquo;&lt;/a&gt; a couple of weeks ago.&lt;/p&gt;&#10;&lt;p&gt;That said, to verify my hypothesis I created yet another test sample in CAD and CAM where I&amp;rsquo;d only carve Test texts and straight lines with sharp corners so that the machine has to accelerate and decelerate to full carve speed and back to zero more often.&lt;/p&gt;&#10;&lt;p&gt;This time I&amp;rsquo;d keep the feedrate constant at &lt;code&gt;f1000mm/min&lt;/code&gt; but change the machine&amp;rsquo;s acceleration values to see whether the acceleration unsettles the machine&amp;rsquo;s portal system in a way that shakes are propagated to the tool tip.&lt;/p&gt;&#10;&lt;section class="hugo-gallery"&gt;&#10; &lt;div class="hugo-gallery__frame"&gt;&#10; &lt;div class="hugo-gallery__grid" role="list"&gt;&lt;a&#10; class="hugo-gallery__thumb"&#10; href="#gallery-full-0"&#10; aria-label="Image: Front view of used V-cut bit. "&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2023-03-10_vcut_front.jpg"&#10; alt="Image: Front view of used V-cut bit. "&#10; class="hugo-gallery__thumb-img"&#10; loading="lazy"&gt;&#10; &lt;/a&gt;&lt;a&#10; class="hugo-gallery__thumb"&#10; href="#gallery-full-1"&#10; aria-label="Image: 45° Front view of used V-cut bit. It carries some residual aluminium material."&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2023-03-10_vcut_front45.jpg"&#10; alt="Image: 45° Front view of used V-cut bit. It carries some residual aluminium material."&#10; class="hugo-gallery__thumb-img"&#10; loading="lazy"&gt;&#10; &lt;/a&gt;&lt;a&#10; class="hugo-gallery__thumb"&#10; href="#gallery-full-2"&#10; aria-label="Image: Side view of used V-cut bit. The cutting edge looks sharp and polished."&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2023-03-10_vcut_side.jpg"&#10; alt="Image: Side view of used V-cut bit. The cutting edge looks sharp and polished."&#10; class="hugo-gallery__thumb-img"&#10; loading="lazy"&gt;&#10; &lt;/a&gt;&lt;a&#10; class="hugo-gallery__thumb"&#10; href="#gallery-full-3"&#10; aria-label="Image: Rear view of used V-cut bit. At the very tip, it is more shiny than at the rest of its body."&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2023-03-10_vcut_back.jpg"&#10; alt="Image: Rear view of used V-cut bit. At the very tip, it is more shiny than at the rest of its body."&#10; class="hugo-gallery__thumb-img"&#10; loading="lazy"&gt;&#10; &lt;/a&gt;&lt;a&#10; class="hugo-gallery__thumb"&#10; href="#gallery-full-4"&#10; aria-label="Image: Test text and numbers. At 800mm/s² acceleration, there are visible horizontal marks in the path and the quality of cut is poor."&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2023-03-10_test800.jpg"&#10; alt="Image: Test text and numbers. At 800mm/s² acceleration, there are visible horizontal marks in the path and the quality of cut is poor."&#10; class="hugo-gallery__thumb-img"&#10; loading="lazy"&gt;&#10; &lt;/a&gt;&lt;a&#10; class="hugo-gallery__thumb"&#10; href="#gallery-full-5"&#10; aria-label="Image: Test text and numbers. At 400mm/s² the highly detailed text does not look too good. There are chatter marks everywhere."&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2023-03-10_test400.jpg"&#10; alt="Image: Test text and numbers. At 400mm/s² the highly detailed text does not look too good. There are chatter marks everywhere."&#10; class="hugo-gallery__thumb-img"&#10; loading="lazy"&gt;&#10; &lt;/a&gt;&lt;a&#10; class="hugo-gallery__thumb"&#10; href="#gallery-full-6"&#10; aria-label="Image: Test text and numbers. Even with lowest acceleration, the problem is to stay. The aluminium layer tends to squash into the much softer polyurethane core material, creating mediocre results."&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2023-03-10_test200.jpg"&#10; alt="Image: Test text and numbers. Even with lowest acceleration, the problem is to stay. The aluminium layer tends to squash into the much softer polyurethane core material, creating mediocre results."&#10; class="hugo-gallery__thumb-img"&#10; loading="lazy"&gt;&#10; &lt;/a&gt;&lt;/div&gt;&lt;div class="hugo-gallery__caption"&gt;&#10; Testergebnisse: Detailaufnahmen von Stichel und Material bei variabler Maschinenbeschleunigung.&#10; &lt;/div&gt;&lt;/div&gt;&#10;&#10; &lt;div class="hugo-gallery__full" aria-live="polite"&gt;&lt;figure&#10; id="gallery-full-0"&#10; class="hugo-gallery__figure media-frame media-frame--center"&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2023-03-10_vcut_front.jpg"&#10; alt="Image: Front view of used V-cut bit. "&gt;&lt;figcaption&gt;The 6mm 90° 0.5m tip V-cut tool. At the cutting edge, there&amp;#39;s a little built-up material.&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure&#10; id="gallery-full-1"&#10; class="hugo-gallery__figure media-frame media-frame--center"&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2023-03-10_vcut_front45.jpg"&#10; alt="Image: 45° Front view of used V-cut bit. It carries some residual aluminium material."&gt;&lt;figcaption&gt;It has been used for roughly 30minutes. The cutting edge looks intact.&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure&#10; id="gallery-full-2"&#10; class="hugo-gallery__figure media-frame media-frame--center"&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2023-03-10_vcut_side.jpg"&#10; alt="Image: Side view of used V-cut bit. The cutting edge looks sharp and polished."&gt;&lt;figcaption&gt;Minimal residues of Aluminium seem to stick to its tip.&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure&#10; id="gallery-full-3"&#10; class="hugo-gallery__figure media-frame media-frame--center"&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2023-03-10_vcut_back.jpg"&#10; alt="Image: Rear view of used V-cut bit. At the very tip, it is more shiny than at the rest of its body."&gt;&lt;figcaption&gt;Also here, the tip colour is different than the rest of the bit.&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure&#10; id="gallery-full-4"&#10; class="hugo-gallery__figure media-frame media-frame--center"&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2023-03-10_test800.jpg"&#10; alt="Image: Test text and numbers. At 800mm/s² acceleration, there are visible horizontal marks in the path and the quality of cut is poor."&gt;&lt;figcaption&gt;Result with high machine acceleration&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure&#10; id="gallery-full-5"&#10; class="hugo-gallery__figure media-frame media-frame--center"&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2023-03-10_test400.jpg"&#10; alt="Image: Test text and numbers. At 400mm/s² the highly detailed text does not look too good. There are chatter marks everywhere."&gt;&lt;figcaption&gt;Result with medium machine acceleration&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure&#10; id="gallery-full-6"&#10; class="hugo-gallery__figure media-frame media-frame--center"&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2023-03-10_test200.jpg"&#10; alt="Image: Test text and numbers. Even with lowest acceleration, the problem is to stay. The aluminium layer tends to squash into the much softer polyurethane core material, creating mediocre results."&gt;&lt;figcaption&gt;Result with low machine acceleration.&lt;/figcaption&gt;&lt;/figure&gt;&lt;/div&gt;&#10;&lt;/section&gt;&#10;&#10;&lt;p&gt;You can see that the vertical marks become less visible on lower acceleration settings. As I had to reset the machine after each parameter change, I must re-measure Z0 height everytime. On the lowest acceleration setting, I probably had a grain of dust below the sensor as the depth of cut is visibly less than on the other two test samples which deteriorates the engrave quality.&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;Question: &amp;ldquo;Did the machine reach target speed at all?&amp;rdquo;&lt;/em&gt; Text height is &lt;code&gt;s0=6mm&lt;/code&gt;, so for example at &lt;code&gt;a=800mm/s²&lt;/code&gt;, the machine takes &lt;code&gt;t=f/a=20ms&lt;/code&gt; to accelerate to its target feed rate. Travelling a distance of &lt;code&gt;s=a/2*t^2=0.17mm&lt;/code&gt; while accelerating, the machine will run &lt;code&gt;s1=6-2*0.17=5.66mm&lt;/code&gt; with target speed within the vertical stem of letter &lt;code&gt;t&lt;/code&gt;. This proves that the machine actually gets to run its targeted feedrate. Basic kinematic laws come in handy when working with CNC machines from time to time.&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;Summary&lt;/em&gt;: Make sure your machine runs in a fine-tuned parameter envelope relative to its size, stiffness, weight, and control variables so you avoid judder.&lt;/p&gt;&#10;&lt;h3 id="spindle-mount"&gt;Router motor mount&lt;/h3&gt;&#10;&lt;p&gt;I know this could be a problem from my past experiments where at some point &lt;a href="https://blog.schallbert.de/en/cnc-router-overload/"&gt;I overloaded my machine&lt;/a&gt;. But for engraving, the spindle runs at just 20% of maximum load.&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;Summary&lt;/em&gt;: This is not an issue here.&lt;/p&gt;&#10;&lt;h3 id="spindle-imbalance"&gt;Imbalanced cutter / collet&lt;/h3&gt;&#10;&lt;p&gt;&lt;em&gt;Summary&lt;/em&gt;: If this was the case, I would have either expected strange sounds or vibrations emanating from my machine. Maybe also edges with irregular shapes or torn chips could be a side effect. Neither of that is the case, so I&amp;rsquo;d exclude this noise factor here.&lt;/p&gt;&#10;&lt;h2 id="process-and-machine-updates"&gt;Process and machine updates&lt;/h2&gt;&#10;&lt;p&gt;Here&amp;rsquo;s what I actually did:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Inspect and clean cutters after usage&lt;/li&gt;&#10;&lt;li&gt;Try to avoid climb milling in dibond. Rather have the engrave path a little wider, and have both edges of the engrave cut conventionally.&lt;/li&gt;&#10;&lt;li&gt;Add a smoothing run when engrave depth exceeds &lt;code&gt;Z-0.6mm&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;Reduce machine&amp;rsquo;s maximum acceleration values to minimize cutter marks.&lt;/li&gt;&#10;&lt;li&gt;Prepare a tryout CAD file to experiment with for optimal feeds and speeds when trying new materials.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2023-03-10_dibondmetallic.jpg" alt="Image: Dibond metallic, cut after all improvements were applied"&gt;&lt;/figure&gt;&#10;&lt;p&gt;See for yourself how the quality improved after applying all these changes.&lt;/p&gt;&#10;</description></item><item><title>Working with Aluminium composites</title><link>https://blog.schallbert.de/en/cut-dibond/</link><pubDate>Thu, 02 Mar 2023</pubDate><author>Schallbert</author><guid>https://blog.schallbert.de/en/cut-dibond/</guid><description type="html">&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2023-03-02_btc_beermat-thumb.jpg"&#10; class="post-cover"&#10; alt="Image: Engraving Dibond, required manual rework"&#10; title="Working with Aluminium composites" /&gt;&#10;&lt;h2 id="experiments-with-dibond"&gt;Experiments with Dibond&lt;/h2&gt;&#10;&lt;p&gt;A friend of mine is currently starting a business. He wanted something to give away to his customers, something that they would remember so they&amp;rsquo;d return to him. It should not be the standard pen or cup, but something that is somehow more close to what he is doing. Something metally. Something Like a business card, but with a three-dimensional feel. Something engraved.&lt;/p&gt;&#10;&lt;p&gt;While searching for material on the internet, I came across aluminium composites - a sandwich material made of two thin sheets of aluminium with a core of &lt;a href="https://en.wikipedia.org/wiki/Polyethylene" target="_blank" rel="noopener noreferrer" class="external-link"&gt;polyethylene&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;, also known under its trade names Dibond®, Dilite®, Alcubond® etc. It is available coated, blank or even coloured and, optionally, in different finishes.&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;&amp;ldquo;Its PE core is black, so it might be an ideal material for engraving&amp;rdquo;, I thought.&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;So I ordered some samples and showed them to my friend. He was blown away, and that&amp;rsquo;s where this story starts.&lt;/p&gt;&#10;&lt;h3 id="the-coaster-concept"&gt;The Coaster Concept&lt;/h3&gt;&#10;&lt;p&gt;We brainstormed about what to do with that material. It should be simple to design and not too large so it could be an easy giveaway.&lt;/p&gt;&#10;&lt;p&gt;I know that aluminium composites can be machined in a way that they form 3-dimensional objects (&lt;a href="https://www.youtube.com/watch?v=9h0RVwTpabk" target="_blank" rel="noopener noreferrer" class="external-link"&gt;youtube video link&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;). But this seemed to complicated for a start. Our next idea was the one that I&amp;rsquo;m discussing here:&lt;/p&gt;&#10;&lt;p&gt;Engraving Coasters. Round or rectangles with smooth corners, even custom shapes are possible.&lt;/p&gt;&#10;&lt;p&gt;I started some tries with engraving cutters that looked promising - but not perfect. The aluminium layer tends to smudge and wants to evade the cutter so it presses into the soft polyethylene core when diving into the material at a 90° angle. Still, my friend wanted me to proceed so I bought a couple of sheets and continued experimenting.&lt;/p&gt;&#10;&lt;h3 id="cutters-speeds-and-feeds"&gt;Cutters, speeds and feeds&lt;/h3&gt;&#10;&lt;p&gt;As the coasters are below 100x100mm, I am using small endmills:&lt;/p&gt;&#10;&lt;p&gt;| Cutter (carbide) | Teeth | Dia | Speed | Feed XY | Feed Z | Z+ |&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;[mm]&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;[RPM]&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;[mm/min]&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;[mm]&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;[mm]&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;acryl 30° upcut&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;24000&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1600&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;800&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;3&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;engrave 90°, 0.5mm tip&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;6&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;24000&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1000&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;500&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1.5&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;The values may seem a bit aggressive, but I think I need to have a certain speed to not melt down the PE core. Chips do look good - short and thick - with these values and the machine gives a confidential hum when working, so I assume all is fine.&lt;/p&gt;&#10;&lt;h3 id="the-first-part"&gt;The first part&lt;/h3&gt;&#10;&lt;p&gt;I cut the coaster holder first. It consists of four parts that can simply be put together. They don&amp;rsquo;t need glue as clearances are tight. I use a fence as orientation for the XY-zero of the workpiece as I want to do two-sided milling. This enables me to do the cutouts as a last step, keeping vacuum pressure on my table until that very last step. Plus, the idea was that I wouldn&amp;rsquo;t have to manually rework the parts.&lt;/p&gt;&#10;&lt;p&gt;The first try was rubbish - front and rear milling paths weren&amp;rsquo;t perfectly aligned, and as little as some tenths of a millimeter make a great difference here, so I had to fix the root cause (edges on the fence I did not notice before that I had to hone down) and try again.&lt;/p&gt;&#10;&lt;p&gt;Here&amp;rsquo;s the result:&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2023-03-02_btc_holder.jpg" alt="Image: The coaster holder, made of Aluminium composite"&gt;&lt;/figure&gt;&lt;/p&gt;&#10;&lt;p&gt;I&amp;rsquo;m pretty happy how this turned out. I didn&amp;rsquo;t have to do any manual rework, it just fell out of the CNC like this. But I noticed that the chamfers I added to give the material a smooth touch were pretty different. While the ones on the &amp;ldquo;rear&amp;rdquo; that only cut &lt;code&gt;0.3mm&lt;/code&gt; off the edge where the upcut had previously done the part&amp;rsquo;s cutout were really good while the ones on the other side, where the tool had to cut &lt;code&gt;0.85mm&lt;/code&gt; deep into the material to add the chamfer, were a lot rougher (but still acceptable).&lt;/p&gt;&#10;&lt;h3 id="a-batch-of-six"&gt;A batch of six&lt;/h3&gt;&#10;&lt;p&gt;Then I selected a &amp;ldquo;simple-to-manufacture&amp;rdquo; logo - the Bitcoin Lightning symbol - and planned some basic engrave paths to have it carved. Here, I also did two-sided milling, which would not fully cut through the material but would leave an &amp;ldquo;onion skin&amp;rdquo; at the bottom which would be removed at a second pass on the bottom side while chamfering the edges.&lt;/p&gt;&#10;&lt;p&gt;I needed roughly 20 minutes to complete the jobs. Unfortunately, the fence I use to have a defined part edge that would stay in position even if turned around to mill the second side proved to be low repeatibility in terms of accuracy. The cutout on the bottom was off just one or two tenths of a millimeter, which in my case would double the total misalignment when turning it over its diagonal axis. That way, a part of my coaster&amp;rsquo;s outline had a very deep chamfer while the other half didn&amp;rsquo;t have a chamfer at all.&lt;/p&gt;&#10;&lt;p&gt;I need to find a fix for that. In the meantime, I manually sanded down the edges until I thought it&amp;rsquo;s enough so nobody would get hurt.&lt;/p&gt;&#10;&lt;p&gt;Then, I cleared remaining chips along the engrave paths with a toothbrush, and took the title photo above.&lt;/p&gt;&#10;&lt;h2 id="quality-analysis"&gt;Quality analysis&lt;/h2&gt;&#10;&lt;p&gt;Upon inspecting the part in more detail, I made the following observations:&lt;/p&gt;&#10;&lt;section class="hugo-gallery"&gt;&#10; &lt;div class="hugo-gallery__frame"&gt;&#10; &lt;div class="hugo-gallery__grid" role="list"&gt;&lt;a&#10; class="hugo-gallery__thumb"&#10; href="#gallery-full-0"&#10; aria-label="Image: BTC coasters on the machine, already fully cut."&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2023-03-02_btc_cutouts.jpg"&#10; alt="Image: BTC coasters on the machine, already fully cut."&#10; class="hugo-gallery__thumb-img"&#10; loading="lazy"&gt;&#10; &lt;/a&gt;&lt;a&#10; class="hugo-gallery__thumb"&#10; href="#gallery-full-1"&#10; aria-label="Image: A coaster holder: A U-shaped assembly holds up to six round coasters."&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2023-03-02_holder_cutouts.jpg"&#10; alt="Image: A coaster holder: A U-shaped assembly holds up to six round coasters."&#10; class="hugo-gallery__thumb-img"&#10; loading="lazy"&gt;&#10; &lt;/a&gt;&lt;a&#10; class="hugo-gallery__thumb"&#10; href="#gallery-full-2"&#10; aria-label="Image: Closeup of coaster&amp;#39;s bottom area. The edges look rough on deeper engravings. There is no uniform, shiny cut."&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2023-03-02_engrave_closeup.jpg"&#10; alt="Image: Closeup of coaster&amp;#39;s bottom area. The edges look rough on deeper engravings. There is no uniform, shiny cut."&#10; class="hugo-gallery__thumb-img"&#10; loading="lazy"&gt;&#10; &lt;/a&gt;&lt;a&#10; class="hugo-gallery__thumb"&#10; href="#gallery-full-3"&#10; aria-label="Image: Closeup of coaster&amp;#39;s lightning area. Its cutting edges look clean and shiny, the engraving is pretty shallow."&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2023-03-02_engrave_closeup2.jpg"&#10; alt="Image: Closeup of coaster&amp;#39;s lightning area. Its cutting edges look clean and shiny, the engraving is pretty shallow."&#10; class="hugo-gallery__thumb-img"&#10; loading="lazy"&gt;&#10; &lt;/a&gt;&lt;a&#10; class="hugo-gallery__thumb"&#10; href="#gallery-full-4"&#10; aria-label="Image: Closeup of coaster&amp;#39;s top area. Due to the slow feed, PU chips have molten to the cutting channel."&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2023-03-02_engrave_closeup3.jpg"&#10; alt="Image: Closeup of coaster&amp;#39;s top area. Due to the slow feed, PU chips have molten to the cutting channel."&#10; class="hugo-gallery__thumb-img"&#10; loading="lazy"&gt;&#10; &lt;/a&gt;&lt;a&#10; class="hugo-gallery__thumb"&#10; href="#gallery-full-5"&#10; aria-label="Image: Closeup of coaster&amp;#39;s lightning area, focusing on the deeper engrave. There are some marks on the aluminium edge."&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2023-03-02_engrave_closeup4.jpg"&#10; alt="Image: Closeup of coaster&amp;#39;s lightning area, focusing on the deeper engrave. There are some marks on the aluminium edge."&#10; class="hugo-gallery__thumb-img"&#10; loading="lazy"&gt;&#10; &lt;/a&gt;&lt;/div&gt;&lt;div class="hugo-gallery__caption"&gt;&#10; Prototyping coasters made of aluminium sandwich material.&#10; &lt;/div&gt;&lt;/div&gt;&#10;&#10; &lt;div class="hugo-gallery__full" aria-live="polite"&gt;&lt;figure&#10; id="gallery-full-0"&#10; class="hugo-gallery__figure media-frame media-frame--center"&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2023-03-02_btc_cutouts.jpg"&#10; alt="Image: BTC coasters on the machine, already fully cut."&gt;&lt;figcaption&gt;Top sheet machining complete. Cutout and engravings.&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure&#10; id="gallery-full-1"&#10; class="hugo-gallery__figure media-frame media-frame--center"&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2023-03-02_holder_cutouts.jpg"&#10; alt="Image: A coaster holder: A U-shaped assembly holds up to six round coasters."&gt;&lt;figcaption&gt;Coaster holder cutouts, bottom view&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure&#10; id="gallery-full-2"&#10; class="hugo-gallery__figure media-frame media-frame--center"&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2023-03-02_engrave_closeup.jpg"&#10; alt="Image: Closeup of coaster&amp;#39;s bottom area. The edges look rough on deeper engravings. There is no uniform, shiny cut."&gt;&lt;figcaption&gt;Rough edges where engravings are more deep&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure&#10; id="gallery-full-3"&#10; class="hugo-gallery__figure media-frame media-frame--center"&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2023-03-02_engrave_closeup2.jpg"&#10; alt="Image: Closeup of coaster&amp;#39;s lightning area. Its cutting edges look clean and shiny, the engraving is pretty shallow."&gt;&lt;figcaption&gt;Less wide engravings looks more clean.&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure&#10; id="gallery-full-4"&#10; class="hugo-gallery__figure media-frame media-frame--center"&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2023-03-02_engrave_closeup3.jpg"&#10; alt="Image: Closeup of coaster&amp;#39;s top area. Due to the slow feed, PU chips have molten to the cutting channel."&gt;&lt;figcaption&gt;Residues and chips left in the engrave channels&lt;/figcaption&gt;&lt;/figure&gt;&lt;figure&#10; id="gallery-full-5"&#10; class="hugo-gallery__figure media-frame media-frame--center"&gt;&#10; &lt;img&#10; src="https://blog.schallbert.de/assets/images/posts/2023-03-02_engrave_closeup4.jpg"&#10; alt="Image: Closeup of coaster&amp;#39;s lightning area, focusing on the deeper engrave. There are some marks on the aluminium edge."&gt;&lt;figcaption&gt;Wondering why engrave quality reduces on deeper engravings&lt;/figcaption&gt;&lt;/figure&gt;&lt;/div&gt;&#10;&lt;/section&gt;&#10;&#10;&lt;h3 id="all-parts-look-the-same"&gt;All parts look the same&lt;/h3&gt;&#10;&lt;p&gt;This actually is good news. It means that the tools I bought from &lt;a href="https://www.vhf.com/de-de/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;vhf&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; this time are still sharp and can be used for future set(s) of prototypes.&lt;/p&gt;&#10;&lt;p&gt;It also means that my machine did not experience step losses or mechanical issues and that the workbed surface is level. This is especially important in this case as the &lt;code&gt;90°&lt;/code&gt; engrave cutter&amp;rsquo;s engage width highly depends on workpiece surface height. With an uneven workbed, the line width would differ visibly from part to part.&lt;/p&gt;&#10;&lt;h3 id="wide-engravings-have-poorer-quality-than-fine-ones"&gt;Wide engravings have poorer quality than fine ones&lt;/h3&gt;&#10;&lt;p&gt;I&amp;rsquo;m not entirely sure about why that&amp;rsquo;s the case. I&amp;rsquo;m no metal cutting mechanic so I&amp;rsquo;m missing the professional qualification, but my guess is that this is because the engrave cutter does not have a mechanism to get rid of the chips on time, mashing it into the material with its next half-turn which creates a less smooth finish.&lt;/p&gt;&#10;&lt;p&gt;If that is the case, an additional smoothing run at a low material removal rate would solve this issue.&lt;/p&gt;&#10;&lt;h3 id="chamfering-without-pre-cut-delivers-less-smooth-results"&gt;Chamfering without pre-cut delivers less smooth results&lt;/h3&gt;&#10;&lt;p&gt;My guess is that although the symptom looks different, the root cause might be the same. I&amp;rsquo;ll try with an &lt;a href="https://blog.schallbert.de/en/cut-dibond-tests/#too-high-engrave-depth"&gt;additional smoothing run&lt;/a&gt; for the other side as well.&lt;/p&gt;&#10;&lt;p&gt;Another alternative would be to reduce the feedrate and see what happens. Maybe a balance has to be found between manufacturing time and quality?&lt;/p&gt;&#10;&lt;h3 id="i-need-to-get-locators-to-fix-workpiece-offset"&gt;I need to get locators to fix workpiece offset&lt;/h3&gt;&#10;&lt;p&gt;Obviously, I wasn&amp;rsquo;t able to reproduce part placement with help of the fence when turning the part around. Some tenths of a millimeter are enough to ruin everything.&lt;/p&gt;&#10;&lt;p&gt;I could do the following:&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Plan a &lt;code&gt;Job00&lt;/code&gt; that just places locator holes in the workpiece with a diameter of &lt;code&gt;5.04mm&lt;/code&gt;. Make sure they are symmetrical so the workpiece can be flipped around the diagonal edge facing to the fence for two-sided milling, while the workpiece edge&amp;rsquo;s position remains unchanged.&lt;/li&gt;&#10;&lt;li&gt;Place the workpiece against the fence and have &lt;code&gt;Job00&lt;/code&gt; executed.&lt;/li&gt;&#10;&lt;li&gt;Remove the fence.&lt;/li&gt;&#10;&lt;li&gt;Get some 5mm register pins and put them into the vacuum table&amp;rsquo;s holes, matching the workpiece&amp;rsquo;s holes.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;Or I could just cut through and manually add the chamfer on the lower side with help of a hand router. As the workpieces are quite small, I&amp;rsquo;d have to design a holder first to keep my hands safe. Maybe that&amp;rsquo;s even faster than the above approach&amp;hellip;&lt;/p&gt;&#10;&lt;h3 id="some-chips-are-stuck-down-in-the-engrave-path"&gt;Some chips are stuck down in the engrave path&lt;/h3&gt;&#10;&lt;p&gt;I don&amp;rsquo;t know why that&amp;rsquo;s the case. Will have to talk to my tool manufacturer to maybe get that sorted out.&lt;/p&gt;&#10;&lt;h2 id="summary"&gt;Summary&lt;/h2&gt;&#10;&lt;p&gt;All in all, I can be pretty happy. The machine does what I want it to, and the overall result is OK already now, early in the prototyping phase. The composite material is nice to work with and won&amp;rsquo;t eat cutters as quickly as other materials (&lt;a href="https://blog.schallbert.de/en/cnc-router-overload/"&gt;like HPL&lt;/a&gt;). The surface finish looks really nice and its &amp;ldquo;upmarket premium&amp;rdquo; touch adds to the flair. The chips are a bit annoying, though, because they like to to stick to everything and don&amp;rsquo;t want to be vacuumed up.&lt;/p&gt;&#10;&lt;p&gt;Anyways, the quality ist not fully satisfying yet so I&amp;rsquo;ll keep adding knowledge and experience to yield some improvements in the future.&lt;/p&gt;&#10;</description></item><item><title>QR-codengrave V1.1 / V1.2</title><link>https://blog.schallbert.de/en/qr-codengrave1-1/</link><pubDate>Sun, 12 Feb 2023</pubDate><author>Schallbert</author><guid>https://blog.schallbert.de/en/qr-codengrave1-1/</guid><description type="html">&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2023-02-12_qr-codengrave-thumb.jpg"&#10; class="post-cover"&#10; alt="Image: Splash screen of QR-codengrave V1.1"&#10; title="QR-codengrave V1.1 / V1.2" /&gt;&#10;&lt;h2 id="in-a-nutshell"&gt;In a nutshell&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Faster Engrave algorithm&lt;/li&gt;&#10;&lt;li&gt;Several bugfixes&lt;/li&gt;&#10;&lt;li&gt;Usability improvements&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="demo-video"&gt;Demo video&lt;/h2&gt;&#10;&lt;figure class="media-frame media-frame--center media-frame--video"&gt;&#10; &lt;div class="media-video"&gt;&lt;iframe&#10; src="https://makertube.net/videos/embed/jFD7nxftVHjUy6LKPCFE3N"&#10; title="QR-codengrave Quick Demo"&#10; loading="lazy"&#10; allow="autoplay; fullscreen; picture-in-picture"&#10; allowfullscreen&#10; style="width: 100%; height: auto; min-height: 315px; aspect-ratio: 16/9;"&#10; &gt;&lt;/iframe&gt;&lt;/div&gt;&#10; &lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;QR-codengrave Quick Demo&lt;/span&gt;&lt;a href="https://makertube.net/videos/embed/jFD7nxftVHjUy6LKPCFE3N" class="attr-link" target="_blank" rel="noopener noreferrer"&gt;↗&lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;h2 id="version-11"&gt;Version 1.1&lt;/h2&gt;&#10;&lt;h3 id="engrave-algorithm-upgrade"&gt;Engrave algorithm upgrade&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;The algorithm now scans the lines horizontally&lt;/li&gt;&#10;&lt;li&gt;One line &amp;ldquo;Left-to-Right&amp;rdquo;, next line &amp;ldquo;Right-to-Left&amp;rdquo; etc. to reduce machine travel&lt;/li&gt;&#10;&lt;li&gt;prefers lines over dots, and longer lines over shorter ones for time optimization&lt;/li&gt;&#10;&lt;li&gt;draws lines vertically or horizontally&lt;/li&gt;&#10;&lt;li&gt;rapid move positioning now is packed into vectors that can be called to new Points(X, Y) simultaneously, not only one dimension at a time&lt;/li&gt;&#10;&lt;li&gt;New algorithm just needs 80% of the time for engraving compared to the old one&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2023-02-12_qr-codengrave_algo.jpg" alt="Image: Algorithm comparison 1.0 vs. 1.1"&gt;&lt;/figure&gt;&#10;&lt;h3 id="bugfixes"&gt;Bugfixes&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;splash image (&lt;code&gt;qruwu.jpg&lt;/code&gt;) is not shown on startup when &lt;code&gt;Persistence.dat&lt;/code&gt; is not available&lt;/li&gt;&#10;&lt;li&gt;Crash when pressing &lt;code&gt;Stop Draw&lt;/code&gt; although drawing has never been initiated before&lt;/li&gt;&#10;&lt;li&gt;Crash when adding a tool on an empty selecion list&lt;/li&gt;&#10;&lt;li&gt;Initialization of application with no tool selected disables dropdown menu&lt;/li&gt;&#10;&lt;li&gt;Fix a calculation error in QR-code size estimation&lt;/li&gt;&#10;&lt;li&gt;Fix an error pixel width calculation for tapered tools&lt;/li&gt;&#10;&lt;li&gt;Actually the currently selected tool is not shown &amp;ldquo;selected&amp;rdquo; in the dropdown on startup&lt;/li&gt;&#10;&lt;li&gt;QR-codes can grow larger than the display area&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="usability-improvements"&gt;Usability improvements&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Change default tool name from &lt;code&gt;name&lt;/code&gt; to &lt;code&gt;default&lt;/code&gt; for clarity&lt;/li&gt;&#10;&lt;li&gt;Make non-tapered (V-cut) tool the default tool for better usability&lt;/li&gt;&#10;&lt;li&gt;Setting a new XY-zero offset became more intuitive (Y down is negative, X right is positive)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="version-12"&gt;Version 1.2&lt;/h2&gt;&#10;&lt;p&gt;Minor change over 1.1, most importantly a Bugfix that could lead to tool change macro not being called.&#10;In addition, tapered tool angles are now taken into account when calculating track width and QR-code engrave size.&lt;/p&gt;&#10;&lt;h3 id="bugfixes-1"&gt;Bugfixes&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Tool select &lt;code&gt;Tx&lt;/code&gt; and tool change command &lt;code&gt;M06&lt;/code&gt; are now in the same line of the G-code to correctly trigger tool change macros&lt;/li&gt;&#10;&lt;li&gt;Actual selected tool not shown on startup, instead the first tool of the list was shown&lt;/li&gt;&#10;&lt;li&gt;QR-code drawing could grow larger than the screen. This is fixed now.&lt;/li&gt;&#10;&lt;li&gt;Crash fix when trying to update status although no engrave parameters available&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="usability-improvements-1"&gt;Usability improvements&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Add application version to G-code as comment&lt;/li&gt;&#10;&lt;li&gt;Add &lt;code&gt;qr_&lt;/code&gt; prefix to G-code save-to dialog&amp;rsquo;s default name&lt;/li&gt;&#10;&lt;li&gt;Improve job duration estimate&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="availability"&gt;Availability&lt;/h2&gt;&#10;&lt;p&gt;The latest release is available for download &lt;a href="https://github.com/Schallbert/QR-codengrave/releases" target="_blank" rel="noopener noreferrer" class="external-link"&gt;here&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;, free of charge for home and private use. For more info on the project, please find the &lt;a href="https://github.com/Schallbert/QR-codengrave" target="_blank" rel="noopener noreferrer" class="external-link"&gt;readme&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; and the &lt;a href="https://blog.schallbert.de/en/projects/qr-codengrave/"&gt;background information&lt;/a&gt; linked here.&lt;/p&gt;&#10;&lt;h2 id="migration-from-an-earlier-version"&gt;Migration from an earlier version&lt;/h2&gt;&#10;&lt;p&gt;It is possible to copy the persistence file to the new version&amp;rsquo;s directory. This way, saved tool lists, engrave parameters, and XY0 offsets can be ported to the new version. How it&amp;rsquo;s done:&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Navigate into &lt;code&gt;src/assets&lt;/code&gt; of your QR-codengrave folder.&lt;/li&gt;&#10;&lt;li&gt;copy &lt;code&gt;Persistence.dat&lt;/code&gt; to a temporary folder or e.g. your Desktop.&lt;/li&gt;&#10;&lt;li&gt;Remove the current installation by deleting the folder.&lt;/li&gt;&#10;&lt;li&gt;Download the latest release, move it where your previous release was deployed.&lt;/li&gt;&#10;&lt;li&gt;Move the &lt;code&gt;Persistence.dat&lt;/code&gt; into &lt;code&gt;src/assets&lt;/code&gt; of your new installation and start the application.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;</description></item><item><title>Vacuum Pump</title><link>https://blog.schallbert.de/en/cnc-vacuum-pumps/</link><pubDate>Fri, 28 Oct 2022</pubDate><author>Schallbert</author><guid>https://blog.schallbert.de/en/cnc-vacuum-pumps/</guid><description type="html">&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-10-28_vacuumpump-thumb.jpg"&#10; class="post-cover"&#10; alt="Image of a Sidechain compressor vacuum pump"&#10; title="Vacuum Pump" /&gt;&#10;&lt;h2 id="what-is-it"&gt;What is it?&lt;/h2&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-10-28_manometer.jpg" alt="Image: Vacuum intake manifold"&gt;&lt;/figure&gt;&#10;A vacuum pump is an appliance that is able to evacuate a vessel, i.e., to reduce the amount of gas atoms within a container. It does not seem to be possible to shrink the number of atoms within to 0, but of course this is by far not required for our application in which a so-called technical coarse vacuum is sufficient.&lt;/p&gt;&#10;&lt;p&gt;There are different types of vacuum pumps with specific properties that I&amp;rsquo;ll try to shed a light on later.&lt;/p&gt;&#10;&lt;h2 id="how-does-it-clamp-workpieces"&gt;How does it clamp workpieces?&lt;/h2&gt;&#10;&lt;p&gt;For clamping with the use of a vacuum table (see my related &lt;a href="https://blog.schallbert.de/en/why-vacuum-table/"&gt;post&lt;/a&gt;), we&amp;rsquo;re only interested in the pressure difference the vacuum pump generates versus ambient pressure which is (&lt;code&gt;103000Pa = 10.3N/cm² = 1kg/cm²&lt;/code&gt;). This is the maximum clamping force a vacuum table can generate in theory.&lt;/p&gt;&#10;&lt;h3 id="pump-capacity-vs-vacuum-pressure"&gt;Pump capacity vs. vacuum pressure&lt;/h3&gt;&#10;&lt;p&gt;The key parameters of any vacuum pump are the minimum absolute pressure they are able to draw in &lt;code&gt;hPa&lt;/code&gt; (at low or even zero throughput) and the volume of air they&amp;rsquo;re able to put through within a given time in &lt;code&gt;m³/h&lt;/code&gt; (at low or zero pressure difference).&lt;/p&gt;&#10;&lt;p&gt;This is comparable to the electrical world, where open circuit voltage (pressure difference) and short circuit current (throughput) e.g. in photovoltaic cells are given parameters to calculate an optimal point of operation.&lt;/p&gt;&#10;&lt;p&gt;Here, you can add more cells to either get more current or more voltage from the system by connecting them together in parallel or in series. For vacuum pumps, it&amp;rsquo;s often more practical to choose a more powerful motor that drives the pump than using series/parallel operation. But still, there&amp;rsquo;s a trade-off to make. Certain pump types are very well suited to generate lots of throughput, but then are lacking vacuum pressure and vice versa, pumps that have very good vacuum ratings often have considerably less throughput than other pump types with the same power level.&lt;/p&gt;&#10;&lt;p&gt;If you want both, prepare to spend a lot of money. So again, it all comes down to what you need for your application.&lt;/p&gt;&#10;&lt;h3 id="pump-characteristics"&gt;Pump characteristics&lt;/h3&gt;&#10;&lt;p&gt;Max. Volume and max. pressure difference can be entered as data points in a XY-diagram, and a line can be drawn between these two points which gives an approximation of overall pump behavior. While the position of these points largely depend on the pump&amp;rsquo;s motor power, the line&amp;rsquo;s slope is determined by pump type and design.&lt;/p&gt;&#10;&lt;p&gt;Below find a comparison of these different pump types. For this example, I arbitrarily chose a motor power of &lt;code&gt;1.5kW&lt;/code&gt; and selected some pumps with that rating of which I could find datasheets online.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-10-28_pump_type_compare.jpg" alt="Image: XY-line graph for pump types of same power"&gt;&lt;/figure&gt;&#10;&lt;p&gt;Of course this approximation is very rough and holds true for high-throughput pumps better than for deep vacuum pump types. For the latter, the function looks more like a hyperbolic cosecant (see image below) than a linear graph due to their lower tolerance for leakage air.&lt;/p&gt;&#10;&lt;p&gt;We can use the pump&amp;rsquo;s characteristic curve the following way: When we have a given air volume demanded by our application (like a vacuum table), we can read the reachable pressure difference for this specific pump. This way, you can pre-select a pump type depending on your requirements.&lt;/p&gt;&#10;&lt;h2 id="pump-types"&gt;Pump types&lt;/h2&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-10-28_pump_types.jpg" alt="Image: Comparison of vaccuum pump leakage behavior"&gt;&lt;/figure&gt;&#10;There are a multitude of pump types in the industry. They have different principles of operation and - of course - are suited for different applications. I&amp;rsquo;ll concentrate on the four types that are most often used for machining.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Radial blower (High Throughput)&lt;/li&gt;&#10;&lt;li&gt;Sidechannel compressor (High Throughput)&lt;/li&gt;&#10;&lt;li&gt;Piston pump (Deep vacuum)&lt;/li&gt;&#10;&lt;li&gt;rotary vane pump (Deep vacuum)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="radial-blower"&gt;Radial blower&lt;/h3&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-10-28_radialblower.jpg" alt="Image: Radial blower symbol view"&gt;&lt;/figure&gt;&#10;Radial blowers accelerate air between their blades. Air enters the blower at the center of the fan which creates a lower pressure here than in the surrounding air. Then, it is pressed towards the outside due to centrifugal forces as the fan rotates, and is exhausted at the perimeter.&lt;/p&gt;&#10;&lt;p&gt;Radial blowers are used for many applications like vacuum cleaners, inflatable castle blowers, forced air delivery for combustion processes, ventilation systems etc. They are simple, come cheap, and are well suited for applications that require very high throughput. The downsides are high noise levels and low pressure differences relative to most other compressor types.&#10;However, if you&amp;rsquo;re working with large surface sheets or porous material, the radial blower e.g. of a forced-air cooled vacuum cleaner motor might be just the right thing for your application.&lt;/p&gt;&#10;&lt;h3 id="sidechannel-compressor"&gt;Sidechannel compressor&lt;/h3&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-10-28_sidechaincompressor.jpg" alt="Image: Sidechain compressor symbol view"&gt;&lt;/figure&gt;&#10;Sidechannel compressors combine high capacity with medium pressure difference. They are built single or multi-stage (series circuit) and thus can favour higher capacity or pressure difference according to your needs. Like radial blowers, they interact with the medium only and thus do not have part to part friction that would require frequent maintenance. Like radial blowers, they tolerate vapours and can even be used in dusty environments.&lt;/p&gt;&#10;&lt;p&gt;If you want the sidechannel compressor to provide high pressure differences, you&amp;rsquo;ll have to buy very powerful (thus expensive) drives as their characteristic curves are shallow. Their noise can be efficiently muffled, but they often carry a higher price tag than comparable radial blowers.&lt;/p&gt;&#10;&lt;p&gt;In this list, they are &amp;ldquo;the jack of all trades&amp;rdquo;. The vacuum they provide can be upgraded to high-enough levels for most applications that don&amp;rsquo;t require extremely strong clamping and their price is moderate. Cost of operation is determined by the electrical power they consume.&lt;/p&gt;&#10;&lt;p&gt;I found this in-depth description of the sidechannel compressor helpful: &lt;a href="https://gutmbh.de/SKVM.htm" target="_blank" rel="noopener noreferrer" class="external-link"&gt;GutmbH&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;&#10;&lt;h3 id="piston-pump"&gt;Piston pump&lt;/h3&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-10-28_pistonpump.jpg" alt="Image: Piston pump symbol view"&gt;&lt;/figure&gt;&#10;Piston pumps are commonly used in compressors and vacuum pumps alike. They provide deep vacuum levels at a low capacity, don&amp;rsquo;t use much space in your shop, and are reasonably priced.&lt;/p&gt;&#10;&lt;p&gt;On the other hand, their output stream is pulsating and they tend to be noisy. They also cannot handle liquids or vapours and have higher requirements on maintenance than frictionless pumps like sidechannel compressors or radial blowers. I did not find so many notes about their usage for vacuum tables, but that does not mean they&amp;rsquo;re not suited for this specific application.&lt;/p&gt;&#10;&lt;h3 id="rotary-vane-pump"&gt;Rotary vane pump&lt;/h3&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-10-28_rotaryvanepump.jpg" alt="Image: Rotary vane pump symbol view"&gt;&lt;/figure&gt;&#10;Rotary vane pumps come in two classes again: Dry-running and oil-lubricated.&#10;While dry-running pumps have similar pressure data at higher capacity than piston pumps with the same power rating, oil-lubricated rotary vane pumps can provide a much deeper vacuum level and even higher capacity with the same power rating. On the downside, they commonly need oil warmup and de-gasing cooldown runs, and have a higher maintenance cost due to their oil system.&lt;/p&gt;&#10;&lt;p&gt;Their principle of operation: A motor drives a slotted dish mounted excentrically within the vacuum chamber. In the slots, vanes are placed that can move freely. As the pump&amp;rsquo;s motor accelerates, the vanes are pressed against the vacuum chamber&amp;rsquo;s walls, sealing it against the other cavities. This way, compressible media can be transported only.&lt;/p&gt;&#10;&lt;p&gt;Rotary vane pumps deliver a continuous flow at low noise levels. The vanes are expendable parts that need replacement from time to time, which is especially true for the dry-running specimen. If you just compare capacity, they usually cost twice to three times as much as sidechannel compressors.&lt;/p&gt;&#10;&lt;p&gt;You should get one of theese if you often mill small workpieces at high lateral forces, e.g. mild steel. In this scenario, you can even keep your costs at bay when you&amp;rsquo;re not cutting through as in that case, leakage air is no issue of yours so you can choose a very low pump capacity.&lt;/p&gt;&#10;&lt;p&gt;If you&amp;rsquo;d like more detail, please find this well-made page (in German) from &lt;a href="https://gutmbh.de/Vakuumpumpen.htm" target="_blank" rel="noopener noreferrer" class="external-link"&gt;GutmbH&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;&#10;&lt;h2 id="let-the-workpiece-determine-your-pump"&gt;Let the workpiece determine your pump&lt;/h2&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-10-21_table_operating_principle.jpg" alt="Image: Vacuum table principle of operation - pressure difference causes downforce"&gt;&lt;/figure&gt;&#10;OK, so you chose the type and size of vacuum table you require for your jobs. Great! Now all you still need is a vacuum source and a way to feed the vacuum into your table.&lt;/p&gt;&#10;&lt;p&gt;As you can see in the figure, the downforce you get highly depends on the surface area of your workpiece. The smaller your workpiece is, the more pressure difference you require to maintain the same force - with the atmospheric pressure being one limit and the absolute vacuum the other. This makes vacuum tables both a very homogenuous but &amp;ldquo;weak&amp;rdquo; clamping method.&lt;/p&gt;&#10;&lt;p&gt;Now, what you actually want is to protect your workpiece both from being lifted off the of the machine bed by the tool, at the same time avoiding parallel shifts and rotation of your workpiece while machining. So we have to calculate the downfore created. In a second step, we want to convert that downforce into lateral forces that have to be higher than the maximum lateral force applied by your tool so your workpiece keeps its position.&lt;/p&gt;&#10;&lt;h3 id="downforce"&gt;Downforce&lt;/h3&gt;&#10;&lt;p&gt;The clamping force to your machine bed is easy to calculate:&lt;/p&gt;&#10;$$f_{clamp}= F_N = \Delta p A + F_g $$&lt;p&gt;It is measured in &lt;code&gt;Newton&lt;/code&gt; and determined by the pressure difference at the workpiece top/bottom its surface and its weight that gravity forces downwards.&lt;/p&gt;&#10;&lt;p&gt;The value you require heavily depends on tool size and geometry, workpiece material, and feed/speed.&#10;You&amp;rsquo;ll require a lot more downforce for a scenario in which you&amp;rsquo;re milling small workpieces of sturdy materials like HPL with large tool spiral angles and tool diameters at high feeds and low spindle RPM than for cutting plywood sheets with small-diameter straight flute bits at high RPM and low feed rates.&lt;/p&gt;&#10;&lt;h3 id="lateral-force"&gt;Lateral force&lt;/h3&gt;&#10;&lt;p&gt;To do the translation of downforce into lateral forces, we&amp;rsquo;ll introduce the &lt;a href="https://en.wikipedia.org/wiki/Friction#Coefficient_of_friction" target="_blank" rel="noopener noreferrer" class="external-link"&gt;coefficient of static friction&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; \(µ_s\).&lt;/p&gt;&#10;&lt;p&gt;Let&amp;rsquo;s assume you use a sheet of rubber between a metal workpiece and your vacuum table. We further assume a coefficient of static friction &lt;code&gt;µs = 0.7&lt;/code&gt; that &lt;a href="https://www.schweizer-fn.de/stoff/reibwerte/reibwerte.php" target="_blank" rel="noopener noreferrer" class="external-link"&gt;I found online&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; which seems really conservative for multiple reasons: First, it doesn&amp;rsquo;t take surface roughness of both rubber and metal into account, and, more importantly, we&amp;rsquo;re pressing the workpiece &lt;em&gt;into&lt;/em&gt; the rubber which yields a form-fit bonding that increases breakaway force a lot.&lt;/p&gt;&#10;&lt;p&gt;Anyways, all you need to do here is to take your downforce calculated earlier and multiply it with this factor:&lt;/p&gt;&#10;$$F_s = F_N µ_s$$&lt;p&gt;As you can see, there are two things you can manipulate with the same linear weighing: The material pairing of workpiece surface and machine table determine the coefficient, and the downforce created by your pump.&lt;/p&gt;&#10;&lt;h3 id="rotation"&gt;Rotation&lt;/h3&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-10-28_rotatingworkpiece.jpg" alt="Image: Worst-case scenario for rotating a workpiece out of position"&gt;&lt;/figure&gt;&#10;This calculation becomes a bit more tricky. Interestingly, you&amp;rsquo;ll require less force to rotate a workpiece out of position than to parallel-shift it away. This is why:&lt;/p&gt;&#10;&lt;p&gt;When you rotate, say, your mobile phone on your desk around its center (touching it at its top-right corner), not all imaginable points on that phone have to move the same distance. Points closer to the center of rotation will have to move a shorter distance for the same angle of rotation than points at the tip of the phone. For a parallel shift, however, every imaginary point had to move the same distance.&lt;/p&gt;&#10;&lt;p&gt;This pheonomenon seems independent of the object&amp;rsquo;s shape once you compare travel of the outermost point of that object in relation to its center of rotation.&lt;/p&gt;&#10;&lt;p&gt;For vacuum clamping, worst-case workpiece and job combination is long, sleek workpieces that need a slot to be milled orthogonally to its longest dimension at the outer edge, creating the highest torque that might lead to rotation combined with little surface available for vacuum clamping.&lt;/p&gt;&#10;&lt;p&gt;Best-case of course are round or square workpieces where you cut close to their geometrical center.&lt;/p&gt;&#10;&lt;h2 id="which-pump-should-you-buy"&gt;Which pump should you buy?&lt;/h2&gt;&#10;&lt;p&gt;Ok, let&amp;rsquo;s sum it up:&lt;/p&gt;&#10;&lt;p&gt;It&amp;rsquo;s always a combination of workpiece material (easy/hard to mill, low/high static coefficient of friction), minimum workpiece size (the bigger, the easier it becomes to generate high clamping forces), leakage air tolerance (porous surfaces, cutting all the way through), vacuum table type and size, and milling parameters that determine which pump to buy.&lt;/p&gt;&#10;&lt;p&gt;You should collect some experience before buying a vacuum clamping solution: What is your typical workpiece size and material? Do you often do cutouts? Do you require quick execution that exposes your parts to high forces?&lt;/p&gt;&#10;&lt;h3 id="some-recommended-combinations"&gt;Some recommended combinations&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Aluminium, very small workpieces, not cutting through: Low capacity piston or rotary vane pump, grid vacuum table&lt;/li&gt;&#10;&lt;li&gt;Wood and MDF, large workpieces, cutting through a lot: radial blower or single stage sidechain compressor, porous surface table&lt;/li&gt;&#10;&lt;li&gt;HPL, small workpieces, cutting through: High capacity rotary vane pump or dual stage sidechain compressor, hole grid table, optimized CAM strategies for &amp;ldquo;late cut-throughs&amp;rdquo; at low depth increment&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="what-pump-i-chose"&gt;What pump I chose&lt;/h3&gt;&#10;&lt;p&gt;I ordered a &lt;a href="https://blog.schallbert.de/en/why-vacuum-table/#my-selection"&gt;relatively large table&lt;/a&gt; (&lt;code&gt;730 x 655 mm&lt;/code&gt;) with &lt;code&gt;0.5mm&lt;/code&gt; holes arranged in a &lt;code&gt;10mm grid&lt;/code&gt;. As I&amp;rsquo;m still testing a lot of different materials for prototyping purposes, my workpieces never look alike or have similar sizes. That&amp;rsquo;s why I had to swallow the pill of spending a lot of money on a pretty capable pump that would both do high throughput for bigger wooden sheets that I&amp;rsquo;d create cut-throughs in and deep vacuum levels for small aluminium workpieces.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-10-28_selection.jpg" alt="Image: Grid vacuum table"&gt;&lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;Rotary vane pump comparison (Image courtesy of Stritzelberger GmbH)&lt;/span&gt;&lt;a&#10; href="https://www.vakuumtisch.de/"&#10; class="attr-link"&#10; aria-label="Attribution 1"&#10; &gt;&#10; &lt;sup class="attr-id"&gt;[1]&lt;/sup&gt;&#10; &lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;The pump I chose is a dry-running vane-type vacuum pump with a capacity of &lt;code&gt;40m³/h&lt;/code&gt; and a maximum pressure difference of &lt;code&gt;880mBar&lt;/code&gt;. Its air leakage vs. pressure diagram should look similar to the marked characteristic in the plot above. It weighs approximately &lt;code&gt;40kg&lt;/code&gt; and uses a &lt;a href="https://en.wikipedia.org/wiki/Induction_motor" target="_blank" rel="noopener noreferrer" class="external-link"&gt;3-phase induction motor&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; with a nominal power of &lt;code&gt;1.3kW&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;I am using a version where the motor is operated on a single-phase with help of a capacitor due to the fact that I do not have a three-phase outlet available. I also added a motor circuit breaker to help protect the machine against overload and overcurrent.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-10-28_my_dst40_pump.jpg" alt="Image: My DST40 dry-running vane-type vacuum pump"&gt;&lt;/figure&gt;&#10;&lt;h3 id="is-it-loud"&gt;Is it loud?&lt;/h3&gt;&#10;&lt;p&gt;It depends on how you define loud, of course. You can compare its &lt;code&gt;68dB(A)&lt;/code&gt; noise level - measured at a distance of 1 meter - with a typical vacuum cleaner, just that it sounds pretty different. When the CNC machine operates, e.g. running through material with a fairly big endmill, it is still quiet and you won&amp;rsquo;t realize the pump is on.&lt;/p&gt;&#10;&lt;p&gt;I even made a short video for you to view and hear for yourself:&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center media-frame--video"&gt;&#10; &lt;div class="media-video"&gt;&lt;iframe&#10; src="https://makertube.net/videos/embed/9CsPToFRYf3R7S6FC87gRZ"&#10; title="Rotary Vane Vacuum Pump - demonstration"&#10; loading="lazy"&#10; allow="autoplay; fullscreen; picture-in-picture"&#10; allowfullscreen&#10; style="width: 100%; height: auto; min-height: 315px; aspect-ratio: 16/9;"&#10; &gt;&lt;/iframe&gt;&lt;/div&gt;&#10; &lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;Rotary Vane Vacuum Pump - demonstration&lt;/span&gt;&lt;a href="https://makertube.net/videos/embed/9CsPToFRYf3R7S6FC87gRZ" class="attr-link" target="_blank" rel="noopener noreferrer"&gt;↗&lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;</description></item><item><title>CNC Vacuum Table</title><link>https://blog.schallbert.de/en/why-vacuum-table/</link><pubDate>Fri, 21 Oct 2022</pubDate><author>Schallbert</author><guid>https://blog.schallbert.de/en/why-vacuum-table/</guid><description type="html">&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-10-21_table_gr_thumb.jpg"&#10; class="post-cover"&#10; alt="Image of my hole grid vacuum table"&#10; title="CNC Vacuum Table" /&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-10-21_table_operating_principle.jpg" alt="Image: Vacuum table principle of operation - pressure difference causes downforce"&gt;&lt;/figure&gt;&#10;Let&amp;rsquo;s assume you clicked this article on purpose and didn&amp;rsquo;t just &amp;ldquo;surf the internet&amp;rdquo;. So you already know what a vacuum table is (If not, continue reading &lt;a href="https://en.wikipedia.org/wiki/Vacuum_table" target="_blank" rel="noopener noreferrer" class="external-link"&gt;here&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;). Its principle of operation is depicted in the figure for your reference. You probably also know there are multiple types of tables serving different purposes. And you maybe even know that you want one.&lt;/p&gt;&#10;&lt;p&gt;Great! This article both describes my journey towards acquiring this piece of tech and also will try to help you select the right one. Let&amp;rsquo;s start with a little interview.&lt;/p&gt;&#10;&lt;h2 id="why-do-you-want-a-vacuum-table"&gt;Why do you want a vacuum table?&lt;/h2&gt;&#10;&lt;p&gt;This is &lt;em&gt;the&lt;/em&gt; most important question.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;🤩 Do you want it because it&amp;rsquo;s expensive and looks great?&lt;/li&gt;&#10;&lt;li&gt;😪 Or because you&amp;rsquo;re tired of re-adjusting clamps?&lt;/li&gt;&#10;&lt;li&gt;😖 Or because you broke a lot of endmills running through the former by accident?&lt;/li&gt;&#10;&lt;li&gt;😨 Or rather because you experienced that workpieces tend to learn how to fly when the adhesive force of your tape is just not high enough?&lt;/li&gt;&#10;&lt;li&gt;😎 Perhaps because you`re going professional and you want to cut preparation and production time?&lt;/li&gt;&#10;&lt;li&gt;😕 Or maybe because the work results are not as good as they could (or should) be?&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="my-reasons-quality-and-speed"&gt;My Reasons: Quality and Speed&lt;/h3&gt;&#10;&lt;p&gt;I&amp;rsquo;d go for the latter. I have the following issues I hope a vacuum table can fix:&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;When engraving coated materials (Dibond, HPL etc.), slight Z0 surface height differences ruin the work, especially on bigger workpieces&lt;/li&gt;&#10;&lt;li&gt;Cutouts from a bigger sheet have to have taps to keep them from slinging away. These taps are cut away later but are still visible on the end product.&lt;/li&gt;&#10;&lt;li&gt;When I don&amp;rsquo;t want to use taps, I have to leave an onion skin at the lower layer. With wood, this skin has to be thicker and I need a second job for chamfering which adds time expenditure.&lt;/li&gt;&#10;&lt;li&gt;Some sheets (especially wood) are concave. Thus, when trying to go all the way through, some parts are fine and others are not fully cut.&lt;/li&gt;&#10;&lt;li&gt;My machine &lt;a href="https://blog.schallbert.de/en/cnc-vibrates/"&gt;suffers from vibrations&lt;/a&gt;, especially when using 2-flute wood roughers and high Z+ depth per pass at aggressive feeds. This might be because I use just a couple of clamps to save time and to keep travel paths clear.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h2 id="which-type-of-table-do-you-need"&gt;Which type of table do you need?&lt;/h2&gt;&#10;&lt;p&gt;Ok, you know why you want one, now we should find out which type is the correct one for your jobs. Note that vacuum tables are most suitable when you&amp;rsquo;re milling not too flexible sheet material as the table&amp;rsquo;s clamping force depends on the surface that is in touch with it.&lt;/p&gt;&#10;&lt;p&gt;There are three families of vacuum tables:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Grid tables&lt;/li&gt;&#10;&lt;li&gt;Hole grid tables&lt;/li&gt;&#10;&lt;li&gt;Porous surface tables&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="grid-tables"&gt;Grid tables&lt;/h3&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-10-21_table_r.jpg" alt="Image: Grid vacuum table"&gt;&lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;A grid vacuum table (Image courtesy of Stritzelberger GmbH)&lt;/span&gt;&lt;a&#10; href="https://www.vakuumtisch.de/Grid-vacuum-table-R-Series"&#10; class="attr-link"&#10; aria-label="Attribution 1"&#10; &gt;&#10; &lt;sup class="attr-id"&gt;[1]&lt;/sup&gt;&#10; &lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;Grid tables have a single (and often centrally placed) suction hole. Their vaccuum area is defined by a (foam) rubber band that can be placed on the grid within the outline of the workpiece. As the rubber band is compressed by the workpiece&amp;rsquo;s downforce created by the vacuum, the seal is airtight and just very few leakage air has to be evacuated. That&amp;rsquo;s why they have low requirements on the vacuum pump&amp;rsquo;s required capacity. They can also be used to clamp materials with rough surfaces due to the rubber band, e.g. saw-cut wood. Grid tables&amp;rsquo; designs are often simple and thus affordable.&lt;/p&gt;&#10;&lt;p&gt;Altough they really shine here, there are two possibly vital disadvantages: First, when you&amp;rsquo;re doing singletons, you&amp;rsquo;ll have to place the rubber band anew for each workpiece. So your XY Zero changes from part to part as most often the workpiece has to be placed centrally on the table. More sophisticated grid tables may have multiple suction holes, and the active one can be selected by the user. They may even offer fences and excenter stops to reduce set-up time. Still, you might not be able to cut any form you like as your limit is the grid.&lt;/p&gt;&#10;&lt;p&gt;Second and more important, you run into issues once your part has to be cut &amp;ldquo;through&amp;rdquo;. This will immediately make the vacuum collapse and the pump will be overwhelmed with leakage unless you take precautions (build adapter plates or underlay fences etc.)&lt;/p&gt;&#10;&lt;p&gt;In short:&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Grid tables work very well if you don&amp;rsquo;t cut through your workpieces.&lt;/li&gt;&#10;&lt;li&gt;Grid tables have lower requirements on the vacuum pump and can even hold parts with rough or slightly uneven surfaces.&lt;/li&gt;&#10;&lt;li&gt;Grid tables are cost effective but may require additional care when zeroing in workpieces with different dimensions.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h3 id="hole-grid-tables"&gt;Hole grid tables&lt;/h3&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-10-21_table_seal.jpg" alt="Image: Hole grid vacuum table"&gt;&lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;A hole grid vacuum table (Image courtesy of Stritzelberger GmbH)&lt;/span&gt;&lt;a&#10; href="https://www.vakuumtisch.de/Rastervakuumtisch-R-Serie"&#10; class="attr-link"&#10; aria-label="Attribution 2"&#10; &gt;&#10; &lt;sup class="attr-id"&gt;[2]&lt;/sup&gt;&#10; &lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;Hole grid tables have - as the name suggests - blind holes that are aligned on a grid. Within these holes, there&amp;rsquo;s a tiny suction hole that&amp;rsquo;s size matches the material&amp;rsquo;s properties you&amp;rsquo;re machining predominantly - tiny little holes for smooth or polished surfaces like face milled metal, and still tiny but bigger ones e.g. for hard wood and other materials that may have higher air leakages. They often have switchable vacuum chambers below these holes so that the area of where the vacuum is applied can be changed. Uncovered area around the workpiece can be covered with a foil to raise vacuum forces and efficiency. These tables often consist of multiple parts, e.g. a bottom layer for mounting to the machine bed, a middle layer to embed evacuation ducts and the top layer carrying the hole grid.&lt;/p&gt;&#10;&lt;p&gt;These tables can clamp workpiece of any shape that have flat bottom surfaces. When your workpieces are really small, of course, the clamping force will diminish - that&amp;rsquo;s physics. The small suction hole allows for through-cuts: Affected holes do loose their capability to hold the workpiece in place on one hand; but nearby holes on the grid are merely affected as air leakage is limited by the &amp;ldquo;lost&amp;rdquo; suction hole&amp;rsquo;s diameter even at high pressure differences.&#10;Aligning the workpiece is even simpler with hole grid tables as their grid&amp;rsquo;s holes can be used to hold locator pins that build a fence.&lt;/p&gt;&#10;&lt;p&gt;Their disadvantages: These tables tend to be more expensive as their design is more complex. They often have multiple vacuum circuits and thus require more connections to your vacuum infrastructure (that have to be kept leak-free). Their tolerance of leakage air and lateral inflow means that your vacuum pump requires to have a higher capacity.&lt;/p&gt;&#10;&lt;p&gt;In short:&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Hole grid tables support any sheet shape as long as its surface is flat and big enough to meet your clamping requirements.&lt;/li&gt;&#10;&lt;li&gt;Hole grid tables tolerate through-cuts at the cost of higher requirements on pump capacity.&lt;/li&gt;&#10;&lt;li&gt;Hole grid tables make workpiece alignment a cake walk.&lt;/li&gt;&#10;&lt;li&gt;Hole grid tables are complex and often expensive.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h3 id="porous-surface-tables"&gt;Porous surface tables&lt;/h3&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-10-21_table_porous.jpg" alt="Image: Porous surface table, MDF top layer"&gt;&lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;A Porous surface table (Image courtesy of &amp;#39;Jens´ Vakuumtische&amp;#39;)&lt;/span&gt;&lt;a&#10; href="https://hobbyline.info/forum/index.php?thread/366-neue-erkenntnisse-von-meinem-vakuumtisch/&amp;amp;pageNo=1"&#10; class="attr-link"&#10; aria-label="Attribution 3"&#10; &gt;&#10; &lt;sup class="attr-id"&gt;[3]&lt;/sup&gt;&#10; &lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;These special kind of tables do not need holes or channels on their surface at all - their top surface, instead, is air-permeable. I&amp;rsquo;ve seen specimen where the top layer is made of MDF so actually it&amp;rsquo;s not a big problem if you accidentally got Z0 wrong - just place a new sheet of MDF on top and off you go again.&lt;/p&gt;&#10;&lt;p&gt;The tables are lightweight and - with a lot of knowledge about materials science and thin-wall milling - relatively easy to construct as a DIY project. There are many examples out there on the internet.&#10;They work best with a high-volume blower and thus often do not support large pressure differences - so as long as your workpieces are not tiny, that&amp;rsquo;s not an issue. The tables are suitable for cutting all the way through as well. They are cheap to buy and to upgrade with additional features, and a vacuum cleaner with forced cooling might already be enough to power it up.&lt;/p&gt;&#10;&lt;p&gt;The downsides: Might be subject to vibrations due to their low weight, best not to be operated with cooling liquids, unfavorable static friction coefficient with most pairing materials due to MDF (thus more surface needed to protect from slipping).&lt;/p&gt;&#10;&lt;p&gt;In short:&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Porous surface tables are cheaper to have and to operate.&lt;/li&gt;&#10;&lt;li&gt;Porous surface tables are well suited for big workpieces and materials that don&amp;rsquo;t require cooling liquids.&lt;/li&gt;&#10;&lt;li&gt;Porous surface tables may not be perfect for high precision milling.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h3 id="what-all-these-types-have-in-common"&gt;What all these types have in common&lt;/h3&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-10-21_table_vacuum_principle.jpg" alt="Image: How surface irregularities help keep pressure differences homogenous"&gt;&lt;/figure&gt;&#10;Common to all these types is, that the downforce can safely be calculated the same way for a given vacuum pressure applied to &lt;em&gt;your workpiece&lt;/em&gt; (not necessarily identical with what you see on your gauge!). No matter if you have a grid, a hole grid table or a porous surface table, you can always calculate the full surface of your workpiece (and not just the sum of holes&amp;rsquo; area within the workpiece&amp;rsquo;s outer bounds). This is because microscopic surface irregularities of both table and workpiece material allow a lateral airflow into the suction area of your table, making pressure differences between atmosphere and vacuum pump side homogenous.&lt;/p&gt;&#10;&lt;p&gt;On the other hand, this is also true for your workpiece&amp;rsquo;s outline, so there will always be a little leakage air in your system with the side effect that clamping force deteriorates the more you approach the peripheral zone.&lt;/p&gt;&#10;&lt;p&gt;That said, cutting all the way through your material will create extra peripheral zones that can, when situated too close to each other, even have zero clamping force left.&lt;/p&gt;&#10;&lt;h2 id="what-else-do-you-need"&gt;What else do you need?&lt;/h2&gt;&#10;&lt;p&gt;Well, there&amp;rsquo;s a couple of things you do require. A vacuum pump, for instance, that supplies your table. But you&amp;rsquo;re in luck, I wrote &lt;a href="https://blog.schallbert.de/en/cnc-vacuum-pumps/"&gt;an entire post&lt;/a&gt; on that topic as well. But there&amp;rsquo;s more, actually:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Fasteners, washers, nuts to attach the table to your machine bed&lt;/li&gt;&#10;&lt;li&gt;A vacuum manifold that may allow you to select chambers within your table, preferably providing a vacuum gauge to check pressure levels&lt;/li&gt;&#10;&lt;li&gt;Vacuum hose(s) to connect the table to your manifold&lt;/li&gt;&#10;&lt;li&gt;Another vacuum hose that connects the manifold to your pump&lt;/li&gt;&#10;&lt;li&gt;A pump motor switch and motor circuit breaker&lt;/li&gt;&#10;&lt;li&gt;Vacuum fleece or rubber mat (hole grid tables only)&lt;/li&gt;&#10;&lt;li&gt;Vacuum gasket thread (grid tables only)&lt;/li&gt;&#10;&lt;li&gt;porous spoilboard (porous tables only)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="conclusion"&gt;Conclusion&lt;/h3&gt;&#10;&lt;p&gt;All in all, it will cost you a lot of your time and money to get and setup a vacuum table. So you should have a couple of good arguments to go through that effort. If so, chances are high you&amp;rsquo;ll be rewarded with quicker execution, better quality, and shorter job setup times.&lt;/p&gt;&#10;&lt;h2 id="my-selection"&gt;My selection&lt;/h2&gt;&#10;&lt;p&gt;I exclusively work with sheet material. I process wood, high pressure laminates, acrylic, MDF boards, and often have to cut out parts from a bigger sheet or use nesting for many different parts. This is why a grid table wouldn&amp;rsquo;t work for me very well.&lt;/p&gt;&#10;&lt;p&gt;Due to the vibration issues I have &lt;a href="https://blog.schallbert.de/en/projects/cnc_spoilboard/"&gt;with my current setup&lt;/a&gt; lacking enough weight and the fact that a ready-made vacuum table didn&amp;rsquo;t exist for the dimensions of my machine, I didn&amp;rsquo;t choose a porous surface table either. This would have been the most cost-effective solution, though.&lt;/p&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-10-21_bl0607_dwg.jpg" alt="Image: Creating a drawing of my machine bed for the vacuum table manufacturer"&gt;&lt;/figure&gt;&#10;Instead, I contacted a vacuum table manufacturer to buy a couple of small hole-grid tables that I could individually switch on and off depending on workpiece size and pressure that I&amp;rsquo;d require for secure clamping. Well. I was told that a much simpler and better solution would be to buy one of their even heavier aluminium tables. Less worrying to get multiple tables supplied with airtight suction ducts, valves, connectors. Not having to access both sides of the milling machine with ducts. Not having to adjust the tables to sit together tightly or face mill for a level surface. And by the way, they&amp;rsquo;d create a customized design so it would perfectly fit my machine&amp;hellip;&lt;/p&gt;&#10;&lt;p&gt;What can I say. I scraped money together for this much more elegant solution. I made a drawing of my machine bed. Just a couple of days later I got a sketch back with an initial design (this one is still missing additional holes for clamping vises, and the grid is less dense to keep processing speed high). I gave my OK for production.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-10-21_custom_table.jpg" alt="Image: Custom designed vacuum table to fit my machine"&gt;&lt;/figure&gt;&#10;&lt;h3 id="table-delivered"&gt;Table delivered&lt;/h3&gt;&#10;&lt;p&gt;The manufacturer is located not too far from where I&amp;rsquo;m at home. So I went there and collected it myself. When I had unmounted my old spoilboard, I thought it would be a good idea to have some heavy foam acoustic absorption panels placed in the machine frame to dampen noise and resonation from below the table.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-10-21_table_mounting.jpg" alt="Image: Vacuum table mounting"&gt;&lt;/figure&gt;&#10;&lt;p&gt;Only afterwards, I bolted the new vacuum table to my machine with help of M6 fasteners and hammernuts. After that it took me multiple hours to get a more or less even surface. As the machine frame&amp;rsquo;s tolerance is relatively high, I initially had deviations of &lt;code&gt;3/10mm&lt;/code&gt; over the vacuum table&amp;rsquo;s surface 😓. With the help of some paper and thin cardbord, I was able to smoothen out the roughest dips, but I could still measure a deviation of &lt;code&gt;15/100mm&lt;/code&gt;.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center media-frame--video"&gt;&#10; &lt;div class="media-video"&gt;&lt;iframe&#10; src="https://makertube.net/videos/embed/8qP4FeBN2RYAVxkB4SWPHi"&#10; title="CNC Z-axis bed leveling check"&#10; loading="lazy"&#10; allow="autoplay; fullscreen; picture-in-picture"&#10; allowfullscreen&#10; style="width: 100%; height: auto; min-height: 315px; aspect-ratio: 16/9;"&#10; &gt;&lt;/iframe&gt;&lt;/div&gt;&#10; &lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;CNC Z-axis bed leveling check&lt;/span&gt;&lt;a href="https://makertube.net/videos/embed/8qP4FeBN2RYAVxkB4SWPHi" class="attr-link" target="_blank" rel="noopener noreferrer"&gt;↗&lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;To get to an optimal solution, there would be three options:&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Surface milling of the whole table&lt;/li&gt;&#10;&lt;li&gt;Unmounting the table, adding thin plastic foil where needed, remounting, adding additional foil/paper where needed&amp;hellip;&lt;/li&gt;&#10;&lt;li&gt;Unmounting the table, loosen the machine frame and get to the root: the frame&amp;rsquo;s sides are rotated towards the inner just a tiny bit, and the front cross-beam seems to be bent upwards just a little, so it should be lowered by less than 1/10mm.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;For the time being, any of these options seemed too much work as I don&amp;rsquo;t know yet if I need it to be that exact. So I continued by connecting the vacuum hoses.&lt;/p&gt;&#10;&lt;h3 id="connecting-the-manifold"&gt;Connecting the manifold&lt;/h3&gt;&#10;&lt;p&gt;While happily cutting the hoses that would connect the vacuum table to the manifold, I thought &amp;ldquo;Wait a second - wouldn&amp;rsquo;t it be better to have the 9mm hoses as short as possible and rather use a longer 19mm pump connector hose for less flow resistance?&amp;rdquo; I stopped work and did some calculations:&lt;/p&gt;&#10;&lt;p&gt;My table has ~4900 holes of &lt;code&gt;0.5mm&lt;/code&gt; in diameter. Its combined cross section is \(A_{table}=962mm^2\), which is equivalent to a hole with &lt;code&gt;35mm&lt;/code&gt; in diameter (differences in flow resistance ignored).&lt;/p&gt;&#10;&lt;p&gt;The seven connecting hoses have a diameter of &lt;code&gt;9mm&lt;/code&gt;. Together, their surface is just \(A_{hose}=445mm^2\), equivalent single diameter of &lt;code&gt;24mm&lt;/code&gt; which is less than half than the table&amp;rsquo;s flow section.&lt;/p&gt;&#10;&lt;p&gt;For the pump hose and its diameter of &lt;code&gt;18mm&lt;/code&gt; it gets even worse: \(A_{pump}=254mm\) is less than 30% of the table&amp;rsquo;s capacity.&lt;/p&gt;&#10;&lt;p&gt;So when I assume an even air leakage over the seven chambers of my table, it makes most sense to have the pump hose as short as possible as the flow speed is highest here and so are the losses. For a scenario where just one of the table&amp;rsquo;s section is active and there&amp;rsquo;s a lot of leakage, obviously the &lt;code&gt;9mm&lt;/code&gt; hose should be as short as possible.&lt;/p&gt;&#10;&lt;p&gt;I decided instead to never allow full leakage so I could keep my preferred, comfortable location of where the manifold is mounted and just completed the wiring. 😉 By the way, the first part I manufactured on the new table was the holder for the manifold you can see in the image below.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-10-21_table_mounted.jpg" alt="Image: Vacuum table mounted"&gt;&lt;/figure&gt;&#10;</description></item><item><title>Estlcam: Negative Carves</title><link>https://blog.schallbert.de/en/negative-carving-with-estlcam/</link><pubDate>Tue, 27 Sep 2022</pubDate><author>Schallbert</author><guid>https://blog.schallbert.de/en/negative-carving-with-estlcam/</guid><description type="html">&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-09-27_carve_results-thumb.jpg"&#10; class="post-cover"&#10; alt="Image: A negative carve in wood"&#10; title="Estlcam: Negative Carves" /&gt;&#10;&lt;p&gt;I planned to have a wooden sign carved for a colleague of mine. But I wanted it to be inverted, i.e. the letters should stand from of the background. As there are multiple ways to accomplish that in Estlcam (a Computer Aided Machining tool) but not all are quick or easy to find, I&amp;rsquo;ll post a quick step-by-step guide here.&lt;/p&gt;&#10;&lt;h3 id="1-import-your-frame"&gt;1. Import your frame&lt;/h3&gt;&#10;&lt;p&gt;Open a drawing, e.g. a &lt;code&gt;DXF&lt;/code&gt; of the frame of your sign. I designed one with rounded corners and an outer border in CAD before. If you&amp;rsquo;re carving in wood, make sure that your carve depth is not higher than the width of your frame - otherwise the frame might not have enough stability.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-09-27_frame.jpg" alt="Image: Frame for my sign"&gt;&lt;/figure&gt;&#10;&lt;h3 id="2-design-your-text"&gt;2. Design your text&lt;/h3&gt;&#10;&lt;p&gt;Add the text you want the sign to &amp;ldquo;wear&amp;rdquo;. Update the text field width so it fits your sign. Then select the text in your text field and choose a font. Finally, choose a text height. Depending on the cutter you&amp;rsquo;re planning to use, select the carve depth. Cutters with sharper angles may have deeper carves than e.g. the classic &lt;code&gt;90°&lt;/code&gt; V-cutter. For my &lt;code&gt;12mm&lt;/code&gt; sheet, I chose a carve depth of &lt;code&gt;4.5mm&lt;/code&gt;. Then specify a maximum carve width (how big the &amp;ldquo;valleys&amp;rdquo; in your sign should be). I wanted a flat valley, so I entered a large value here. Last but not least, press the &lt;code&gt;select frame&lt;/code&gt; button to choose have the limits of your carve defined as the inner bound of your frame.&lt;/p&gt;&#10;&lt;p&gt;Leave the window open, please.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-09-27_carve_text.jpg" alt="Image: Settings for the text to carve"&gt;&lt;/figure&gt;&#10;&lt;h3 id="3-tool-selection"&gt;3. Tool selection&lt;/h3&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-09-27_carve_preview1.jpg" alt="Image: Carve preview 1"&gt;&lt;/figure&gt;&#10;Select the tool you want to do the carve with by klicking the appropriate line in your tool table. Do not yet select the &lt;code&gt;disassemble Text object&lt;/code&gt; checkbox yet so you can still make adjustments. Click &lt;code&gt;OK&lt;/code&gt; to close the window. Hit &lt;code&gt;Preview&lt;/code&gt; to get a feeling for how the carve will look like. See the parallel lines, sitting tightly together? This reflects the parameter &lt;code&gt;clearing feed&lt;/code&gt; of the cutter in the details view of the tool table. Make sure that it&amp;rsquo;s at or below &lt;code&gt;5%&lt;/code&gt; for a not too coarse result.&lt;/p&gt;&#10;&lt;p&gt;Anyways, you will not get optimal results yet because there&amp;rsquo;s just one tool for the whole job although the &amp;ldquo;valleys&amp;rdquo; would much better be cut with a standard cutter that has a flat face.&lt;/p&gt;&#10;&lt;h3 id="4-clearing"&gt;4. Clearing&lt;/h3&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-09-27_carve_clearing_tool.jpg" alt="Image: Carve preview 1"&gt;&lt;/figure&gt;&#10;Save your project now - you cannot edit the text or its carve parameters anymore after the next step.&#10;To get the clearing feed cutter in place, select the carve toolpath again and tick the box &lt;code&gt;disassemble Text object&lt;/code&gt;. After pressing &lt;code&gt;OK&lt;/code&gt; again, click the toolpath. You&amp;rsquo;ll now see the tool config for the carve. Add a clearing tool. Ideally, its diameter is smaller than the distance between letters and frame so you can keep the valley&amp;rsquo;s surface as smooth as possible (Note: I didn&amp;rsquo;t do that so there are some residual rough spots on my example workpiece). Maybe, also reduce clearing feed of that cutter for this job so the surface quality will become even better - values of 20-40% return very good results.&lt;/p&gt;&#10;&lt;h3 id="5-preview-number-two"&gt;5. Preview Number two&lt;/h3&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-09-27_carve_preview2.jpg" alt="Image: Carve preview 2"&gt;&lt;/figure&gt;&#10;OK, now you should be all set. Check paths and tool changes in the preview. Look how your manufacturing time decreased as well 😉. One more tip: Under &lt;code&gt;Settings&lt;/code&gt;, reduce the safety height of your cutter to a minimum while making sure you don&amp;rsquo;t crash into clamps. Don&amp;rsquo;t worry if your sign is not legible anymore in the preview. That&amp;rsquo;s normal as it just represents the tool paths.&lt;/p&gt;&#10;&lt;p&gt;Re-check your feeds and speeds for the tools you&amp;rsquo;ll be using. When your carves are not very deep, there&amp;rsquo;s probably headroom for increased values here.&lt;/p&gt;&#10;&lt;h3 id="engrave"&gt;6. Hit the CNC&lt;/h3&gt;&#10;&lt;p&gt;Export the g-code file from Estlcam and have your CNC build your inverse carve sign. I hope you&amp;rsquo;re happy with the results!&#10;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-09-27_carve_results.jpg" alt="Image: The completed sign"&gt;&lt;/figure&gt;&lt;/p&gt;&#10;</description></item><item><title>CNC job setup</title><link>https://blog.schallbert.de/en/cnc-job-setup/</link><pubDate>Mon, 22 Aug 2022</pubDate><author>Schallbert</author><guid>https://blog.schallbert.de/en/cnc-job-setup/</guid><description type="html">&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-08-22_cnc_job_setup-thumb.jpg"&#10; class="post-cover"&#10; alt="Image of a CNC job demo"&#10; title="CNC job setup" /&gt;&#10;&lt;h2 id="demo-video-about-cnc-job-preparation--execution"&gt;Demo video about CNC job preparation &amp;amp; execution&lt;/h2&gt;&#10;&lt;figure class="media-frame media-frame--center media-frame--video"&gt;&#10; &lt;div class="media-video"&gt;&lt;iframe&#10; src="https://makertube.net/videos/embed/mFreMUKxXktZH3kpqdENGJ"&#10; title="How-to: CNC job setup &amp;amp;amp; quick demo"&#10; loading="lazy"&#10; allow="autoplay; fullscreen; picture-in-picture"&#10; allowfullscreen&#10; style="width: 100%; height: auto; min-height: 315px; aspect-ratio: 16/9;"&#10; &gt;&lt;/iframe&gt;&lt;/div&gt;&#10; &lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;How-to: CNC job setup &amp;amp;amp; quick demo&lt;/span&gt;&lt;a href="https://makertube.net/videos/embed/mFreMUKxXktZH3kpqdENGJ" class="attr-link" target="_blank" rel="noopener noreferrer"&gt;↗&lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;The following sections summarize preparation steps from the video.&lt;/p&gt;&#10;&lt;h3 id="job-prepare-checklist"&gt;Job prepare checklist&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Securely mount your workpiece on the CNC&lt;/li&gt;&#10;&lt;li&gt;Transfer the job data to your CNC&amp;rsquo;s computer&lt;/li&gt;&#10;&lt;li&gt;Make sure Emergency Stop is engaged&lt;/li&gt;&#10;&lt;li&gt;Power up the CNC&lt;/li&gt;&#10;&lt;li&gt;Connect your computer to the machine and start the CNC software&lt;/li&gt;&#10;&lt;li&gt;Disengage the Emergency Stop&lt;/li&gt;&#10;&lt;li&gt;Prepare and check required tools for damages&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="cnc-initialize-checklist"&gt;CNC initialize checklist&lt;/h3&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Acknowledge the Emergency Stop release&lt;/li&gt;&#10;&lt;li&gt;Activate stepper drivers&lt;/li&gt;&#10;&lt;li&gt;Reference the machine&lt;/li&gt;&#10;&lt;li&gt;Change to the first tool you&amp;rsquo;ll be using&lt;/li&gt;&#10;&lt;li&gt;Set X, Y zero&lt;/li&gt;&#10;&lt;li&gt;Measure Z height / set Z zero&lt;/li&gt;&#10;&lt;li&gt;Put CNC back to home position&lt;/li&gt;&#10;&lt;li&gt;Perform spindle warmup run&lt;/li&gt;&#10;&lt;li&gt;Check Auxiliary devices (e.g. cooling, dust collection)&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h3 id="during-the-job"&gt;During the job&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Supervise the machine&lt;/li&gt;&#10;&lt;li&gt;If needed, perform tool changes&lt;/li&gt;&#10;&lt;li&gt;If required, pause the job when something doesn&amp;rsquo;t seem right&lt;/li&gt;&#10;&lt;li&gt;Have the emergency stop in reach for worst case scenarios&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="job-completed"&gt;Job completed&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Set the machine back to home position&lt;/li&gt;&#10;&lt;li&gt;Engage emergency stop and disconnect the computer&lt;/li&gt;&#10;&lt;li&gt;Disable power supply to the machine&lt;/li&gt;&#10;&lt;li&gt;Take your workpiece from the machine bed&lt;/li&gt;&#10;&lt;li&gt;Cleanup&lt;/li&gt;&#10;&lt;/ul&gt;&#10;</description></item><item><title>My CNC vibrates</title><link>https://blog.schallbert.de/en/cnc-vibrates/</link><pubDate>Thu, 14 Jul 2022</pubDate><author>Schallbert</author><guid>https://blog.schallbert.de/en/cnc-vibrates/</guid><description type="html">&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-07-14_vibrations-thumb.jpg"&#10; class="post-cover"&#10; alt="Distorted image of a circle cut with my CNC"&#10; title="My CNC vibrates" /&gt;&#10;&lt;h2 id="background"&gt;Background&lt;/h2&gt;&#10;&lt;p&gt;Lately, I have been pushing my machine closer to its limits. I&amp;rsquo;m now often formatting plywood full-slot with one pass meaning the machine has to take a &lt;code&gt;Z+&lt;/code&gt; of &lt;code&gt;12mm&lt;/code&gt; at &lt;code&gt;F2700mm/min&lt;/code&gt; on a 6mm 2-flute rougher bit at &lt;code&gt;S=24000rpm&lt;/code&gt;. I&amp;rsquo;m using climb milling for my projects in wood.&lt;/p&gt;&#10;&lt;p&gt;Now the machine sometimes starts vibrating.&lt;/p&gt;&#10;&lt;p&gt;You might say &amp;ldquo;just reduce machine load by setting a more shallow depth of cut&amp;rdquo;, &amp;ldquo;slow down your feed rate and spindle RPM&amp;rdquo;, or &amp;ldquo;Don&amp;rsquo;t take a rougher, that&amp;rsquo;s always inducing more vibration&amp;rdquo; - and I might follow of your advice at some point, but first I want to understand what&amp;rsquo;s exactly going wrong here and whether I can fix this issue without sacrificing machine time or cutter life.&lt;/p&gt;&#10;&lt;h2 id="problem-description"&gt;Problem description&lt;/h2&gt;&#10;&lt;p&gt;Machine vibration doesn&amp;rsquo;t only happen while formatting but also when I cut pockets, but it seems like only at certain positions during the cut. It feels like the whole machine is shaking just a little, but the sound of it makes me doubt that everything is alright. I captured two samples for your reference below.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center media-frame--video"&gt;&#10; &lt;div class="media-video"&gt;&lt;video controls&gt;&#10; &lt;source src="https://blog.schallbert.de/assets/video/posts/2022-07-14-machine_vibrations_pocketing.mp4" type="video/mp4"&gt;&#10; Your browser does not support the video tag.&#10; &lt;/video&gt;&lt;/div&gt;&#10; &lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;Vibrations manifest at certain positions of the machine while pocketing (80% clearing feed)&lt;/span&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;figure class="media-frame media-frame--center media-frame--video"&gt;&#10; &lt;div class="media-video"&gt;&lt;video controls&gt;&#10; &lt;source src="https://blog.schallbert.de/assets/video/posts/2022-07-14-machine_vibrations_slot.mp4" type="video/mp4"&gt;&#10; Your browser does not support the video tag.&#10; &lt;/video&gt;&lt;/div&gt;&#10; &lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;Vibrations during formatting&lt;/span&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;h2 id="analysis"&gt;Analysis&lt;/h2&gt;&#10;&lt;p&gt;Cutting results are looking good to me still&amp;hellip;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-07-14_cut_results.jpg" alt="Despite vibrating, the cut still looks clean"&gt;&lt;/figure&gt;&lt;/p&gt;&#10;&lt;p&gt;I retried with somewhat different settings: Reduced &lt;code&gt;Z+&lt;/code&gt; of only &lt;code&gt;6mm&lt;/code&gt; but increased feed of &lt;code&gt;3600mm/min&lt;/code&gt; with the same bit I used before - vibrations gone.&lt;/p&gt;&#10;&lt;p&gt;After contacting the machine manufacturer &lt;a href="https://hobbyline.info/forum/index.php?thread/686-meine-maschine-vibriert-erledigt/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;(refer to this thread in German)&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;, the most likely reason for the vibration is the router and its clamp that mounts to the Z-axis.&lt;/p&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-07-14_routermount.jpg" alt="Router mounting to the Z-axis"&gt;&lt;/figure&gt;&#10;The router has less high-end bearings than heavy-duty spindles so they are subject to play. In addition, the 42mm standard clamp is attached to the Z-axis with two M8 fasteners while the router is clamped with only one fastener around its &amp;ldquo;neck&amp;rdquo;.&lt;/p&gt;&#10;&lt;p&gt;HF-spindles are most often flush-fastened directly to the Z-axis so the contact surface is incomparably higher, leaving little or no room for vibration.&lt;/p&gt;&#10;&lt;h2 id="result"&gt;Result&lt;/h2&gt;&#10;&lt;p&gt;I have three options now:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Continue with high depth milling and tolerate vibrations and additional noise&lt;/li&gt;&#10;&lt;li&gt;Change to more shallow passes which solves vibration issues but adds machining time&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://blog.schallbert.de/en/projects/spindle-upgrade/"&gt;Upgrade the spindle&lt;/a&gt; which adds considerable cost to my setup&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://blog.schallbert.de/en/why-vacuum-table/"&gt;Upgrade the machine bed&lt;/a&gt; to stiffen the machine frame&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;aside class="update-box update-box--note" role="note"&gt;&#10; &lt;span class="update-box__icon" aria-hidden="true"&gt;&#10; ℹ️&#10; &lt;/span&gt;&#10;&#10; &lt;div class="update-box__body"&gt;&#10; &lt;div class="update-box__heading"&gt;&#10; &lt;strong class="update-box__title"&gt;&#10; &#10; Update: Machine vibrations&#10; &#10; &lt;/strong&gt;&#10;&#10; &lt;time datetime="2023-09-12T00:00:00Z"&gt;&#10; 2023-09-12&#10; &lt;/time&gt;&#10; &#10; &lt;/div&gt;&#10;&#10; &#10; &lt;div class="update-box__content"&gt;&#10; In the meantime, I upgraded both &lt;a href="https://blog.schallbert.de/en/why-vacuum-table/"&gt;machine bed&lt;/a&gt; and &lt;a href="https://blog.schallbert.de/en/projects/spindle-upgrade/"&gt;spindle&lt;/a&gt;. The vibrations are still there. Frustrating. When I look at it again, I see vibrations emerge when moving both &lt;code&gt;X&lt;/code&gt; and &lt;code&gt;Y&lt;/code&gt; axis. When I move &lt;code&gt;Y&lt;/code&gt; only, vibrations are gone. In case I move &lt;code&gt;X&lt;/code&gt;, though, there&amp;rsquo;s a small amount of vibrations. Working assumption is that the root cause lies in axis stability. I have quite a wide machine with just one ball screw in its center, and one instead of two linear guides on the Z-axis. The situation improves when I center the workpiece in X-direction, so that there&amp;rsquo;s no imbalance left to right when the portal moves.&#10; &lt;/div&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/aside&gt;&#10;</description></item><item><title>CNC router overload</title><link>https://blog.schallbert.de/en/cnc-router-overload/</link><pubDate>Sat, 18 Jun 2022</pubDate><author>Schallbert</author><guid>https://blog.schallbert.de/en/cnc-router-overload/</guid><description type="html">&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-06-18_overload-thumb.jpg"&#10; class="post-cover"&#10; alt="Image of an endmill path that doesn&amp;#39;t look good at all"&#10; title="CNC router overload" /&gt;&#10;&lt;h2 id="what-i-wanted-to-do"&gt;What I wanted to do&lt;/h2&gt;&#10;&lt;p&gt;I had a request to cut and engrave high pressure laminates. These are a lasagna of compressed paper and &lt;a href="https://en.wikipedia.org/wiki/Phenol_formaldehyde_resin" target="_blank" rel="noopener noreferrer" class="external-link"&gt;phenolic resin&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;, coated in a thin layer of (colored) &lt;a href="https://en.wikipedia.org/wiki/Melamine_resin" target="_blank" rel="noopener noreferrer" class="external-link"&gt;melamine resin&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;. HPL is really so durable that it&amp;rsquo;s even taken for facade planking. It is dishwasher safe and some variants can be heated to 200°C without taking any damage. You can find HPL as boards on playgrounds, garden tables, as panels in the tram etc.&#10;So I was like &amp;ldquo;cool stuff, let&amp;rsquo;s get started!&amp;rdquo;&lt;/p&gt;&#10;&lt;h2 id="cutting-data-in-high-pressure-laminates-hpl-resopal"&gt;Cutting data in High Pressure Laminates (HPL, &amp;ldquo;Resopal&amp;rdquo;)&lt;/h2&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-06-18_overload_chips.jpg" alt="HPL and chips after cutting"&gt;&lt;/figure&gt;&#10;I used the cutting data recommended by a couple of websites with values for &amp;ldquo;hard wood&amp;rdquo;.&#10;2-flute upcut wood carbide endmill, speed of cut &lt;code&gt;450m/min&lt;/code&gt;, &lt;code&gt;6mm&lt;/code&gt;, &lt;code&gt;Z+ 6,5mm&lt;/code&gt;, &lt;code&gt;S24000rpm&lt;/code&gt;, &lt;code&gt;F3500mm/min&lt;/code&gt;, full slot, climb milling.&lt;/p&gt;&#10;&lt;h2 id="cutting-results"&gt;Cutting results&lt;/h2&gt;&#10;&lt;p&gt;And I was alarmed by the way the cut looked when I was done.&#10;Here are the symptoms:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;While cutting, spindle RPM would drop repeatedly but catch up to desired speed again quickly.&lt;/li&gt;&#10;&lt;li&gt;high chipload on the bit, big chips, looking all fine&lt;/li&gt;&#10;&lt;li&gt;endmill didn&amp;rsquo;t follow a straight line: it somehow &amp;ldquo;wobbled&amp;rdquo;.&lt;/li&gt;&#10;&lt;li&gt;when cutting taps to keep the material in place, the cutter would move sideways a bit although it shouldn&amp;rsquo;t&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="searching-the-culprit"&gt;Searching the culprit&lt;/h2&gt;&#10;&lt;p&gt;First, I checked the spindle. No overheating, still tightly clamped to the portal milling machine, no bearing clearance, endmill securely fastened. Then I thought &amp;ldquo;Maybe something is wrong with the portal? Can I bend it?&amp;rdquo; No, I couldn&amp;rsquo;t. Then I looked at the endmill.&lt;/p&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-06-18_overload_endmill.jpg" alt="dull carbide endmill after cutting HPL"&gt;&lt;/figure&gt;&#10;It didn&amp;rsquo;t look good at all. The cutting edges were practically gone where they had touched the material. Strange. It was brand-new when I started the job and it didn&amp;rsquo;t even run for 20 minutes.&lt;/p&gt;&#10;&lt;h2 id="analysis-results"&gt;Analysis results&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;I used much too aggressive cutting data&lt;/li&gt;&#10;&lt;li&gt;Because of that, the router motor was operated way outside its capabilities&lt;/li&gt;&#10;&lt;li&gt;This caused sudden drops of the motor&amp;rsquo;s rotational speed&lt;/li&gt;&#10;&lt;li&gt;This again led to increased chipload of my endmill&lt;/li&gt;&#10;&lt;li&gt;As bearings and attachment of the router to the portal are &amp;ldquo;soft&amp;rdquo;, the cutter tried to evade from its cutting path&lt;/li&gt;&#10;&lt;li&gt;This probably saved me from having a shattered endmill though&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="improvements"&gt;Improvements&lt;/h2&gt;&#10;&lt;h3 id="researching-hpl-parameters-again"&gt;Researching HPL parameters (again)&lt;/h3&gt;&#10;&lt;p&gt;I did some more research on the internet. HPL is incredibly hard and tough. To compare some values (Brinell-hardness):&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Beech: &lt;code&gt;~3.7N/mm²&lt;/code&gt; (&lt;a href="https://www.olivenholzprodukte.de/Holzhaerte-Tabelle-nach-Brinell" target="_blank" rel="noopener noreferrer" class="external-link"&gt;Source&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;)&lt;/li&gt;&#10;&lt;li&gt;HPL: &lt;code&gt;~185N/mm²&lt;/code&gt; (&lt;a href="https://www.pro-hpl.org/assets/uploads/prohpl/files/200330_Technische_Kennziffern_und_physikalische_Eigenschaften_von_HPL.pdf" target="_blank" rel="noopener noreferrer" class="external-link"&gt;Source&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;)&lt;/li&gt;&#10;&lt;li&gt;Mild steel ST70: &lt;code&gt;215N/mm²&lt;/code&gt; (&lt;a href="https://www.ingenieurkurse.de/baustofftechnik-1/stoffeigenschaften-im-bauwesen/mechanische-eigenschaften-von-baustoffen/oberflaechenhaerte/brinellhaerte.html" target="_blank" rel="noopener noreferrer" class="external-link"&gt;Source&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;)&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;I have found some recommendations for cutting HPL like &amp;ldquo;Carbide endmills should have a cutting speed of up to &lt;a href="https://www.dekorplatten.de/sites/default/files/dateien/HPL-Verarbeitungshinweise.pdf" target="_blank" rel="noopener noreferrer" class="external-link"&gt;&lt;code&gt;150m/min&lt;/code&gt;&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;&amp;rdquo; and &amp;ldquo;Use diamond-hardened cutters or 1-flute ones that are optimized for Aluminium&amp;rdquo;.&lt;/p&gt;&#10;&lt;h3 id="interim-containment"&gt;Interim containment&lt;/h3&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-06-18_overload_corrected.jpg" alt="dull carbide endmill after cutting HPL"&gt;&lt;/figure&gt;&#10;To correct things, I just did all cutouts again at finishing settings in CAM. With a fresh endmill and less aggressive feed rates of &lt;code&gt;F2500mm/min&lt;/code&gt; and an updated depth per pass of &lt;code&gt;Z+1,5mm&lt;/code&gt;.&#10;The result looks much better now.&lt;/p&gt;&#10;&lt;h3 id="optimized-cutting-data"&gt;Optimized cutting data&lt;/h3&gt;&#10;&lt;p&gt;Still, let&amp;rsquo;s recalculate cutting data to take material differences to hard wood into account. I&amp;rsquo;ll choose a &lt;code&gt;4mm &lt;/code&gt;single flute (&lt;code&gt;z=1&lt;/code&gt;) coated carbide cutter for aluminium and assume a cutting speed &lt;code&gt;vc = 150m/min&lt;/code&gt; for HPL at a feedrate per tooth &lt;code&gt;fTooth = 0,025&lt;/code&gt; similar to cutting mild steel.&lt;/p&gt;&#10;&lt;p&gt;Target RPM: &lt;/p&gt;&#10;$$n=\frac{v_c}{\pi d}=\frac{150000\frac{mm}{min}}{\pi \cdot 4mm}=12000\frac{1}{min}$$&lt;p&gt;Target feedrate: &lt;/p&gt;&#10;$$F=n \cdot f_{Tooth} \cdot z = 12000\frac{1}{min} \cdot 0,025mm \cdot min \cdot 1= 300\frac{mm}{min}$$&lt;p&gt;I chose a 4mm endmill because my router motor torque diminishes over-proportionally when I reduce RPM. With larger endmills, this effect would probably lead to insufficient cutting power. If you have a spindle with an asynchronous machine, your torque curve is essentially flat so that shouldn&amp;rsquo;t be a problem of yours then.&lt;/p&gt;&#10;&lt;p&gt;The feedrate seems so slow - I hope that this wouldn&amp;rsquo;t heat up the material so much that it degrades (it won&amp;rsquo;t melt according to Wikipedia&amp;hellip;)&lt;/p&gt;&#10;&lt;p&gt;For your reference: &lt;a href="https://hobbyline.info/forum/index.php?thread/678-hpl-platten-fr%C3%A4sen/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;Here is the related thread&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; in the forum that I am visiting regularly (all in German).&lt;/p&gt;&#10;&lt;h3 id="further-tests"&gt;Further tests&lt;/h3&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-06-18_coated_new.jpg" alt="Image: new coated carbide endmill for aluminium"&gt;&lt;/figure&gt;&#10;I have made some parts with the bespoke endmill and settings. I optimized the settings a little for reduced cycle time and ended up with the following values: &lt;code&gt;ftooth = 0.04mm&lt;/code&gt; and &lt;code&gt;vc = 130m/min&lt;/code&gt;. For the 4mm endmill, this resulted in&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;S = 10300RPM&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;F = 410mm/min&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;Z+ = 3mm&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;vc = 1%&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;This endmill lived for about 1h. Not much still. Cutting with this kind of bit would never become economical. The HPL I am using has two material properties that will kill carbide cutters quickly. First, it is abrasive so the thin cutter edge is being beaten up. Second, the chips do not carry enough heat away from the cutter edge in time so that their sharpness deteriorates even more quickly.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-06-18_coated_worn.jpg" alt="Image: coated carbide endmill for aluminium after 1h"&gt;&lt;/figure&gt;&#10;&lt;h3 id="final-solution"&gt;Final solution&lt;/h3&gt;&#10;&lt;p&gt;A more economic solution with 40 times (manufacturer statement) more lifetime might be to take a carbide bit with thick diamond blades (e.g. like &lt;a href="https://www.artifex24.de/JSO-5mm-Diamant-PKD-Nutschaftfraeser-Diatec-DUO-5x10/50mm-Z2-S6-rechts" target="_blank" rel="noopener noreferrer" class="external-link"&gt;this one&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;). The downside is that it&amp;rsquo;s almost ten times as expensive. If I have to cut this material more often in the future, I might buy one and share my experience - in the meantime, I&amp;rsquo;ll rather have the cutters sharpened to save money.&lt;/p&gt;&#10;</description></item><item><title>My Endmill 'screams'</title><link>https://blog.schallbert.de/en/my-endmill-screams/</link><pubDate>Mon, 06 Jun 2022</pubDate><author>Schallbert</author><guid>https://blog.schallbert.de/en/my-endmill-screams/</guid><description type="html">&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-03-06_endmill-thumb.jpg"&#10; class="post-cover"&#10; alt="Beginner CNC issue: Speeds/Feeds"&#10; title="My Endmill &amp;#39;screams&amp;#39;" /&gt;&#10;&lt;h3 id="disclaimer"&gt;Disclaimer&lt;/h3&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-06-03_upcut_bit.jpg" alt="a 2-flute upcut bit for wood"&gt;&lt;/figure&gt;&#10;I&amp;rsquo;m working on my first-ever CNC milling project: A spoilboard that offers holes and t-nuts for workholding purposes and that supports an x-y fence and a tool length sensor.&lt;/p&gt;&#10;&lt;p&gt;I never used a spiral endmill before, but I bought a 6mm 2-cut upcut solid carbide bit with 21mm working length. And it just sounds awful. On my hand-router, I was exclusively using high-speed steel straight flutes and larger bit diameters. They sounded similar to the router itself, a loud but confident hum when cutting through material.&lt;/p&gt;&#10;&lt;h3 id="beginners-confusion"&gt;Beginner&amp;rsquo;s confusion&lt;/h3&gt;&#10;&lt;p&gt;With this upcut bit, I followed the manufacturer&amp;rsquo;s recommendations of feeds and speeds for hard wood on my medium density fiberboard workpiece (depth per pass: &lt;code&gt;6mm&lt;/code&gt;, feed: &lt;code&gt;3500mm/min&lt;/code&gt; speed: &lt;code&gt;24000rpm&lt;/code&gt;). But obviously I do something wrong because there&amp;rsquo;s a terribly loud, high-pitched, uncomfortable screaming/hissing noise when I cut.&lt;/p&gt;&#10;&lt;p&gt;I gradually turned up the feed rate because I was under the impression that screaming bits &amp;ldquo;are not working at full capacity&amp;rdquo;. I ended up with &lt;code&gt;9100mm/min&lt;/code&gt; (!) where it was better, but still&amp;hellip;&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center media-frame--video"&gt;&#10; &lt;div class="media-video"&gt;&lt;video controls&gt;&#10; &lt;source src="https://blog.schallbert.de/assets/video/posts/2022-03-06_endmill_screams.mp4" type="video/mp4"&gt;&#10; Your browser does not support the video tag.&#10; &lt;/video&gt;&lt;/div&gt;&#10; &lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;Endmill screams while ploughing through MDF&lt;/span&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;h3 id="analysis"&gt;Analysis&lt;/h3&gt;&#10;&lt;p&gt;After the 15min job was finished I touched the endmill - Flutes are as good as new and the bit is barely warm to the touch. Hm. Also the router motor did not sound stressed. My steppers made the machine to literally plough through the MDF (smoothly and without any issue), I even had to turn the extraction up to not drown in dust. Also the result looks good to me; tolerances are tight and the cut is as clean as I&amp;rsquo;d expect it to be - much better than I could have done by hand.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-06-03_mdf_result.jpg" alt="milling in MDF - spoilboard t-nut slots"&gt;&lt;/figure&gt;&#10;&lt;h3 id="open-questions"&gt;Open questions&lt;/h3&gt;&#10;&lt;p&gt;So what am I doing wrong? Is this sound &amp;ldquo;normal&amp;rdquo; for a small spiral flute bit? Does MDF need totally different parameters than hard wood for silent cutting, e.g. much less spindle RPM? Do I need to set a different ploughing strategy in my CAM tool?&lt;/p&gt;&#10;&lt;p&gt;Hold on tight, I&amp;rsquo;ll be checking with a forum to get some advice&amp;hellip;&lt;/p&gt;&#10;&lt;h3 id="questions-answered"&gt;Questions answered&lt;/h3&gt;&#10;&lt;p&gt;OK, I have an answer from the &lt;a href="https://hobbyline.info/forum/index.php?thread/620-mein-fr%C3%A4ser-kreischt/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;bit&amp;rsquo;s manufacturer&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; (in German). This sound is normal for small endmills specialized in cutting wood. Well then. Probaby I should build a housing for my machine and buy some very good earplugs. 😬 Let me quote another tool manufacturer:&lt;/p&gt;&#10;&lt;p&gt;&amp;ldquo;Two-flute cutters are always noisier than single or three-flute cutters of the same size. Their 180° opposing cutting edges lead to additional vibrations of the cutter due to the alternately engaged cutting edges. In return, they offer better wear characteristics than single flute cutters and allow better chip evacuation than triple flute cutters.&amp;rdquo;&lt;/p&gt;&#10;&lt;h3 id="comparison-same-material-different-bit"&gt;Comparison: Same material, different bit&lt;/h3&gt;&#10;&lt;p&gt;Here&amp;rsquo;s a comparison video to judge just how different cutters can sound in the same material:&#10;&lt;code&gt;14mm 3-flute&lt;/code&gt; endmill face cutter, &lt;code&gt;10mm shaft, S5500, F7100, Z0.3, Fside 90%&lt;/code&gt;&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center media-frame--video"&gt;&#10; &lt;div class="media-video"&gt;&lt;video controls&gt;&#10; &lt;source src="https://blog.schallbert.de/assets/video/posts/2022-03-06_leveling.mp4" type="video/mp4"&gt;&#10; Your browser does not support the video tag.&#10; &lt;/video&gt;&lt;/div&gt;&#10; &lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;14mm face cutter calmly levels my spoilboard.&lt;/span&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;Just to test things, I used a spiral strategy in my CAM tool which takes 50% longer than the typical lawn-mower strategies, but this way there are no visible cutter paths on the finished material.&lt;/p&gt;&#10;&lt;aside class="update-box update-box--note" role="note"&gt;&#10; &lt;span class="update-box__icon" aria-hidden="true"&gt;&#10; ℹ️&#10; &lt;/span&gt;&#10;&#10; &lt;div class="update-box__body"&gt;&#10; &lt;div class="update-box__heading"&gt;&#10; &lt;strong class="update-box__title"&gt;&#10; &#10; Field experience&#10; &#10; &lt;/strong&gt;&#10;&#10; &lt;time datetime="2024-04-04T00:00:00Z"&gt;&#10; 2024-04-04&#10; &lt;/time&gt;&#10; &#10; &lt;/div&gt;&#10;&#10; &#10; &lt;div class="update-box__content"&gt;&#10; After round about two years with this wood cutter I can say that they operate robustly. It is advisable to turn up feedrate and depth of cut. Rather more than less also if it requires some bravety (e.g &lt;code&gt;F4000 S24000 Z+12mm&lt;/code&gt; works fine with my machine in Birch plywood). The cutter is quieter when I use conventional milling instead of climb milling.&#10; &lt;/div&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/aside&gt;&#10;</description></item><item><title>CNC Part5 - Macros</title><link>https://blog.schallbert.de/en/macros-for-cnc/</link><pubDate>Wed, 11 May 2022</pubDate><author>Schallbert</author><guid>https://blog.schallbert.de/en/macros-for-cnc/</guid><description type="html">&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-06-11_sub-thumb.jpg"&#10; class="post-cover"&#10; alt="Image: snippet of the tool length sensor self-test macro for my CNC machine. It shows C-style code and checks if the probe touches the sensor."&#10; title="CNC Part5 - Macros" /&gt;&#10;&lt;p&gt;This is the 5th part of my portal milling machine sequel. It focuses on handy accessories that make your life as a CNC operator easier, and can lead to more quick and accurate milling results.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://blog.schallbert.de/en/portal-milling/"&gt;&lt;em&gt;Part 1&lt;/em&gt;: Thoughts about CNCs in general and machine selection&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://blog.schallbert.de/en/cnc-electronics/"&gt;&lt;em&gt;Part 2&lt;/em&gt;: CNC Electronics build&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://blog.schallbert.de/en/portal-milling-build/"&gt;&lt;em&gt;Part 3:&lt;/em&gt; CNC Machine build&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://blog.schallbert.de/en/portal-milling-setup/"&gt;&lt;em&gt;Part 4:&lt;/em&gt; CNC Setup&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;&#10;&lt;p&gt;This article is about Macros for the CNC that help automate certain repeating operations. It will both cover basic and more sophisticated Macros for many purposes like automatic Z-zeroing, tool length measurement, or tool changes.&#10;It will touch some &lt;a href="https://www.linuxcnc.org/docs/html/gcode/g-code.html#_g_code_quick_reference_table_a_id_gcode_quick_reference_table_a" target="_blank" rel="noopener noreferrer" class="external-link"&gt;G-code&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; commands and try to help you gain more confidence in your machine.&lt;/p&gt;&#10;&lt;h2 id="disclaimer"&gt;Disclaimer&lt;/h2&gt;&#10;&lt;p&gt;The following subroutines have been written for RS274 NGC interpreter. I have validated them with &lt;a href="https://edingcnc.com/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;EdingCNC&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; as that is the CNC software I happen to be using. I have taken some inspiration from the macro file that both &lt;a href="https://webseite.sorotec.de/service/downloads/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;Sorotec&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; and EdingCNC provide along with their machines.&lt;/p&gt;&#10;&lt;p&gt;As you might have different Hardware and Software distributors for your machine, these routines might not fit 100%. My intention was more to explain what&amp;rsquo;s happening in them than to provide a 1-by-1 copy paste template.&lt;/p&gt;&#10;&lt;p&gt;You might want to skip reading this article if your jobs are simple enough so you never felt the need to dive into CNC subroutines or in case your setup is 100% complete and you&amp;rsquo;ll never touch it again.&lt;/p&gt;&#10;&lt;h2 id="so-what-is-a-macro"&gt;So what is a Macro?&lt;/h2&gt;&#10;&lt;p&gt;A Macro or subroutine is a collection of instructions written for the CNC interpreter to perform actions. They are often used to automate recurring operations. On my machine, such a macro starts with a &lt;code&gt;SUB&lt;/code&gt; command and ends with an &lt;code&gt;ENDSUB&lt;/code&gt;. They likely include branching logic and G-code commands to have the machine do things or even show user dialogs to get the operator&amp;rsquo;s input.&lt;/p&gt;&#10;&lt;p&gt;On my machine, all macros are residing in a single file called &lt;code&gt;macro.cnc&lt;/code&gt; that my CNC software will read on startup so it can be executed. Some of the software&amp;rsquo;s buttons even directly call macros from this file, e.g. for homing.&lt;/p&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-06-11_macro.jpg" alt="macro execution in action"&gt;&lt;/figure&gt;&#10;To demonstrate that this file matters a lot, close your CNC software and open the &lt;code&gt;macro.cnc&lt;/code&gt; document with a text editor. Search for &lt;code&gt;Sub user_9&lt;/code&gt; (it should be a routine that doesn&amp;rsquo;t do relevant stuff), remove its contents and add the line &lt;code&gt;MSG &amp;quot;hello world!&amp;quot;&lt;/code&gt; to it. Save your work, start the CNC software, and in the user menu, press button &lt;code&gt;9&lt;/code&gt; - Voilà!&lt;/p&gt;&#10;&lt;h2 id="starters-a-simple-macro-to-detect-tool-length-sensor-status"&gt;Starters: A simple macro to detect Tool Length Sensor status&lt;/h2&gt;&#10;&lt;p&gt;Let&amp;rsquo;s get going and connect the newly-grown knowledge about macros to a useful example.&lt;/p&gt;&#10;&lt;h3 id="the-tool-length-sensor"&gt;The tool length sensor&lt;/h3&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-06-11_tls3d.jpg" alt="my tool length sensor"&gt;&lt;/figure&gt;&#10;A tool length sensor is a device connected to an input of the CNC machine that triggers when touched (e.g. by a tool tip). There are many different designs available, ranging from a very simple microswitch with an enclosure and touch button to high-precision heavy steel sensors with automatic air purge operation to make sure the sensor&amp;rsquo;s surface is clean.&lt;/p&gt;&#10;&lt;p&gt;The tool length sensor is either mounted at the machine bed, on top of the spoilboard, or just placed at another fixed position on the machine. Mine is a very simple switch that I can put on any place of my machine. It has a claimed repeatability of &lt;code&gt;10µm&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;Anyways, the actual magic is done in the CNC software.&lt;/p&gt;&#10;&lt;h3 id="macro-task"&gt;Macro task&lt;/h3&gt;&#10;&lt;p&gt;I want the macro to check whether the tool length sensor is operational (and not stuck). So I verify that the sensor switch&amp;rsquo;s status is &amp;ldquo;not triggered&amp;rdquo; - normally closed. If it was triggered, this could mean the sensor is stuck pushed (happened to me already) or has a broken sensor wire (didn&amp;rsquo;t happen so far), or just that the sensor is not connected to the machine at all.&lt;/p&gt;&#10;&lt;h3 id="macro-code"&gt;Macro code&lt;/h3&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;SUB&lt;/span&gt; is_sensor_ok&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;IF&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;sensorStatus &lt;span style="color:#f92672"&gt;==&lt;/span&gt; triggered&lt;span style="color:#f92672"&gt;]&lt;/span&gt; ;&lt;span style="color:#75715e"&gt;# 5068 == 0 (normally closed)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;DLGMSG&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;Tool length sensor not connected or already triggered - please check&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;IF&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;dialogButton &lt;span style="color:#f92672"&gt;==&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;IF&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;sensorStatus &lt;span style="color:#f92672"&gt;==&lt;/span&gt; triggered&lt;span style="color:#f92672"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;ERRMSG&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;Tool length sensor input still unexpected - aborting&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;ENDIF&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;ELSE&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;ERRMSG&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;User abort.&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;ENDIF&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;ENDIF&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;ENDSUB&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The Macro&amp;rsquo;s name is &lt;code&gt;is_sensor_ok&lt;/code&gt;. I&amp;rsquo;m checking sensor status and present a dialog message in case something is wrong here. Once the operator presses &amp;ldquo;OK&amp;rdquo;, I&amp;rsquo;m assuming that the problem has been taken care of and try again. If it is still triggered, I&amp;rsquo;ll abort the routine.&lt;/p&gt;&#10;&lt;p&gt;This Macro can be found in all sections below where I need the tool length sensor to measure something - It serves as a guard to not accidentally destroy my machine, the sensor, or the workpiece by interpreting wrong input.&lt;/p&gt;&#10;&lt;h3 id="variable-naming"&gt;Variable naming&lt;/h3&gt;&#10;&lt;p&gt;The RS274/NGC language is old. I mean really old. Its first version was released in the late 1950&amp;rsquo;s. No wonder its parameters (#1 - #5399 is the allowed range) are all numeric both in naming and in the values they are able to store. No type system (like &lt;code&gt;strings&lt;/code&gt;, &lt;code&gt;int&lt;/code&gt; etc.) and no handy naming that makes understanding a parameter easy like &lt;code&gt;sensorStatus&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;It will just be &lt;code&gt;#5068&lt;/code&gt; and you&amp;rsquo;ll have to remember yourself that the CNC software manufacturer selected this variable to flag the tool length sensor&amp;rsquo;s status, and that it is &lt;code&gt;boolean&lt;/code&gt; with &lt;code&gt;0&lt;/code&gt; = not triggered and &lt;code&gt;1&lt;/code&gt; = triggered.&lt;/p&gt;&#10;&lt;p&gt;To make the macro code as readable and comprehensible as possible, I refrain from using numerical parameter names in this article. A translation table can be found &lt;a href="https://blog.schallbert.de/en/macros-for-cnc/#tables"&gt;at the bottom&lt;/a&gt; for your convenience.&lt;/p&gt;&#10;&lt;h2 id="using-the-tool-length-sensor-to-get-workpiece-surface-z0"&gt;Using the tool length sensor to get workpiece surface (Z=0)&lt;/h2&gt;&#10;&lt;p&gt;With this method, you don&amp;rsquo;t need to manually zero in workpiece surfaces by lowering Z-axis until the tool slightly scratches the surface and then setting workpiece coordinates.&lt;/p&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-06-11_tls.jpg" alt="tool length sensor sketch"&gt;&lt;/figure&gt;&#10;Once the Macro is programmed and set up, just place the tool length sensor on top of your workpiece and jog your machine so it is placed directly above the sensor (not touching yet). Then start the macro. Your machine will now automatically lower its Z-axis slowly until the sensor switches. It will then reverse very slowly until the sensor untriggers. This point is then taken to determine Z-0 which is then set automatically.&lt;/p&gt;&#10;&lt;h3 id="prerequisites"&gt;Prerequisites&lt;/h3&gt;&#10;&lt;p&gt;What we need before we can write the macro is the tool length sensor&amp;rsquo;s Z-position &lt;code&gt;zTls&lt;/code&gt; at its switching point from being triggered to not triggered. I measured mine with a caliper and noted it down. We need this value so the machine can subtract it from the Z-height when touching off to yield the workpiece surface&amp;rsquo;s height.&lt;/p&gt;&#10;&lt;p&gt;Also, it is important to know how the switch is connected to the machine. The preferred way is &amp;ldquo;normally closed&amp;rdquo;, so the switch opens when triggered: &lt;code&gt;triggered = 0&lt;/code&gt;. This is the more safe application because a broken wire or lost connection is detected automatically as the circuit breaks.&lt;/p&gt;&#10;&lt;p&gt;We&amp;rsquo;ll also have to determine touch probe forward feed and reverse feed, e.g. &lt;code&gt;touch = 100mm/min&lt;/code&gt;, &lt;code&gt;rev = 10mm/min&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;The macro also features a more elaborate part: When Z-0 is about to be measured, but tool length is not known, the machine is able to store current position &lt;code&gt;posX, posY&lt;/code&gt; in repositioning variables so that the &lt;code&gt;get_tool_length&lt;/code&gt; macro can be called directly from here, and later repositionTo to where workpiece Z-0 is being measured.&lt;/p&gt;&#10;&lt;h3 id="the-subroutine-z-zero-detection"&gt;The subroutine &amp;ldquo;Z-zero detection&amp;rdquo;&lt;/h3&gt;&#10;&lt;p&gt;After switching the spindle off, the program will lower the machine&amp;rsquo;s Z-axis until it touches the tool length sensor (or until it has travelled down, spindle nose almost touchting the sensor where it would abort, claiming it didn&amp;rsquo;t find the sensor) via command &lt;code&gt;G38.2&lt;/code&gt;. When triggered, it will reverse carefully until the sensor is released. This point is then saved as the new coordinate offset for the Z-axis via &lt;code&gt;G92&lt;/code&gt;.&lt;/p&gt;&#10;&lt;h3 id="code"&gt;Code&lt;/h3&gt;&#10;&lt;p&gt;before we start, make sure we&amp;rsquo;re in the correct state. Tool length should already be determined so future tool changes won&amp;rsquo;t require re-touching off Z-zero. Plus, we should know that the sensor is properly connected.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;SUB&lt;/span&gt; measure_workpiece_z0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;IF&lt;/span&gt; &lt;span style="color:#f92672"&gt;![&lt;/span&gt;toolLengthStat&lt;span style="color:#f92672"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;DLGMSG&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;WARNING - Please first measure tool length!&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;IF&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;dialogButton &lt;span style="color:#f92672"&gt;==&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; xPosReposition &lt;span style="color:#f92672"&gt;=&lt;/span&gt; xPos&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; yPosReposition &lt;span style="color:#f92672"&gt;=&lt;/span&gt; yPos&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; repositionTo &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;GOSUB&lt;/span&gt; get_tool_length&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;ENDIF&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;ENDIF&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;GOSUB&lt;/span&gt; is_sensor_ok ;&lt;span style="color:#75715e"&gt;# Check if tool length sensor status is OK&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Let&amp;rsquo;s now program the actual routine by asking the operator whether Z-zeroing shall be performed now. When the CNC runs in simulator mode (without actual hardware connected), Z-zeroing won&amp;rsquo;t work so we also have to check this.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;DLGMSG&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;Start Z-Zeroing?&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;IF&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;dialogButton &lt;span style="color:#f92672"&gt;==&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;AND&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;operatingMode &lt;span style="color:#f92672"&gt;!=&lt;/span&gt; simulator&lt;span style="color:#f92672"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;M5&lt;/span&gt; ;&lt;span style="color:#75715e"&gt;#Switch spindle off&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;M9&lt;/span&gt; ;&lt;span style="color:#75715e"&gt;#Switch coolant off&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;G53&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;G38&lt;/span&gt;&lt;span style="color:#f92672"&gt;.&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt; Z&lt;span style="color:#f92672"&gt;[&lt;/span&gt;zSpindleTip &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;5&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt; F&lt;span style="color:#f92672"&gt;[&lt;/span&gt;touch&lt;span style="color:#f92672"&gt;]&lt;/span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ;&lt;span style="color:#75715e"&gt;# G38.2 = touch toward probe, stop on contact, flag error on fail&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ;&lt;span style="color:#75715e"&gt;# fail = 5mm before touching spindle tip&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;IF&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;probeOk &lt;span style="color:#f92672"&gt;==&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt; ;&lt;span style="color:#75715e"&gt;# #5067 == 1 : G38.2 command success&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;G38&lt;/span&gt;&lt;span style="color:#f92672"&gt;.&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;G91&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;Z20&lt;/span&gt; F&lt;span style="color:#f92672"&gt;[&lt;/span&gt;rev&lt;span style="color:#f92672"&gt;]&lt;/span&gt; ;&lt;span style="color:#75715e"&gt;# now reverse slowly to find untrigger point (max. 20mm up)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;G90&lt;/span&gt; ;&lt;span style="color:#75715e"&gt;# back to absolute coordinates&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;IF&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;probeOk &lt;span style="color:#f92672"&gt;==&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;G00&lt;/span&gt; Z&lt;span style="color:#f92672"&gt;[&lt;/span&gt;zTouched&lt;span style="color:#f92672"&gt;]&lt;/span&gt; ;&lt;span style="color:#75715e"&gt;# #5063 Go to Z-axis&amp;#39;s probe point&#9;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;G92&lt;/span&gt; Z&lt;span style="color:#f92672"&gt;[&lt;/span&gt;zTls&lt;span style="color:#f92672"&gt;]&lt;/span&gt; ;&lt;span style="color:#75715e"&gt;# Set Z-axis&amp;#39;s coordinate offset (0) to tool length sensor&amp;#39;s height&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;G00&lt;/span&gt; Z&lt;span style="color:#f92672"&gt;[&lt;/span&gt;zTls &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;5&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt; ;&lt;span style="color:#75715e"&gt;# clear sensor&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;ELSE&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;ERRMSG&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;Could not locate sensor untrigger point.&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;ENDIF&lt;/span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;ELSE&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;DLGMSG&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;Could not locate sensor trigger point. Retry?&amp;#34;&lt;/span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;IF&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;dialogButton &lt;span style="color:#f92672"&gt;==&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt; &#9;&#9;&#9;&#9;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;GOSUB&lt;/span&gt; measure_workpiece_z0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;ELSE&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;ERRMSG&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;User abort.&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;ENDIF&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;ENDIF&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;ENDSUB&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;figure class="media-frame media-frame--center media-frame--video"&gt;&#10; &lt;div class="media-video"&gt;&lt;video controls&gt;&#10; &lt;source src="https://blog.schallbert.de/assets/video/posts/2022-06-11_tool_length_measurement.mp4" type="video/mp4"&gt;&#10; Your browser does not support the video tag.&#10; &lt;/video&gt;&lt;/div&gt;&#10; &lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;Executing the Get tool length macro on my machine&lt;/span&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;In this video, the machine is configured to return to XY zero when tool measurement has been completed. It would behave the same if I had the tool length measured after a tool change.&lt;/p&gt;&#10;&lt;h2 id="measuring-the-tool-length"&gt;Measuring the tool length&lt;/h2&gt;&#10;&lt;p&gt;If the machine knows the tool length before measuring the Z zero point, there is no need to re-determine the Z zero point during tool changes that occur whilst the job is in progress. I describe the relevant macro below.&lt;/p&gt;&#10;&lt;h3 id="preparation"&gt;Preparation&lt;/h3&gt;&#10;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-06-11_toolLengthVariables.jpg" alt="Image: get_tool_length macro parameters"&gt;&lt;/figure&gt;&#10;&lt;p&gt;Most CNCs derive their current position data by counting the motor steps they have executed after completing the home run. To measure the tool length, a few programmed parameters are required:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Z-position of the spindle nose &lt;code&gt;zSpindleTip&lt;/code&gt; (touches the tool length sensor without a tool inserted) so that the distance the tool protrudes from the spindle can be calculated&lt;/li&gt;&#10;&lt;li&gt;X-position &lt;code&gt;xPosTls&lt;/code&gt; of the tool length sensor during tool changes&lt;/li&gt;&#10;&lt;li&gt;Y-position &lt;code&gt;yPosTls&lt;/code&gt; of the tool length sensor during tool changes&lt;/li&gt;&#10;&lt;li&gt;Safety height &lt;code&gt;zSafety&lt;/code&gt; (ensures that the spindle does not encounter an obstacle on its way to the tool change area)&lt;/li&gt;&#10;&lt;li&gt;Probing feed rate forwards and backwards. We can reuse this from the macro for the workpiece zero point.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="the-measure-tool-length-subroutine"&gt;The Measure tool length subroutine&lt;/h3&gt;&#10;&lt;p&gt;Let us first define what this subroutine is intended to do:&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Stop the spindle, coolant, etc.&lt;/li&gt;&#10;&lt;li&gt;Dialogue: The operator should enter the estimated tool length&lt;/li&gt;&#10;&lt;li&gt;Rapid traverse Z to a safe height, then XY to the position of the tool sensor&lt;/li&gt;&#10;&lt;li&gt;Probe the tool length sensor, similar to workpiece zero point determination&lt;/li&gt;&#10;&lt;li&gt;Calculate the tool length&lt;/li&gt;&#10;&lt;li&gt;Calculate the difference between the last and current tool lengths&lt;/li&gt;&#10;&lt;li&gt;Update the Z zero point accordingly&lt;/li&gt;&#10;&lt;li&gt;Return Z to the safety height in rapid traverse&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h3 id="function-measure-tool-length"&gt;Code: Measure tool&lt;/h3&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;SUB&lt;/span&gt; get_tool_length&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;GOSUB&lt;/span&gt; is_sensor_ok ;&lt;span style="color:#75715e"&gt;# Check if tool length sensor status is OK&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;DLGMSG&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;Start tool length measurement? Please enter estimated tool length: &amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;toolLengthEst&lt;span style="color:#f92672"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;IF&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;dialogButton &lt;span style="color:#f92672"&gt;==&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;AND&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;operatingMode &lt;span style="color:#f92672"&gt;!=&lt;/span&gt; simulator&lt;span style="color:#f92672"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;IF&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;toolLengthEst &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;ERRMSG&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;Error: tool length cannot be negative.&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;ENDIF&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;IF&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;zSpindleTip&lt;span style="color:#f92672"&gt;+&lt;/span&gt; toolLengthEst &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;10&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt; &lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;zSafety&lt;span style="color:#f92672"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;ERRMSG&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;Error: tool too long - could collide with sensor.&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;ENDIF&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;M5&lt;/span&gt; ;&lt;span style="color:#75715e"&gt;# Switch spindle off&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;M9&lt;/span&gt; ;&lt;span style="color:#75715e"&gt;# Switch coolant off&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;G53&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;G00&lt;/span&gt; Z&lt;span style="color:#f92672"&gt;[&lt;/span&gt;zSafety&lt;span style="color:#f92672"&gt;]&lt;/span&gt; ;&lt;span style="color:#75715e"&gt;# Go to safety height (machine coordinates)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;G53&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;G00&lt;/span&gt; X&lt;span style="color:#f92672"&gt;[&lt;/span&gt;xPosTls&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Y&lt;span style="color:#f92672"&gt;[&lt;/span&gt;xPosTls&lt;span style="color:#f92672"&gt;]&lt;/span&gt; ;&lt;span style="color:#75715e"&gt;# Go to tool length sensor&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;G53&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;G00&lt;/span&gt; Z&lt;span style="color:#f92672"&gt;[&lt;/span&gt;zSpindleTip &lt;span style="color:#f92672"&gt;+&lt;/span&gt; toolLengthEst &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;10&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt; ;&lt;span style="color:#75715e"&gt;# Move Z down to 10mm above estimated tool tip&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ;&lt;span style="color:#75715e"&gt;# measure tool length, save results, apply Z-offset if needed&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;G53&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;G38&lt;/span&gt;&lt;span style="color:#f92672"&gt;.&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt; Z&lt;span style="color:#f92672"&gt;[&lt;/span&gt;zSpindleTip&lt;span style="color:#f92672"&gt;]&lt;/span&gt; F&lt;span style="color:#f92672"&gt;[&lt;/span&gt;touch&lt;span style="color:#f92672"&gt;]&lt;/span&gt; ;&lt;span style="color:#75715e"&gt;# probe sensor, latest stop point is spindle tip&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;IF&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;probeOk &lt;span style="color:#f92672"&gt;==&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt; ;&lt;span style="color:#75715e"&gt;# #5067 == 1 : G38.2 command success&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;G38&lt;/span&gt;&lt;span style="color:#f92672"&gt;.&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;G91&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;Z20&lt;/span&gt; F&lt;span style="color:#f92672"&gt;[&lt;/span&gt;rev&lt;span style="color:#f92672"&gt;]&lt;/span&gt; ;&lt;span style="color:#75715e"&gt;# now reverse slowly to find untrigger point&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;G90&lt;/span&gt; ;&lt;span style="color:#75715e"&gt;# back to absolute coordinates&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;IF&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;probeOk &lt;span style="color:#f92672"&gt;==&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; toolLength &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;zTouched &lt;span style="color:#f92672"&gt;-&lt;/span&gt; sTip&lt;span style="color:#f92672"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;MSG&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;Tool length = &amp;#34;&lt;/span&gt; toolLength&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;IF&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;toolLengthStat &lt;span style="color:#f92672"&gt;==&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt; ;&lt;span style="color:#75715e"&gt;# defaults to 0 on startup&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; lastToolLength &lt;span style="color:#f92672"&gt;=&lt;/span&gt; currToolLength ;&lt;span style="color:#75715e"&gt;# save last tool&amp;#39;s length&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; currToolLength &lt;span style="color:#f92672"&gt;=&lt;/span&gt; toolLength ;&lt;span style="color:#75715e"&gt;# save current tool&amp;#39;s length&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; toolLengthDiff &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;currToolLength &lt;span style="color:#f92672"&gt;-&lt;/span&gt; lastToolLength&lt;span style="color:#f92672"&gt;]&lt;/span&gt;&#9;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;G92&lt;/span&gt; Z&lt;span style="color:#f92672"&gt;[&lt;/span&gt;zPos &lt;span style="color:#f92672"&gt;-&lt;/span&gt; toolLengthDiff&lt;span style="color:#f92672"&gt;]&lt;/span&gt; ;&lt;span style="color:#75715e"&gt;# Set Z-axis&amp;#39;s coordinate offset (0)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;ELSE&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; currToolLength &lt;span style="color:#f92672"&gt;=&lt;/span&gt; toolLength ;&lt;span style="color:#75715e"&gt;# save current tool&amp;#39;s length&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;ENDIF&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; toolLengthStat &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;GOSUB&lt;/span&gt; reposition_spindle&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;ELSE&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;ERRMSG&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;Could not locate sensor untrigger point.&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;ENDIF&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;ELSE&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;ERRMSG&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;Could not locate sensor trigger point.&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;ENDIF&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;ENDIF&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;ENDSUB&lt;/span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;figure class="media-frame media-frame--center media-frame--video"&gt;&#10; &lt;div class="media-video"&gt;&lt;video controls&gt;&#10; &lt;source src="https://blog.schallbert.de/assets/video/posts/2022-06-11_tool_length_measurement.mp4" type="video/mp4"&gt;&#10; Your browser does not support the video tag.&#10; &lt;/video&gt;&lt;/div&gt;&#10; &lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;Determining tool length on my machine&lt;/span&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;My machine is configured to return to workpiece coordinates &lt;code&gt;XY0&lt;/code&gt; when done with tool length measurement.&lt;/p&gt;&#10;&lt;h2 id="tool-change"&gt;Tool change&lt;/h2&gt;&#10;&lt;p&gt;When there is no macro for tool changes, the machine will pause its job and wait until you manually jogged it to where you perform the tool change, and requires that you re-zero the workiece&amp;rsquo;s Z0 position due to possibly changed tool length before continuing the job.&lt;/p&gt;&#10;&lt;p&gt;This task can easily be automated and the following section guides you how to write a Macro for this.&lt;/p&gt;&#10;&lt;h3 id="prerequisites-1"&gt;Prerequisites&lt;/h3&gt;&#10;&lt;p&gt;An optional flag &lt;code&gt;getToolLength&lt;/code&gt; could be configuring the tool change macro&amp;rsquo;s behavior - whether every tool&amp;rsquo;s length should be measured after a tool change or not. If you have an automatic tool changer, you might not need this to happen.&lt;/p&gt;&#10;&lt;p&gt;The following additional parameters are also needed&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;X-Position &lt;code&gt;xToolChg&lt;/code&gt; where the tool change takes place (for me it&amp;rsquo;s &lt;code&gt;xToolChg = xPosTls&lt;/code&gt;)&lt;/li&gt;&#10;&lt;li&gt;Y-Position &lt;code&gt;yToolChg&lt;/code&gt; where the tool change takes place (for me it&amp;rsquo;s &lt;code&gt;yToolChg = yPosTls&lt;/code&gt;)&lt;/li&gt;&#10;&lt;li&gt;re-use &lt;code&gt;zSafety&lt;/code&gt; from &lt;code&gt;get_tool_length&lt;/code&gt; macro&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;newToolNumber&lt;/code&gt; to indicate the requested tool from G-code (or for manual input)&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;currToolNumber&lt;/code&gt; to indicate the &amp;ldquo;old&amp;rdquo; tool to be replaced&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;toolChangeDone&lt;/code&gt; helper flag to indicate whether a tool change has taken place yet&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="the-subroutine-change-tool"&gt;The subroutine &amp;ldquo;Change Tool&amp;rdquo;&lt;/h3&gt;&#10;&lt;p&gt;The following steps are being performed by the macro when a tool change is indicated either by command &lt;code&gt;M06&lt;/code&gt; &amp;ldquo;Tool change&amp;rdquo; within the G-code file of a job or triggered manually by the user:&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Stop spindle, coolant etc.&lt;/li&gt;&#10;&lt;li&gt;If requested tool is the current tool, prompt dialog asking if it should anyways change.&lt;/li&gt;&#10;&lt;li&gt;Rapid move Z up (&lt;code&gt;zSafety&lt;/code&gt;), then XY to the tool change position&lt;/li&gt;&#10;&lt;li&gt;Dialog: State current tool &lt;code&gt;a&lt;/code&gt; and request to insert requested tool &lt;code&gt;b&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;Check if tool change configuration implies tool length determination. If so, call &lt;code&gt;get_tool_length&lt;/code&gt; macro.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h3 id="code-1"&gt;Code&lt;/h3&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;SUB&lt;/span&gt; change_tool&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; toolChangeDone &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;M5&lt;/span&gt; ;&lt;span style="color:#75715e"&gt;# Switch spindle off&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;M9&lt;/span&gt; ;&lt;span style="color:#75715e"&gt;# Switch coolant off&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;IF&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;operatingMode &lt;span style="color:#f92672"&gt;!=&lt;/span&gt; simulator&lt;span style="color:#f92672"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;TCAGuard&lt;/span&gt; off ;&lt;span style="color:#75715e"&gt;# tool change area guard: off for tool change&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ;&lt;span style="color:#75715e"&gt;# handle case that tool is already in place&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;IF&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;newToolNumber &lt;span style="color:#f92672"&gt;==&lt;/span&gt; currToolNumber&lt;span style="color:#f92672"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;DLGMSG&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;Tool already mounted. Change anyways?&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;IF&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;dialogButton &lt;span style="color:#f92672"&gt;==&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; toolChangeDone &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;ELSE&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; toolChangeDone &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;ENDIF&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;ENDIF&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ;&lt;span style="color:#75715e"&gt;# go to tool change position and prompt to change tool&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;IF&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;toolChangeDone &lt;span style="color:#f92672"&gt;==&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;G53&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;G00&lt;/span&gt; Z&lt;span style="color:#f92672"&gt;[&lt;/span&gt;zSafety&lt;span style="color:#f92672"&gt;]&lt;/span&gt; ;&lt;span style="color:#75715e"&gt;# Go to safety height (machine coordinates)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;G53&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;G00&lt;/span&gt; X&lt;span style="color:#f92672"&gt;[&lt;/span&gt;xToolChg&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Y&lt;span style="color:#f92672"&gt;[&lt;/span&gt;yToolChg&lt;span style="color:#f92672"&gt;]&lt;/span&gt; ;&lt;span style="color:#75715e"&gt;# Go to tool change position&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;DLGMSG&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;Please mount tool now. Old tool number: &amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;currToolNumber&lt;span style="color:#f92672"&gt;]&lt;/span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34; New tool number: &amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;newToolNumber&lt;span style="color:#f92672"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;IF&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;dialogButton &lt;span style="color:#f92672"&gt;==&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;IF&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;newToolNumber &lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;99&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;OR&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;newToolNumber &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;TCAGuard&lt;/span&gt; on ;&lt;span style="color:#75715e"&gt;# tool change area guard: on for normal job&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;ERRMSG&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;New tool number implausible.&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;ENDIF&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; toolChangeDone &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;ELSE&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;ERRMSG&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;Tool change aborted.&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;ENDIF&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;ENDIF&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ;&lt;span style="color:#75715e"&gt;# prompt when complete and optionally call tool length measurement&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;IF&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;toolChangeDone &lt;span style="color:#f92672"&gt;==&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;MSG&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;Tool change from &amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;currToolNumber&lt;span style="color:#f92672"&gt;]&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34; to &amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;newToolNumber&lt;span style="color:#f92672"&gt;]&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34; complete.&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;M6&lt;/span&gt; T&lt;span style="color:#f92672"&gt;[&lt;/span&gt;newToolNumber&lt;span style="color:#f92672"&gt;]&lt;/span&gt;&#9;&#9;&#9;&#9; ;&lt;span style="color:#75715e"&gt;# set new tool number&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;IF&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;getToolLength &lt;span style="color:#f92672"&gt;==&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt; ;&lt;span style="color:#75715e"&gt;# config flag 0 = no, 1 = yes&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;GOSUB&lt;/span&gt; get_tool_length ;&lt;span style="color:#75715e"&gt;# Measure tool length. Careful: To be called after M6 T !&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;ELSE&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;GOSUB&lt;/span&gt; reposition_spindle&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;ENDIF&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;ENDIF&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;TCAGuard&lt;/span&gt; on ;&lt;span style="color:#75715e"&gt;# tool change area guard: on for normal job&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;ENDIF&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;ENDSUB&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="reposition-to-saved-coordinates"&gt;Reposition (to saved coordinates)&lt;/h2&gt;&#10;&lt;p&gt;This is a very short macro that can be called from other subroutines to reposition the machine either to a commanded position or to XY workpiece zero. It could be further enhanced with more &lt;code&gt;repositionTo&lt;/code&gt; flag values, e.g.&#10;0 = no repositioning, 1 = custom position, 2 = workpiece zero, 3 = machine zero &amp;hellip;&lt;/p&gt;&#10;&lt;h3 id="code-2"&gt;Code&lt;/h3&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;SUB&lt;/span&gt; reposition_spindle&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;G53&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;G00&lt;/span&gt; Z&lt;span style="color:#f92672"&gt;[&lt;/span&gt;zSafety&lt;span style="color:#f92672"&gt;]&lt;/span&gt; ;&lt;span style="color:#75715e"&gt;# Go to safety height (machine coordinates)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;IF&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;repositionTo &lt;span style="color:#f92672"&gt;==&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;G00&lt;/span&gt; X&lt;span style="color:#f92672"&gt;[&lt;/span&gt;xPosReposition&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Y&lt;span style="color:#f92672"&gt;[&lt;/span&gt;yPosReposition&lt;span style="color:#f92672"&gt;]&lt;/span&gt; ;&lt;span style="color:#75715e"&gt;# Move back to where requested before&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; repositionTo &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; ;&lt;span style="color:#75715e"&gt;# reset reposition flag and values&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; xPosReposition &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; yPosReposition &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;ELSE&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;G00&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;X0&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;Y0&lt;/span&gt; ;&lt;span style="color:#75715e"&gt;# Move back to XY zero (workpiece coordinates)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;ENDIF&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;ENDSUB&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="tables"&gt;Table of variables&lt;/h2&gt;&#10;&lt;p&gt;In the following sections you can find all parameters I used in the macros above.&lt;/p&gt;&#10;&lt;h3 id="system-parameters"&gt;System parameters&lt;/h3&gt;&#10;&lt;p&gt;Protected means that these parameters belong to fixed commands or states that are write-protected, and Reserved means parameters have a fix usage within my CNC software (don&amp;rsquo;t know about other CNC programs).&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Variable name&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Parameter nr.&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Type&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Comment&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;xPos&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;#5001&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;protected&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;current CNC position&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;yPos&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;#5002&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;protected&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;current CNC position&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;zPos&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;#5003&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;protected&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;current CNC position&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;currToolNumber&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;#5008&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;protected&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;[1&amp;hellip;99]&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;newToolNumber&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;#5011&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;protected&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;[1&amp;hellip;99]&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;zTouched&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;#5063&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;protected&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Z where sensor touched&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;probeOk&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;#5067&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;protected&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1 = OK&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;sensorStatus&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;#5068&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;protected&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1 = triggered&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;operatingMode&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;#5397&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;reserved&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1 = simulator&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;dialogButton&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;#5398&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;reserved&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1 = OK&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h3 id="config-parameters"&gt;Config parameters&lt;/h3&gt;&#10;&lt;p&gt;Config parameters are the one that are set once and then kept constant as they are tied to the CNC and their geometry.&lt;/p&gt;&#10;&lt;p&gt;Volatility of parameters heavily depends on the CNC software solution you&amp;rsquo;re using, the numbers of your Free parameters might differ. In my software, variables in the range &lt;code&gt;#4000 - #4999&lt;/code&gt; are persisted while all other free and reserved parameters are volatile and/or scoped.&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Variable name&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Parameter nr.&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Type&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Comment&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;triggered&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;#4400&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;free, persisted&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1 = normally open&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;currToolLength&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;#4501&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;free, persisted&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;[mm]&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;lastToolLength&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;#4502&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;free, persisted&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;[mm]&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;zSafety&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;#4506&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;free, persisted&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Z position for move&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;xPosTls&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;#4507&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;free, persisted&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;tls position&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;xPosTls&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;#4508&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;free, persisted&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;tls position&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;zSpindleTip&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;#4509&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;free, persisted&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Z zpindle on tls&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;zTls&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;#4510&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;free, persisted&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;TLS height [mm]&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;toolLengthEst&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;#4511&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;free, persisted&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;[mm]&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;touch&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;#4512&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;free, persisted&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;touch feed [mm/min]&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;rev&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;#4513&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;free, persisted&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;reverse feed [mm/min]&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;getToolLength&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;#4520&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;free, persisted&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Flag, 1 = Yes&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;xToolChg&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;#4521&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;free, persisted&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;tool change position&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;yToolChg&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;#4522&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;free, persisted&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;tool change position&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h3 id="flag-parameters"&gt;Flag parameters&lt;/h3&gt;&#10;&lt;p&gt;Free parameters can be used as wished by the programmer. Care has to be taken not to accidentally re-use an existing system variable, though.&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Variable name&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Parameter nr.&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Type&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Comment&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;toolLengthStat&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;#3501&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;free&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1 = measured&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;toolLengthDiff&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;#3502&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;free&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;[mm]&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;toolChangeDone&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;#5015&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;free&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1 = Yes&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;repositionTo&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;#5020&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;free&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Flag, 1 = Yes&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;xPosReposition&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;#5021&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;free&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;reposition flag&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;yPosReposition&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;#5022&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;free&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;reposition flag&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;toolLength&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;#5024&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;free&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;[mm]&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;</description></item><item><title>CNC Part 4.1 - Config</title><link>https://blog.schallbert.de/en/edingcnc-config/</link><pubDate>Tue, 08 Mar 2022</pubDate><author>Schallbert</author><guid>https://blog.schallbert.de/en/edingcnc-config/</guid><description type="html">&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-03-08_edingcnc-thumb.jpg"&#10; class="post-cover"&#10; alt="Zerspanobert&amp;#39;s switchbox, components labeled"&#10; title="CNC Part 4.1 - Config" /&gt;&#10;&lt;p&gt;This is part 4.1 of my portal milling sequel. It is tightly coupled to &lt;a href="https://blog.schallbert.de/en/portal-milling-setup/"&gt;Part4&lt;/a&gt; but specifically handles settings for the CNC software that I use.&lt;/p&gt;&#10;&lt;h2 id="hardware-assumptions"&gt;Hardware Assumptions&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://edingcnc.com/product/cpu5a4e/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;EdingCnc V5A-4E&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; processor board or similar&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://www.benezan-electronics.de/index.html" target="_blank" rel="noopener noreferrer" class="external-link"&gt;Interface Advanced PRO&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; breakout board or similar&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://www.upload.sorotec.de/doku/manuals/adapter.pdf" target="_blank" rel="noopener noreferrer" class="external-link"&gt;Adapter Board&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; or similar&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;These components are necessary to translate the commands created by the CNC software into physical-world signals that can actually interact with matter. The breakout board is controlled by the CNC processor and provides relay outputs for the router and my dust collector so I can have them switched on using my laptop. There are also analog voltage outputs e.g. to control spindle RPM and multiple inputs e.g. to read reference switch status and for signaling events back to the CNC software.&lt;/p&gt;&#10;&lt;p&gt;Of course there are many manufacturers of these circuits out there, but I happen to be using the above ecosystem so I can only speak for those. The underlying technology is the same, and although you might have a different user interface or communication channel like USB, your software will likely provide similar if not identical settings.&lt;/p&gt;&#10;&lt;h2 id="setup-screen-1"&gt;Setup screen 1&lt;/h2&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-03-08_settings1.jpg" alt="EdingCNC settings screen1"&gt;&lt;/figure&gt;&#10;&lt;h3 id="kinematics"&gt;Kinematics&lt;/h3&gt;&#10;&lt;p&gt;As discussed in-depth &lt;a href="https://blog.schallbert.de/en/portal-milling-setup/#kinematics"&gt;in this post&lt;/a&gt;, the green frame shows kinematics settings. A negative sign in the &lt;code&gt;Steps/[mm]&lt;/code&gt; indicates that the stepper motor direction is inverted. Note that the &lt;code&gt;reversing play&lt;/code&gt; field can remain 0 when ball screws are used. I&amp;rsquo;m using &amp;ldquo;simple kinematics&amp;rdquo; so the coordinate system is cartesian.&lt;/p&gt;&#10;&lt;h3 id="reference--emergency-stop"&gt;Reference / Emergency stop&lt;/h3&gt;&#10;&lt;p&gt;This section controls how the software interptets signal levels for input switches on the interface board. Although I&amp;rsquo;m sure I wired all inputs &amp;ldquo;normally closed&amp;rdquo; to avoid undetected cable rupture, I had to invert the input for the emergency switch.&lt;/p&gt;&#10;&lt;h3 id="spindle"&gt;Spindle&lt;/h3&gt;&#10;&lt;p&gt;These settings are very specific to the machine you&amp;rsquo;re using. I wanted the spindle to stop when I pause a job, and to automatically restart before continuing the job.&lt;/p&gt;&#10;&lt;p&gt;The &lt;code&gt;approachFeed&lt;/code&gt;parameter is a bit confusing because the default value is really low here. Its meaning is the following: It&amp;rsquo;s the Z-axis&amp;rsquo;s downwards feed when a job had been paused and the Z-axis moved upwards. When you press &amp;ldquo;continue&amp;rdquo;, the Z-axis will be lowered with this feed and when at target depth, the job will continue normally. I entered &lt;code&gt;600mm/min&lt;/code&gt; as a value most endmills should be capable of dealing with.&lt;/p&gt;&#10;&lt;h2 id="setup-screen-2"&gt;Setup screen 2&lt;/h2&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-03-08_settings2.jpg" alt="EdingCNC settings screen2"&gt;&lt;/figure&gt;&#10;&lt;h3 id="user-interface"&gt;User interface&lt;/h3&gt;&#10;&lt;p&gt;I wanted referencing/homing to be mandatory before being able to load a job or to rapid-move the machine&amp;rsquo;s axis.&#10;I also selected &lt;code&gt;automatic tool change&lt;/code&gt; although I don&amp;rsquo;t have a tool changer because otherwise my tool change macro helping me do the manual tool change wouldn&amp;rsquo;t be called.&lt;/p&gt;&#10;&lt;h3 id="interface-io"&gt;Interface I/O&lt;/h3&gt;&#10;&lt;p&gt;To account for the interface/ breakout board&amp;rsquo;s hardware setup, I had to invert some software outputs so they&amp;rsquo;d do what I&amp;rsquo;d expect them to. If I didn&amp;rsquo;t invert &lt;code&gt;PWM1&lt;/code&gt; for example, the spindle would start at full speed when I just wanted &lt;code&gt;5000rpm&lt;/code&gt; and vice versa.&lt;/p&gt;&#10;&lt;h2 id="variables-screen"&gt;Variables screen&lt;/h2&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-03-08_variables.jpg" alt="EdingCNC variables screen"&gt;&lt;/figure&gt;&#10;&lt;h3 id="parking-position-g28--g30"&gt;Parking position G28 / G30&lt;/h3&gt;&#10;&lt;p&gt;I set my parking positions in a way that allow me to work more efficiently. One of these commands would make the axes move to XY-zero of my fence that I&amp;rsquo;d also make workpiece-zero in CAM so zeroing in becomes really easy.&lt;/p&gt;&#10;&lt;p&gt;The other one is set to a point where the reference switches of all three axes are nearly pressed so homing the machine after startup becomes both easy and quick.&lt;/p&gt;&#10;&lt;h3 id="variables-monitoring"&gt;Variables monitoring&lt;/h3&gt;&#10;&lt;p&gt;Note the monitoring window. You can enter a variable from the RS274 NGC interpreter range and have their current values displayed here. This comes in handy when you want to debug macros or just want to read internal parameters like measured tool length etc.&lt;/p&gt;&#10;</description></item><item><title>CNC Part4 - Setup</title><link>https://blog.schallbert.de/en/portal-milling-setup/</link><pubDate>Thu, 03 Mar 2022</pubDate><author>Schallbert</author><guid>https://blog.schallbert.de/en/portal-milling-setup/</guid><description type="html">&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-03-03_setup-thumb.jpg"&#10; class="post-cover"&#10; alt="First steps with CNC software &amp; config"&#10; title="CNC Part4 - Setup" /&gt;&#10;&lt;p&gt;This is the 4th part of my portal milling machine sequel. It concentrates on hardware and software setup so the portal milling machine &amp;ldquo;Zerspanobert&amp;rdquo; can be soon switched into productive mode.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://blog.schallbert.de/en/portal-milling/"&gt;&lt;em&gt;Part 1&lt;/em&gt;: Thoughts about CNCs in general and machine selection&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://blog.schallbert.de/en/cnc-electronics/"&gt;&lt;em&gt;Part 2&lt;/em&gt;: CNC Electronics build&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://blog.schallbert.de/en/portal-milling-build/"&gt;&lt;em&gt;Part 3:&lt;/em&gt; CNC Machine build&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="kinematics"&gt;Kinematics&lt;/h2&gt;&#10;&lt;p&gt;Before the CNC software can do any job on my &lt;strong&gt;BasicLine 0607&lt;/strong&gt;, it needs to be set up correctly so it knows the mechanical ranges of the machines&amp;rsquo; axes, where the homing switches are located, and in which direction to turn the stepper motors to yield &amp;ldquo;positive/negative&amp;rdquo; axis movement.&lt;/p&gt;&#10;&lt;p&gt;As a first step, a decision is needed on the machine&amp;rsquo;s axis naming (X, Y, Z), on where all axes shall effectively be 0, and movement direction (positive, negative). All those coordinate points are relative and can be chosen arbitrarily, but there are some conventions in the CNC world:&lt;/p&gt;&#10;&lt;p&gt;Axes:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;X-Axis is on the portal bed, moving the portal&amp;rsquo;s Y-axis.&lt;/li&gt;&#10;&lt;li&gt;Y-Axis is up on the portal, moving the Z-axis assembly.&lt;/li&gt;&#10;&lt;li&gt;Z-Axis is located at the spindle, moving it up- and downwards.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="machine-0-point"&gt;Machine 0-point&lt;/h3&gt;&#10;&lt;p&gt;Machine 0 and movement direction:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;X-0 is at the &amp;ldquo;rear&amp;rdquo; of the axis. Movement direction is negative.&lt;/li&gt;&#10;&lt;li&gt;Y-0 is at the &amp;ldquo;left&amp;rdquo; of the axis. Movement direction is positive.&lt;/li&gt;&#10;&lt;li&gt;Z-0 is at the &amp;ldquo;top&amp;rdquo; of the axis. Movement direction is negative.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;For my machine and the room setup I have, I chose the X-axis to be the portal&amp;rsquo;s long axis while the Y-axis would be along the linear guides of the machine bed. Z would be facing upwards, following the convention. I wanted the machine Zero to be in the &amp;ldquo;Top left corner&amp;rdquo;, so Z-axis would go down (-), Y-Axis down (-), X-Axis to the right (+).&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-03-03_kinematics.jpg" alt="machine kinematics and 0-point"&gt;&lt;/figure&gt;&#10;&lt;h3 id="movement-directions"&gt;Movement directions&lt;/h3&gt;&#10;&lt;p&gt;To get started with the configuration, I connected to &lt;a href="https://edingcnc.com/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;my CNC software&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;. In the &lt;em&gt;Setup&lt;/em&gt; view, I entered the step count needed to move an axis by one millimeter: &lt;code&gt;16 microsteps/step&lt;/code&gt; multiplied by &lt;code&gt;200 steps/turn&lt;/code&gt; divided by &lt;code&gt;10mm/screw turn&lt;/code&gt; = &lt;code&gt;320 microsteps/mm&lt;/code&gt;. I took double this value for the Z-Axis as the ball screw thread is less steep here.&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;16 microsteps/step&lt;/code&gt; is the stock value recommended by the machine manufacturer. There are &lt;a href="https://www.faulhaber.com/en/support/technical-support/motors/tutorials/stepper-motor-tutorial-microstepping-myths-and-realities/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;some good arguments&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; and an in-depth analysis &lt;a href="https://www.edn.com/why-microstepping-in-stepper-motors-isnt-as-good-as-you-think/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;here&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; that recommend to use less microstepping, though. As I&amp;rsquo;ll neither require &lt;code&gt;1/100mm&lt;/code&gt; accuracy nor see extremely high cutting forces due to the materials I&amp;rsquo;ll be working with, I just kept the stock settings here.&lt;/p&gt;&#10;&lt;p&gt;Without homing (which wouldn&amp;rsquo;t work yet anyways), I used the jog keys at safety speed to check which key would move which axis, and into which direction. As my setup is different from &amp;ldquo;normal&amp;rdquo; the values I chose may differ from yours.&#10;If an axis wouldn&amp;rsquo;t match the arrow-key (e.g. pressing &amp;ldquo;right&amp;rdquo; and I&amp;rsquo;d expect my X-axis to move to the right, but actually the Z-axis would go down), I&amp;rsquo;d switch connections at the switch box until the keys would match the expected axes.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-03-03_setup_kinematics.jpg" alt="machine kinematics EdingCNC setup"&gt;&lt;/figure&gt;&#10;&lt;p&gt;Now, if the keys would move the axis into the wrong way, e.g I press &amp;ldquo;page down&amp;rdquo; but Z-Axis would go up, I&amp;rsquo;d change the signedness of the resolution field. For the axes I now had:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;X-axis -320.000&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;Y-axis 320.000&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;Z-axis -640.000&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="machine-travel"&gt;Machine travel&lt;/h3&gt;&#10;&lt;p&gt;My machine has a usable mechanical travel of &lt;code&gt;0 / 732mm&lt;/code&gt; in X direction, &lt;code&gt;-654mm / 0&lt;/code&gt; in Y direction, and &lt;code&gt;-134mm / 0&lt;/code&gt; in Z direction. I entered these values into the mask for &lt;code&gt;negative limit&lt;/code&gt; / &lt;code&gt;positive limit&lt;/code&gt; and set the signedness based on the movement direction relative to &lt;a href="https://blog.schallbert.de/en/portal-milling-setup/#machine-0-point"&gt;machine zero&lt;/a&gt;.&lt;/p&gt;&#10;&lt;h3 id="reference-switches-trigger-level"&gt;Reference switches: Trigger level&lt;/h3&gt;&#10;&lt;p&gt;The axes of most machines have a &lt;a href="https://cncphilosophy.com/cnc-offsets-and-machine-reference-explained/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;reference switch&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;. These switches are used to &amp;ldquo;home&amp;rdquo; the machine. Homing is required at every machine startup because internally, the software is just inferring XYZ-position by accumulating motor steps. Once the system is restarted, all those values go back to 0 so the machine forgets its position.&lt;/p&gt;&#10;&lt;p&gt;I connected my switches so they are &amp;ldquo;Normally Closed&amp;rdquo;: Their contacts are conducting current when not triggered. This way, a faulty open connection can be detected immediately as the machine would home (without success) at an unusually low speed in this case: &lt;code&gt;homeVelocitySlow&lt;/code&gt; is just 1/10 of normal homing speed in my config. Still, we need to make sure that the homing contact is interpreted correctly. This can be set in the &amp;ldquo;Homing and E-Stop&amp;rdquo; section of the &amp;ldquo;Setup&amp;rdquo; screen. I would enter a &lt;code&gt;1&lt;/code&gt; for &lt;code&gt;normally closed&lt;/code&gt;.&lt;/p&gt;&#10;&lt;h3 id="reference-switches-setup"&gt;Reference switches: Setup&lt;/h3&gt;&#10;&lt;p&gt;Some CNCs provide a closed-loop positioning control - they don&amp;rsquo;t need reference switches because their stepper motors are equipped with position encoders that feedback the absolute position of each axis. These machines will not lose steps and are able to detect positioning errors, e.g. caused during mechanical overload.&lt;/p&gt;&#10;&lt;p&gt;Using the reference switch, a machine without closed-loop positioning can reset its step count at a known position so that axes movement becomes repeatable. Still, the reference switch position has to be known to correctly relate step count to axes positions, and that&amp;rsquo;s why we need to enter the reference switches&amp;rsquo; positions on the axes. I just watched by how far I could move the machine (Jog menu) after the reference switch has been triggered before I hit an axis&amp;rsquo; mechanical end. These are the values I finally entered for my model:&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;Steps/AppUnit&lt;/em&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;X-axis: 10mm&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;Y-axis: -4mm&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;Z-axis: -16mm&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="emergency-stop"&gt;Emergency Stop&lt;/h3&gt;&#10;&lt;p&gt;The emergency stop button is just another input for both the CNC software and hardware. Pressing this button will stop axis motion and deactivate both spindle, cooling, and auxiliary circuits. It is also wired &amp;ldquo;normally closed&amp;rdquo; to detect connection issues and can be configured like a reference switch.&lt;/p&gt;&#10;&lt;p&gt;When the emergency stop has been activated, the machine&amp;rsquo;s drivers have to be reset and the machine must be homed again before it can continue normal operation after the button has been released again.&lt;/p&gt;&#10;&lt;h2 id="axis-motion-parameters"&gt;Axis motion parameters&lt;/h2&gt;&#10;&lt;p&gt;The CNC software needs to know how to correctly handle motion of the machine&amp;rsquo;s axes: a heavier and stiffer machine with strong steppers naturally will be able to run more quickly and handle hard accelerations / jerks better than softer, lighter machines under high axial load conditions during cutting. This is why motion parameters of your machine should be carefully identified and deposited in the software.&lt;/p&gt;&#10;&lt;h3 id="axis-speed"&gt;Axis speed&lt;/h3&gt;&#10;&lt;p&gt;&amp;ldquo;Why should Zerspanobert be fast?&amp;rdquo; I asked myself. I didn&amp;rsquo;t come up with too many good answers as normal feed rates with the endmills I plan to be using will remain far below the machine&amp;rsquo;s capabilities. Nevermind, here&amp;rsquo;s some arguments to make a machine quick:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;job times should not become too long&lt;/li&gt;&#10;&lt;li&gt;high travel distance to be covered on a large machine&lt;/li&gt;&#10;&lt;li&gt;when cutting soft, low-density materials, feeds may be much higher&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Still want a quick machine? Some calculations will help us here.&lt;/p&gt;&#10;&lt;h4 id="determining-motion-electronics-capabilities"&gt;Determining motion electronics capabilities&lt;/h4&gt;&#10;&lt;p&gt;The maximum speed is limited by multiple factors:&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Parameter&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Symbol&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Value&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Unit&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;max drive frequency&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;fD&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;125&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;kHz&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;drive microstep setting&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;N&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;16&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;max software frequency&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;fS&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;125&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;kHz&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;stepper steps/turn&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;nS&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;200&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;stepper max rpm&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;nSm&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;3300&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1/min&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ball screw thread width&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;P&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;0.01&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;m&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ball screw max rpm&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;nLm&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1700&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1/min&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;Let&amp;rsquo;s take an example for a &lt;code&gt;125kHz&lt;/code&gt; driver and assume that the software supports that step frequency. I further assume the motors have &lt;code&gt;200 steps/turn&lt;/code&gt; and your driver is configured to &lt;code&gt;16 microsteps/step&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;This gives you a maximum speed of \(\frac{125000}{3200} = 39\) rotations per second or &lt;code&gt;2340 RPM&lt;/code&gt; which is quick for a stepper motor. On a &lt;code&gt;10mm&lt;/code&gt; thread, this would lead to a machine max speed of &lt;code&gt;23.4m/min&lt;/code&gt; which is really, really fast (for non-professional grade machines this guide is targeting).&lt;/p&gt;&#10;&lt;h4 id="checking-mechanical-limitations"&gt;Checking mechanical limitations&lt;/h4&gt;&#10;&lt;p&gt;Ok, let&amp;rsquo;s see if that&amp;rsquo;s acceptable for our ball screws - their allowable RPM is determined by series (&lt;code&gt;KGS16&lt;/code&gt; in my case) and unsupported length (&lt;code&gt;~850mm&lt;/code&gt;). The value I read from a &lt;a href="https://www.neff-gewindetriebe.de/fileadmin/PDF-Datenblaetter/berechnungsgrundlagen/kugelgewindetriebe/berechnungsgrundlagen_kgt.pdf" target="_blank" rel="noopener noreferrer" class="external-link"&gt;manufacturer&amp;rsquo;s online documentation&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; is around &lt;code&gt;1700rpm&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;So, &lt;code&gt;17m/min&lt;/code&gt; remain. This is still fairly fast - I&amp;rsquo;ll be far away from full motor torque availability as motor torque reduces over speed. Let&amp;rsquo;s have a look at the stepper motor&amp;rsquo;s datasheet to make sure we&amp;rsquo;re safe.&lt;/p&gt;&#10;&lt;h4 id="verify-motor-torque-is-sufficient"&gt;Verify motor torque is sufficient&lt;/h4&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-03-03_torque_curve.jpg" alt="ESM.6088.42 Stepper torque curve"&gt;&lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;Datasheet: My stepper&amp;#39;s torque curve (Image courtesy of Sorotec GmbH)&lt;/span&gt;&lt;a&#10; href="https://www.sorotec.de/webshop/Datenblaetter/Schrittmotoren/ESM.6088.42/ESM.6088.42_V1.1.pdf"&#10; class="attr-link"&#10; aria-label="Attribution 1"&#10; &gt;&#10; &lt;sup class="attr-id"&gt;[1]&lt;/sup&gt;&#10; &lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;The blue arrow indicates my most-often-to-be-used feed rate for roughing in wood where there&amp;rsquo;s plenty of torque available for large depth increments. According to the green arrow, I still have nearly 50% torque available during quick smoothing or while working with soft materials like foams. I decided to stay 30% below critical speed of the machine (limited by the ball screw) for my &lt;code&gt;G0&lt;/code&gt; commands that won&amp;rsquo;t run under spindle load. That&amp;rsquo;s where the yellow arrow is located: Maximum velocity is &lt;code&gt;12m/min = 200mm/sec&lt;/code&gt;. Here, only as much as &lt;code&gt;0.7Nm&lt;/code&gt; are available which is 1/6 of original torque.&lt;/p&gt;&#10;&lt;p&gt;This way, I have good confidence to enter velocity data for the axes X and Y. For Z with half the thread height, I divided it by 2.&lt;/p&gt;&#10;&lt;h3 id="acceleration"&gt;Axis acceleration&lt;/h3&gt;&#10;&lt;p&gt;Imagine you want to cut a 90° corner in your program with a feed rate of &lt;code&gt;12m/min&lt;/code&gt;. Not unlike you when riding a bike and taking a sharp turn, the machine is not able to brake to zero on one axis in no time and accelerate on the other one simultaneously. If the axes don&amp;rsquo;t wait for each other, we&amp;rsquo;ll cut the corner round. If we do wait, the feed rate is not constant anymore - a dilemma. That&amp;rsquo;s why we need to find appropriate acceleration values.&lt;/p&gt;&#10;&lt;p&gt;For your bike, decelerating &amp;ldquo;appropriately&amp;rdquo; might mean to not risk wheel lock or bicycle fork fracture but on the other hand still quickly enough to not &amp;ldquo;miss&amp;rdquo; the corner. Same thing for the CNC: We don&amp;rsquo;t want it to lose steps, resonate, block, jump or twist too much while maintaining a profound operating speed, high accuracy, and low machine wear.&lt;/p&gt;&#10;&lt;p&gt;Sounds impossible? That&amp;rsquo;s why we will spend some more time here.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center media-frame--video"&gt;&#10; &lt;div class="media-video"&gt;&lt;video controls&gt;&#10; &lt;source src="https://blog.schallbert.de/assets/video/posts/2022-03-03_cnc_cornering.mp4" type="video/mp4"&gt;&#10; Your browser does not support the video tag.&#10; &lt;/video&gt;&lt;/div&gt;&#10; &lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;Cornering: `vmax = 200mm/s`, `a=400mm/s^2`&lt;/span&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;Take the above example: I used a pen to visualize acceleration behavior of my CNC with some conservative acceleration values. For the last path, The CNC slows down to 0 so it can take the sharp corner. All the paths before it also won&amp;rsquo;t meet the targeted &lt;code&gt;200mm/sec&lt;/code&gt; but the larger the radius is, the quicker the machine ran.&lt;/p&gt;&#10;&lt;h4 id="motivation"&gt;Motivation&lt;/h4&gt;&#10;&lt;p&gt;&amp;ldquo;Why should Zerspanobert be accelerating quickly?&amp;rdquo; Here I have more answers. I&amp;rsquo;ll be doing a lot of short-line and 3D work. They often involve many lines of code and thus the CNC will have to change direction and feed rate all the time, maybe even use &lt;a href="https://www.mmsonline.com/articles/a-closer-look-at-look-ahead" target="_blank" rel="noopener noreferrer" class="external-link"&gt;Look-Ahead Feed&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; or &lt;code&gt;G64&lt;/code&gt; commands.&lt;/p&gt;&#10;&lt;p&gt;I do also want to keep running through material with an almost constant feed rate to not generate &amp;ldquo;hot spots&amp;rdquo; where the machine dwells before accelerating into another direction.&#10;That&amp;rsquo;s why, with at low acceleration settings, these tasks will either take long or be less accurate than I&amp;rsquo;d like them to be as look-ahead will slur trajectories.&lt;/p&gt;&#10;&lt;p&gt;On the other hand, high accelerations will destabilize the machine and might lead to jerky behavior - but we&amp;rsquo;ll cover that later.&lt;/p&gt;&#10;&lt;h4 id="determine-maximum-acceleration-formula"&gt;Determine maximum acceleration formula&lt;/h4&gt;&#10;&lt;p&gt;As we did for velocity calculation already, let&amp;rsquo;s juggle some formulas to get a &lt;em&gt;do-not-exceed&lt;/em&gt; acceleration value. We need&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Newton%27s_laws_of_motion" target="_blank" rel="noopener noreferrer" class="external-link"&gt;Newton&amp;rsquo;s second law&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; (axial movement): \(F_{ax} = m_pa\)&lt;/li&gt;&#10;&lt;li&gt;Inertia &lt;a href="https://en.wikipedia.org/wiki/Torque" target="_blank" rel="noopener noreferrer" class="external-link"&gt;torque&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; of the axis: \(M_a = \frac{a J}{P}\)&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Moment_of_inertia" target="_blank" rel="noopener noreferrer" class="external-link"&gt;Moment of inertia&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; of the axis (cylinder): \(J = m \frac{a}{2}r^2\)&lt;/li&gt;&#10;&lt;li&gt;Motor &lt;a href="https://tech.thk.com/de/products/pdf/de_b17_009.pdf" target="_blank" rel="noopener noreferrer" class="external-link"&gt;torque required&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; for linear movement: \(M_d =\frac{F_{ax} P}{2 \pi \eta} + M_a\)&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;To calculate the maximum acceleration, I combined these formulas to&lt;/p&gt;&#10;$$a = \frac{M_d}{\frac{m_p P}{2 \pi \eta} + \frac{J}{P}}$$&lt;p&gt;In words: The acceleration the machine can theoretically reach is the available motor torque \(M_d\) divided by the portal&amp;rsquo;s mass \(m_p\), weighed with ball screw specific parameters like thread width \(P\) and the overall motion system&amp;rsquo;s efficiency \(\eta\) plus the moment of inertia \(J\) the rotating axis components have, weighed again by thread width.&lt;/p&gt;&#10;&lt;h4 id="working-with-values"&gt;Working with values&lt;/h4&gt;&#10;&lt;p&gt;Let&amp;rsquo;s add some data - for my BasicLine 0607:&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Parameter&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Symbol&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Value&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Unit&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;stepper torque @ vmax&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Md&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;0.5&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Nm&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;portal mass&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;mp&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;40&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;kg&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ball screw thread width&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;P&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;0.01&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;m&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ball screw radius&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;r&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;0.008&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;m&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;axis&amp;rsquo; rotating mass&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ma&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;4&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;kg&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;axis system efficiency&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;n&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;75&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;%&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;Where I didn&amp;rsquo;t know the exact values, I took worst-case data. For the stepper motor, assuming maximum velocity and lower voltage is worst-case because its torque will be much lower than at standstill at no load. I just guessed my portal weight and the rotating mass of my longest axis plus stepper&amp;rsquo;s core. Typical ball screw efficiency is at 90% but I had to take both bearings and losses of the pre-stressed linear guides into account. I conservatively estimated the axis system efficiency.&lt;/p&gt;&#10;&lt;p&gt;Ok, here&amp;rsquo;s what those values return in the formula as a maximum acceleration for my BasicLine CNC:&lt;/p&gt;&#10;$$a = 5.0m/s^2$$&lt;h4 id="what-this-value-means"&gt;What this value means&lt;/h4&gt;&#10;&lt;p&gt;Let&amp;rsquo;s see what time the machine would need to accelerate from 0 to top speed.&#10;Now good old law of &lt;a href="https://en.wikipedia.org/wiki/Acceleration" target="_blank" rel="noopener noreferrer" class="external-link"&gt;uniformly accelerated motion&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; comes in:&lt;/p&gt;&#10;$$v(t) = at \Rightarrow t = \frac{v_{max}}{a} = 40ms$$&lt;p&gt;How much distance do we cover to accelerate from 0 to full speed (\(s_0 = 0, v_0 = 0\))?&lt;/p&gt;&#10;$$s(t) = \frac{a}{2}t^2 + v_0t + s0 \Rightarrow s(t=40ms) = 4mm$$&lt;p&gt;What axial forces does the portal have to take during acceleration? \(F_{ax} = m_pa = 200N\)&lt;/p&gt;&#10;&lt;p&gt;The acceleration I calculated here is more than a magnitude larger than the manufacturer&amp;rsquo;s default setting &lt;code&gt;300mm/s^2&lt;/code&gt;. I wouldn&amp;rsquo;t have expected such a big difference.&lt;/p&gt;&#10;&lt;p&gt;🤔 &lt;em&gt;I must have overlooked something.&lt;/em&gt;&lt;/p&gt;&#10;&lt;h4 id="conclusion-a-matter-of-experience"&gt;Conclusion: A matter of experience&lt;/h4&gt;&#10;&lt;p&gt;The formulas neither take machine stiffness into account nor do they show how the machine would twist or jerk under dynamic load. What is Jerk, you ask? View this short &lt;a href="https://www.youtube.com/watch?v=9Z9Zws9K5kc" target="_blank" rel="noopener noreferrer" class="external-link"&gt;youtube video&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; for an explanation in CNC context. I didn&amp;rsquo;t find any point in my CNC software where I could set values for allowable Jerk, though.&lt;/p&gt;&#10;&lt;p&gt;Although I learned a lot about how math can help guide us here, it all boils down to experience again:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;How heavy and sturdy is the machine?&lt;/li&gt;&#10;&lt;li&gt;What kind of material am I working with: Is it forgiving or stiff?&lt;/li&gt;&#10;&lt;li&gt;Do I have complex, possibly 3D jobs to do?&lt;/li&gt;&#10;&lt;li&gt;Does my CNC live in a production environment where machine time is important?&lt;/li&gt;&#10;&lt;li&gt;How does the CNC sound and feel with high acceleration values?&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;I entered a value of &lt;code&gt;800mm/s^2&lt;/code&gt; as acceleration for the X- and Y-axes. It seemed to work without issues whatsoever. After all, it remains below the calculated motion system&amp;rsquo;s capability by factor 5.&lt;/p&gt;&#10;&lt;h2 id="tryout"&gt;Tryout&lt;/h2&gt;&#10;&lt;p&gt;I know, this was a long read and much more an educated guess than conducting strict math 😅. Still, we&amp;rsquo;re now ready to home the machine the first time.&#10;Try it. After that, use the jog menu to go to Machine 0 on all axis. Does it stop before hitting the mechanical end?&lt;/p&gt;&#10;&lt;p&gt;Then use the continuous jog to move close to the other end of all axes. Carefully jog the last millimeters. Are measurements and settings all correct?&#10;If so, try the 100% speed modifier key (&lt;code&gt;Shift&lt;/code&gt; - on my keyboard). Does the CNC move rapidly and automatically stop at axis end without collision?&lt;/p&gt;&#10;&lt;p&gt;Congratulations!&lt;/p&gt;&#10;&lt;h2 id="max-motion-settings-calculator"&gt;Max motion settings calculator&lt;/h2&gt;&#10;&lt;p&gt;You bravely read the whole article. Kudos! Be rewarded with a little Excel tool: &lt;a href="https://blog.schallbert.de/assets/docs/cnc_kinematics_helper.xlsx"&gt;CNC kinematics helper&lt;/a&gt; you can download and use to work through some numbers for your machine. Needless to say that I cannot take any responsibility for the results you get when using that tool or any harm that wrong values can do to your machine or even to your health.&lt;/p&gt;&#10;&lt;aside class="update-box update-box--error" role="note"&gt;&#10; &lt;span class="update-box__icon" aria-hidden="true"&gt;&#10; ⛔&#10; &lt;/span&gt;&#10;&#10; &lt;div class="update-box__body"&gt;&#10; &lt;div class="update-box__heading"&gt;&#10; &lt;strong class="update-box__title"&gt;&#10; &#10; Update of kinematics parameters&#10; &#10; &lt;/strong&gt;&#10;&#10; &lt;time datetime="2022-03-20T00:00:00Z"&gt;&#10; 2022-03-20&#10; &lt;/time&gt;&#10; &#10; &lt;/div&gt;&#10;&#10; &#10; &lt;div class="update-box__content"&gt;&#10; The value of &lt;code&gt;300mm/s&lt;/code&gt; was too quick and I would get software limit violation errors. Reduced to &lt;code&gt;240mm/s&lt;/code&gt;, my machine would vibrate a lot. So I just gently decreased maximum speed to &lt;code&gt;220mm/s&lt;/code&gt; which seems to be fine. I increased acceleration to &lt;code&gt;1200mm/s^2&lt;/code&gt;. The only issue with this new value is that for short movements, the machine is shaking just a bit more.&#10; &lt;/div&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/aside&gt;&#10;&lt;aside class="update-box update-box--note" role="note"&gt;&#10; &lt;span class="update-box__icon" aria-hidden="true"&gt;&#10; ℹ️&#10; &lt;/span&gt;&#10;&#10; &lt;div class="update-box__body"&gt;&#10; &lt;div class="update-box__heading"&gt;&#10; &lt;strong class="update-box__title"&gt;&#10; &#10; Update: Re-calculating parameter limits&#10; &#10; &lt;/strong&gt;&#10;&#10; &lt;time datetime="2022-04-03T00:00:00Z"&gt;&#10; 2022-04-03&#10; &lt;/time&gt;&#10; &#10; &lt;/div&gt;&#10;&#10; &#10; &lt;div class="update-box__content"&gt;&#10; The above calculation, while not wrong mathematically, is &lt;em&gt;misleading&lt;/em&gt;. It suggests that every axis could run with that speed which is just not the case. I have confirmed with &lt;a href="https://edingcnc.com/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;my machine&amp;rsquo;s control software supplier&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; that the 125kHz is the total max. command frequency of the system. If I try to squeeze in more steps, I&amp;rsquo;ll get an &lt;a href="https://blog.schallbert.de/en/projects/one-year-zerspanobert/#velocityerror"&gt;&amp;lsquo;Velocity was higher than max!&amp;rsquo;&lt;/a&gt; error. That&amp;rsquo;s why such high velocity value should &lt;em&gt;not&lt;/em&gt; be taken if the machines is planned to operate at full speed with all axes involved. I wrote a follow-up article and linked it &lt;a href="https://blog.schallbert.de/en/projects/one-year-zerspanobert/#velocityerror"&gt;here&lt;/a&gt; for your reference that uses values that work in any situation, even with all axes moving at full speed.&#10; &lt;/div&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/aside&gt;&#10;&lt;h2 id="you-want-more"&gt;You want more?&lt;/h2&gt;&#10;&lt;p&gt;&lt;a href="https://blog.schallbert.de/en/edingcnc-config/"&gt;Machine software setup&lt;/a&gt;&lt;/p&gt;&#10;</description></item><item><title>CNC Part3 - Build</title><link>https://blog.schallbert.de/en/portal-milling-build/</link><pubDate>Tue, 01 Mar 2022</pubDate><author>Schallbert</author><guid>https://blog.schallbert.de/en/portal-milling-build/</guid><description type="html">&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-03-01-machine_complete-thumb.jpg"&#10; class="post-cover"&#10; alt="Completed build of Zerspanobert - Sorotec Basicline 0607"&#10; title="CNC Part3 - Build" /&gt;&#10;&lt;figure class="media-frame media-frame--center media-frame--video"&gt;&#10; &lt;div class="media-video"&gt;&lt;iframe&#10; src="https://makertube.net/videos/embed/aAF2gaBewonh2uvu6mspze"&#10; title="&amp;amp;quot;Zerspanobert&amp;amp;quot; CNC assembly"&#10; loading="lazy"&#10; allow="autoplay; fullscreen; picture-in-picture"&#10; allowfullscreen&#10; style="width: 100%; height: auto; min-height: 315px; aspect-ratio: 16/9;"&#10; &gt;&lt;/iframe&gt;&lt;/div&gt;&#10; &lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;&amp;amp;quot;Zerspanobert&amp;amp;quot; CNC assembly&lt;/span&gt;&lt;a href="https://makertube.net/videos/embed/aAF2gaBewonh2uvu6mspze" class="attr-link" target="_blank" rel="noopener noreferrer"&gt;↗&lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;This is the 3rd part of my portal milling machine sequel. It concentrates on building the machine from an assembly kit.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://blog.schallbert.de/en/portal-milling/"&gt;&lt;em&gt;Part 1&lt;/em&gt;: Thoughts about CNCs in general and machine selection&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://blog.schallbert.de/en/cnc-electronics/"&gt;&lt;em&gt;Part 2&lt;/em&gt;: CNC Electronics build&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://blog.schallbert.de/en/portal-milling-setup/"&gt;&lt;em&gt;Part 4:&lt;/em&gt; Machine setup for first use&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="brand-sorotec-product-basicline-0607"&gt;Brand: Sorotec, Product: Basicline 0607&lt;/h2&gt;&#10;&lt;p&gt;My portal milling machine arrived as an all-inclusive assembly kit in a huge package on a small pallet. After inspecting its contents, I was pleased to find out that all major parts were packed so that I could start the build immediately.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-03-01-allparts.jpg" alt="parts included in the assembly kit"&gt;&lt;/figure&gt;&#10;&lt;h3 id="machine-facts"&gt;Machine facts&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Fully built, size is roughly 1m x 1m x 0.8m&lt;/li&gt;&#10;&lt;li&gt;Work area: ~ 630mm x 730mm x 135mm&lt;/li&gt;&#10;&lt;li&gt;Weight without spindle, mechatronics, and accessories: 52kg (source: manufacturer)&lt;/li&gt;&#10;&lt;li&gt;ball screws and linear guides on all axes&lt;/li&gt;&#10;&lt;li&gt;Steppers: 3Nm / 4.2A @48V&lt;/li&gt;&#10;&lt;li&gt;Speed &amp;amp; Acceleration config: 200mm/s, 400mm/s²&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="assembly"&gt;Assembly&lt;/h2&gt;&#10;&lt;p&gt;The portal milling machine&amp;rsquo;s mechatronics assembly took ~16h including stepper motor wiring, terminals, connectors, but excluding the switch box I wrote about &lt;a href="https://blog.schallbert.de/en/cnc-electronics/"&gt;here&lt;/a&gt; which I spent another 8h on.&lt;/p&gt;&#10;&lt;p&gt;The following sections each describe a construction stage, and also mention the things I struggled with.&lt;/p&gt;&#10;&lt;h3 id="1-preparing-the-ball-screw-bearings"&gt;1. Preparing the ball screw bearings&lt;/h3&gt;&#10;&lt;p&gt;A ball screw (&lt;a href="https://www.youtube.com/watch?v=W27pJXlO6ko" target="_blank" rel="noopener noreferrer" class="external-link"&gt;youtube link&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;) is a mechanical actor that converts rotary into linear motion. Instead of direct contact to a nut (like a normal screw), the nut houses a system of revolving balls that reduce friction between nut and screw to a minimum. On the CNC, they are used to move the portal with help of a stepper motor.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-03-01-ballscrews.jpg" alt="ballscrews with bearings"&gt;&lt;/figure&gt;&#10;&lt;p&gt;The ball screws need two bearings, a fixed (stepper motor side - black block on the images), and a loose one on the opposite side that just holds the screw in place. Mounting the loose-side ball bearing into its fitting proved to be more difficult to me than I&amp;rsquo;d have imagined. Im not experienced with metalworks at all, so I had a hard time hammering the bearing in as the fitting was so tight. I accidentally shaved off a bit of the aluminium fitting and the result was terrible.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center media-frame--video"&gt;&#10; &lt;div class="media-video"&gt;&lt;video controls&gt;&#10; &lt;source src="https://blog.schallbert.de/assets/video/posts/2022-03-01_fitting-bad.mp4" type="video/mp4"&gt;&#10; Your browser does not support the video tag.&#10; &lt;/video&gt;&lt;/div&gt;&#10; &lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;Fitting of ball bearing gone wrong&lt;/span&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;Luckily I had a 20mm ratchet nut that fits the outer ring of the ball bearing. After heating up the fitting a bit, I was able to use the nut, carefully hammering the bearing into the fitting with better results.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center media-frame--video"&gt;&#10; &lt;div class="media-video"&gt;&lt;video controls&gt;&#10; &lt;source src="https://blog.schallbert.de/assets/video/posts/2022-03-01_fitting-ok.mp4" type="video/mp4"&gt;&#10; Your browser does not support the video tag.&#10; &lt;/video&gt;&lt;/div&gt;&#10; &lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;Fitting of ball bearing after reinstall&lt;/span&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;Let&amp;rsquo;s hope the bearing didn&amp;rsquo;t get polluted too much with aluminium chips.&lt;/p&gt;&#10;&lt;h3 id="2-machine-frame"&gt;2. Machine frame&lt;/h3&gt;&#10;&lt;p&gt;The frame is made of &amp;ldquo;standard&amp;rdquo; aluminium profiles connected with brackets. Additional stiffening is provided by massive aluminium plates on front and rear of the frame. Linear guides are mounted to the sides of the frame which later keep the portal in place, allowing movement in &lt;code&gt;X-direction&lt;/code&gt; of travel.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-03-01-frame.jpg" alt="frame of Basicline 0607"&gt;&lt;/figure&gt;&#10;&lt;p&gt;It took me quite a long time to align the frame properly so that every angle would measure 90° and I&amp;rsquo;d still have some &amp;ldquo;air&amp;rdquo; at the right hand side for later arrangement as the gantry would dictate the exact frame width. Problem was that when tightening the screws from one side to the other, somehow the frame would always go out of square and I would have to loosen the screws a bit, then tighten up again, only to see that nothing much had improved.&lt;/p&gt;&#10;&lt;p&gt;After a couple of hours of cursing under my breath, I tried to tighten all screws just to 3Nm first, then to 6Nm, 9, etc. This worked very well so finally I reached the targeted 25Nm and was still happy with all the square angles 😅&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-03-01-xaxis.jpg" alt="Y-axis fully mounted, view from the rear"&gt;&lt;/figure&gt;&#10;&lt;p&gt;Mounting front and rear plates, the ball screw for the Y axis, and the reference switch then proved to be quick and simple in comparison. The image above shows the fully mounted Y-axis. Linear bearings that will later carry the portal are already mounted on linear guides. Here&amp;rsquo;s how the trollies look like on the inside:&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center media-frame--video"&gt;&#10; &lt;div class="media-video"&gt;&lt;video controls&gt;&#10; &lt;source src="https://blog.schallbert.de/assets/video/posts/2022-03-01_trolley.mp4" type="video/mp4"&gt;&#10; Your browser does not support the video tag.&#10; &lt;/video&gt;&lt;/div&gt;&#10; &lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;Linear bearing with revolving ball system&lt;/span&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;h3 id="3-gantry"&gt;3. Gantry&lt;/h3&gt;&#10;&lt;p&gt;For this machine&amp;rsquo;s design, the portal moves in X-direction and provides a flange to the Z-axis that itself can be moved on the X-axis via a stepper motor on the portal&amp;rsquo;s left hand side.&lt;/p&gt;&#10;&lt;p&gt;First, the portal cheeks are mounted on the linear bearings of the Y-axis. Locator pins that the manufacurer designed were a great help to make sure that they are positioned correctly. Then, linear guides for the X-axis are attached to the crossbeam of the gantry which is then finally hung into the portal cheeks and secured with cast brackets. To keep the crossbar as close as possible to the cheeks before fastening, I used screw clamps.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-03-01-portal.jpg" alt="Gantry mounted, secured with clamps"&gt;&lt;/figure&gt;&#10;&lt;p&gt;This machine works with a single stepper motor for the Y-axis, not with two independent ones on each portal side that can be seen on other designs. To make the Y-axis&amp;rsquo;s ball screw move the portal, a girder is mounted underneath the portal cheeks that connects to the ball screw&amp;rsquo;s nut. It&amp;rsquo;s easy to spot in the video below. As the assembly was a bit heavy already and I had to access the underside of the frame, I used a wooden stand to carry one side of the frame while working underneath. This way I could avoid turning the whole machine upside-down.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center media-frame--video"&gt;&#10; &lt;div class="media-video"&gt;&lt;video controls&gt;&#10; &lt;source src="https://blog.schallbert.de/assets/video/posts/2022-03-01_portal-move.mp4" type="video/mp4"&gt;&#10; Your browser does not support the video tag.&#10; &lt;/video&gt;&lt;/div&gt;&#10; &lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;Easy portal moving by hand - without ball screw attached&lt;/span&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;After loosening some of the frame&amp;rsquo;s fasteners to readjust the air-gap with mounted portal, I made sure that the portal could move without difficulty. Then I tightened all relevant fasteners for portal and frame again, using the 3Nm-increment-technique I introduced before to avoid losing square.&lt;/p&gt;&#10;&lt;p&gt;Next step was to mount X-axis ball screws, linear bearings, and flange plate to the portal which luckily was easy enough to do.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-03-01-yaxis.jpg" alt="Y-axis with Z-flange before attaching to ball screw"&gt;&lt;/figure&gt;&#10;&lt;p&gt;Finally, the X-axis reference switch could be added along with the motor socket.&lt;/p&gt;&#10;&lt;h3 id="4-z-axis"&gt;4. Z-Axis&lt;/h3&gt;&#10;&lt;p&gt;As the Z-axis is a component of its own, I assembled it aside the rest of the machine. Locators would simplify finding correct positions for the bearings, and a single linear guide would keep the Z-axis in place.&lt;/p&gt;&#10;&lt;p&gt;I&amp;rsquo;m pretty sure that this is fine for woodworks, but I don&amp;rsquo;t know if the stiffness provided by this Z-axis design is enough to routinely work with more challenging materials like Aluminium - for that, maybe a heavier alternative with two linear guides on the Z-axis should be used. Nevermind, I wanted a machine for woodworks and plastics - you get what you pay for.&lt;/p&gt;&#10;&lt;p&gt;It&amp;rsquo;s always nice to see when things really fall into place 🤗 - Look at how snugly the individual parts of this assembly kit fit together!&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center media-frame--video"&gt;&#10; &lt;div class="media-video"&gt;&lt;video controls&gt;&#10; &lt;source src="https://blog.schallbert.de/assets/video/posts/2022-03-01_zaxis.mp4" type="video/mp4"&gt;&#10; Your browser does not support the video tag.&#10; &lt;/video&gt;&lt;/div&gt;&#10; &lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;I like the sound of nicely matching parts!&lt;/span&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;When component assembly was complete, I could mount the Z-axis to the gantry. Then I aligned the Z-axis with help of a dial gauge. What I observed: Even if I had invested much more time in further improving positioning errors, it is enough to push the Z-axis at the bottom end with my hand to increase deviations to above 0.01mm easily. Unless you have a very heavy (annealed steal) machine, don&amp;rsquo;t expect wonders.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-03-01-zaxis_alignment.jpg" alt="Z-axis alignment with dial gauge"&gt;&lt;/figure&gt;&#10;&lt;p&gt;Assembling the stiffening cheeks to the Z-axis (image below) was more tricky than I anticipated. The hammer nuts were so small and the fasteners so short that there was not much room left for wiggling things in place - I had to align again and again to properly position them for sliding the reinforcement cheeks onto the assembly. When this was complete, it was an easy task to mount the Z-axis reference switch.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-03-01-zaxis_stiffening.jpg" alt="Z-axis stiffening cheeks, reference switch, X-axis motor mount"&gt;&lt;/figure&gt;&#10;&lt;h3 id="5-mechatronics"&gt;5. Mechatronics&lt;/h3&gt;&#10;&lt;p&gt;It&amp;rsquo;s time to mount the stepper motors I prepared &lt;a href="https://blog.schallbert.de/en/cnc-electronics/#stepper-motors"&gt;earlier&lt;/a&gt; . I lubricated the claw couplings between motor and ball screw with petrolatum and fully pushed it on the screw&amp;rsquo;s shaft before adding the motor. On the X-axis, fastening the setscrew was fiddly because the hex key has very little room to act on the motor side. If I had to build this machine another time, I&amp;rsquo;d do it like this to eliminate the issue:&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Take the clutch apart&lt;/li&gt;&#10;&lt;li&gt;Fasten one clutch half to the ball screw&lt;/li&gt;&#10;&lt;li&gt;Add the other clutch half to the motor shaft, don&amp;rsquo;t tighten yet&lt;/li&gt;&#10;&lt;li&gt;Put the motor into its mount, only tighten so much you can still move it by hand&lt;/li&gt;&#10;&lt;li&gt;Push the motor&amp;rsquo;s clutch half into the screw&amp;rsquo;s&lt;/li&gt;&#10;&lt;li&gt;Take the motor off and fully tighten its clutch&lt;/li&gt;&#10;&lt;li&gt;Now mount the motor&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;As the motor wires are not very long, there is a small junction box located closely to each motor where both reference switch and motor power wires are connected to drag chain compatible control lines.&#10;Every stepper motor also gets a dedicated earth wire leading to the switchbox.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-03-01-xaxis_wiring.jpg" alt="Wiring X-axis stepper motor"&gt;&lt;/figure&gt;&#10;&lt;p&gt;Once this was done for all three axes, I mounted the drag chains. Here, it&amp;rsquo;s a good idea to thoroughly select the mounting direction because the chains can be opened for maintenance in one direction only. Example: if you need to add or exchange cables later on, it&amp;rsquo;s frustrating to see that there&amp;rsquo;s no way of getting the screwdriver in place to unlock the chain links.&lt;/p&gt;&#10;&lt;p&gt;Also, please leave the control lines longer than needed and shorten them as a last step before soldering the connectors. For example, the required length of Z-axis wiring may come close to 5m when the switchbox cannot be placed immediately next to the machine.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-03-01-mechatronics.jpg" alt="All wiring done."&gt;&lt;/figure&gt;&#10;&lt;h3 id="6-lubrication"&gt;6. Lubrication&lt;/h3&gt;&#10;&lt;p&gt;Finally, I followed the (well-made) maintenance manual to get the machine properly lubricated.&lt;/p&gt;&#10;&lt;p&gt;Did I mention that I&amp;rsquo;m not a metalworks guy? Working with the grease gun proved to be pretty frustrating to me. At first, I didn&amp;rsquo;t manage to get anything out at all and finally, it wouldn&amp;rsquo;t stop. Now I&amp;rsquo;ve got a very-well greased working table but a dry machine.&lt;/p&gt;&#10;&lt;p&gt;And when is it enough grease? Are two shots into the grease nipple sufficient? I cannot even check whether anything actually entered the linear / ball screw bearings (they have a non-return valve), but the nipples are completely slurred from the outside.&lt;/p&gt;&#10;&lt;p&gt;Well, let&amp;rsquo;s assume everything is fine 😜&lt;/p&gt;&#10;&lt;h3 id="7-missing--bonus-parts"&gt;7. Missing / bonus parts&lt;/h3&gt;&#10;&lt;p&gt;As written above, all vital parts of the machine were packed Ok. But some small parts were missing for my machine configuration:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;18x 18mm M5 hex fasteners (linear guides X-axis)&lt;/li&gt;&#10;&lt;li&gt;6x 0.75mm cable shoes to get the earth wires mounted&lt;/li&gt;&#10;&lt;li&gt;4x 22mm M4 hex fasteners (stepper mount)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;But I also had some bonus parts&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;1m drag chain extra&lt;/li&gt;&#10;&lt;li&gt;4 M5 washers&lt;/li&gt;&#10;&lt;li&gt;9 M4x10 countersunk hex fasteners&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;I&amp;rsquo;d recommend to add 100 zipties to the assembly kit so all wires can be kept nice and neat. Cable sleeves would be better still but likely come at higher cost.&lt;/p&gt;&#10;&lt;h3 id="8-critics"&gt;8. Critics&lt;/h3&gt;&#10;&lt;p&gt;I like the construction manual (Version 2.1.5) very much. It contains a parts overview and each step is explained in high detail. Also the build process is well thought-through and I as a non-professional mechanic didn&amp;rsquo;t have bigger troubles to correctly assemble the machine.&lt;/p&gt;&#10;&lt;p&gt;The machined parts have a high quality and are free of ridges or sharp corners. All necessary threads had been cut in advance - even the ones for the optional mechatronics kit - so that I didn&amp;rsquo;t have to buy tools or gain knowledge about how and where to mount them.&lt;/p&gt;&#10;&lt;p&gt;What I didn&amp;rsquo;t like is that some fasteners were missing holding up the completion for a weekend, and that the expected fastener count wasn&amp;rsquo;t printed in the manual so I only realized there are parts missing when it was already too late. I understand that this machine can be ordered in different sizes and configurations so it might be too much to expect a construction manual for each and every combination.&lt;/p&gt;&#10;&lt;p&gt;Some of the bigger aluminium parts arrived with scratches as the pallet somehow must have broken and torn through the packaging during transport. To me it shows that either the logistics company or the manufacturer didn&amp;rsquo;t pack the machine 100% safe or maybe underestimated its weight.&lt;/p&gt;&#10;&lt;p&gt;A last point about these grease nipples (still no metalworks guy): The one for the Y-axis cannot be turned anymore once the ball screw&amp;rsquo;s nut has been mounted to the lower gantry beam due to missing clearance. This is unfortunate when lubrication suddenly has to be done at a different angle than anticipated. Also, I&amp;rsquo;m pretty sure the lower grease nipple of the Z-axis points into the wrong direction in the manual.&lt;/p&gt;&#10;&lt;p&gt;I tried my best to find things to gripe about but came up with only so much as nitpicking. None of my critics limit the functionality of the machine and neither cost a considerable amount of time or money to fix. So far it looks like I bought a sturdy device that will help me do my prototyping woodworks more precisely and much more quickly than ever before.&lt;/p&gt;&#10;&lt;p&gt;This is &lt;strong&gt;Zerspanobert&lt;/strong&gt;!&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-03-01-machine_complete.jpg" alt="Sorotec BasicLine 0607 fully built"&gt;&lt;/figure&gt;&lt;/p&gt;&#10;&lt;h3 id="9-lets-put-the-machine-into-operation"&gt;9. Let&amp;rsquo;s put the machine into operation!&lt;/h3&gt;&#10;&lt;p&gt;You want more? &lt;a href="https://blog.schallbert.de/en/portal-milling-setup/"&gt;Machine setup for first use&lt;/a&gt;&lt;/p&gt;&#10;</description></item><item><title>CNC Part2 - Electronics</title><link>https://blog.schallbert.de/en/cnc-electronics/</link><pubDate>Fri, 18 Feb 2022</pubDate><author>Schallbert</author><guid>https://blog.schallbert.de/en/cnc-electronics/</guid><description type="html">&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-02-18_switchbox-closed-thumb.jpg"&#10; class="post-cover"&#10; alt="switchbox of my CNC machine"&#10; title="CNC Part2 - Electronics" /&gt;&#10;&lt;h2 id="portal-machine-electronics"&gt;Portal machine electronics&lt;/h2&gt;&#10;&lt;p&gt;This is the second part of my &lt;a href="https://blog.schallbert.de/en/portal-milling/"&gt;Portal Milling Machine sequel&lt;/a&gt;. It is all about the electronics needed to control a CNC machine&amp;rsquo;s movement.&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-02-18_switchbox.jpg" alt="Switch box, electronics fully assembled, opened"&gt;&lt;/figure&gt;&lt;/p&gt;&#10;&lt;h3 id="ac--mains-components"&gt;AC / Mains components&lt;/h3&gt;&#10;&lt;p&gt;First, it houses main fuses for the whole machine control and a central power switch. It may contain mains-connected relays to control loads like spindles, cooling, dust collection. For these circuits, sub-fused power paths and outlet sockets might be available.&lt;/p&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-02-18_sockets.jpg" alt="Switch box, outlet sockets"&gt;&lt;/figure&gt;&#10;Second, it has a power supply unit for the low voltage DC rail. Its voltage and power output will depend on your stepper motor load, control/breakout board voltage requirements, auxiliary low-voltage circuits it has to drive, and the region you&amp;rsquo;re living in because standards and regulations tend to differ.&lt;/p&gt;&#10;&lt;p&gt;Third, it may have additional signal relays to pair a variable frequency drive or similar.&lt;/p&gt;&#10;&lt;h3 id="vfd"&gt;Variable Frequency Drive&lt;/h3&gt;&#10;&lt;p&gt;A VFD is commonly known as a device that controls a 3-phase alternating current machine&amp;rsquo;s speed of rotation. Supplied with 1-phase or 3-phase AC, it buffers energy in a DC intermediate circuit from where it is then forwarded to a 3-phase &lt;a href="https://en.wikipedia.org/wiki/H-bridge" target="_blank" rel="noopener noreferrer" class="external-link"&gt;H-Bridge&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; that creates a 3-phase AC output with variable voltage and frequency.&lt;/p&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-02-18_vfd-schematics.jpg" alt="Simplified schematics of a VFD&amp;#39;s power path"&gt;&lt;/figure&gt;&#10;As this 3-phase AC voltage is generated by transistors in switching mode which enormously decreases transformation losses in comparison to linear operation. The output voltage is quantified in time and magnitude though (&amp;ldquo;digital&amp;rdquo;), causing undesired circuit feedback and line noise both on the in- and output of the VFD.&lt;/p&gt;&#10;&lt;p&gt;Almost all &lt;a href="https://blog.schallbert.de/en/portal-milling/#spindle-power"&gt;professional CNC spindles&lt;/a&gt; are 3-phase AC asynchronous machines connected to a VFD.&lt;/p&gt;&#10;&lt;p&gt;VFDs often have a standardized 0&amp;hellip;10V analog input to control machine speed, enable inputs that are fed e.g. by a signal relay of the numerical control&amp;rsquo;s interface board, and an emergency halt or error signal output to the CNC interface.&lt;/p&gt;&#10;&lt;p&gt;As of now (2022-Feb), I don&amp;rsquo;t own a VFD. So I don&amp;rsquo;t know any details about tuning, parameter setting, and customization for a certain spindle to write about.&lt;/p&gt;&#10;&lt;h3 id="elv--dc-components"&gt;ELV / DC components&lt;/h3&gt;&#10;&lt;p&gt;The typical &amp;ldquo;small&amp;rdquo; CNC&amp;rsquo;s stepper motors are driven in the PELV range (&lt;a href="https://en.wikipedia.org/wiki/Extra-low_voltage" target="_blank" rel="noopener noreferrer" class="external-link"&gt;Protected Extra Low Voltage&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;) with direct current (DC) and below &lt;code&gt;60V&lt;/code&gt; so no additional touch protection is needed. The &amp;ldquo;P&amp;rdquo; in PELV stands for &amp;ldquo;protected&amp;rdquo; which means that the devices are connected to grounding wires. This way, a short to ground will safely turn the circuits off, blowing the fuses.&lt;/p&gt;&#10;&lt;p&gt;The stepper motor drivers, one each per axis, are also placed within the box. They are typically SELV (Safety Extra Low Voltage) so that they don&amp;rsquo;t need an extra grounding.&lt;/p&gt;&#10;&lt;p&gt;Then there&amp;rsquo;s a signal board, breakout board, or relay board that forwards stepper signal trains to the drivers, controls auxiliary relays, reads reference switch and emergency stop inputs, and output signals for spindle, cooling, dust collection, and/or auxiliary controls.&lt;/p&gt;&#10;&lt;p&gt;A fan keeps temperatures within the switch box low. Maybe there also is an interface board mounted in the switch box that is controlled directly via the CNC software, e.g. through USB or ethernet. It translates and routes information to the CNC&amp;rsquo;s individual components and back to the program, e.g. for reference switches or emergency stop.&lt;/p&gt;&#10;&lt;h3 id="stepper-motor-drivers-in-detail"&gt;Stepper motor drivers in detail&lt;/h3&gt;&#10;&lt;p&gt;The stepper driver interface is quite simple. It takes TTL level of &lt;code&gt;0V (low)&lt;/code&gt; and &lt;code&gt;5V (high)&lt;/code&gt; and is defined by only three inputs:&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Signal name&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Description&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Enable (EN)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Enables power to the drives. E.g. allows active position hold&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Direction (DIR)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Select direction of motor rotation&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Pulse (PUL)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Makes the motor turn a (micro)step&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;Interestingly, the same three input signals are needed to control a floppy disk drive&amp;rsquo;s reading head. I did this in one of my earlier projects, a floppy-bass-organ based on the software project &lt;a href="https://blog.arduino.cc/2012/05/29/music-floppy-moppy/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;moppy&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-02-18_drivers.jpg" alt="Stepper drivers, top view"&gt;&lt;/figure&gt;&#10;Internally, the driver interprets input signals and outputs higher voltage, high current pulses that are suited to drive the stepper motor. Two H-bridge channels - circuits with four switching transistors to control direction and magnitude of current flow through the motor&amp;rsquo;s coils - called &lt;code&gt;A&lt;/code&gt; and &lt;code&gt;B&lt;/code&gt; provide energy to the pole pairs of the stepper motor.&lt;/p&gt;&#10;&lt;p&gt;You can find more detailed information on stepper motor drives, microstepping, and other aspects e.g. &lt;a href="https://blog.poscope.com/stepper-motor-driver/#What_is_a_stepper_motor_driver" target="_blank" rel="noopener noreferrer" class="external-link"&gt;here&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; or on &lt;a href="http://www.schrittmotor-blog.de/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;this blog&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; (in German language).&lt;/p&gt;&#10;&lt;h3 id="stepper-motors"&gt;Stepper motors&lt;/h3&gt;&#10;&lt;p&gt;Stepper motors - like 3-phase AC or brushless DC motors - are electronically commutated. So direction and magnitude of current pulses have to be provided to the motor to make it turn continually. &lt;a href="http://stepcontrol.com/pdf/step101.pdf" target="_blank" rel="noopener noreferrer" class="external-link"&gt;Most stepper motors nowadays are hybrid motors&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; that combine a multi-toothed rotor, split into two halves that are shifted to each other by half a tooth, each controlled by one coil path.&#10;This kind of motor has four wires at least, two for coil &lt;code&gt;A&lt;/code&gt; and two for coil &lt;code&gt;B&lt;/code&gt;.&#10;Unifilar hybrid motors even have eight leads that again split the coils into two parts - this way, they can be connected in series, in parallel, and also unipolar so each of the four coils can be controlled individually.&lt;/p&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-02-18_stepper-cable.jpg" alt="Stepper cables, twisted"&gt;&lt;/figure&gt;&#10;The most common way to connect a stepper motor to a CNC stepper driver is the &amp;ldquo;bipolar parallel circuit&amp;rdquo;: Here, the two coils of a pole pair are connected in parallel with the same orientation. The two wires from this parallel circuit are then connected to the driver&amp;rsquo;s &lt;code&gt;A+&lt;/code&gt; and &lt;code&gt;A-&lt;/code&gt; outputs. This wiring is repeated for channel &lt;code&gt;B&lt;/code&gt;.&#10;I twisted the wire pairs that belong together with a power drill because I was too lazy to do this manually.&lt;/p&gt;&#10;&lt;p&gt;Unlike 3-phase AC or brushless DC machines, priority for stepper motor design does not lie on highest possible energy efficiency, low noise emissions, high rotation speed or thermal management for continuous operation, but on torque for low speeds, high clamping forces to securely hold a position, and smooth operation at low speeds. Stepper motors are built for high acceleration and shall always follow the speed of pulses as the machine&amp;rsquo;s positioning depends on that.&lt;/p&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-02-18_stepper-connect.jpg" alt="Stepper, connected to a driver in bipolar parallel configuration"&gt;&lt;/figure&gt;&#10;Unlike servo motors, where a closed-loop control guarantees exact positioning by measuring the shaft&amp;rsquo;s position, the stepper motor&amp;rsquo;s position is assumed. The steps are counted and multiplied with the known angle the motor turns per step. This works very well as long as the motor&amp;rsquo;s maximum load is not exceeded in which case steps are lost, creating position errors.&lt;/p&gt;&#10;&lt;h2 id="the-build"&gt;The build&lt;/h2&gt;&#10;&lt;figure class="media-frame media-frame--center media-frame--video"&gt;&#10; &lt;div class="media-video"&gt;&lt;video controls&gt;&#10; &lt;source src="https://blog.schallbert.de/assets/video/posts/2022-02-18_switchbox-build.mp4" type="video/mp4"&gt;&#10; Your browser does not support the video tag.&#10; &lt;/video&gt;&lt;/div&gt;&#10; &lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;Switchbox build in 9 seconds&lt;/span&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;The build of the switch-box and wiring assembly kit that I bought took just about 8h of my time. It proved crucial to thoroughly read and understand all of the circuit plans and step-by-step instructions provided in advance to avoid mistakes that could otherwise cost hours to fix.&lt;/p&gt;&#10;&lt;p&gt;About the kit I like that the components are electrically matched and all necessary wires, sockets (apart from an ethernet socket), and the documentations were complete. I only missed cable straps and some lugs to simplify cable management and connections to the housing. The housing is very robust and all sockets fit in their places nicely.&lt;/p&gt;&#10;&lt;p&gt;Most painful when building where the solder joints of the stepper motor/D-sub connectors and their insulation. It was also not very easy to mount the numerical controller board in the switchbox.&lt;/p&gt;&#10;&lt;p&gt;I was really excited when I first turned the switchbox on. Was I relieved when the fan started working and all sorts of LEDs lit up to indicate a working system.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center media-frame--video"&gt;&#10; &lt;div class="media-video"&gt;&lt;video controls&gt;&#10; &lt;source src="https://blog.schallbert.de/assets/video/posts/2022-02-18_switchbox-test.mp4" type="video/mp4"&gt;&#10; Your browser does not support the video tag.&#10; &lt;/video&gt;&lt;/div&gt;&#10; &lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;Switchbox dry run: Checking emergency off&lt;/span&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;h3 id="safety-notice"&gt;Safety notice&lt;/h3&gt;&#10;&lt;p&gt;No, an opened mains powered device shouldn&amp;rsquo;t be turned on unless you know what you&amp;rsquo;re doing. Yes, I have a residual current device installed in my tech shack to protect myself from hazardous voltages, and yes, I had all fuses double-checked, did quite some visual inspection and performed continuity measurements on every single connection to exclude miswirings. Luckily, the control box passed the initial function test. Both the emergency signal state was correctly interpreted and also the CNC board&amp;rsquo;s LED flashed with the expected &lt;code&gt;1Hz&lt;/code&gt; rate.&lt;/p&gt;&#10;&lt;h3 id="building-a-mini-control--series-c1"&gt;Building a &amp;ldquo;Mini Control / Series C1&amp;rdquo;&lt;/h3&gt;&#10;&lt;p&gt;For the Maker Faire Ruhr 2024, where I was one of the exhibitors, I built another machine control box: The simpler &amp;ldquo;Mini Control / Series C1&amp;rdquo;. I have embedded a time-lapse video of it here:&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center media-frame--video"&gt;&#10; &lt;div class="media-video"&gt;&lt;iframe&#10; src="https://makertube.net/videos/embed/hvZabGKMgP6QWeD5a8wgKg"&#10; title="CNC electronics assembly"&#10; loading="lazy"&#10; allow="autoplay; fullscreen; picture-in-picture"&#10; allowfullscreen&#10; style="width: 100%; height: auto; min-height: 315px; aspect-ratio: 16/9;"&#10; &gt;&lt;/iframe&gt;&lt;/div&gt;&#10; &lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;CNC electronics assembly&lt;/span&gt;&lt;a href="https://makertube.net/videos/embed/hvZabGKMgP6QWeD5a8wgKg" class="attr-link" target="_blank" rel="noopener noreferrer"&gt;↗&lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;Advantages:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Quick assembly&lt;/li&gt;&#10;&lt;li&gt;No soldering&lt;/li&gt;&#10;&lt;li&gt;Many snap-in parts&lt;/li&gt;&#10;&lt;li&gt;Small housing&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Disadvantages:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Connection to the machine is via screw terminals; Separation from the machine not possible&lt;/li&gt;&#10;&lt;li&gt;Loud fan, active even when idling (but can be solved with &amp;ldquo;Schallbert&amp;rsquo;s Fanhack&amp;rdquo;)&lt;/li&gt;&#10;&lt;li&gt;Several external power supplies (stepper motor supply, 24V supply, spindle switch box)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;I did a lot with the associated small CNC milling machine: &lt;a href="https://blog.schallbert.de/en/cnc-tuning-kinematics/"&gt;Tuning&lt;/a&gt; for shorter production times, a specialization for engravings and various projects such as stamps, dithered images and multi-colored &lt;a href="https://blog.schallbert.de/en/engrave-multicolor/"&gt;carves&lt;/a&gt;.&lt;/p&gt;&#10;</description></item><item><title>CNC Part1 - Portal milling machine</title><link>https://blog.schallbert.de/en/portal-milling/</link><pubDate>Sat, 12 Feb 2022</pubDate><author>Schallbert</author><guid>https://blog.schallbert.de/en/portal-milling/</guid><description type="html">&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-02-12_portalmillingmachine-thumb.jpg"&#10; class="post-cover"&#10; alt="My portal milling machine in mid-construction"&#10; title="CNC Part1 - Portal milling machine" /&gt;&#10;&lt;h2 id="cnc-portal-milling-machines---a-beginners-view"&gt;CNC Portal Milling Machines - a beginner&amp;rsquo;s view&lt;/h2&gt;&#10;&lt;p&gt;My first computerized milling machine will be delivered very soon, in form of a lot of packages with even more parts inside that require assembling.&#10;I ordered it to speed up my &lt;a href="https://blog.schallbert.de/en/projects/aa_alpha_1_1/"&gt;AnywhereAmps&lt;/a&gt; prototyping process. And of course to realize some other hardware projects that I had in mind, but was never able to build. Yet.&lt;/p&gt;&#10;&lt;h3 id="cnc"&gt;Wait, what?&lt;/h3&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-02-12_gcode.jpg" alt="G-code example"&gt;&lt;/figure&gt;&#10;Oh, Ok. CNC means &lt;a href="https://en.wikipedia.org/wiki/Numerical_control" target="_blank" rel="noopener noreferrer" class="external-link"&gt;computer numerical control&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; and describes how the tool is controlled - not by hand but by code.&lt;/p&gt;&#10;&lt;p&gt;This is called &lt;a href="https://en.wikipedia.org/wiki/G-code" target="_blank" rel="noopener noreferrer" class="external-link"&gt;G-Code&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;, a widely used language to tell CNC machines like my portal milling machine what to do.&lt;/p&gt;&#10;&lt;p&gt;A portal milling machine is like a router, just not hand-held. It is mounted on an apparature that can move the router in all three axes X, Y, Z with the help of &lt;a href="https://en.wikipedia.org/wiki/Stepper_motor" target="_blank" rel="noopener noreferrer" class="external-link"&gt;stepper motors&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; or &lt;a href="https://en.wikipedia.org/wiki/Servomotor" target="_blank" rel="noopener noreferrer" class="external-link"&gt;servo motors&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; so that a computer can control its movement and cut any path you like. Its way of operating is similar to a &lt;a href="https://en.wikipedia.org/wiki/3D_printing#Processes_and_printers" target="_blank" rel="noopener noreferrer" class="external-link"&gt;3D printer&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;, although the mechanics of the two have completely different requirements - a portal milling machine has to be constructed much more rugged, heavy, and stiff than a 3D-printer as it has to take all forces created by cutting through material.&lt;/p&gt;&#10;&lt;p&gt;Of course, CNC machines are not limited to 3D printers and routers. There are CNC &lt;a href="https://en.wikipedia.org/wiki/Lathe" target="_blank" rel="noopener noreferrer" class="external-link"&gt;lathes&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;, &lt;a href="https://en.wikipedia.org/wiki/Plotter" target="_blank" rel="noopener noreferrer" class="external-link"&gt;plotters&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;, &lt;a href="https://en.wikipedia.org/wiki/Laser_cutting" target="_blank" rel="noopener noreferrer" class="external-link"&gt;laser cutters&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;, &lt;a href="https://en.wikipedia.org/wiki/Water_jet_cutter" target="_blank" rel="noopener noreferrer" class="external-link"&gt;water jet cutters&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; and many more. Strictly speaking even 6+ axis industry robots are CNC machines.&lt;/p&gt;&#10;&lt;h2 id="questions"&gt;Questions&lt;/h2&gt;&#10;&lt;p&gt;These are some of the questions I had before actually buying this pretty expensive piece of technology. Some of them are easy to answer in just a few lines, but some likely take a whole article on their own.&lt;/p&gt;&#10;&lt;h3 id="cnc-router-decision"&gt;CNC router decision&lt;/h3&gt;&#10;&lt;h4 id="does-it-really-speed-up-my-prototyping-process"&gt;Does it really speed up my prototyping process?&lt;/h4&gt;&#10;&lt;p&gt;I don&amp;rsquo;t know yet, but I hope so. Consider this: Woodworks for a single prototype take roughly 8h of my time. Most time consuming are preparations for cutting, measurements, and tracing. What takes more than an hour of manufacturing time alone is AnywhereAmps Alpha&amp;rsquo;s speaker adapter with its curved surface.&lt;/p&gt;&#10;&lt;p&gt;With a CNC portal milling machine, I&amp;rsquo;m hoping to become more like a biscuit maker: Nesting all parts for AnywhereAmps (apart from the cylindrical housing) within a single piece of plywood, having the machine do the work and, after a while, just minimal finalizing work for cutting and sanding the parts.&lt;/p&gt;&#10;&lt;p&gt;Plus, if I want another prototype or have other speaker diameters: Adjust some parameters within my CAD tool, rebuild tool paths, send to the machine&amp;rsquo;s computer, clamp a fresh piece of plywood and hit &amp;ldquo;run job&amp;rdquo;. Done (in the ideal world).&lt;/p&gt;&#10;&lt;p&gt;On the other hand, the software tools process takes its time, too. Find my introduction article on &lt;a href="https://blog.schallbert.de/en/freecad-get-started/"&gt;FreeCAD linked here&lt;/a&gt; as an example.&lt;/p&gt;&#10;&lt;h4 id="spend-more-money-on-portal-hardware-or-rather-on-spindle-drive"&gt;Spend more money on portal hardware or rather on spindle drive?&lt;/h4&gt;&#10;&lt;p&gt;This is a question to the experts and I&amp;rsquo;ll only be able to answer it myself after a while of owning a CNC. I chose to spend more money on the portal and less on the spindle for a couple of gut-feeling reasons:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;The portal is my machine, the spindle just a component of it.&lt;/li&gt;&#10;&lt;li&gt;The spindle is cheaper, more easy to exchange, and by far less work to mount than the portal so I&amp;rsquo;d want the portal to be a constant&lt;/li&gt;&#10;&lt;li&gt;If I&amp;rsquo;m limited by the capabilities of my portal milling machine, I&amp;rsquo;d have to first figure out why, and then fiddle with individual components to improve. If the spindle is the limiting factor, I&amp;rsquo;ll just buy a more powerful one.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h4 id="spindle-power"&gt;How much spindle power?&lt;/h4&gt;&#10;&lt;p&gt;That&amp;rsquo;s my first hard one. I&amp;rsquo;m almost certain that for my woodworking stuff, I don&amp;rsquo;t need a 2.2kW monster. To get decent feed rates and to maintain enough headroom for density inconsistencies like branch forks, it might be a good idea to orientate in the hand-router wattage segment between 700W and 1200W which always served me well. I chose a 1000W &lt;a href="https://en.wikipedia.org/wiki/Universal_motor#cite_note-tm-6" target="_blank" rel="noopener noreferrer" class="external-link"&gt;universal motor&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; machine.&lt;/p&gt;&#10;&lt;p&gt;In contrast to their three-phase induction machine counterparts often called &amp;ldquo;HF-Spindles&amp;rdquo; (HF = High Frequency), they don&amp;rsquo;t require a &lt;a href="https://blog.schallbert.de/en/cnc-electronics/#vfd"&gt;variable frequency drive&lt;/a&gt; and external cooling as their fan is bolt-on their shaft. On the other hand, they tend to be louder (the fan is not independent off the motor&amp;rsquo;s RPM) and less efficient (fan losses, commutation losses, copper losses, magnetization losses etc.) I found only rough figures on the internet when it comes to efficiency, so let&amp;rsquo;s assume:&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;1000W&lt;/code&gt; universal motor drive &lt;code&gt;*30%&lt;/code&gt; total efficiency incl. Electronics &amp;amp; fan: &lt;code&gt;300W&lt;/code&gt; @ motor shaft&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;700W&lt;/code&gt; &lt;a href="https://www.scribd.com/document/776268309/2-4-6polig-e-M-asynchron-IP44-IP56" target="_blank" rel="noopener noreferrer" class="external-link"&gt;asynchronous drive&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; &lt;code&gt;*85%&lt;/code&gt; efficiency &lt;code&gt;*90%&lt;/code&gt; &lt;a href="http://www.variablefrequencydrive.org/vfd-efficiency" target="_blank" rel="noopener noreferrer" class="external-link"&gt;VFD efficiency&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; &lt;code&gt;*97%&lt;/code&gt; external cooling: &lt;code&gt;520W&lt;/code&gt; @ motor shaft&lt;/p&gt;&#10;&lt;p&gt;This would be a huge difference still, so an upgrade at a later point in time might be worth after all. Plus, lower wattage ratings will suffice for a HF-spindle compared to a conventional drive.&lt;/p&gt;&#10;&lt;h4 id="tool-changer"&gt;Automatic Tool Changer - yes or no?&lt;/h4&gt;&#10;&lt;p&gt;It depends on what I need, I guess. I&amp;rsquo;m buying a simple AC hand-router with digital speed control as a spindle first. A &amp;ldquo;proper&amp;rdquo; tool changer - proper meaning that I can also mount tool shafts of 10mm and bigger, have balanced collets, 3-Phase drive with stand-alone cooling and variable frequency drive - would cost ~10 times as much. Plus, each ER20 collet chuck for the tool changer easily comes at 1/2 price of the simple AC hand-router cost. Of which I&amp;rsquo;d require more than one if I want the tool changer to make sense. And I&amp;rsquo;d need a compressed air equipment with control box etc. The total of this would easily outweigh the portal milling machine&amp;rsquo;s cost!&lt;/p&gt;&#10;&lt;p&gt;Conclusion: If I&amp;rsquo;ll be using the CNC very often in the future and if my projects absolutely require frequent tool changes for roughing, smoothing, chamfers, 3D etc., then I might consider this expensive step. Maybe. In the distant future.&lt;/p&gt;&#10;&lt;h4 id="which-size-is-best"&gt;Which size is best?&lt;/h4&gt;&#10;&lt;p&gt;Ideally, for working with plywood sheets, it could load a full standard sheet of &lt;code&gt;1250mm x 2500mm&lt;/code&gt; or a fraction of it, e.g. &lt;code&gt;610mm x 1250mm&lt;/code&gt;. But even the smaller ones wouldn&amp;rsquo;t fit my tiny flat&amp;rsquo;s cellar. So I chose one with &lt;code&gt;840mm x 740mm&lt;/code&gt; clamping area.&lt;/p&gt;&#10;&lt;p&gt;For your choice: Check out if you&amp;rsquo;re constrained in space. If not, then thoroughly make up your mind about what you want to do with your machine. The machine size will fall into place automatically when you know your primary use cases.&lt;/p&gt;&#10;&lt;h4 id="plug-and-play-or-an-assembly-kit"&gt;plug-and-play or an assembly kit?&lt;/h4&gt;&#10;&lt;p&gt;This depends on multiple aspects: Your budget, time you&amp;rsquo;d like to invest, and of course, if you&amp;rsquo;re at least a bit talented with screwdrivers, nut runners, cable strippers, and the soldering iron.&#10;It is also a matter of if you&amp;rsquo;d like to or need to know every bolt of your machine.&lt;/p&gt;&#10;&lt;h4 id="ball-screws-for-moving-the-axes"&gt;ball screws for moving the axes?&lt;/h4&gt;&#10;&lt;p&gt;Do you want rapid moves, high repeatability due to reduced or eliminated play, or higher feed rates? Do you want climb milling for improved surface quality and longer tool life? If any of these is a definitive yes, then you&amp;rsquo;ll have to spend the extra money for ball screw axis drives.&lt;/p&gt;&#10;&lt;h4 id="additional-versatility"&gt;additional versatility?&lt;/h4&gt;&#10;&lt;p&gt;As described in the &lt;a href="https://blog.schallbert.de/en/portal-milling/#cnc"&gt;wait, what?&lt;/a&gt; section, the portal itself would also be suitable for other purposes. There are dragknifes for plotting, 3D print heads, and even engraving lasers available that could be fit to the portal if needed.&lt;/p&gt;&#10;&lt;p&gt;To prepare for this, a spindle that fits the euro-standard &lt;code&gt;43mm&lt;/code&gt; diameter neck holder possibly is the best choice because most other tools are available for this fit as well, making a conversion more easy.&lt;/p&gt;&#10;&lt;h3 id="general"&gt;General&lt;/h3&gt;&#10;&lt;h4 id="does-it-create-lots-of-dust"&gt;Does it create lots of dust?&lt;/h4&gt;&#10;&lt;p&gt;Yes. Get a proper dust collection. I&amp;rsquo;d recommend a cyclone system or one of these huge textile bag collection thingies that are usually used with table saws. If you&amp;rsquo;re using your machine regularly, even a shop vacuum alone might not have the holding capacity you require.&lt;/p&gt;&#10;&lt;p&gt;You should also ground it well (e.g. by connecting its ground wire(s) to your switchbox&amp;rsquo;s ground point) and buy antistatic vacuum hoses which you can connect to the vacuum&amp;rsquo;s or the dust collector&amp;rsquo;s earth.&#10;This way, you avoid getting &lt;em&gt;bzzz&lt;/em&gt;&amp;rsquo;ed everytime you touch vacuum-related things plus you can exclude one hard to spot reason for your machine going mad, e.g. sudden software freezes, control randomly detecting Emergency Stop events, phantom reference switch clicking or even stepper pulse hiccups. There are many appearances in diverse forums where this was or could have been the culprit, e.g. &lt;a href="https://cambamcnc.com/forum/index.php?topic=4524.0" target="_blank" rel="noopener noreferrer" class="external-link"&gt;here&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;&#10;&lt;h4 id="is-it-loud"&gt;Is it loud?&lt;/h4&gt;&#10;&lt;p&gt;Yes. The sound level is comparable to a hand router. It is loud in idle already, and it gets worse when you plunge through material. So it might be a good idea to either buy the quieter but more expensive high-frequency spindles with external cooling. In addition, your machine should (&lt;a href="https://eur-lex.europa.eu/legal-content/DE/TXT/PDF/?uri=CELEX:02006L0042-20091215&amp;amp;rid=1" target="_blank" rel="noopener noreferrer" class="external-link"&gt;and according to your local regulations even might have to&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;) get an enclosure for safety reasons, but also for additional noise reduction. It will also help reduce fine particle dust.&lt;/p&gt;&#10;&lt;p&gt;But sound also heavily depends on the bit you&amp;rsquo;re using. In my experience, large diameter, 10mm shaft, short bits &lt;a href="https://blog.schallbert.de/en/my-endmill-screams/"&gt;sound more pleasant&lt;/a&gt; and are maybe even less noisy than smaller diameter or long cutters.&lt;/p&gt;&#10;&lt;h4 id="what-is-the-workflow"&gt;What is the workflow?&lt;/h4&gt;&#10;&lt;p&gt;Here&amp;rsquo;s a simplified image of the workflow with a CNC machine.&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-02-12_cncworkflow.jpg" alt="Image: CNC workflow in a nutshell"&gt;&lt;/figure&gt;&#10;Similar to hand-crafting, it all starts with an idea. Parts drawings and dimensioning are made in a Computer Aided Design tool instead of on a blank sheet of paper. The drawing or 3D model file is then further proessed in a Computer Aided Manufacturing tool, where suitable router tools are selected, the milling strategies are defined, and the toolpaths generated. The resulting G-Code file is then sent to the actual CNC software which controls the stepper motor drivers. They are sending current pulses to the stepper motors which then mechanically move the machine to create the part.&lt;/p&gt;&#10;&lt;h3 id="operational"&gt;Operational&lt;/h3&gt;&#10;&lt;h4 id="milling-style"&gt;conventional or climb milling?&lt;/h4&gt;&#10;&lt;p&gt;This is a choice you make in your CAM tool.&lt;/p&gt;&#10;&lt;p&gt;Conventional milling = the router bit &amp;ldquo;carves&amp;rdquo; the material, its cutting edges rotate against the direction of material transport. Table saws e.g. always use this to avoid kick backs.&#10;Climb milling = the router bit &amp;ldquo;eats&amp;rdquo; into the material, its cutting edges rotate with the direction of transport. The cutter tends to pull itself into the material.&#10;More reference e.g. on &lt;a href="https://www.harveyperformance.com/in-the-loupe/conventional-vs-climb-milling/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;harveryperformance&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; or &lt;a href="https://blog.tormach.com/climb-milling-versus-conventional-milling-sneaky-cnc-tricks" target="_blank" rel="noopener noreferrer" class="external-link"&gt;tormach&amp;rsquo;s blog&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;Which of the two you should choose depends on your machine&amp;rsquo;s stiffness and weight, your stepper motor&amp;rsquo;s holding capabilities, the power of your stepper drivers, and the material you&amp;rsquo;re working with. If you have a stiff, heavy, powerful machine (with ball screws) and work with materials on the soft side, use climb milling. Watch your machine closely to see if all feels and sounds (!) smooth. If in doubt, use conventional milling. For hand-operated routers, always use conventional milling!&lt;/p&gt;&#10;&lt;h4 id="how-to-create-easy-and-quick-workholding"&gt;How to create easy and quick workholding?&lt;/h4&gt;&#10;&lt;p&gt;This again depends on your stock:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Big Sheets: Vaccuum table or guard fence with clamps that pushes your sheet against the fence&lt;/li&gt;&#10;&lt;li&gt;Small sheets: Clamps or bolt-down to table&lt;/li&gt;&#10;&lt;li&gt;Small blocks: Vise&lt;/li&gt;&#10;&lt;li&gt;Irregular shapes: Clamps that force the stock down to the working table&lt;/li&gt;&#10;&lt;li&gt;Dual side milling: Fixtures you should mill and glue the stock to for this specific project&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Hmm, the &lt;a href="https://blog.schallbert.de/en/projects/cnc_spoilboard/"&gt;spoilboard with guard fence&lt;/a&gt; will likely be one of my first projects with the new machine.&lt;/p&gt;&#10;&lt;h4 id="which-bits--end-mills-to-start-with"&gt;Which bits / end mills to start with?&lt;/h4&gt;&#10;&lt;p&gt;I&amp;rsquo;d recommend the following general mills for a start. They should of course match your material in their making, spiral type, flute count etc.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Classic 6mm or 1/4&amp;quot; upcut end mill&lt;/li&gt;&#10;&lt;li&gt;2mm upcut end mill for fine stuff or small holes&lt;/li&gt;&#10;&lt;li&gt;90° engraving mill for chamfers and engravings&lt;/li&gt;&#10;&lt;li&gt;Face mill of your choice for huge surface milling&lt;/li&gt;&#10;&lt;li&gt;ball-nose mill for 3D smoothing&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h4 id="my-focus-is-plywood-what-are-suitable-feeds-and-speeds"&gt;My focus is plywood, what are suitable feeds and speeds?&lt;/h4&gt;&#10;&lt;p&gt;Birch plywood is hard but forgiving. Suitable values always take into account machine stability, power and spindle performance.&lt;/p&gt;&#10;&lt;p&gt;Remember: You want your bit to cut chips, not create dust. That&amp;rsquo;s why you should avoid low feed rates at high spindle RPM. For starters in wood: use half of your tool diameter as depth per pass, calculate the spindle RPM using feeds &amp;amp; speeds formula or a calculator from the internet, and try these out. Look at the chips. Listen to the machine while working. Does it sound &amp;ldquo;good&amp;rdquo;? Increase depth per pass or feed rate gradually, stop at where either your spindle sounds stressed, your finish deteriorates, or you feel less confident with your machine. Turn back again just a notch, and that might be your ideal feed rate &amp;amp; depth per pass settings for material and mill you&amp;rsquo;re currently using.&lt;/p&gt;&#10;&lt;p&gt;For my machine, I confidently chose &lt;code&gt;F 3500mm/min = 138in/m&lt;/code&gt; at &lt;code&gt;S 24000 RPM&lt;/code&gt; and a depth increment of the mill&amp;rsquo;s diameter &lt;code&gt;Z 6mm&lt;/code&gt;, and lane-by-lane feed of &lt;code&gt;90%&lt;/code&gt;. For your reference, I used the websites &lt;a href="https://www.cnccookbook.com/feeds-speeds-cnc-wood-cutting/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;cnccookbook&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;, &lt;a href="https://www.cncrechner.de/rechner/vorschub/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;cnc-rechner&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;, and tool manufacturer&amp;rsquo;s websites like &lt;a href="https://webseite.sorotec.de/download/fraesparameter/schnittwerte.pdf" target="_blank" rel="noopener noreferrer" class="external-link"&gt;Sorotec&amp;rsquo;s&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; to calculate mine.&lt;/p&gt;&#10;&lt;h2 id="continue-reading"&gt;Continue reading?&lt;/h2&gt;&#10;&lt;p&gt;&lt;a href="https://blog.schallbert.de/en/portal-milling-build/"&gt;CNC machine: the build&lt;/a&gt;&#10;&lt;a href="https://blog.schallbert.de/en/cnc-electronics/"&gt;CNC machine: electronics&lt;/a&gt;&lt;/p&gt;&#10;</description></item><item><title>1 year CNC 🎂</title><link>https://blog.schallbert.de/en/projects/one-year-zerspanobert/</link><pubDate>Mon, 01 Jan 0001</pubDate><author>Schallbert</author><guid>https://blog.schallbert.de/en/projects/one-year-zerspanobert/</guid><description type="html">&#10; &lt;img src="https://blog.schallbert.de/assets/images/1year_cnc/machine-thumb.jpg"&#10; class="post-cover"&#10; alt="Image: Zerspanobert CNC machine"&#10; title="1 year CNC 🎂" /&gt;&#10;&lt;h2 id="one-year-with--portal-milling-cnc-machine"&gt;One year with &lt;a href="https://blog.schallbert.de/en/portal-milling-build/"&gt;&amp;lsquo;Zerspanobert&amp;rsquo;&lt;/a&gt; portal milling CNC machine&lt;/h2&gt;&#10;&lt;p&gt;It&amp;rsquo;s March 2023, and I&amp;rsquo;m hitting a year of operation with my CNC machine. It was a good year. I definitely learned a lot and had quite some fun writing articles about my progress. Of course, I wasn&amp;rsquo;t able to document and blog about each and every project that I ran during that period, so take this article as a retrospect summary of the year.&lt;/p&gt;&#10;&lt;h3 id="the-machine"&gt;The machine&lt;/h3&gt;&#10;&lt;p&gt;With 12 months of experience, I can say that I selected the right machine. It is Sorotec&amp;rsquo;s second-cheapest one, featuring a lot of stuff that more advanced portal milling machines have like ball screws, &lt;code&gt;3Nm&lt;/code&gt; steppers, &lt;code&gt;48V&lt;/code&gt; low voltage rail, preloaded linear guides. To keep the price tag moderate it misses higher-end features like belt drives, dual linear guides on the Z-axis, and additional stiffeners for portal, z-axis, and main frame.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/1year_cnc/z_axis.jpg" alt="Image: Z-axis detail view"&gt;&lt;/figure&gt;&#10;&lt;p&gt;That&amp;rsquo;s why you have to know which loads are borderline and pull back on those. But that&amp;rsquo;s likely true also for more advanced machines, they only raise the limits. What blocks quicker feed rates or higher depths of cut within my setting currently is the router motor and the way it is attached to the Z-axis.&lt;/p&gt;&#10;&lt;p&gt;The motor is clearly overwhelmed with&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;birch multiplex, full-slot milling, 6mm cutter 2-flute, &lt;code&gt;S24000&lt;/code&gt;, &lt;code&gt;Z+12mm&lt;/code&gt;, &lt;code&gt;F4000&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;HPL, full-slot milling, 6mm cutter 2-flute &lt;code&gt;S24000&lt;/code&gt;, &lt;code&gt;Z+6.5mm&lt;/code&gt;, &lt;code&gt;F3500&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;Aluminium AlMg1, full-slot milling, 6mm cutter single flute, &lt;code&gt;S24000&lt;/code&gt;, &lt;code&gt;Z+3mm&lt;/code&gt;, &lt;code&gt;F1600&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;If you reduce depth of cut and/or feed rate however, it will be able to run the job very well.&#10;Machine accuracy is pretty good; the actually limiting factors here are the manual determination of XY0 visually and the non-calibratable tool length sensor, not the machine itself.&lt;/p&gt;&#10;&lt;p&gt;The vacuum table opened up the world of fine engravings with a V-cut. Problem was that before, workpiece warp and inaccuracies of the workbed caused engravings to be of very mixed quality and larger tolerances in width than I had anticipated. These issues are now gone, as well as the additional work of creating fixtures for small or cumbersome Workpieces. Holding and clamping got easier by a magnitude, and I could reduce Z-safety height which would speed up engravings by as much as 20%.&lt;/p&gt;&#10;&lt;p&gt;I focused on reducing machining time as much as possible so I wouldn&amp;rsquo;t have to spend more time than necessary monitoring the machine in the cold workshop. That&amp;rsquo;s why I deliberately brought it and the cutters to their limits in terms of rapid movement speed, feed rate, and depth of cut. When I figured out these limits, I dialed back on the parameters by 20-30% to stay safe and keep repeatability high.&lt;/p&gt;&#10;&lt;h3 id="upgrades"&gt;Upgrades&lt;/h3&gt;&#10;&lt;p&gt;I upgraded my CNC with a &lt;a href="https://blog.schallbert.de/en/why-vacuum-table/"&gt;vacuum table&lt;/a&gt; and had to learn a lot about clamping forces and &lt;a href="https://blog.schallbert.de/en/cnc-vacuum-pumps/"&gt;vacuum pump selection&lt;/a&gt;. I installed acoustics insulation to get noise level and low-frequency vibrations down. It&amp;rsquo;s hard to see in the below image, but the whole machine table&amp;rsquo;s underside has been covered in sound- and vibration absorber mats.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/1year_cnc/accessories.jpg" alt="Image: Accessories and machine controller"&gt;&lt;/figure&gt;&#10;&lt;p&gt;Also, a chip extraction system was added so I wouldn&amp;rsquo;t have all the dust in my workshop. It works flawlessly. The amount of chips produced is astonishing and I&amp;rsquo;m glad to have it installed since the early days.&lt;/p&gt;&#10;&lt;p&gt;I will soon add a dedicated 3-phase spindle motor to further minimize vibrations and tolerances induced into the motor mount. The machine will become a little more quiet, yet more powerful so that I may finally be able to reach the target feed rates mentioned above.&lt;/p&gt;&#10;&lt;h3 id="materials"&gt;Materials&lt;/h3&gt;&#10;&lt;p&gt;I have been working with hard wood, &lt;a href="https://blog.schallbert.de/en/negative-carving-with-estlcam/#engrave"&gt;multiplex&lt;/a&gt;, &lt;a href="https://blog.schallbert.de/en/projects/cnc_spoilboard/"&gt;MDF&lt;/a&gt;, acrylic (PMMA), &lt;a href="https://hobbyline.info/forum/index.php?thread/717-hobbyglas-polystyrol-fr%C3%A4sen/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;Polystyrol&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;, &lt;a href="https://blog.schallbert.de/en/cnc-router-overload/"&gt;High pressure laminates&lt;/a&gt;, and &lt;a href="https://blog.schallbert.de/en/cut-dibond/"&gt;Aluminium composites&lt;/a&gt;.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/1year_cnc/materials.jpg" alt="Image: Material samples that I worked with"&gt;&lt;/figure&gt;&#10;&lt;p&gt;With all of these, I had to learn how the materials behave and with which parameters to run the endmills for high quality results. Some materials were so challenging that my machine was overloaded, with some others I had &lt;a href="https://blog.schallbert.de/en/cnc-vibrates/"&gt;vibration issues&lt;/a&gt; or problems to &lt;a href="https://blog.schallbert.de/en/cut-dibond-tests/"&gt;raise the bar on quality&lt;/a&gt; but I always learned from these failures and improved my processes so they could be circumvented.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/1year_cnc/pmma.jpg" alt="Image: Acrylic Chip exctraction hose holder"&gt;&lt;/figure&gt;&#10;&lt;p&gt;The image above shows an extraction hose clamp that I mounted to the Z-axis of my CNC, made of PMMA (Acrylic). I worked hard to get minimal chamfers just right and to utilize smoothing runs where I thought they could provide better surface finishes.&lt;/p&gt;&#10;&lt;h3 id="software"&gt;Software&lt;/h3&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/qr-codengrave/app-thumb.jpg" alt="Image: Qr-codengrave main app screen"&gt;&lt;/figure&gt;&#10;I tweaked the machine&amp;rsquo;s &lt;a href="https://blog.schallbert.de/en/macros-for-cnc/"&gt;macros&lt;/a&gt;, &lt;a href="https://blog.schallbert.de/en/portal-milling-setup/"&gt;tuned its kinematics parameters&lt;/a&gt;, and even wrote a full-blown application to enable the CNC to engrave &lt;a href="https://blog.schallbert.de/en/projects/qr-codengrave/"&gt;QR-codes&lt;/a&gt; into virtually any sheet material, providing a high rate of detection for pretty much any camera.&lt;/p&gt;&#10;&lt;p&gt;When my engraving projects got more and more complex, my CAM kept crashing when calculating paths for batch processing. Thus I had to do batches manually which made me dive into coordinate shift commands like &lt;code&gt;G54...G59.3&lt;/code&gt;, &lt;code&gt;G68&lt;/code&gt;, and &lt;code&gt;G92&lt;/code&gt; which will kill your workpieces if not properly understood.&#10;This helped me better understand the numerical controller and its interpreter language.&lt;/p&gt;&#10;&lt;p&gt;Last but not least the learning curve I had to get used to working with &lt;a href="https://blog.schallbert.de/en/freecad-get-started/"&gt;FreeCAD&lt;/a&gt; and &lt;a href="https://blog.schallbert.de/en/negative-carving-with-estlcam/"&gt;Estlcam&lt;/a&gt; had to be pretty steep, or else I wouldn&amp;rsquo;t have been able to get my parts cut.&lt;/p&gt;&#10;&lt;h3 id="help--support"&gt;Help &amp;amp; support&lt;/h3&gt;&#10;&lt;p&gt;Luckily, I always had people who were both willing and able to help. My wife was always there to support and allowed me to make time for this, and my kids were visiting me in the workshop frequently so that I didn&amp;rsquo;t feel lonely at any time. It is my wife and some great friends to whom I could talk to when work got frustrating. But I also had outstanding support from the commercial side:&lt;/p&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--left"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/1year_cnc/sorotec.jpg" alt="Image: Sorotec logo"&gt;&lt;/figure&gt;&#10;Thanks to Willy and Roy at &lt;a href="https://www.sorotec.de/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;Sorotec&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; for advice, tipps and tricks that helped me handle my machine, and to get better lifetime out of my endmills. I always enjoyed your direct phone support and quick turnaround times for cutter delivery and guarantee repairs. I also like to visit the &lt;a href="https://hobbyline.info/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;hobbyline CNC forum&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; for discussions and to publish and discuss my stories there to give something back to the community.&lt;/p&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--left"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/1year_cnc/eding.jpg" alt="Image: EdingCNC logo"&gt;&lt;/figure&gt;&#10;Also thanks to the &lt;a href="https://edingcnc.com/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;EdingCNC&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; team, especially to Iwona and Pim for your timely and in-depth responses on support tickets and controller software related questions.&lt;/p&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--left"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/1year_cnc/stritzelberger.jpg" alt="Image: Stritzelberger logo"&gt;&lt;/figure&gt;&#10;Many thanks go to Jo from &lt;a href="https://vakuumtisch.de/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;Stritzelberger&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; for hours and hours of discussion about good solutions for my vacuum table and its accessories.&lt;/p&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--left"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/1year_cnc/vhf.jpg" alt="Image: vhg logo"&gt;&lt;/figure&gt;&#10;From &lt;a href="https://shop.vhf.de/catalogs/Werkzeuge-W.htm?showStartpage=true" target="_blank" rel="noopener noreferrer" class="external-link"&gt;vhf&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;, I&amp;rsquo;d like to thank Mrs. Dressner for the time and frequent conversations about quality of cut, optimizations of feeds and speeds for the company&amp;rsquo;s endmills, and advice on material milling strategies.&lt;/p&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--left"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/1year_cnc/benezan.jpg" alt="Image: Benezan logo"&gt;&lt;/figure&gt;&#10;Also thanks to Nicolas from &lt;a href="https://www.benezan-electronics.de/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;Benezan Electronics&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; for assisting me with analysis of a problem with and, finally, replacement of the signal breakout board.&lt;/p&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--left"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/1year_cnc/gmc.jpg" alt="Image: Gossen Metrawatt logo"&gt;&lt;/figure&gt;&#10;Thanks to Mr. Leibold from &lt;a href="https://www.gmc-instruments.de/en/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;Gossen Metrawatt&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; for helping me select a good instrument for measuring voltage peaks and system power draw.&lt;/p&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--left"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/1year_cnc/spinogy.jpg" alt="Image: Spinogy logo"&gt;&lt;/figure&gt;&#10;Cheers to Dominik from &lt;a href="https://www.spinogy.de/en/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;Spinogy&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; with whom I had phone calls throughout well over half a year to select a proper spindle upgrade and its accessories for my machine.&lt;/p&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--left"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/1year_cnc/cadascam.jpg" alt="Image: CadAsCam logo"&gt;&lt;/figure&gt;&#10;Finally, thanks to Achim from &lt;a href="https://www.cadascam.com/de/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;CadAsCam&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;, your friendly ear taking software improvement proposals, answers to basic questions, and your extremely quick response with software updates and fixes.&lt;/p&gt;&#10;&lt;h2 id="runtime-and-jobs"&gt;Runtime and jobs&lt;/h2&gt;&#10;&lt;p&gt;Within the year, I ran 200 jobs with a total machine time of less than 18 hours. When counting in workpiece setup, machine calibration and so on, I&amp;rsquo;d triple that number. And that result again can be doubled easily when taking time for CAM/CAD into account, too.&lt;/p&gt;&#10;&lt;p&gt;In terms of time, I can&amp;rsquo;t tell exactly how many hours I devoted to the machine itself. I believe it is on par with maintaining this website, where the creation of 1 minute of &amp;ldquo;time to read&amp;rdquo; is about one hour that I need to invest.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/1year_cnc/jobs_1year.jpg" alt="Image: CNC software readout"&gt;&lt;/figure&gt;&#10;&lt;p&gt;I also spent hours and hours online researching for material parmeters, cutters, taking and giving advice in forums, investigating machine upgrades, and watching videos about how other people use their CNCs.&lt;/p&gt;&#10;&lt;p&gt;By the way, my current favorite (as of March-2023) is by CNC Connect (&lt;a href="https://www.youtube.com/watch?v=iqNTEnlXwO0" target="_blank" rel="noopener noreferrer" class="external-link"&gt;youtube link&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;). I won&amp;rsquo;t try to compare myself to that but I&amp;rsquo;m always impressed by people and manufacturers who know their stuff.&lt;/p&gt;&#10;&lt;h2 id="cost"&gt;Cost&lt;/h2&gt;&#10;&lt;p&gt;The CNC hobby is &lt;em&gt;expensive&lt;/em&gt;, both in terms of money and time. In my case, I invested nearly 13.000,00€ 😨 into machine, its accessories, spindle, machine table, power supply and protective equipment, lighting, numerical controller, laptop, CAD/CAM/CNC software, acoustic insulation, tools to build the machine, exhaust extraction system, personal safety equipment etc.&lt;/p&gt;&#10;&lt;p&gt;And with that, I didn&amp;rsquo;t even mention cost for endmills.&lt;/p&gt;&#10;&lt;p&gt;This is how it is: &amp;ldquo;The machine itself is not too expensive&amp;rdquo;, you think. But once you decide to buy, you enter a rabbit hole. I followed it down almost all its paths, making very few compromises on quality of equipment, and not specialising in one material which would have kept costs down.&lt;/p&gt;&#10;&lt;p&gt;I was intrigued by the different materials and their properties, and it was always a joy when a part turned out really good, independent off the matter it consisted of.&lt;/p&gt;&#10;&lt;h2 id="failures--solutions"&gt;Failures &amp;amp; solutions&lt;/h2&gt;&#10;&lt;p&gt;Here&amp;rsquo;s a list of bigger issues I experienced within the last year.&lt;/p&gt;&#10;&lt;h3 id="router-motor-stop-intermittent-operation-"&gt;Router motor stop, intermittent operation. Ⓜ️&lt;/h3&gt;&#10;&lt;p&gt;This issue was reproducible in hard wood and multiplex after just 8h of spindle operation. Solution was the installation of a new electronics PCB that Maffell supplied without further ado.&lt;/p&gt;&#10;&lt;h3 id="mid-job-router-motor-speed-drop-to-minimum-rpm-"&gt;Mid-job router motor speed drop to minimum RPM Ⓜ️&lt;/h3&gt;&#10;&lt;p&gt;This issue was reproducible as well and had two key causes:&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/1year_cnc/emergency.jpg" alt="Image: Emergency switch detail view"&gt;&lt;/figure&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Emergency switch had very little travel for triggering, so there were short contact bounces possible. The switch is mounted to the machine table, and could be triggered through machine vibrations. I fixed this by modifying the microswitch&amp;rsquo;s position in the housing so that the switch wouldn&amp;rsquo;t trigger early.&lt;/li&gt;&#10;&lt;li&gt;The breakout PCB that generates the analogue &lt;code&gt;0-10V&lt;/code&gt; signal out of the CNC&amp;rsquo;s pulse width command had a wrong operational amplifier type mounted (non-RTR). Under yet unknown circumstances (maybe contact bounce of emergency switch?), this part would experience latch-down so the router motor speed would drop to its lowest possible setting.&#10;A new signal breakout board was mounted and the issue disappeared.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="velocityerror"&gt;CNC: &amp;ldquo;Velocity was higher than max!&amp;rdquo; ⚠️&lt;/h3&gt;&#10;&lt;p&gt;This error appeared on a few occasions. They were all unpleasant. Once, I pushed my machine too hard (&lt;code&gt;240mm/s&lt;/code&gt; on XY, &lt;code&gt;110mm/s&lt;/code&gt; on Z), which made it squeak and loose a lot of steps, adding up into the centimeter range.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/1year_cnc/stepfrequency_old.jpg" alt="Image: overclocked machine kinematics that lead to issues"&gt;&lt;/figure&gt;&#10;&lt;p&gt;Another time with less high (but still too high, retrospectively) velocity values entered, I made a mistake by commanding a rapid move &lt;code&gt;G00 Xxx Yyy Zzz&lt;/code&gt; for all axes simultaneously which made the machine jump and crash into its mechanical limits on Z-axis. Thankfully, it was the upper limit so neither the spindle nor the machine or its bed suffered any damage. Only the stepper clutch slipped. Whew.&lt;/p&gt;&#10;&lt;p&gt;The reason: Maximum &lt;em&gt;combined axes move&lt;/em&gt; pulse frequency is &lt;code&gt;125kHz&lt;/code&gt;. I considered it was per-axis. This is &lt;em&gt;wrong&lt;/em&gt;. I double-checked it with the numerical controller manufacturer. I needed to readjust the axis&amp;rsquo;s speed values to stay below &lt;code&gt;125kHz&lt;/code&gt; &lt;em&gt;combined&lt;/em&gt;.&lt;/p&gt;&#10;&lt;p&gt;To find new values, I looked at my jobs so far. I was loosing more time on Z-axis rapid movements than on the other two axes. That&amp;rsquo;s why I put emphasis on the Z-axis to keep it quick and with high acceleration while I reduced the values for X- and Y-axis. Note that Z-axis has double resolution due to its shorter ball screw threading, so you have to double its values to compare them with the other axes.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/1year_cnc/stepfrequency_new.jpg" alt="Image: tuned machine kinematics fixing the issue"&gt;&lt;/figure&gt;&#10;&lt;p&gt;This all happened after improving manufacturing quality that I &lt;a href="https://blog.schallbert.de/en/cut-dibond-tests/#machine-vibrations"&gt;documented here&lt;/a&gt;, so you can consider these values are proven to yield good results, thus won&amp;rsquo;t be changed again lightly.&lt;/p&gt;&#10;&lt;h3 id="running-the-machine-into-the-vacuum-table-"&gt;Running the machine into the vacuum table 💥&lt;/h3&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/1year_cnc/vacuumtable_cut.jpg" alt="Image: 6mm cutter marks in my brand-new vacuum table"&gt;&lt;/figure&gt;&#10;&lt;p&gt;Well, that really upset me. I didn&amp;rsquo;t even have the table for two weeks, and already now I had damaged it. Worst thing was that I didn&amp;rsquo;t understand why.&lt;/p&gt;&#10;&lt;p&gt;All I wanted was to cut 18mm birch multiplex. I had the rougher do the outline but faced an issue that made me press the emergency switch when the cut already was complete (Travelling back to XY0, the cutter would have hit an obstacle). I fixed the path and reset the machine. I changed tools to do the smoothing, and hit &amp;ldquo;run&amp;rdquo;.&lt;/p&gt;&#10;&lt;p&gt;When I realized that the machine sounded unusual, I hit the emergency stop. But at over &lt;code&gt;4000mm/min&lt;/code&gt; for smoothing I wasn&amp;rsquo;t quick enough to avoid the machine run through the vacuum table.&lt;/p&gt;&#10;&lt;p&gt;I looked at the &lt;code&gt;G92&lt;/code&gt; work offset for Z-axis. It was correct. I searched in the CNC&amp;rsquo;s volatile variables. All matched my expectations. Then I started digging into the machine&amp;rsquo;s logfiles. Luckily, I made the above picture right after this happened so it wasn&amp;rsquo;t hard to figure out the correct log lines.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/1year_cnc/edinglog.jpg" alt="Image: log file showing lool length measurements"&gt;&lt;/figure&gt;&#10;&lt;p&gt;You can see here that tool length has been measured both for the rougher and the standard cutter. The standard cutter protrudes more - by roughly &lt;code&gt;3.4mm&lt;/code&gt;difference. This is the exact depth that I was missing on my vacuum table now.&lt;/p&gt;&#10;&lt;p&gt;Still, I didn&amp;rsquo;t have a clue what caused the machine to not take the updated tool length into account. So I looked at the Tool Change macro.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/1year_cnc/macro_rootcause.jpg" alt="Image: macro showing lool length measurement routine"&gt;&lt;/figure&gt;&#10;&lt;p&gt;Here you can see that variable &lt;code&gt;#3501&lt;/code&gt; captures whether a tool length has been taken already. This is vital because if so, you can just measure the new tool length and take the difference between the two, save that as a Z-axis offset and you&amp;rsquo;re fine to proceed the program with the new tool.&lt;/p&gt;&#10;&lt;p&gt;The thing is that variable &lt;code&gt;#3501&lt;/code&gt; is volatile as revealed during a good read of the controller&amp;rsquo;s manual. And it seems like volatile variables are not only reset when the application is closed, but also when the emergency switch is pressed.&lt;/p&gt;&#10;&lt;p&gt;Deducing from my prior statements, I had the following issue: The emergency switch press would wipe that variable&amp;rsquo;s value but keep the original Z0 height measurement that I did at the very beginning before using the rougher bit. So, instead of updating the height offset with the new tool to account for the new tool length, the macro was thinking that this was the first tool used &lt;em&gt;and just saved&lt;/em&gt; its length to variable &lt;code&gt;#4501&lt;/code&gt; (because you can&amp;rsquo;t take any difference if you didn&amp;rsquo;t have a tool prior to the first one, consequencially).&lt;/p&gt;&#10;&lt;p&gt;This alone wouldn&amp;rsquo;t even have caused this incident if the newly entered cutter hadn&amp;rsquo;t protruded more from the spindle collet than the one before.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/1year_cnc/macro_solution.jpg" alt="Image: Interim solution was to modify the macro"&gt;&lt;/figure&gt;&#10;&lt;p&gt;I solved this problem by adding a message into the macro when it was solely saving the tool length but not modifying the Z-axis&amp;rsquo;s offset. This way I&amp;rsquo;d at least have an indication when something is about to go wrong.&lt;/p&gt;&#10;&lt;h2 id="conclusion"&gt;Conclusion&lt;/h2&gt;&#10;&lt;p&gt;In summary, I will continue using the CNC. I will be learning as I go. And I will deepen my knowledge about how software interacts with mechatronics that changes physical matter like &amp;lsquo;Zerspanobert&amp;rsquo; does. I&amp;rsquo;ll try to write down what I learned so others can follow my tracks if they like to.&lt;/p&gt;&#10;&lt;p&gt;I hope to be able to maintain good contact to other hobbyists and makers, and to the companies that I had the pleasure to work with so far (and, maybe, to add some more to my list).&lt;/p&gt;&#10;&lt;p&gt;Cheers!&#10;&lt;em&gt;Schallbert&lt;/em&gt;&lt;/p&gt;&#10;</description></item><item><title>CNC spoilboard</title><link>https://blog.schallbert.de/en/projects/cnc_spoilboard/</link><pubDate>Mon, 01 Jan 0001</pubDate><author>Schallbert</author><guid>https://blog.schallbert.de/en/projects/cnc_spoilboard/</guid><description type="html">&#10; &lt;img src="https://blog.schallbert.de/assets/images/spoilboard/spoilboard-thumb.jpg"&#10; class="post-cover"&#10; alt="Spoilboard for my CNC"&#10; title="CNC spoilboard" /&gt;&#10;&lt;h2 id="project-stats"&gt;Project stats&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Difficulty: medium 3/5&lt;/li&gt;&#10;&lt;li&gt;Cost: ~60€&lt;/li&gt;&#10;&lt;li&gt;Time: ~6h&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;a href="https://blog.schallbert.de/en/cnc-spoilboard-diy/"&gt;Go to instructions&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/spoilboard/crop.jpg" alt="spoilboard: features"&gt;&lt;/figure&gt;&#10;This is how to make a versatile spoilboard for your CNC application. The design uses hammer nut slots in different angles to enable very flexible clamping. It also includes a fence that makes preparing sheet material cuts easy: workpiece zero is at the same spot every time, and clamping against the fence might already suffice so that no load in Z-direction is needed. The fence has two cutouts: One to hold the tool-length sensor, and another one at XY-zero to mitigate tool collisions during rapid positioning.&lt;/p&gt;&#10;&lt;h3 id="simple-adjustment-for-your-cnc"&gt;Simple adjustment for your CNC&lt;/h3&gt;&#10;&lt;p&gt;The dimensions I took are matching for a Basicline 0607 portal milling machine. But as I&amp;rsquo;m using a parametric CAD tool, all you need to do is to change dimensions to fit your machine, resolve some drawing quirks and you&amp;rsquo;re good to go with your own design.&lt;/p&gt;&#10;&lt;h2 id="the-idea"&gt;The idea&lt;/h2&gt;&#10;&lt;p&gt;As indicated above, the spoilboard has to meet the following criteria:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Mountable on CNC machine&amp;rsquo;s base frame (hammernuts / M5 fasteners)&lt;/li&gt;&#10;&lt;li&gt;Mount point close to XY-zero&lt;/li&gt;&#10;&lt;li&gt;T-slots for flexible mounting at 0°, 22.5°, 45°, 67.5°, 90°&lt;/li&gt;&#10;&lt;li&gt;Fence, quick-mount onto spoilboard to simplify clamping and improve repeatibility&lt;/li&gt;&#10;&lt;li&gt;Fence to hold tool-length sensor&lt;/li&gt;&#10;&lt;li&gt;Fence to provide a cutout at XY-zero&lt;/li&gt;&#10;&lt;li&gt;Shall be manufacturable on the CNC it&amp;rsquo;s designed for (multi-job if needed)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="design-phase-cad"&gt;Design phase: CAD&lt;/h2&gt;&#10;&lt;p&gt;I started with a dimensions table in Freecad and a couple of empty-sheet sketches.&lt;/p&gt;&#10;&lt;h3 id="mounting-to-base-frame"&gt;Mounting to base frame&lt;/h3&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/spoilboard/spoilboard_mount.jpg" alt="spoilboard: top view, mount to frame"&gt;&lt;/figure&gt;&#10;In the spreadsheet, I started by both entering the base frame&amp;rsquo;s and the CNC travel range&amp;rsquo;s dimensions, the drive-in nut&amp;rsquo;s, washer&amp;rsquo;s, and fastener&amp;rsquo;s parameters.&#10;I measured the exact positions of the base frame&amp;rsquo;s t-nuts where I wanted the spoilboard to mount onto and entered them in the spreadsheet.&lt;/p&gt;&#10;&lt;p&gt;When this was done, I opened the first sketch and drew the spoilboard&amp;rsquo;s rectangle, fully constraining its dimensions with the data from the spreadsheet. I added construction lines (i.e. lines that wouldn&amp;rsquo;t show in the final drawing, but help anchor constraints, draw lines, or mark symmetry within a drawing) where the base frame&amp;rsquo;s T-nut centers are positioned.&lt;/p&gt;&#10;&lt;p&gt;I added concentric circles for washer countersinks and through-holes in evenly distributed distances. They will later hold the fasteners and their washers. I didn&amp;rsquo;t decide on their final position on the Y-axis yet, as the spoilboard&amp;rsquo;s T-nuts would interfere with some of these mounting points.&lt;/p&gt;&#10;&lt;p&gt;The CNC job for this sketch will have to be done on the &amp;ldquo;top side&amp;rdquo; of the spoilboard.&lt;/p&gt;&#10;&lt;h3 id="t-nut-slots-and-fence-mounting-points"&gt;T-nut slots and fence mounting points&lt;/h3&gt;&#10;&lt;p&gt;Now it was time to add some data to the spreadsheet again: T-nut slot parameters, angles, border width like so:&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/spoilboard/tslot_data.jpg" alt="spoilboard: t-nut slot data"&gt;&lt;/figure&gt;&#10;First I had to add construction lines on the spoilboard to mark where the CNC&amp;rsquo;s travel range. Second, I had to reserve some room for the fence. Only then could I start to draw and position the T-slots which each had different angles and lengths based on the border I wanted to keep for stability reasons.&lt;/p&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/spoilboard/spoilboard_drawing.jpg" alt="spoilboard: t-nut slot drawing"&gt;&lt;/figure&gt;&#10;Every T-slot would get a symmetry construction line around which two rectangles reside to mark slot and rebate shoulders.&lt;/p&gt;&#10;&lt;p&gt;Then I added countersinks for bolt-in nuts that will later hold the fence on the spoilboard&amp;rsquo;s margin. In their center, I provide hole-throughs for the fasteners.&lt;/p&gt;&#10;&lt;p&gt;In a final step, I readjusted the base-frame mount sketche&amp;rsquo;s hole positions where they interfered with the T-nut slots.&lt;/p&gt;&#10;&lt;p&gt;The CNC job for this sketch will be executed on the &amp;ldquo;bottom side&amp;rdquo; of the spoilboard - the hammernuts will only work if they grip from below.&lt;/p&gt;&#10;&lt;h3 id="fence"&gt;Fence&lt;/h3&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/spoilboard/fence.jpg" alt="spoilboard: fence"&gt;&lt;/figure&gt;&#10;Just some more data needed to be added to the spreadsheet here: Ellipsoid dimensions for the XY-zero cutout, tool-length sensor, and the fence&amp;rsquo;s witdh on the Y-axis. Its dimensions on the X-axis were predefined by the machine&amp;rsquo;s travel area already.&lt;/p&gt;&#10;&lt;p&gt;Drawing the fence was easy because I could use the &amp;ldquo;link edge&amp;rdquo; tool to import positions of lines from other sketches. The fence is an own job with an own physical part on the CNC, and it is only being cut on the &amp;ldquo;top side&amp;rdquo;.&lt;/p&gt;&#10;&lt;h2 id="planning-phase-cam"&gt;Planning phase: CAM&lt;/h2&gt;&#10;&lt;p&gt;Now came the differcult part: Instead of three jobs as indicated above, I actually needed six. This is, because the CNC has less travel range is smaller than the spoilboard&amp;rsquo;s dimensions. I was further planning with stocks that already have the correct outline dimensions so I could fit them on the machine.&lt;/p&gt;&#10;&lt;p&gt;The first part of this job was creating sinks and holes for the lower end of the spoilboard mounts. I set the Zero at the very bottom-left of the machine (X0, Y-max) so I could be sure that the relative coordinates would fit.&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/spoilboard/mount_cam.jpg" alt="spoilboard: cam mount_lower"&gt;&lt;/figure&gt;&lt;/p&gt;&#10;&lt;p&gt;For the upper end cut, topmost hole on the left was used as XY-reference zero created in the previous job. This way, I could clamp the stock more flexibly.&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/spoilboard/mount_cam_up.jpg" alt="spoilboard: cam mount_upper"&gt;&lt;/figure&gt;&lt;/p&gt;&#10;&lt;p&gt;I repeated this approach for the other two jobs.&lt;/p&gt;&#10;&lt;p&gt;For the T-nut slot job, I had to mirror the sketch and turn my stock around the Y-axis as the spoilboard&amp;rsquo;s bottom needed to be machined here. This could be done in CAM as well, but I preferred to quickly jump back into CAD for this task.&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/spoilboard/tslot_cam.jpg" alt="spoilboard: cam tslot_lower"&gt;&lt;/figure&gt;&lt;/p&gt;&#10;&lt;p&gt;For all these jobs, I used a &lt;code&gt;6mm&lt;/code&gt; 2-flute upcut wood bit with a cutter length of &lt;code&gt;21mm&lt;/code&gt;. As these were the first-ever steps I took with a CNC, I planned with very conservative parameters for this tool: &lt;code&gt;S24000rpm, F2800mm/min, Z+=6mm, XY+=85%&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;I even ran the first job &amp;ldquo;in the air&amp;rdquo; just to make sure I got everything set up right.&lt;/p&gt;&#10;&lt;h2 id="execution"&gt;Execution&lt;/h2&gt;&#10;&lt;p&gt;I scratched my head when I finally had the stock on machine bed: where could I clamp it? The sides were occupied by the portal, I have a wall at the rear of the machine&amp;hellip; So would it be sufficient to only clamp it on the front? And as I was cutting all the way through, should I add another spoilboard below my spoilboard so that I won&amp;rsquo;t accidentally cut into the machine bed?&lt;/p&gt;&#10;&lt;p&gt;I decided that these objections are justified and waited until the weekend was over so I could buy some scrap wood and more double-sided tape.&lt;/p&gt;&#10;&lt;p&gt;This is how I clamped: Standard C-clamps at the bottom, double-sided tape at the top. Worked very well.&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/spoilboard/tslot.jpg" alt="spoilboard: execution"&gt;&lt;/figure&gt;&lt;/p&gt;&#10;&lt;p&gt;Before finally mounting the frame to the spoilboard, I leveled it with a &amp;ldquo;spiral&amp;rdquo; strategy. It was enough to cut &lt;code&gt;Z=0.3mm&lt;/code&gt;. I used a &lt;code&gt;14mm&lt;/code&gt; face-mill cutter at a speed as low as &lt;code&gt;S=5500rpm&lt;/code&gt;. This job took a long time, almost 30 minutes. The result was a surface as smooth as the original stock&amp;rsquo;s.&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/spoilboard/leveling.jpg" alt="spoilboard:leveling"&gt;&lt;/figure&gt;&lt;/p&gt;&#10;&lt;h2 id="assessment"&gt;Assessment&lt;/h2&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/spoilboard/hole.jpg" alt="very clean cut in MDF"&gt;&lt;/figure&gt;&#10;Luckily, in the end it all worked out. Look how clean the cut is! Seems like MDF and sharp endmills are good friends. Note: MDF really needs a good dust collection as it will generate breathtaking amounts of dust when machined.&lt;/p&gt;&#10;&lt;p&gt;I&amp;rsquo;m quite happy with the overall job quality. Every single mount point to machine bed and fence fits OK and the tool-length sensor sits snugly in its cutout.&lt;/p&gt;&#10;&lt;p&gt;There are two things to criticize: The endmill I used is very loud and emits an uncomfortable shrieking noise that I even &lt;a href="https://blog.schallbert.de/en/my-endmill-screams/"&gt;devoted a blog post&lt;/a&gt; to.&#10;Second, in my CAM tool, I didn&amp;rsquo;t care enough about milling direction. This way, the CAM decided to do one pass in conventional milling, another one in climb milling direction (it was a full slot as wide as the tool, so for the CAM it&amp;rsquo;s both climb milling, just the &amp;ldquo;side&amp;rdquo; of tool engagement changes). The difference is a very small but noticeable ridge on the fence&amp;rsquo;s edge.&lt;/p&gt;&#10;&lt;p&gt;With this spoilboard, I can process sheets as big as &lt;code&gt;620mm x 620mm&lt;/code&gt; now!&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/spoilboard/completed.jpg" alt="spoilboard jobs complete"&gt;&lt;/figure&gt;&lt;/p&gt;&#10;&lt;p&gt;Well, one deficiency left is the tool-length sensor. It protrudes into the working area which is a problem when I want to machine large stocks and have tool changes planned: In this case, I&amp;rsquo;m using macros for measuring tool length which is why I don&amp;rsquo;t want to remove the sensor. As an iteration, I could rework the fence so it fully encloses the sensor.&lt;/p&gt;&#10;&lt;p&gt;Maybe.&lt;/p&gt;&#10;&lt;p&gt;Later.&lt;/p&gt;&#10;</description></item><item><title>Seifenbutler</title><link>https://blog.schallbert.de/en/projects/seifenbutler/</link><pubDate>Mon, 01 Jan 0001</pubDate><author>Schallbert</author><guid>https://blog.schallbert.de/en/projects/seifenbutler/</guid><description type="html">&#10; &lt;img src="https://blog.schallbert.de/assets/images/soapbutler/soapbutler-thumb.jpg"&#10; class="post-cover"&#10; alt="SoapButler: a soap holder for the shower rail"&#10; title="Seifenbutler" /&gt;&#10;&lt;h2 id="project-stats"&gt;Project stats&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Difficulty: Medium 3/5&lt;/li&gt;&#10;&lt;li&gt;Cost: ~250€&lt;/li&gt;&#10;&lt;li&gt;Time: 1+ year&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="the-story-of-seifenbutler"&gt;The story of Seifenbutler&lt;/h2&gt;&#10;&lt;p&gt;Accompany me here over a period of more than a year, in which I am constantly working on one project. It goes from an idea with a few requirements to pre-production readiness. I explain my prototype work, go into a little detail about the many setbacks and finally come closer to what I think is a good product.&lt;/p&gt;&#10;&lt;h2 id="idea"&gt;Idea&lt;/h2&gt;&#10;&lt;p&gt;&lt;strong&gt;May 2022&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;I recently switched from using liquid shampoo in the shower to solid shampoo and soap. As I didn&amp;rsquo;t have a tray for the soap, I showered with it. It used up more quickly, didn&amp;rsquo;t dry for days and stuck to the edge of the shower.&lt;/p&gt;&#10;&lt;p&gt;I didn&amp;rsquo;t want to buy a normal soap holder that would require drilling holes in the tiled walls. So I decided to design a clip-on soap holder for the shower rail. I would mount the piece above the shower head so it wouldn&amp;rsquo;t be exposed to more water than necessary.&lt;/p&gt;&#10;&lt;p&gt;The soap holder should also be easy to fit without tools.&lt;/p&gt;&#10;&lt;h2 id="v1-v3-first-drafts-in-hpl"&gt;V1-V3: First drafts in HPL&lt;/h2&gt;&#10;&lt;p&gt;&lt;strong&gt;July 2022&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;So I designed my own holder. I wanted a simple, round design with a clamp hole to attach to the shower rail and a sunken area to hold the soap or solid shampoo. A few slots in the base would allow water to drip off and the soap to air dry when not in use. I wanted to add a fastener inside the piece and a nut on the inside to reduce the diameter of the hole for the shower rod and clamp seifenbutler - as the piece is called - in place.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/soapbutler/clamping_explained.jpg" alt="Image: seifenbutler V1&amp;#39;s clamping mechanism explained "&gt;&lt;/figure&gt;&#10;&lt;p&gt;To make this possible, it made sense to produce two components - an upper shell that holds the soap in place and provides space for the mounting mechanism and a lower one that has drainage slots for excess water and holds the other half of the mounting mechanism.&lt;/p&gt;&#10;&lt;h3 id="freecad-sketches"&gt;FreeCAD: Sketches&lt;/h3&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/soapbutler/freecad_partbodydwg.jpg" alt="Image: FreeCAD part, body, sketch"&gt;&lt;/figure&gt;&#10;FreeCAD artefacts are organized in a certain way to simplify the handling of different views or to prepare for later two-sided editing using the clone function. Therefore, I first create a series of parts in &amp;lsquo;Parts Design&amp;rsquo; mode. Sketches can be grouped into body elements, which in turn are arranged in part elements.&lt;/p&gt;&#10;&lt;p&gt;So I create a part (yellow element) that contains &amp;ldquo;sketches&amp;rdquo; - all the original drawings (red elements) of all the bodies (blue elements) of the part(s) to be produced. These drawings should be fully constrained. They cannot contain any information on positioning relative to other components. This means that the sketches are all in the same place. Therefore, all inactive sketches should be hidden to avoid confusion.&lt;/p&gt;&#10;&lt;p&gt;(A more in-depth description of my FreeCAD workflow can be found &lt;a href="https://blog.schallbert.de/en/freecad-get-started/"&gt;in this blog post&lt;/a&gt;.)&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/soapbutler/freecad_scetches.jpg" alt="Image: FreeCAD Sketch"&gt;&lt;/figure&gt;&#10;&lt;h3 id="freecad-parts"&gt;FreeCAD: Parts&lt;/h3&gt;&#10;&lt;p&gt;Then I create parts that later contain the components to be cut, e.g. &amp;ldquo;clampingHoles&amp;rdquo;, &amp;ldquo;soapButler&amp;rdquo;, &amp;ldquo;wallHolder&amp;rdquo;. They each contain a subset of sketches, but no information on the final positioning. Finally, I create a part for each job that my production has to perform, e.g. &lt;code&gt;job00_clamping&lt;/code&gt;, &lt;code&gt;job01_upperMill&lt;/code&gt;, &lt;code&gt;job02_3dCut&lt;/code&gt;, &lt;code&gt;job03_lowerFinish&lt;/code&gt;. These clone body components but add placement information, include mirrored parts for 2-sided milling or provide an outline to set the XY-0 correctly.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/soapbutler/freecad_parts.jpg" alt="Image: FreeCAD part"&gt;&lt;/figure&gt;&#10;&lt;p&gt;The advantage of such a project configuration is that if an original sketch has to be changed for any reason, all cloned parts are automatically changed as well. With clever organization, it is also possible to simply change the dimensions of the parts in the table that then adjust the entire part geometry accordingly without help of the user.&lt;/p&gt;&#10;&lt;h3 id="machining"&gt;Machining&lt;/h3&gt;&#10;&lt;p&gt;For my first prototype, I chose high pressure laminate as the material as it is very durable, can get wet from time to time and looks pretty good. For machining, I used low helix endmills to keep the vibration under control when cutting the tough HPL material. I opted for coated single flute carbide bits that I bought some time ago (for cutting aluminum). I used eccentric clamps to hold the part in place and only required two additional hold-downs to keep the part on the machine bed.&lt;/p&gt;&#10;&lt;p&gt;I had an error in the CAM program that took me a few minutes to fix: I had set the toolpaths for the spiral inward instead of outward. The problem with this is that the spiral becomes increasingly spongy and unstable as the cut progresses. I was only able to keep the vibrations in check by frequently interrupting the milling process and applying tape to the areas where the cut had already been made.&lt;/p&gt;&#10;&lt;h3 id="rating"&gt;Rating&lt;/h3&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/soapbutler/machining_v2.jpg" alt="Bild: Bearbeitung V2 von soapbutler"&gt;&lt;/figure&gt;&#10;&lt;p&gt;Production of my first prototype went quite OK. The machine was humming confidently, and apart from a few minor errors (fixing holes in the lower part too narrow, length of clamp fixing incorrectly specified) I was reasonably happy with the result.&lt;/p&gt;&#10;&lt;p&gt;It took me about 20 minutes to release the part and remove the taps. This seemed to be clearly in need of improvement.&lt;/p&gt;&#10;&lt;h2 id="v4-failure-with-cheap-hpl"&gt;V4: Failure with cheap HPL&lt;/h2&gt;&#10;&lt;p&gt;&lt;strong&gt;October 2022&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/soapbutler/cam_chamfer_issue.jpg" alt="Image: Chamfer problem with narrow slots"&gt;&lt;/figure&gt;&#10;I&amp;rsquo;ve never used the chamfer function in my CAM before and thought this would be a good opportunity for a test as the part corners were quite sharp on my first prototypes. As I only use a 4mm end mill, the 90° &lt;code&gt;10mm&lt;/code&gt; chamfer cutter seemed too big, especially as I had to offset outwards to avoid wearing out the cutter&amp;rsquo;s tip. I therefore chose a 30° tapered bit with only 6mm diameter, which quickly turned out to be a mistake as it hardly softened the corners.&lt;/p&gt;&#10;&lt;p&gt;I also forgot that only the outside of the parts would benefit from a beveled edge. I, on the other hand, applied the chamfer to the inside, which was detrimental to the finish quality. I also found that the new HPL sheet I used to make the prototypes was not completely flat, so some parts of the outline were not fully milled through. This in turn led to a lower quality and I had to do considerable manual rework.&lt;/p&gt;&#10;&lt;h2 id="v5-corrections-in-cam-and-better-processing-quality"&gt;V5: Corrections in CAM and better processing quality&lt;/h2&gt;&#10;&lt;p&gt;&lt;strong&gt;November 2022&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/soapbutler/clamping2_explained.jpg" alt="Image: soapbutler V2&amp;#39;s clamping mechanism explained"&gt;&lt;/figure&gt;&#10;The &amp;ldquo;free arm clamp&amp;rdquo; design with open fastening element is not so nice to look at, I guess, because it is asymmetrical. It would also be difficult to clean because of the narrow gap. After some thought, I came up with the solution of a &amp;ldquo;center clamp&amp;rdquo;: the fastener would press against a piece of rubber that rests directly against the shower rail to hold the soap dish in place.&lt;/p&gt;&#10;&lt;h3 id="chamfers"&gt;Chamfers&lt;/h3&gt;&#10;&lt;p&gt;After updating the drawings accordingly, I created another mirrored part in FreeCAD in &amp;ldquo;Draft&amp;rdquo; mode. This part clones the original part at the outline and is intended for two-sided milling, rotating the part around its top left edge (XY zero). In this way, the chamfer can be implemented correctly if I can ensure that the XY zero point does not move.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/soapbutler/freecad_clones.jpg" alt="Image: Clone function in FreeCAD to mirror parts"&gt;&lt;/figure&gt;&#10;&lt;p&gt;This worked very well in practice, and I was also able to automate the drilling of countersunk holes for the lower fasteners, which increases the build quality. The result can be seen below.&lt;/p&gt;&#10;&lt;h3 id="rating-1"&gt;Rating&lt;/h3&gt;&#10;&lt;p&gt;Unfortunately, after this fifth piece was finished, I noticed that the melamine coating was slightly chipped at the cut edge. I also noticed the smell of burnt material during processing. A quick look at the cutter revealed the cause: it had become blunt after just one hour of use, despite the coating. This makes working with HPL quite expensive and frustrating. In addition, the cycle time for this version was quite long: 15 minutes for one part. That was never going to be economical&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/soapbutler/soapbutler_v5.jpg" alt="Image: Soapbutler_v5 front view with fastener"&gt;&lt;/figure&gt;&#10;&lt;p&gt;That&amp;rsquo;s why I tried to find alternative materials for Seifenbutler.&#10;In the meantime, the prototypes should be tried out in the shower for a few months to gather long-term experience. Is HPL suitable for use in damp areas? Does the water creep through between the two layers? Is it easy to clean?&lt;/p&gt;&#10;&lt;h2 id="v6-failure-with-birch-multiplex"&gt;V6: Failure with birch multiplex&lt;/h2&gt;&#10;&lt;p&gt;&lt;strong&gt;May 2023&lt;/strong&gt;&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/soapbutler/cad_v3.jpg" alt="Image: CAD updated for 1-piece approach made wich stronger sheets"&gt;&lt;/figure&gt;&#10;&lt;p&gt;In my search for new materials, I procured waterproof wooden boards, glued together in multiplex method. As it was considerably thicker than the previously used material (&lt;code&gt;15mm&lt;/code&gt;), I simplified the design into a single-piece version with a grub screw at the side to clamp it to the shower rail.&lt;/p&gt;&#10;&lt;p&gt;I would drill the hole for the grub screw by hand after production on the CNC.&lt;/p&gt;&#10;&lt;p&gt;Unfortunately, however, the material on CNC turned out to be unsuitable for milling the spiral. I got numerous tear-outs and had difficulty holding the workpiece down. The contours of my Seifenbutler were simply too fine for the cross-glued material. Maybe the wood&amp;rsquo;s fiber length was too high, too.&lt;/p&gt;&#10;&lt;p&gt;The five machined parts went straight into residual waste.&lt;/p&gt;&#10;&lt;h2 id="v7-failure-with-aluminium-composite-material"&gt;V7: Failure with Aluminium-Composite material&lt;/h2&gt;&#10;&lt;p&gt;&lt;strong&gt;Juli 2023&lt;/strong&gt;&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/soapbutler/seifenbutler_v7.jpg" alt="Image: Seifenbutler V7 in CAD, showing two mirrored parts that open on opposite sides to have the shower rail added in between"&gt;&lt;/figure&gt;&#10;&lt;p&gt;With this design, I returned to my two-component setup and wondered whether Aluminium composite would be a suitable material for Seifenbutler. It is known for its durability and is often used outdoors, at least.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/soapbutler/seifenbutler_v7_fabricated.jpg" alt="Image: Seifenbutler V7, manufactured in Aluminium composite material"&gt;&lt;/figure&gt;&#10;&lt;p&gt;Without further ado, I drew up some new sketches&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt; that tried to take properties of the new material into account. The light material would finally make it possible to use magnets to hold it in place, so I made appropriate countersinks in the frame.&lt;/p&gt;&#10;&lt;p&gt;I had the idea of creating a part from each side of the shower rail and then holding it together using the magnets - this finally got rid of the annoying clamping screw and gave me a very simple design.&lt;/p&gt;&#10;&lt;p&gt;Unfortunately, however, the concept turned out to be completely unsuitable. The holding force of the magnets is not high enough and the clamping only works by tilting the soap holder forwards, which gives a strangely crooked impression on the shower rail.&lt;/p&gt;&#10;&lt;p&gt;So: keep tinkering!&lt;/p&gt;&#10;&lt;h2 id="v8-switch-to-acrylic-glass-chuck"&gt;V8: Switch to acrylic glass, chuck&lt;/h2&gt;&#10;&lt;p&gt;&lt;strong&gt;July 2023&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;After many hours at the computer for the design, I came up with a new clamping principle, copied from the drill chuck of my hand drill: three movable clamping devices mounted at a 120° angle - brought together by means of a cable tie - would hold shower rails of any diameter known to me.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/soapbutler/seifenbutler_v8.jpg" alt="Image: Seifenbutler V8, made of acrylic glass with chuck"&gt;&lt;/figure&gt;&#10;&lt;h3 id="manufacturing"&gt;Manufacturing&lt;/h3&gt;&#10;&lt;p&gt;I encountered various difficulties in production, mainly caused by per design small components, which also had to have notches to guide the cable ties. In addition, I realized that designing and producing smooth fits without noticeable play was a major challenge for me and that it would take a lot of unsuccessful attempts before I reached my goal.&lt;/p&gt;&#10;&lt;p&gt;However, by using different sized (&lt;code&gt;2mm, 4mm&lt;/code&gt;) milling cutters and optimizing the milling sequence, I was finally able to produce the parts successfully and in good quality. See my &lt;a href="https://blog.schallbert.de/en/milling-small-parts/"&gt;article on milling small parts&lt;/a&gt; for reference here. Only the spiral is still giving me a headache, because even in acrylic glass it would prefer to avoid the milling cutter. As a result, its edges are quite sharp and uneven.&lt;/p&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/soapbutler/seifenbutler_v8_fabricated.jpg" alt="Image: Seifenbutler V8 after some months on duty"&gt;&lt;/figure&gt;&#10;Fortunately, it was easy to assemble - It only needs one screw and some plastic glue.&lt;/p&gt;&#10;&lt;h3 id="test"&gt;Test&lt;/h3&gt;&#10;&lt;p&gt;I had this variant in my shower for a few months as a test. As the screw was only galvanized, it unfortunately started to corrode. Note: use stainless steel.&lt;/p&gt;&#10;&lt;p&gt;The stability of Seifenbutler could still be improved. The cable tie leaves a little play, so that with little effort, inclinations of around 10° to the vertical of the shower rail are possible, causing a lot of creaking between the upper and lower parts. This needs to be improved.&lt;/p&gt;&#10;&lt;p&gt;I would also like to simplify the clamping mechanism again.&lt;/p&gt;&#10;&lt;h2 id="v9-cast-acrylic-glass-removable-soap-tray"&gt;V9: Cast acrylic glass, removable soap tray&lt;/h2&gt;&#10;&lt;p&gt;&lt;strong&gt;July 2023&lt;/strong&gt;&#10;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/soapbutler/seifenbutler_v9.jpg" alt="Image: Seifenbutler V9 with two separate parts for clamping"&gt;&lt;/figure&gt;&lt;/p&gt;&#10;&lt;p&gt;This evolution step holds upper and lower shells together at the front with magnets that can be invisibly sunk into the material. There are two inserts in the clamping area at the back, which fit into a suitable recess in Seifenbutler like a drawer and hold it together.&lt;/p&gt;&#10;&lt;p&gt;It took me several prototypes to get the tie guide to the point where the cable tie is simply inserted into the back of Seifenbutler, wraps itself around the shower rail and finally reappears where it is ready to be tied down.&lt;/p&gt;&#10;&lt;p&gt;This is the first design that meets my requirements in terms of holding power and ease of assembly. Unfortunately, the production is complex and the tolerances have to be kept low, as the soap holder either slips out of the clamp too easily or can hardly be fitted because the fit is too tight.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center media-frame--video"&gt;&#10; &lt;div class="media-video"&gt;&lt;video controls&gt;&#10; &lt;source src="https://blog.schallbert.de/assets/video/soapbutler/soapbutler_v9.mp4" type="video/mp4"&gt;&#10; Your browser does not support the video tag.&#10; &lt;/video&gt;&lt;/div&gt;&#10; &lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;Seifenbutler zip tie demonstration&lt;/span&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;h2 id="v10-improved-manufacturing-process"&gt;V10: Improved manufacturing process&lt;/h2&gt;&#10;&lt;p&gt;&lt;strong&gt;August 2023&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;With a few optimizations, this version corresponds to V9. I achieved better repeatability in manufacturing and I could be a little more generous with tolerances for fits.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/soapbutler/seifenbutler_v10.jpg" alt="Image: Seifenbutler V10, multiple parts on a sheet for manufacturing"&gt;&lt;/figure&gt;&#10;&lt;p&gt;With this design, I obtain first feedback from a couple of friends. The unanimous opinion: cable ties look like a makeshift solution so customer acceptance might be low.&lt;/p&gt;&#10;&lt;p&gt;So I head back to the drawing board.&lt;/p&gt;&#10;&lt;h2 id="v11-l-nose-plug-in-system-in-hpl"&gt;V11: &amp;lsquo;L-nose&amp;rsquo; plug-in system in HPL&lt;/h2&gt;&#10;&lt;p&gt;&lt;strong&gt;August 2023&lt;/strong&gt;&#10;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/soapbutler/seifenbutler_v11.jpg" alt="Image: Seifenbutler V11 with L-type puzzle clamping"&gt;&lt;/figure&gt;&lt;/p&gt;&#10;&lt;p&gt;Another attempt in HPL, this time with multi-tooth cutters. They rasp the material rather than cutting it and are designed for processing abrasive, fiber-rich materials such as CFRP/GRP. However, the high toughness of HPL combined with poor heat dissipation means that the milling cutters become completely blunt after just two prototypes have been produced. So they are not a solution for efficient work in HPL for me either.&lt;/p&gt;&#10;&lt;p&gt;The design is again multi-part and achieves the clamping in its last update via a rear-mounted screw, which is tightened after the front and rear parts have been put together. This makes the soap holder longer overall, which I don&amp;rsquo;t find ideal in terms of design.&lt;/p&gt;&#10;&lt;p&gt;On the other hand, I think I now have a good handle on the manufacturing quality. The cuts are clean and the quality of the edges is also very pleasing.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/soapbutler/seifenbutler_v11_fabricated.jpg" alt="Image: Seifenbutler V11 made of HPL, disassembled"&gt;&lt;/figure&gt;&#10;&lt;p&gt;Due to the rapid cutter wear, it is very difficult for me to produce a slight oversize fit for the plug-in connection. It happens all too easily in my attempts that the cutter loses diameter too quickly and that parts cannot be inserted into each other at all or only with brute force.&lt;/p&gt;&#10;&lt;p&gt;Perhaps I can solve this problem by using a different fitting geometry?&lt;/p&gt;&#10;&lt;h2 id="v12-brio-plug-in-system"&gt;V12: &amp;lsquo;Brio&amp;rsquo; plug-in system&lt;/h2&gt;&#10;&lt;p&gt;&lt;strong&gt;September 2023&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Here I use acrylic glass again, this time in the extruded version. This way, thickness tolerances are very small compared to the cast version and my Z-zero points always fit. This is great for applying chamfers, which are finally the same width on every part and give the material a high-quality finish.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/soapbutler/seifenbutler_v12.jpg" alt="Image: CAD drawing for the plug-in system of Seifenbutler V12"&gt;&lt;/figure&gt;&#10;&lt;p&gt;Now I also have a solution for the spiral: double-sided processing. This increases the workload for me, but I&amp;rsquo;d rather spend more time at the machine than be annoyed about poor quality later on.&lt;/p&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/soapbutler/seifenbutler_v12_fabricated.jpg" alt="Image: Prototype of Seifenbutler V12"&gt;&lt;/figure&gt;&#10;My procedure: I mill the spiral almost all the way through and leave only a delicate &lt;code&gt;0.3mm&lt;/code&gt;. I then use the chamfer cutter on the back and cut the spiral from inside to outside. I also secure the underside with adhesive tape so that my vacuum table can hold the spiral securely and vibrations are avoided.&lt;/p&gt;&#10;&lt;p&gt;The design includes a knurled screw so clamping can be done without tools. As the clamping exerts strong tensile forces on the connectors and they therefore have to be positioned in the axis of the shower rod for stability reasons, I also have a slight tilting problem here. This problem increases the smaller the diameter of the shower rail is.&lt;/p&gt;&#10;&lt;p&gt;I was able to avoid tilting with another variant, but then the spigots are no longer covered. This in turn means that shower water can now get in there and leave residues.&lt;/p&gt;&#10;&lt;p&gt;I&amp;rsquo;m almost there. Nevertheless, there may still be something I can improve.&lt;/p&gt;&#10;&lt;h2 id="v13-automatic-clamping-and-zero-series-production"&gt;V13: Automatic clamping and zero series production&lt;/h2&gt;&#10;&lt;p&gt;&lt;strong&gt;October 2023&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;In version 13, I try to bundle the advantages of the previous versions V9-V12 while avoiding the disadvantages (tilting, cable ties, assembly with tools, unstable) as much as possible.&lt;/p&gt;&#10;&lt;h3 id="new-clamping-concept"&gt;New clamping concept&lt;/h3&gt;&#10;&lt;p&gt;I am therefore pursuing a new clamping concept. I still want to take most commercially available shower rods into account during installation and therefore need to clamp securely between &lt;code&gt;18mm&lt;/code&gt; and &lt;code&gt;25mm&lt;/code&gt;. From the previous versions, I have also realized that additional pressure must be exerted centrally behind the shower rail to prevent Seifenbutler from tilting.&lt;/p&gt;&#10;&lt;p&gt;I am also trying to realize the locking mechanism around the shower rail by means of a rotary movement. Pivot point is the center of the spiral, which requires three additional screw connections around the circumference of Seifenbutler. With &lt;code&gt;V13.9&lt;/code&gt; I finally achieve the breakthrough.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/soapbutler/seifenbutler_v13.jpg" alt="Image: CAD drawing for V13.9 with multiple stages for closing."&gt;&lt;/figure&gt;&#10;&lt;p&gt;The automatic clamping mechanism is activated by pushing upper and lower shells together so that Seifenbutler adjusts continuously to the diameter of the shower rail. It is locked in place by a knurled screw on the underside, where an inclined plane on the catch hook prevents unintentional opening.&lt;/p&gt;&#10;&lt;h3 id="manufacturing-1"&gt;Manufacturing&lt;/h3&gt;&#10;&lt;p&gt;Unfortunately, this design is very complex. It consists of five components made of acrylic glass, five screws and a knurled screw with spring washer. It takes quite some time to assemble.&lt;/p&gt;&#10;&lt;p&gt;The work on the CNC takes over 10 minutes per part, which is a lot. I also have to use consumables due to the required workpiece hold down.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/soapbutler/seifenbutler_v13_fabricated.jpg" alt="Image: Seifenbutler V13.9"&gt;&lt;/figure&gt;&#10;&lt;p&gt;Nevertheless, the manufacturing quality is higher than ever before and Seifenbutler is now child&amp;rsquo;s play to fit without tools and within a short time.&lt;/p&gt;&#10;&lt;h2 id="conclusion"&gt;Conclusion&lt;/h2&gt;&#10;&lt;p&gt;&lt;strong&gt;January 2024&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Looking through my CAD files, I have planned a total of &lt;code&gt;42&lt;/code&gt; versions of my soap holder so far, divided into &lt;code&gt;13&lt;/code&gt; designs, some of which are very different. &lt;code&gt;21&lt;/code&gt; of these versions have actually made it onto the CNC in the end and &lt;code&gt;5&lt;/code&gt; of them have been produced in larger quantities than 3.&lt;/p&gt;&#10;&lt;p&gt;I have four Seifenbutlers in my shower for endurance testing and they are now used by the whole family.&lt;/p&gt;&#10;&lt;p&gt;I can&amp;rsquo;t really count the number of hours I&amp;rsquo;ve spent on the subject so far - but it&amp;rsquo;s been many. I&amp;rsquo;ve learned a lot about materials and their suitability for different part geometries, absorption of forces, their machinability and the necessary cutting values on my machine. And also that it&amp;rsquo;s worth pursuing things with determination over a long period of time. Not in monetary terms, but definitely for me as a person.&lt;/p&gt;&#10;&lt;p&gt;I don&amp;rsquo;t want to rule out making further optimizations to the soap butcher - but first I want to see whether it is &lt;a href="https://blog.schallbert.de/en/seifenbutler-pilot-run/"&gt;marketable as a niche product&lt;/a&gt; in the near future.&lt;/p&gt;&#10;&lt;div class="footnotes" role="doc-endnotes"&gt;&#10;&lt;hr&gt;&#10;&lt;ol&gt;&#10;&lt;li id="fn:1"&gt;&#10;&lt;p&gt;I give a deeper dive into the challenges of machining HPL &lt;a href="https://blog.schallbert.de/en/cnc-router-overload/"&gt;in this blog post&lt;/a&gt;.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li id="fn:2"&gt;&#10;&lt;p&gt;As you can see from the CAD images from here on, I changed my drawing software (from FreeCAD to &lt;a href="https://cadascam.com/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;CADasCAM&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;). Despite some disadvantages, it is easier to use for 2D drawings and I get results faster. One big downer: CADasCAM is not open source 😥.&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;/div&gt;&#10;</description></item><item><title>Spindle upgrade</title><link>https://blog.schallbert.de/en/projects/spindle-upgrade/</link><pubDate>Mon, 01 Jan 0001</pubDate><author>Schallbert</author><guid>https://blog.schallbert.de/en/projects/spindle-upgrade/</guid><description type="html">&#10; &lt;img src="https://blog.schallbert.de/assets/images/spindleupgrade/mafellvsspinogy-thumb.jpg"&#10; class="post-cover"&#10; alt="Image: The new spindle mounted on Zerspanobert"&#10; title="Spindle upgrade" /&gt;&#10;&lt;h2 id="project-stats"&gt;Project stats&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Difficulty: Expert 5/5&lt;/li&gt;&#10;&lt;li&gt;Cost: ~2700€&lt;/li&gt;&#10;&lt;li&gt;Time: ~20h&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;figure class="media-frame media-frame--center media-frame--video"&gt;&#10; &lt;div class="media-video"&gt;&lt;iframe&#10; src="https://makertube.net/videos/embed/bN8MKYr4dmZZd2Tmoga9Ny"&#10; title="Upgrading my CNC&amp;#39;s spindle"&#10; loading="lazy"&#10; allow="autoplay; fullscreen; picture-in-picture"&#10; allowfullscreen&#10; style="width: 100%; height: auto; min-height: 315px; aspect-ratio: 16/9;"&#10; &gt;&lt;/iframe&gt;&lt;/div&gt;&#10; &lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;Upgrading my CNC&amp;#39;s spindle&lt;/span&gt;&lt;a href="https://makertube.net/videos/embed/bN8MKYr4dmZZd2Tmoga9Ny" class="attr-link" target="_blank" rel="noopener noreferrer"&gt;↗&lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;In contrast to my statements &lt;a href="https://blog.schallbert.de/en/portal-milling/#spindle-power"&gt;here&lt;/a&gt; I decided to invest in a High-Frequency spindle. I went through a lot of reading, building and &lt;a href="https://blog.schallbert.de/en/testing-hardware/"&gt;testing&lt;/a&gt; effort before I could finally create chips with the new setup.&lt;/p&gt;&#10;&lt;h2 id="why-i-upgraded"&gt;Why I upgraded&lt;/h2&gt;&#10;&lt;p&gt;There are strong and weak arguments for such an upgrade. Long story short: My arguments were rather weak so I could have sticked to the router motor I already had collected experience with. The decision to upgrade anyways was on the non-rationale side.&lt;/p&gt;&#10;&lt;h3 id="strong-arguments-to-upgrade-"&gt;Strong arguments to upgrade 🥰&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;More power: &lt;a href="https://blog.schallbert.de/en/cnc-router-overload/"&gt;This&lt;/a&gt; is not supposed to happen again, and I can run high feed rates with confidence. As a result, machining time reduces for projects that require removing loads of material.&lt;/li&gt;&#10;&lt;li&gt;More low-end torque: With a face mill cutter, the router motor tended to overheat as the bolt-on fan wouldn&amp;rsquo;t provide enough cooling at low rotation speeds.&lt;/li&gt;&#10;&lt;li&gt;Vibrations: I hope that the &lt;a href="https://blog.schallbert.de/en/cnc-vibrates/"&gt;vibration issue&lt;/a&gt; is gone now because both spindle, its attachment to the Z-axis, and vacuum table provide the CNC with higher stiffness.&lt;/li&gt;&#10;&lt;li&gt;Likely higher precision of cut on the spindle due to higher-grade bearings and more rigid design&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="weak-arguments-to-upgrade-"&gt;Weak arguments to upgrade 🤔&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;I was very interested in variable frequency drive and spindle technology&lt;/li&gt;&#10;&lt;li&gt;I liked the looks of the Spinogy spindle.&lt;/li&gt;&#10;&lt;li&gt;I was in contact with Spinogy for half a year discussing possible configurations and the adaptation to my machine and I didn&amp;rsquo;t want to let them down&lt;/li&gt;&#10;&lt;li&gt;The VFD has internal safety systems that reduce probability of damaged workpieces&lt;/li&gt;&#10;&lt;li&gt;The HF-spindle is more quiet than a router motor&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="arguments-not-to-upgrade-"&gt;Arguments not to upgrade 🤨&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Low value add for money: Versatility of the machine is increased by just a little while upgrade costs are really high&lt;/li&gt;&#10;&lt;li&gt;Spindle warm-up takes &lt;code&gt;30 minutes&lt;/code&gt;, a considerable amount of time when you&amp;rsquo;re not using the machine 24/7&lt;/li&gt;&#10;&lt;li&gt;Steep learning curve required for configuring VFD/Spindle, &lt;a href="https://assets.omron.eu/downloads/latest/manual/en/i570_mx2_users_manual_en.pdf?v=8" target="_blank" rel="noopener noreferrer" class="external-link"&gt;&amp;gt;400 pages of VFD&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; &lt;a href="https://shop.spinogy.de/wp-content/uploads/2022/02/Operating-Manual-X22.pdf" target="_blank" rel="noopener noreferrer" class="external-link"&gt;and spindle manuals&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; to read, circuit layouts to plan, and a switching cabinet to build.&lt;/li&gt;&#10;&lt;li&gt;The CNC frame I have is laid out for light to medium usage. Turning up the feedrates because of the new spindle&amp;rsquo;s capabilities could overburden frame and structure, especially the machine&amp;rsquo;s weak spot, the Z-axis.&lt;/li&gt;&#10;&lt;li&gt;The HF-spindle weighs 3x more compared to the router motor.&lt;/li&gt;&#10;&lt;li&gt;A VFD system makes the whole CNC much more complex and adds a multitude of paths for disturbances.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;All in all the spindle is overpowered for the rest of the machine and the benefit for adding the spindle likely will be low. You see this was an emotional decision. I hope I won&amp;rsquo;t regret it.&lt;/p&gt;&#10;&lt;h2 id="auto-tool-change"&gt;Auto tool change?&lt;/h2&gt;&#10;&lt;p&gt;If I had a well-running woodworking business with clear scope and just a few endmills in use, I&amp;rsquo;d have decided to invest the extra money.&lt;/p&gt;&#10;&lt;p&gt;For my prototyping usage on the other hand the &lt;a href="https://blog.schallbert.de/en/portal-milling/#tool-changer"&gt;hypothesis I made in the past&lt;/a&gt; still holds true. I&amp;rsquo;m using a &lt;em&gt;lot&lt;/em&gt; of different endmills as I&amp;rsquo;m working with many materials that each require a unique set of tools. The cost of steep taper toolholders I&amp;rsquo;d require to cover my work would have exceeded the cost of the spindle.&lt;/p&gt;&#10;&lt;p&gt;Instead, I bought some more spindle nuts. This way, I can keep the most-often used collets attached to their nuts, reducing the time required for a tool change.&lt;/p&gt;&#10;&lt;h2 id="cost-"&gt;Cost 💶&lt;/h2&gt;&#10;&lt;p&gt;I made some other decisions to both match my way of intermittently operating the machine as a sideline and to keep cost down. In my spindle configuration, I selected the &lt;code&gt;1.5kW&lt;/code&gt; low power option and did not raise specs of the bearings so the machine is limited to &lt;code&gt;30kRPM&lt;/code&gt;. I chose forced air cooling over the water-cooled option and did not invest in a continuous temperature monitoring system.&lt;/p&gt;&#10;&lt;p&gt;Still, total system cost are more than 2x spindle cost. Note that although the VFD is not too expensive, shielded motor wiring, connectors, torque wrench, line filter, collets/nuts, the switchbox and many additional, small parts add up to that high of a number.&lt;/p&gt;&#10;&lt;h2 id="information-phase"&gt;Information phase&lt;/h2&gt;&#10;&lt;p&gt;To get the new spindle running I had to plan, build, and configure a complete subsystem that involves spindle drive, cooling, auxiliary power supply. Driven by the project complexity, I executed my work in different phases that would build on top of each other. Starting with the information phase, let&amp;rsquo;s go through some of the questions I had to find answers to.&lt;/p&gt;&#10;&lt;h3 id="variable-frequency-drive"&gt;Variable Frequency Drive&lt;/h3&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/spindleupgrade/switchbox.jpg" alt="Image: Switchbox with VFD"&gt;&lt;/figure&gt;&#10;As I wrote in &lt;a href="https://blog.schallbert.de/en/cnc-electronics/#vfd"&gt;this article&lt;/a&gt;, a VFD is used to control rotational speed of a HF-spindle. The motor is called like that because it operates well above grid frequency (&lt;code&gt;50Hz&lt;/code&gt; in my region) to reach higher rotation speeds as required by the application, especially when working with smaller endmills.&lt;/p&gt;&#10;&lt;p&gt;When I took a deep dive into that topic for my new spindle application, I had a phone call with Mr. Wagner from &lt;a href="https://industrial.omron.de/de/products/mx2" target="_blank" rel="noopener noreferrer" class="external-link"&gt;Omron&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; (VFD manufacturer) to answer some of my questions.&lt;/p&gt;&#10;&lt;h3 id="uf-characteristic-or-sensorless-vector-control"&gt;&lt;code&gt;U/f characteristic&lt;/code&gt; or &lt;code&gt;sensorless vector control&lt;/code&gt;?&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Selecting &lt;code&gt;U/f characteristic&lt;/code&gt; will make the VFD reduce voltage along with the frequency as long as the motor operates below its corner frequency (which for my machine is &lt;code&gt;400Hz&lt;/code&gt;). This is because the inductance of the stator wires reduces with lower frequency. That in turn increases the current flow through the stator, and along with it torque and power dissipation rises. So in the end, by applying the &lt;code&gt;U/f characteristic&lt;/code&gt;, current and with it the torque is kept constant. At very slow speeds though, the inductance becomes so low in comparison to the stator resistance that torque decreases over-proportionally which makes this option a bad choice when operating in that low-speed area. At or above the motor&amp;rsquo;s corner frequency on the other hand, voltage is kept stable and just the frequency is increased which reduces torque.&lt;/li&gt;&#10;&lt;li&gt;With &lt;code&gt;sensorless vector control&lt;/code&gt;, the VFD uses a mathematical model of the motor it drives to calculate optimal switching times to always achieve nominal (or even above) motor torque independently of the motor&amp;rsquo;s rotational speed. It is especially useful for applications that require heavy starting like elevators etc. and often requires the user to perform a VFD auto-calibration run with the motor connected.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Here&amp;rsquo;s a link to somebody&amp;rsquo;s &lt;a href="https://www.youtube.com/watch?v=qEM9VRSfXUo" target="_blank" rel="noopener noreferrer" class="external-link"&gt;youtube video&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; in which the two options are compared at low speeds. Here&amp;rsquo;s &lt;a href="https://www.youtube.com/watch?v=tWpChgsAIN4" target="_blank" rel="noopener noreferrer" class="external-link"&gt;another one&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; that demonstrates how the VFD even goes beyond nominal motor torque when load is applied.&lt;/p&gt;&#10;&lt;p&gt;As most of the endmills I use demand a speed of &lt;code&gt;15000rpm&lt;/code&gt; or higher, I likely won&amp;rsquo;t feel the drawbacks of the &lt;code&gt;U/f characteristic&lt;/code&gt;. Plus, on my VFD, the &lt;code&gt;sensorless vector control&lt;/code&gt; option is only available up to &lt;code&gt;400Hz&lt;/code&gt; so I would only be able to use 80% of the spindle&amp;rsquo;s speed range. Easy decision: &lt;code&gt;U/f&lt;/code&gt; it is.&lt;/p&gt;&#10;&lt;h3 id="freewheeling-brake-resistor-usage-or-energy-recovery-system"&gt;freewheeling, brake resistor usage or energy recovery system?&lt;/h3&gt;&#10;&lt;p&gt;For braking the motor, the VFD can be configured with different options. When allowing the motor to freewheel in standard setting, it may take a long time until which the spindle has stopped from full speed.&lt;/p&gt;&#10;&lt;p&gt;When a brake resistor is configured like I do with my spindle application, braking down takes two seconds only. I also configured the DC brake to completely bring the shaft to a halt.&lt;/p&gt;&#10;&lt;p&gt;For more powerful motors or applications that involve movement of high masses, an energy recovery system might make sense. It is connected to the VFD&amp;rsquo;s intermediate circuit and is able to supply power generated through the motor&amp;rsquo;s excess motion energy back to grid. To use this feature, an additional electrical device is necessary and compabibility of the VFD&amp;rsquo;s intermediate circuit with that device has to be made sure. This adds high cost to the system and only pays off when large amounts of energy can be recuperated.&lt;/p&gt;&#10;&lt;h3 id="which-modulation-freqency--clock-frequency-should-i-use"&gt;Which modulation freqency / clock frequency should I use?&lt;/h3&gt;&#10;&lt;p&gt;The clock / modulation / carrier frequency is the rate at which the power transistors within the VFD switch to provide an output voltage for the motor that resembles a sine wave. On my VFD, it can be configured in a range of &lt;code&gt;2-15kHz&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;To select an optimal frequency, a balance is to be found between multiple factors:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Transistor switching losses rise at higher frequencies.&lt;/li&gt;&#10;&lt;li&gt;Transistor on-state losses rise at lower frequencies.&lt;/li&gt;&#10;&lt;li&gt;The &lt;a href="https://en.wikipedia.org/wiki/Equal-loudness_contour" target="_blank" rel="noopener noreferrer" class="external-link"&gt;human ear is especially sensitive&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; in the range of &lt;code&gt;2-5kHz&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;Resonance frequency of the motor system should be avoided.&lt;/li&gt;&#10;&lt;li&gt;Electromagnetic interference emissions rise at higher frequencies.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Of course, if your motor manufacturer makes a modulation frequency recommendation, you should follow that one. I played around with different values and chose &lt;code&gt;5kHz&lt;/code&gt; as a good compromise between the above factors. I also felt it sounded better than 6 or 4 kHz on my machine.&lt;/p&gt;&#10;&lt;h3 id="can-i-control-the-coolant-fan-based-on-spindle-temperature"&gt;Can I control the coolant fan based on spindle temperature?&lt;/h3&gt;&#10;&lt;p&gt;Yes, that is possible. All you need are a continuous (non-switching) type of temperature sensor, e.g. PT100 or other thermocouple, a measuring transmitter, and a free analog input of your VFD that can be configured to on-off control one of the free digital output ports that then switches a relay the cooling fan has to be connected to.&lt;/p&gt;&#10;&lt;p&gt;My motor, unfortunately, is equipped with a switching-type thermistor that connects to the VFD via a temperature alarm input. Thus it can shut the system down once an over-temperature event occurs but is not suitable for a continuous temperature monitoring/control of the cooling fan.&lt;/p&gt;&#10;&lt;h3 id="is-18v-enough-to-detect-high-on-a-24v-digital-input"&gt;Is &lt;code&gt;18V&lt;/code&gt; enough to detect &lt;code&gt;HIGH&lt;/code&gt; on a &lt;code&gt;24V&lt;/code&gt; digital input?&lt;/h3&gt;&#10;&lt;p&gt;Yes, on my VFD I was able to feed a lower voltage than the targeted 24V to a logic input and still make it detect &lt;code&gt;HIGH&lt;/code&gt; level.&lt;/p&gt;&#10;&lt;h3 id="can-i-connect-vfd-logic-ground-to-my-dc-supply-ground-without-issues"&gt;Can I connect VFD logic ground to my DC supply ground without issues?&lt;/h3&gt;&#10;&lt;p&gt;Yes. I did and there were no issues. I even had to do so because my &amp;lsquo;Run&amp;rsquo; input is potential-free so I had to connect it to the DC power supply&amp;rsquo;s positive voltage rail over a relay contact. Also my numerical controller&amp;rsquo;s analogue output voltage to control spindle speed is forced to use the same ground reference as the VFD, so it&amp;rsquo;s also connected to the VFD&amp;rsquo;s logic ground.&lt;/p&gt;&#10;&lt;h3 id="what-do-i-need-to-consider-regarding-electromagnetic-compatibility"&gt;What do I need to consider regarding electromagnetic compatibility?&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Use a line filter between mains switch and VFD.&lt;/li&gt;&#10;&lt;li&gt;Use shielded cables for the motor you connect.&lt;/li&gt;&#10;&lt;li&gt;Keep motor cable as short as possible.&lt;/li&gt;&#10;&lt;li&gt;If you have to use long cables, add a HF noise filter.&lt;/li&gt;&#10;&lt;li&gt;Have the shield connected to the VFD&amp;rsquo;s protective earth panel along with the motor&amp;rsquo;s protective earth leads.&lt;/li&gt;&#10;&lt;li&gt;Make sure the shield establishes conductive contact to the cable connectors.&lt;/li&gt;&#10;&lt;li&gt;Perform a continuity test.&lt;/li&gt;&#10;&lt;li&gt;Make sure the switchbox has one central protective earth clamp where every device within the switchbox connects to.&lt;/li&gt;&#10;&lt;li&gt;Make sure your supply&amp;rsquo;s protective earth is connected to that clamp, too.&lt;/li&gt;&#10;&lt;li&gt;When wiring the switchbox, position motor cables as far away as possible from low-voltage signal wires.&lt;/li&gt;&#10;&lt;li&gt;Use a metal switchbox housing (connected to the central earth point, of course) or at least a metallic carrier plate you mount all devices to. This will reduce radiated electromagnetic interferences.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="spindle"&gt;Spindle&lt;/h3&gt;&#10;&lt;p&gt;To select a matching spindle for your machine and application, there are a few points to consider - independently of the motor type.&lt;/p&gt;&#10;&lt;h3 id="power"&gt;Power&lt;/h3&gt;&#10;&lt;p&gt;The spindle power maybe is less important than you might think. I&amp;rsquo;ll give some examples you can follow to choose a good match.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;&amp;lt;=400W&lt;/code&gt; HF-Spindle or &lt;code&gt;&amp;lt;=800W&lt;/code&gt; router motor: You have a hobbyist machine and do not require to run it blazingly fast. It is fine for you to go shallow or medium depth per pass on hard to cut materials like aluminium or HPL. Your machine frame weighs less than &lt;code&gt;60kg&lt;/code&gt; and is relatively big for its weight, e.g. workbed surface of &lt;code&gt;&amp;gt;=0.5m²&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;&amp;lt;=700W&lt;/code&gt; HF-Spindle or &lt;code&gt;&amp;lt;=1200W&lt;/code&gt; router motor: Your machine weighs more or is more stiff than the above option. You use bits bigger than &lt;code&gt;6mm&lt;/code&gt; in diameter a lot, or have to machine parts with face-milling cutters often. Your Z-axis is strong and you feel your machine is bored when running through hard wood at &lt;code&gt;3000mm/min&lt;/code&gt;, &lt;code&gt;Z+6mm&lt;/code&gt; with a &lt;code&gt;6mm&lt;/code&gt; cutter.&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;1.1kW / 1.5kW&lt;/code&gt; HF-Spindle: You have a compact machine (around &lt;code&gt;500x500mm&lt;/code&gt; travel, weight: &lt;code&gt;100kg&lt;/code&gt;) and do want it to finish its jobs quickly, cutting aluminium or wood at higher feed rates. When working with wood, you use roughers a lot to save time. Your machine can handle higher accelerations and rapid movements (e.g. &lt;code&gt;1000mm/s²&lt;/code&gt; and &lt;code&gt;300mm/s&lt;/code&gt;).&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;&amp;gt;=2.2kW&lt;/code&gt;: You left the hobby sector - likely forever - both with your machine and the order bank that has piled up on your desk. You have a workshop, a professional dust collection, and an heavier machine you trust to run all day long without intense supervision. You might consider this blog as &amp;ldquo;too basic&amp;rdquo; and head off to new shores where people can really help you as a professional.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="weight"&gt;Weight&lt;/h3&gt;&#10;&lt;p&gt;Weight scales with power. An &lt;code&gt;800W&lt;/code&gt; router motor can come at below &lt;code&gt;2kg&lt;/code&gt; including mount while a &lt;code&gt;2.2kW&lt;/code&gt; HF-Spindle with automatic tool change might be at or above &lt;code&gt;6.5kg&lt;/code&gt; without tool holder. Footprint and cables also tend to become larger.&#10;A high weight can negatively affect light machines, especially. In an extreme case, the Z-axis might start moving down when the stepper motor is not energized and machine acceleration, especially at the portal movement axis, might have to be reduced so no steps are lost. Also keep in mind that heavier machines tend to be bigger, so the cutting forces can have unfavorable effects on the Z-axis due to increased leverage.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/spindleupgrade/mafellvsspinogy.jpg" alt="Image: Comparison of Router motor to HF-Spindle"&gt;&lt;/figure&gt;&#10;&lt;h3 id="2-pole-or-4-pole-design"&gt;2-pole or 4-pole design?&lt;/h3&gt;&#10;&lt;p&gt;If you need a lot of torque, especially at low speeds, chose a 4-pole design. Keep in mind that you will require double the frequency to have it turn with the same RPM as a 2-pole motor.&#10;If you often run your machine at high RPM instead, consider buying a 2-pole spindle.&lt;/p&gt;&#10;&lt;h3 id="water-or-air-cooled"&gt;Water or air-cooled?&lt;/h3&gt;&#10;&lt;p&gt;This again is more a question of cost and professionality than anything else. Of couse, bolt-on fan self-cooling works fine. Forced-air cooling comes a little more expensive but is likely more quiet, its main advantage being that the spindle does not get too warm independently of its speed of rotation.&lt;/p&gt;&#10;&lt;p&gt;A water cooling solution removes heat from the motor more efficiently and the water&amp;rsquo;s high heat capacity leads to homogenous temperatures in the whole spindle. It dampenes vibrations and is the quietest cooling solution of all. On the other hand, the system is much more expensive, more complex, takes more space for pump, radiator and equalizing tank etc., and requires maintenance.&lt;/p&gt;&#10;&lt;h2 id="the-planning-phase"&gt;The planning phase&lt;/h2&gt;&#10;&lt;p&gt;After studying the manuals of all the parts I had ordered, I created a schematic circuit diagram for the spindle subsystem.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/spindleupgrade/vfd_circuit_plans_1.jpg" alt="Image: VFD subsystem circuit diagram"&gt;&lt;/figure&gt;&#10;&lt;p&gt;At the top you see the VFD with its terminals. &lt;code&gt;X1&lt;/code&gt; is the mains power input with disconnector switch &lt;code&gt;S2&lt;/code&gt;. &lt;code&gt;X2&lt;/code&gt; connects spindle to the VFD and &lt;code&gt;X3&lt;/code&gt; is the signal port to the CNC. In the lower right, there&amp;rsquo;s a DC power supply &lt;code&gt;T1&lt;/code&gt; that feeds the forced-air cooling and provides a logic voltage rail. The spindle &lt;code&gt;M1&lt;/code&gt; motor&amp;rsquo;s temperature is monitored by the thermistor &lt;code&gt;R3&lt;/code&gt; (where I forgot to add the label.) The spindle cooling motor &lt;code&gt;M2&lt;/code&gt; is controlled by a time relay which is in turn controlled through the &lt;code&gt;RUN&lt;/code&gt; signal. A digital multi-purpose output is connected to a red LED &lt;code&gt;D1&lt;/code&gt; that is configured to light up if an overload warning is present.&lt;/p&gt;&#10;&lt;p&gt;The circuit plan remains pretty straight-forward. So i did not invest time into neat drawings. To make it look even more authentic, I spilled some ☕ on the paper.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/spindleupgrade/vfd_circuit_plans_3.jpg" alt="Image: Spindle connector pinout"&gt;&lt;/figure&gt;&#10;&lt;p&gt;This is the pinout of the spindle connector &lt;code&gt;X2&lt;/code&gt; and its corresponding terminal on the VFD. It was useful several times when adding connectors to the shielded motor cable (orange in color, ref. to banner image at the top), and during unit testing.&lt;/p&gt;&#10;&lt;p&gt;I noted down the fastening torque requirements for each screw including the terminals and prepared the tools I&amp;rsquo;d require to both prepare the switchbox&amp;rsquo;s in- and outlets and air vents, as well as the mount and wiring setup.&lt;/p&gt;&#10;&lt;h2 id="the-construction-phase"&gt;The construction phase&lt;/h2&gt;&#10;&lt;figure class="media-frame media-frame--center media-frame--video"&gt;&#10; &lt;div class="media-video"&gt;&lt;iframe&#10; src="https://makertube.net/videos/embed/u8gDBQnsdxYFEZfFwk6jfU"&#10; title="Spindle VFD Cabinet build"&#10; loading="lazy"&#10; allow="autoplay; fullscreen; picture-in-picture"&#10; allowfullscreen&#10; style="width: 100%; height: auto; min-height: 315px; aspect-ratio: 16/9;"&#10; &gt;&lt;/iframe&gt;&lt;/div&gt;&#10; &lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;Spindle VFD Cabinet build&lt;/span&gt;&lt;a href="https://makertube.net/videos/embed/u8gDBQnsdxYFEZfFwk6jfU" class="attr-link" target="_blank" rel="noopener noreferrer"&gt;↗&lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;h2 id="commisioning"&gt;Commisioning&lt;/h2&gt;&#10;&lt;p&gt;Before taking the system into productive use, I ran the &lt;a href="https://blog.schallbert.de/en/testing-hardware/#test-plan"&gt;test plan&lt;/a&gt;. When it was complete, I executed a Spindle grease distribution run according to the manufacturer&amp;rsquo;s instructions.&#10;Then, I calibrated the &lt;code&gt;0-10V&lt;/code&gt; analog out in my CNC software to match VFD frequency / spindle RPM. Example: &lt;code&gt;S10000&lt;/code&gt; should generate &lt;code&gt;3.33V&lt;/code&gt; at the output and make the VFD run at a frequency of around &lt;code&gt;175Hz&lt;/code&gt; to account for slip.&lt;/p&gt;&#10;&lt;p&gt;Finally, I was able to run some light jobs to see that the system works as intended: &lt;code&gt;8mm&lt;/code&gt; PMMA, full slot, single pass in &lt;code&gt;Z+=8mm&lt;/code&gt;, &lt;code&gt;4mm&lt;/code&gt; single flute (polished) carbide cutter at &lt;code&gt;S=26kRPM&lt;/code&gt; and &lt;code&gt;F=3000mmm/min&lt;/code&gt;&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/spindleupgrade/spindle_commisioning_initjob.jpg" alt="Image: Spindle running a workpiece of PMMA"&gt;&lt;/figure&gt;&#10;&lt;h2 id="the-analysis-phase"&gt;The analysis phase&lt;/h2&gt;&#10;&lt;p&gt;This phase will follow later, maybe a year into working with the new spindle. I&amp;rsquo;ll have a look at the following:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Was the investment worth it (roughly 8x more expensive than a router motor)?&lt;/li&gt;&#10;&lt;li&gt;Did I use the additional capabilities (higher power &amp;amp; more RPM)?&lt;/li&gt;&#10;&lt;li&gt;Does it produce noticeably better quality results?&lt;/li&gt;&#10;&lt;li&gt;Is it more reliable and requires less maintenance to my previous motor?&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;But what I already now can say: I learned a lot, it was fun designing, wiring, setting up the system, and exciting to actually see it worked out as I intended 🙂&lt;/p&gt;&#10;</description></item><item><title>Spirograph</title><link>https://blog.schallbert.de/en/projects/spirograph/</link><pubDate>Mon, 01 Jan 0001</pubDate><author>Schallbert</author><guid>https://blog.schallbert.de/en/projects/spirograph/</guid><description type="html">&#10; &lt;img src="https://blog.schallbert.de/assets/images/spirograph/spirograph-thumb.jpg"&#10; class="post-cover"&#10; alt="Image: Acrylic glass spirograph made on my CNC &amp;#39;Zerspanobert&amp;#39;"&#10; title="Spirograph" /&gt;&#10;&lt;h2 id="the-spirograph"&gt;The spirograph&lt;/h2&gt;&#10;&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Spirograph" target="_blank" rel="noopener noreferrer" class="external-link"&gt;Spirographs&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; are mathematical toys. With their help it is easy to draw repetitive, curved shapes. The simplest version is made up of a cogwheel that runs on the inside of a static ring gear. The running wheel has a couple of holes to take the tip of a pen. The holes are located out of center of that cogwheel so, when rotating the wheel inside the hollow one, it will create parabolic shapes.&lt;/p&gt;&#10;&lt;p&gt;The number of rotations needed to draw a closed shape depends on the relation of tooth count between the two wheels.&lt;/p&gt;&#10;&lt;h3 id="version-0"&gt;Version 0&lt;/h3&gt;&#10;&lt;p&gt;Our initial design was created together with the guys from CADasCAM &lt;a href="https://hobbyline.info/forum/index.php?thread/839-hobby-line-tage-27-28-5/&amp;amp;postID=9215#post9215" target="_blank" rel="noopener noreferrer" class="external-link"&gt;in the workshop&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;. It is a 14:9 tooth combination, so the lowest common multiple (aka LCM) is 126 which would create tight drawings with &lt;code&gt;126 / 9 = 14&lt;/code&gt; corners. We had it manufactured in Aluminium and discussed about a good milling strategy using the CAM part of their software.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center media-frame--video"&gt;&#10; &lt;div class="media-video"&gt;&lt;video controls&gt;&#10; &lt;source src="https://blog.schallbert.de/assets/video/spirograph/20230528_sorotecworkshop_spirograph_aluminium.mp4" type="video/mp4"&gt;&#10; Your browser does not support the video tag.&#10; &lt;/video&gt;&lt;/div&gt;&#10; &lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;Milling Spirograph_V0 on an overclocked CompactLine CNC&lt;/span&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;The parts turned out good and the wheels would allow cog to cog placement but unfortunately, it wouldn&amp;rsquo;t turn because the inner wheel&amp;rsquo;s next cog wouldn&amp;rsquo;t hit the flank but instead the ring gear tooth&amp;rsquo;s head.&lt;/p&gt;&#10;&lt;h3 id="version-1"&gt;Version 1&lt;/h3&gt;&#10;&lt;p&gt;When the workshop was over, I took the design home and tried to improve. I shortened the tooth heads of the outer wheel to fix the previous issue and had some rounds added so the wheels wouldn&amp;rsquo;t feel edgy.&lt;/p&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/spirograph/V1_upper.jpg" alt="Image: Spirograph in Beech, upper side milling complete"&gt;&lt;/figure&gt;&#10;I had the design manufactured in 18mm Beech glued wood. I introduced two-sided milling here because chamfering by hand turned out to be a bit tedious at these more complex shapes. For that, I did not cut right through the material but left a 1mm &amp;ldquo;onion skin&amp;rdquo; at the bottom which would hold everything in place.&lt;/p&gt;&#10;&lt;p&gt;When I finally had the edges of the lower side chamfered, the bit would pierce the onion skin and practically cut out the workpieces so that I&amp;rsquo;d just have to snatch them off the machine bed. I just had to sand down the burrs which took less than five minutes of manual rework.&lt;/p&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/spirograph/V1_detail.jpg" alt="Image: Spirograph_V1 in Beech, detail view of cogs that wouldn&amp;#39;t fit"&gt;&lt;/figure&gt;&#10;But it still wouldn&amp;rsquo;t fit. This time, because the flanks of the inner wheel were too wide. As a consequence, they would not allow full engage depth which in turn makes the next tooth of the inner wheel hit the tooth&amp;rsquo;s head of the ring gear.&lt;/p&gt;&#10;&lt;h3 id="version-2"&gt;Version 2&lt;/h3&gt;&#10;&lt;p&gt;I figured out that in Version_1, the inner wheel had a positive &lt;code&gt;tooth profile shift value&lt;/code&gt; while the ring wheel was left at zero. This couldn&amp;rsquo;t work at all so I fixed it. I also reworked both wheel&amp;rsquo;s concave radiuses so a 6mm endmill would be able to properly carve all details. Finally, I added some play for the teeth flanks and allowed for more room in the teeth&amp;rsquo;s troughs for better tooth meshing.&lt;/p&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/spirograph/V2_pmma.jpg" alt="Image: Spirograph_V2 in PMMA, along with sample drawings"&gt;&lt;/figure&gt;&#10;To give more room to the inner wheel, I mutated the gear combination to 16/7 that will draw &lt;code&gt;112 / 7 = 16&lt;/code&gt; corners (even tighter drawing).&lt;/p&gt;&#10;&lt;p&gt;This time I had it manufactured in 5mm extruded Acrylic (PMMA), opaque white. I went with a similar two-sided milling strategy as discussed above, but I added a finishing run for superior quality of cut.&#10;I used the following parameters:&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Cutter, Material: PMMA (Acrylic)&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Work type&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Tooth&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Dia [mm]&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Speed [RPM]&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Feed [mm/min]&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Z+ [mm]&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;XY+ [mm]&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;carbide hawk beak upcut FSECO1&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Roughing&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;4&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;24000&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;3000&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;8&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;3.6&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;carbide hawk beak upcut FSAC&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Finishing&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;4&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;26000&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;3000&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;8&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;0.2&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;carbide taper 90° FEF&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Chamfers&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;3&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;10&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;15000&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;5000&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;3&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;3&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;And it worked flawlessly 😄, quality of cut was very high and all I did manually was to use a scraper for deburring that took under a minute.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center media-frame--video"&gt;&#10; &lt;div class="media-video"&gt;&lt;video controls&gt;&#10; &lt;source src="https://blog.schallbert.de/assets/video/spirograph/spirograph_V2_teethengaged.mp4" type="video/mp4"&gt;&#10; Your browser does not support the video tag.&#10; &lt;/video&gt;&lt;/div&gt;&#10; &lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;Updated tooth parameters allow smooth meshing&lt;/span&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;p&gt;But still there was room to improve:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Holes right in the teeth don&amp;rsquo;t make sense because the inner wheel would not want to turn when engaged&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;5mm&lt;/code&gt; holes are a bit too small to home all sorts of crayons&lt;/li&gt;&#10;&lt;li&gt;16 teeth modul10 are not enough to fill a DIN A4 sheet of paper&lt;/li&gt;&#10;&lt;li&gt;The elliptic shape looks nice but is a bit hard to keep in place&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;That&amp;rsquo;s why I made one more step in the evolution:&lt;/p&gt;&#10;&lt;h3 id="version-3"&gt;Version 3&lt;/h3&gt;&#10;&lt;p&gt;I made another slight update over Version_2, this time with an 18/10 pairing (LCM of 90, so 9 corners). I reworked the hole distances in form of a fibonacci spiral to yield more expressive designs. Finally, I updated the outline to match DIN A4 paper size so that the designs now would be centered.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/spirograph/V3_design.jpg" alt="Image: Spirograph_V3 design"&gt;&lt;/figure&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/spirograph/V3_detail.jpg" alt="Image: Spirograph_V3 in PMMA, detail view of a tooth"&gt;&lt;/figure&gt;&#10;I used the same parameters as in the previous version for manufacturing. See for yourself how good it came out. I wonder if I can get the last 5% out of quality by avoiding burrs altogether. Alone, I wouldn&amp;rsquo;t knnow how. Looks like the burr is created when the tapered cutter pierces the underside of the material to make the final cutout on my vacuum table.&lt;/p&gt;&#10;&lt;p&gt;&lt;figure class="media-frame media-frame--right"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/spirograph/V3_chattermarks_acceleration.jpg" alt="Image: Spirograph_V3, contour detail view"&gt;&lt;/figure&gt;&#10;Another thing I noticed is that the machine creates chatter marks when accelerating to target speed in &lt;code&gt;G01&lt;/code&gt; operations. I guess this is due to the limited frame stiffness. It is noticeable only under a few angles but not palpable.&lt;/p&gt;&#10;&lt;p&gt;The finished product then looks like this. Due to the chamfers and rounded edges, it feels really smooth. The gears run effortlessly the 18/10 cog combination has so many teeth meshed at all times that even kids aged 5 have no issue to produce perfect shapes (tested it).&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/spirograph/V3_pmma.jpg" alt="Image: Spirograph_V3 machined in Acrylic"&gt;&lt;/figure&gt;&#10;&lt;p&gt;And finally, I&amp;rsquo;m also happy with how the drawings look. Bold, big enough (&lt;code&gt;15x15cm&lt;/code&gt; / &lt;code&gt;6&amp;quot; by 6&amp;quot;&lt;/code&gt;). Lines stand together not too tight. The higher number of holes that the larger inner wheel allows help generating higher diversity figures as well.&lt;/p&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/spirograph/V3_drawing.jpg" alt="Image: Drawing sample with Spirograph_V3"&gt;&lt;/figure&gt;&#10;&lt;p&gt;I will donate the specimen to a nearby school. Let&amp;rsquo;s see how they use them.&lt;/p&gt;&#10;&lt;h2 id="you-want-to-diy"&gt;You want to DIY?&lt;/h2&gt;&#10;&lt;p&gt;No problem. &lt;a href="https://blog.schallbert.de/assets/docs/spirograph_V3_by_schallbert.zip"&gt;Download a &lt;code&gt;ZIP&lt;/code&gt; package here&lt;/a&gt;.&lt;/p&gt;&#10;&lt;h3 id="whats-in-the-package"&gt;What&amp;rsquo;s in the package?&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://www.cadascam.com/de/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;CADasCAM&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; project that allows all sorts of wheel pairing configurations&lt;/li&gt;&#10;&lt;li&gt;Drawing files (&lt;code&gt;DXF&lt;/code&gt;) both for front and rear milling&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://www.estlcam.de/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;EstlCAM&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; project files along with my tool database&lt;/li&gt;&#10;&lt;li&gt;CNC operations files (&lt;code&gt;tap&lt;/code&gt;) that fit my machine&lt;/li&gt;&#10;&lt;li&gt;A readme (&lt;code&gt;txt&lt;/code&gt;) that defines XY zero and required offsets&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="does-it-cost-anything"&gt;Does it cost anything?&lt;/h3&gt;&#10;&lt;p&gt;No, it&amp;rsquo;s for free. Note that the License I use makes the package &amp;ldquo;free software&amp;rdquo;. Please contact me if you want to utilize anything of the designs in other contexts than home and private usage.&lt;/p&gt;&#10;&lt;h3 id="disclaimer"&gt;Disclaimer&lt;/h3&gt;&#10;&lt;p&gt;As usual, the files are available for download free of charge. In turn, I do not take any responsibility or liability for their contents.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;WARNING&lt;/strong&gt; ⚠️&lt;/p&gt;&#10;&lt;p&gt;These files provide or allow output of G-code instructions for real machinery that does actually do things in the physical world. There might be code errors or bugs that could potentially lead to machine crashes or even worse. I do not take liability for work accidents, system failures, equipment breakdown, loss of production, flow disturbances, or other negative effects that may be caused through the files I provided.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt; ℹ️&lt;/p&gt;&#10;&lt;p&gt;It is the machine operator&amp;rsquo;s responsibility to carefully review G-code and to make sure that it works as intended on the specific machine without causing any harm.&lt;/p&gt;&#10;&lt;aside class="update-box update-box--note" role="note"&gt;&#10; &lt;span class="update-box__icon" aria-hidden="true"&gt;&#10; ℹ️&#10; &lt;/span&gt;&#10;&#10; &lt;div class="update-box__body"&gt;&#10; &lt;div class="update-box__heading"&gt;&#10; &lt;strong class="update-box__title"&gt;&#10; &#10; More Spirographs&#10; &#10; &lt;/strong&gt;&#10;&#10; &lt;time datetime="2024-02-05T00:00:00Z"&gt;&#10; 2024-02-05&#10; &lt;/time&gt;&#10; &#10; &lt;/div&gt;&#10;&#10; &#10; &lt;div class="update-box__content"&gt;&#10; I made a few more very nice spirographs for the Maker Faire in early 2024. The base material is medium-density fiberboard (MDF), onto which I applied a layer of olive wood veneer.&#10; &lt;/div&gt;&#10; &#10; &lt;/div&gt;&#10;&lt;/aside&gt;&#10;&lt;figure class="media-frame media-frame--center"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-03-25-spirograph.jpg" alt="Image: Spirograph under test"&gt;&lt;/figure&gt;&#10;</description></item></channel></rss>