<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>VETuner Documentation</title>
    <link>https://vetuner.co.uk/</link>
    <description>VETuner is a browser-based ECU tuning app for Speeduino and MegaSquirt. Connect,  edit VE tables, analyse logs, and tune your engine; no installation required.</description>
    <language>en-gb</language>
    <lastBuildDate>Thu, 05 Nov 2026 11:18:14 GMT</lastBuildDate>
    <atom:link href="https://vetuner.co.uk/feed.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Change Log</title>
      <link>https://vetuner.co.uk/changelog/</link>
      <guid isPermaLink="true">https://vetuner.co.uk/changelog/</guid>
      <pubDate>Thu, 05 Nov 2026 00:00:00 GMT</pubDate>
      <description><![CDATA[<h1 id="change-log">Change Log</h1>
<h2 id="5-november-2026">5 November 2026</h2>
<ul>
<li>Added an RSS feed for documentation updates.</li>
<li>Fixed chart axis titles overlapping the tick values at larger text sizes. (<a href="https://github.com/VETuner/IssueTracker/issues/1">#1</a>)</li>
</ul>
<h2 id="4-november-2026">4 November 2026</h2>
<ul>
<li>Added a change log of recent changes.</li>
<li>Added a graph view that draws one line per table row, so overlapping or kinked rows are easy to spot. (<a href="https://github.com/VETuner/IssueTracker/issues/15">#15</a>)</li>
<li>Fixed the 3D table view so it fits better and rotates correctly.</li>
<li>Changed the Status page to compare the running version with the available one, and limited update notices to when not connected to an ECU. (<a href="https://github.com/VETuner/IssueTracker/issues/14">#14</a>)</li>
<li>Changed each tuning table to reopen in the view it was last shown in: 2D, 3D or Graph.</li>
<li>Changed table touch gestures: tap or drag to select in 2D and Graph, long-press then drag to select in 3D, and a two-finger pinch to zoom the 3D view. (<a href="https://github.com/VETuner/IssueTracker/issues/15">#15</a>)</li>
<li>Added a global choice between perspective and orthographic projection for the 3D table view. (<a href="https://github.com/VETuner/IssueTracker/issues/16">#16</a>)</li>
</ul>
<h2 id="3-november-2026">3 November 2026</h2>
<ul>
<li>Changed the wording on the Burn button for clarity.</li>
<li>Fixed burns that cannot apply.</li>
</ul>
<h2 id="2-november-2026">2 November 2026</h2>
<ul>
<li>Fixed changed pages being lost after a reconnect with the diff dialog showing the outstanding data.</li>
<li>Fixed the connection status on the Status tab.</li>
</ul>
<h2 id="1-november-2026">1 November 2026</h2>
<ul>
<li>Fixed INI conditionals so they evaluate typed settings correctly.</li>
<li>Fixed an incorrect error when the service-worker fails.</li>
<li>Added a snapshot of system state to error reports when the connection fails to aid debugging.</li>
<li>Changed the tuning table to use space better. (<a href="https://github.com/VETuner/IssueTracker/issues/12">#12</a>)</li>
</ul>
<h2 id="29-october-2026">29 October 2026</h2>
<ul>
<li>Fixed the saved serial device identity so it is stickier. (<a href="https://github.com/VETuner/IssueTracker/issues/11">#11</a>)</li>
<li>Fixed a failed burn not being attributed and a stalled burn not being retried. (<a href="https://github.com/VETuner/IssueTracker/issues/10">#10</a>)</li>
<li>Fixed runtime read timeouts so an incomplete frame is aborted early instead of waiting for a cycle timeout.</li>
<li>Changed the Web Serial driver to v0.4.2 to stop stalled reads. (<a href="https://github.com/VETuner/IssueTracker/issues/13">#13</a>)</li>
</ul>
<h2 id="27-october-2026">27 October 2026</h2>
<ul>
<li>Fixed saving a tuning dialog so it keeps the editor open.</li>
<li>Fixed curve values so they round to the precision of their constant. (<a href="https://github.com/VETuner/IssueTracker/issues/4">#4</a>)</li>
<li>Added a spacer item so dashboard rows can be shaped when fitting to the window. (<a href="https://github.com/VETuner/IssueTracker/issues/2">#2</a>)</li>
</ul>
<h2 id="26-october-2026">26 October 2026</h2>
<ul>
<li>Changed curves and tables so they resize freely on the dashboard.</li>
<li>Changed gauge and chart labels to follow the text-size preset. (<a href="https://github.com/VETuner/IssueTracker/issues/1">#1</a>)</li>
<li>Fixed the curve drag-point tooltip so it scales correctly. (<a href="https://github.com/VETuner/IssueTracker/issues/1">#1</a>)</li>
<li>Fixed app updates so shell assets load network-first and a waiting worker activates before reload. (<a href="https://github.com/VETuner/IssueTracker/issues/10">#10</a>)</li>
</ul>
<h2 id="25-october-2026">25 October 2026</h2>
<ul>
<li>Changed every table number to use one font size, chosen to fit the widest value.</li>
<li>Fixed live constant values so they take precedence over the stale values from before the page load.</li>
<li>Fixed expression-typed constant scale and translate so they are evaluated correctly.</li>
<li>Fixed bug reports that cannot be emailed so they are surfaced instead of failing silently.</li>
</ul>
<h2 id="23-october-2026">23 October 2026</h2>
<ul>
<li>Fixed large INI definitions so they parse faster and retain less memory.</li>
</ul>
<h2 id="22-october-2026">22 October 2026</h2>
<ul>
<li>Added direct downloads of rusEFI INI files from rusefi.com.</li>
<li>Changed signature retries so they are bounded and show their progress.</li>
</ul>
<h2 id="21-october-2026">21 October 2026</h2>
<ul>
<li>Fixed gauge scale labels so they are formatted from the whole scale rather than each tick.</li>
<li>Fixed dashboard pages so they survive cloud saves, loads and vehicle switches.</li>
<li>Fixed INI download failures so they are reported honestly and only ask for a copy when one is missing.</li>
<li>Fixed recovery from scatter and page 0x80/0x84 status errors.</li>
</ul>
<h2 id="20-october-2026">20 October 2026</h2>
<ul>
<li>Added a safe reload prompt when a new build is available. (<a href="https://github.com/VETuner/IssueTracker/issues/14">#14</a>)</li>
<li>Added automatic reconnection after an expected ECU power cycle.</li>
<li>Added a 4:3 area and fullscreen control for tables.</li>
<li>Fixed the service worker so it no longer navigates open clients during an update.</li>
<li>Fixed table text so it always fits inside its cells.</li>
</ul>
<h2 id="19-october-2026">19 October 2026</h2>
<ul>
<li>Added text-size presets and a greyscale table skin. (<a href="https://github.com/VETuner/IssueTracker/issues/1">#1</a>)</li>
<li>Fixed connection stalls on CH340 and Speeduino adapters and retried CRC mismatches.</li>
<li>Fixed resync after an 0x80 underrun before retrying.</li>
</ul>
<h2 id="18-october-2026">18 October 2026</h2>
<ul>
<li>Fixed ECU status codes so they retry with a bound and record diagnostic detail.</li>
<li>Fixed Bluetooth SPP connections so they retry with minimal options and show guidance.</li>
</ul>
<h2 id="16-october-2026">16 October 2026</h2>
<ul>
<li>Added connection troubleshooting before the bug-report call to action.</li>
<li>Fixed log recorder memory so it is bounded for long recordings.</li>
<li>Fixed a deliberate disconnect being reported as a read fault.</li>
<li>Changed the connect toggle so it also works as the disconnect control.</li>
<li>Fixed Stop Logging so it reports the real recording duration.</li>
</ul>
<h2 id="15-october-2026">15 October 2026</h2>
<ul>
<li>Added a rusEFI UAEFI reference INI.</li>
</ul>
<h2 id="13-october-2026">13 October 2026</h2>
<ul>
<li>Added reference INI files for DMLab DBW and WBO2.</li>
</ul>
<h2 id="6-october-2026">6 October 2026</h2>
<ul>
<li>Added per-vehicle configuration of extra log fields.</li>
</ul>
]]></description>
      <content:encoded><![CDATA[<h1 id="change-log">Change Log</h1>
<h2 id="5-november-2026">5 November 2026</h2>
<ul>
<li>Added an RSS feed for documentation updates.</li>
<li>Fixed chart axis titles overlapping the tick values at larger text sizes. (<a href="https://github.com/VETuner/IssueTracker/issues/1">#1</a>)</li>
</ul>
<h2 id="4-november-2026">4 November 2026</h2>
<ul>
<li>Added a change log of recent changes.</li>
<li>Added a graph view that draws one line per table row, so overlapping or kinked rows are easy to spot. (<a href="https://github.com/VETuner/IssueTracker/issues/15">#15</a>)</li>
<li>Fixed the 3D table view so it fits better and rotates correctly.</li>
<li>Changed the Status page to compare the running version with the available one, and limited update notices to when not connected to an ECU. (<a href="https://github.com/VETuner/IssueTracker/issues/14">#14</a>)</li>
<li>Changed each tuning table to reopen in the view it was last shown in: 2D, 3D or Graph.</li>
<li>Changed table touch gestures: tap or drag to select in 2D and Graph, long-press then drag to select in 3D, and a two-finger pinch to zoom the 3D view. (<a href="https://github.com/VETuner/IssueTracker/issues/15">#15</a>)</li>
<li>Added a global choice between perspective and orthographic projection for the 3D table view. (<a href="https://github.com/VETuner/IssueTracker/issues/16">#16</a>)</li>
</ul>
<h2 id="3-november-2026">3 November 2026</h2>
<ul>
<li>Changed the wording on the Burn button for clarity.</li>
<li>Fixed burns that cannot apply.</li>
</ul>
<h2 id="2-november-2026">2 November 2026</h2>
<ul>
<li>Fixed changed pages being lost after a reconnect with the diff dialog showing the outstanding data.</li>
<li>Fixed the connection status on the Status tab.</li>
</ul>
<h2 id="1-november-2026">1 November 2026</h2>
<ul>
<li>Fixed INI conditionals so they evaluate typed settings correctly.</li>
<li>Fixed an incorrect error when the service-worker fails.</li>
<li>Added a snapshot of system state to error reports when the connection fails to aid debugging.</li>
<li>Changed the tuning table to use space better. (<a href="https://github.com/VETuner/IssueTracker/issues/12">#12</a>)</li>
</ul>
<h2 id="29-october-2026">29 October 2026</h2>
<ul>
<li>Fixed the saved serial device identity so it is stickier. (<a href="https://github.com/VETuner/IssueTracker/issues/11">#11</a>)</li>
<li>Fixed a failed burn not being attributed and a stalled burn not being retried. (<a href="https://github.com/VETuner/IssueTracker/issues/10">#10</a>)</li>
<li>Fixed runtime read timeouts so an incomplete frame is aborted early instead of waiting for a cycle timeout.</li>
<li>Changed the Web Serial driver to v0.4.2 to stop stalled reads. (<a href="https://github.com/VETuner/IssueTracker/issues/13">#13</a>)</li>
</ul>
<h2 id="27-october-2026">27 October 2026</h2>
<ul>
<li>Fixed saving a tuning dialog so it keeps the editor open.</li>
<li>Fixed curve values so they round to the precision of their constant. (<a href="https://github.com/VETuner/IssueTracker/issues/4">#4</a>)</li>
<li>Added a spacer item so dashboard rows can be shaped when fitting to the window. (<a href="https://github.com/VETuner/IssueTracker/issues/2">#2</a>)</li>
</ul>
<h2 id="26-october-2026">26 October 2026</h2>
<ul>
<li>Changed curves and tables so they resize freely on the dashboard.</li>
<li>Changed gauge and chart labels to follow the text-size preset. (<a href="https://github.com/VETuner/IssueTracker/issues/1">#1</a>)</li>
<li>Fixed the curve drag-point tooltip so it scales correctly. (<a href="https://github.com/VETuner/IssueTracker/issues/1">#1</a>)</li>
<li>Fixed app updates so shell assets load network-first and a waiting worker activates before reload. (<a href="https://github.com/VETuner/IssueTracker/issues/10">#10</a>)</li>
</ul>
<h2 id="25-october-2026">25 October 2026</h2>
<ul>
<li>Changed every table number to use one font size, chosen to fit the widest value.</li>
<li>Fixed live constant values so they take precedence over the stale values from before the page load.</li>
<li>Fixed expression-typed constant scale and translate so they are evaluated correctly.</li>
<li>Fixed bug reports that cannot be emailed so they are surfaced instead of failing silently.</li>
</ul>
<h2 id="23-october-2026">23 October 2026</h2>
<ul>
<li>Fixed large INI definitions so they parse faster and retain less memory.</li>
</ul>
<h2 id="22-october-2026">22 October 2026</h2>
<ul>
<li>Added direct downloads of rusEFI INI files from rusefi.com.</li>
<li>Changed signature retries so they are bounded and show their progress.</li>
</ul>
<h2 id="21-october-2026">21 October 2026</h2>
<ul>
<li>Fixed gauge scale labels so they are formatted from the whole scale rather than each tick.</li>
<li>Fixed dashboard pages so they survive cloud saves, loads and vehicle switches.</li>
<li>Fixed INI download failures so they are reported honestly and only ask for a copy when one is missing.</li>
<li>Fixed recovery from scatter and page 0x80/0x84 status errors.</li>
</ul>
<h2 id="20-october-2026">20 October 2026</h2>
<ul>
<li>Added a safe reload prompt when a new build is available. (<a href="https://github.com/VETuner/IssueTracker/issues/14">#14</a>)</li>
<li>Added automatic reconnection after an expected ECU power cycle.</li>
<li>Added a 4:3 area and fullscreen control for tables.</li>
<li>Fixed the service worker so it no longer navigates open clients during an update.</li>
<li>Fixed table text so it always fits inside its cells.</li>
</ul>
<h2 id="19-october-2026">19 October 2026</h2>
<ul>
<li>Added text-size presets and a greyscale table skin. (<a href="https://github.com/VETuner/IssueTracker/issues/1">#1</a>)</li>
<li>Fixed connection stalls on CH340 and Speeduino adapters and retried CRC mismatches.</li>
<li>Fixed resync after an 0x80 underrun before retrying.</li>
</ul>
<h2 id="18-october-2026">18 October 2026</h2>
<ul>
<li>Fixed ECU status codes so they retry with a bound and record diagnostic detail.</li>
<li>Fixed Bluetooth SPP connections so they retry with minimal options and show guidance.</li>
</ul>
<h2 id="16-october-2026">16 October 2026</h2>
<ul>
<li>Added connection troubleshooting before the bug-report call to action.</li>
<li>Fixed log recorder memory so it is bounded for long recordings.</li>
<li>Fixed a deliberate disconnect being reported as a read fault.</li>
<li>Changed the connect toggle so it also works as the disconnect control.</li>
<li>Fixed Stop Logging so it reports the real recording duration.</li>
</ul>
<h2 id="15-october-2026">15 October 2026</h2>
<ul>
<li>Added a rusEFI UAEFI reference INI.</li>
</ul>
<h2 id="13-october-2026">13 October 2026</h2>
<ul>
<li>Added reference INI files for DMLab DBW and WBO2.</li>
</ul>
<h2 id="6-october-2026">6 October 2026</h2>
<ul>
<li>Added per-vehicle configuration of extra log fields.</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Introduction</title>
      <link>https://vetuner.co.uk/</link>
      <guid isPermaLink="true">https://vetuner.co.uk/</guid>
      <pubDate>Wed, 04 Nov 2026 00:00:00 GMT</pubDate>
      <description><![CDATA[<h1 id="vetuner">VETuner</h1>
<p>VETuner is a browser-based ECU tuning application for Speeduino and MegaSquirt ECUs. It runs entirely in your web browser; no software installation required.  Use it on your phone, tablet or laptop.</p>
<p><img src="https://vetuner.co.uk/images/vetuner-dark-dashboard.png" alt="VETuner dashboard showing live gauges in dark mode"></p>
<h2 id="what-can-vetuner-do">What can VETuner do?</h2>
<ul>
<li><strong>Connect directly to your ECU</strong> over USB or serial using the Web Serial API built into Chrome and Edge</li>
<li><strong>Start Doctor</strong> Watches you as you crank your engine, diagnoses common problems and offers advice on how to get your engine running and idling</li>
<li><strong>Read and write tuning tables</strong> (VE table, ignition advance, AFR targets, and hundreds more) directly on the ECU</li>
<li><strong>Visualise real-time data</strong> with live gauges, a configurable dashboard, and colour-coded heat maps</li>
<li><strong>Analyse volumetric efficiency</strong> by recording a drive log and letting VETuner calculate the adjustments your VE table needs</li>
<li><strong>Monitor external sensors</strong> over Bluetooth  -  connect temperature probes via Shelly Pill and display readings alongside ECU data</li>
<li><strong>Load and save tune files</strong> in the standard MSQ format, compatible with TunerStudio</li>
<li><strong>Work with no internet connection</strong>  -  VETuner caches itself on your device and keeps running in a garage or anywhere with no signal. See <a href="https://vetuner.co.uk/offline/">Using VETuner Offline</a></li>
</ul>
<h2 id="suggested-reading-path">Suggested reading path</h2>
<p>If you are new to VETuner, follow this sequence:</p>
<ol>
<li><a href="https://vetuner.co.uk/connecting/">Connecting to Your ECU</a>  -  establish a stable connection and verify serial comms.</li>
<li><a href="https://vetuner.co.uk/offline/">Using VETuner Offline</a>  -  what keeps working with no internet connection.</li>
<li><a href="https://vetuner.co.uk/start-your-engines/">Starting Your Engine</a>  -  run first-start checks and use Focus Mode.</li>
<li><a href="https://vetuner.co.uk/config-checks/">Configuration Health Check</a>  -  understand the sanity checks VETuner runs on your ECU.</li>
<li><a href="https://vetuner.co.uk/start-doctor/">Start Doctor</a>  -  diagnose no-start and unstable cranking behaviour.</li>
<li><a href="https://vetuner.co.uk/tuning/">Editing Tuning Tables</a>  -  make safe table changes and burn/save correctly.</li>
<li><a href="https://vetuner.co.uk/ve-analysis/">VE Analysis</a>  -  automate VE correction once the engine is warm and stable.</li>
</ol>
<p>For theory and deeper tuning concepts, continue into the Advanced section:</p>
<ul>
<li><a href="https://vetuner.co.uk/adv-ve-theory/">Volumetric Efficiency Theory</a></li>
<li><a href="https://vetuner.co.uk/adv-fuel-equation/">The Fuel Equation</a></li>
<li><a href="https://vetuner.co.uk/adv-lambda-afr/">Lambda and AFR</a></li>
<li><a href="https://vetuner.co.uk/adv-ignition-theory/">Ignition Timing Theory</a></li>
<li><a href="https://vetuner.co.uk/adv-closed-loop/">Closed-Loop Fuel Control</a></li>
<li><a href="https://vetuner.co.uk/adv-data-logging/">Data Logging for VE Analysis</a></li>
</ul>
<h2 id="community">Community</h2>
<p>Questions, tune sharing and help from other owners are welcome in the
<a href="https://www.facebook.com/groups/1015676520925629">VETuner Users Facebook group</a>.</p>
]]></description>
      <content:encoded><![CDATA[<h1 id="vetuner">VETuner</h1>
<p>VETuner is a browser-based ECU tuning application for Speeduino and MegaSquirt ECUs. It runs entirely in your web browser; no software installation required.  Use it on your phone, tablet or laptop.</p>
<p><img src="https://vetuner.co.uk/images/vetuner-dark-dashboard.png" alt="VETuner dashboard showing live gauges in dark mode"></p>
<h2 id="what-can-vetuner-do">What can VETuner do?</h2>
<ul>
<li><strong>Connect directly to your ECU</strong> over USB or serial using the Web Serial API built into Chrome and Edge</li>
<li><strong>Start Doctor</strong> Watches you as you crank your engine, diagnoses common problems and offers advice on how to get your engine running and idling</li>
<li><strong>Read and write tuning tables</strong> (VE table, ignition advance, AFR targets, and hundreds more) directly on the ECU</li>
<li><strong>Visualise real-time data</strong> with live gauges, a configurable dashboard, and colour-coded heat maps</li>
<li><strong>Analyse volumetric efficiency</strong> by recording a drive log and letting VETuner calculate the adjustments your VE table needs</li>
<li><strong>Monitor external sensors</strong> over Bluetooth  -  connect temperature probes via Shelly Pill and display readings alongside ECU data</li>
<li><strong>Load and save tune files</strong> in the standard MSQ format, compatible with TunerStudio</li>
<li><strong>Work with no internet connection</strong>  -  VETuner caches itself on your device and keeps running in a garage or anywhere with no signal. See <a href="https://vetuner.co.uk/offline/">Using VETuner Offline</a></li>
</ul>
<h2 id="suggested-reading-path">Suggested reading path</h2>
<p>If you are new to VETuner, follow this sequence:</p>
<ol>
<li><a href="https://vetuner.co.uk/connecting/">Connecting to Your ECU</a>  -  establish a stable connection and verify serial comms.</li>
<li><a href="https://vetuner.co.uk/offline/">Using VETuner Offline</a>  -  what keeps working with no internet connection.</li>
<li><a href="https://vetuner.co.uk/start-your-engines/">Starting Your Engine</a>  -  run first-start checks and use Focus Mode.</li>
<li><a href="https://vetuner.co.uk/config-checks/">Configuration Health Check</a>  -  understand the sanity checks VETuner runs on your ECU.</li>
<li><a href="https://vetuner.co.uk/start-doctor/">Start Doctor</a>  -  diagnose no-start and unstable cranking behaviour.</li>
<li><a href="https://vetuner.co.uk/tuning/">Editing Tuning Tables</a>  -  make safe table changes and burn/save correctly.</li>
<li><a href="https://vetuner.co.uk/ve-analysis/">VE Analysis</a>  -  automate VE correction once the engine is warm and stable.</li>
</ol>
<p>For theory and deeper tuning concepts, continue into the Advanced section:</p>
<ul>
<li><a href="https://vetuner.co.uk/adv-ve-theory/">Volumetric Efficiency Theory</a></li>
<li><a href="https://vetuner.co.uk/adv-fuel-equation/">The Fuel Equation</a></li>
<li><a href="https://vetuner.co.uk/adv-lambda-afr/">Lambda and AFR</a></li>
<li><a href="https://vetuner.co.uk/adv-ignition-theory/">Ignition Timing Theory</a></li>
<li><a href="https://vetuner.co.uk/adv-closed-loop/">Closed-Loop Fuel Control</a></li>
<li><a href="https://vetuner.co.uk/adv-data-logging/">Data Logging for VE Analysis</a></li>
</ul>
<h2 id="community">Community</h2>
<p>Questions, tune sharing and help from other owners are welcome in the
<a href="https://www.facebook.com/groups/1015676520925629">VETuner Users Facebook group</a>.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Connecting to Your ECU</title>
      <link>https://vetuner.co.uk/connecting/</link>
      <guid isPermaLink="true">https://vetuner.co.uk/connecting/</guid>
      <pubDate>Mon, 19 Oct 2026 00:00:00 GMT</pubDate>
      <description><![CDATA[<h1 id="connecting-to-your-ecu">Connecting to Your ECU</h1>
<h2 id="live-serial-connection">Live serial connection</h2>
<p>VETuner can communicate directly with your ECU over a serial port using the browser&#39;s built-in <strong>Web Serial API</strong>.  Currently this is supported by Chrome based browsers (Chrome, Chromium, Edge) and Vivaldi.  Firefox and Safari do not support this API and cannot be used.</p>
<p>iOS does not support the Web Serial API required to connect to an ECU.</p>
<ol>
<li>Plug your ECU into your computer via USB (or a USB-to-serial adapter)</li>
<li>Open the <strong>Connection Setup</strong> panel from the sidebar</li>
<li>Click <strong>Connect</strong>  -  your browser will show a port selection dialogue</li>
<li>Select the correct port and click <strong>Connect</strong></li>
</ol>
<p><img src="https://vetuner.co.uk/images/connection-device-picker.png" alt="Browser serial port selection dialog"></p>
<p>Once connected, VETuner will:</p>
<ul>
<li>Read the ECU signature and load the matching definition</li>
<li>Begin streaming real-time data</li>
<li>Enable the <strong>Burn to ECU</strong> button so any table edits can be written back</li>
</ul>
<blockquote>
<p><strong>Tip:</strong> If you are unsure which port to pick, try disconnecting the USB cable, note which ports disappear, then reconnect and select the one that reappears.</p>
</blockquote>
<h2 id="baud-rate">Baud rate</h2>
<p>Most Speeduino and MegaSquirt ECUs use <strong>115200 baud</strong>.  VETuner defaults to 115200, but you can change it using the <strong>Baud Rate</strong> dropdown in the <strong>Connection Setup</strong> panel before clicking Connect.</p>
<h2 id="file-only-mode-no-ecu">File-only mode (no ECU)</h2>
<p>You do not need a physical ECU to use VETuner. If you have a <a href="https://vetuner.co.uk/vetuner-pro/">VETuner Pro</a> subscription you can load an MSQ tune file via <strong>Files → Load MSQ File</strong> to explore and edit your tune.  Changes can be saved back to an MSQ file for later use.</p>
<p>See <a href="https://vetuner.co.uk/offline/">Using VETuner Offline</a> for what keeps working without a connection.</p>
<h2 id="ecu-families-supported">ECU families supported</h2>
<table>
<thead>
<tr>
<th>ECU</th>
<th>Protocol</th>
</tr>
</thead>
<tbody><tr>
<td>Speeduino (all variants)</td>
<td>MegaSquirt serial</td>
</tr>
<tr>
<td>MegaSquirt I / II / III</td>
<td>MegaSquirt serial</td>
</tr>
<tr>
<td>MS3Pro</td>
<td>MegaSquirt serial</td>
</tr>
</tbody></table>
<p>If your ECU is not listed but uses the MegaSquirt serial protocol, load its <code>.ini</code> definition file manually via <strong>Files → Load Manual INI</strong>.</p>
<h2 id="troubleshooting">Troubleshooting</h2>
<p><strong>&quot;Failed to open serial port&quot;</strong>  -  Another application (e.g. TunerStudio) may already have the port open.  Close it and try again.</p>
<p><strong>No data after connecting</strong>  -  Check that the ECU is powered and the serial leads are connected correctly.  Try a different baud rate in Settings.</p>
<p><strong>ECU not recognised</strong>  -  Load the ECU&#39;s <code>.ini</code> file manually via <strong>Files → Load Manual INI</strong>.</p>
<h2 id="related-guides">Related guides</h2>
<ul>
<li><a href="https://vetuner.co.uk/start-your-engines/">Starting Your Engine</a>  -  first-start flow and practical checks.</li>
<li><a href="https://vetuner.co.uk/start-doctor/">Start Doctor</a>  -  diagnose no-start and unstable cranking.</li>
<li><a href="https://vetuner.co.uk/tuning/">Editing Tuning Tables</a>  -  edit, burn, and save tune data safely.</li>
</ul>
]]></description>
      <content:encoded><![CDATA[<h1 id="connecting-to-your-ecu">Connecting to Your ECU</h1>
<h2 id="live-serial-connection">Live serial connection</h2>
<p>VETuner can communicate directly with your ECU over a serial port using the browser&#39;s built-in <strong>Web Serial API</strong>.  Currently this is supported by Chrome based browsers (Chrome, Chromium, Edge) and Vivaldi.  Firefox and Safari do not support this API and cannot be used.</p>
<p>iOS does not support the Web Serial API required to connect to an ECU.</p>
<ol>
<li>Plug your ECU into your computer via USB (or a USB-to-serial adapter)</li>
<li>Open the <strong>Connection Setup</strong> panel from the sidebar</li>
<li>Click <strong>Connect</strong>  -  your browser will show a port selection dialogue</li>
<li>Select the correct port and click <strong>Connect</strong></li>
</ol>
<p><img src="https://vetuner.co.uk/images/connection-device-picker.png" alt="Browser serial port selection dialog"></p>
<p>Once connected, VETuner will:</p>
<ul>
<li>Read the ECU signature and load the matching definition</li>
<li>Begin streaming real-time data</li>
<li>Enable the <strong>Burn to ECU</strong> button so any table edits can be written back</li>
</ul>
<blockquote>
<p><strong>Tip:</strong> If you are unsure which port to pick, try disconnecting the USB cable, note which ports disappear, then reconnect and select the one that reappears.</p>
</blockquote>
<h2 id="baud-rate">Baud rate</h2>
<p>Most Speeduino and MegaSquirt ECUs use <strong>115200 baud</strong>.  VETuner defaults to 115200, but you can change it using the <strong>Baud Rate</strong> dropdown in the <strong>Connection Setup</strong> panel before clicking Connect.</p>
<h2 id="file-only-mode-no-ecu">File-only mode (no ECU)</h2>
<p>You do not need a physical ECU to use VETuner. If you have a <a href="https://vetuner.co.uk/vetuner-pro/">VETuner Pro</a> subscription you can load an MSQ tune file via <strong>Files → Load MSQ File</strong> to explore and edit your tune.  Changes can be saved back to an MSQ file for later use.</p>
<p>See <a href="https://vetuner.co.uk/offline/">Using VETuner Offline</a> for what keeps working without a connection.</p>
<h2 id="ecu-families-supported">ECU families supported</h2>
<table>
<thead>
<tr>
<th>ECU</th>
<th>Protocol</th>
</tr>
</thead>
<tbody><tr>
<td>Speeduino (all variants)</td>
<td>MegaSquirt serial</td>
</tr>
<tr>
<td>MegaSquirt I / II / III</td>
<td>MegaSquirt serial</td>
</tr>
<tr>
<td>MS3Pro</td>
<td>MegaSquirt serial</td>
</tr>
</tbody></table>
<p>If your ECU is not listed but uses the MegaSquirt serial protocol, load its <code>.ini</code> definition file manually via <strong>Files → Load Manual INI</strong>.</p>
<h2 id="troubleshooting">Troubleshooting</h2>
<p><strong>&quot;Failed to open serial port&quot;</strong>  -  Another application (e.g. TunerStudio) may already have the port open.  Close it and try again.</p>
<p><strong>No data after connecting</strong>  -  Check that the ECU is powered and the serial leads are connected correctly.  Try a different baud rate in Settings.</p>
<p><strong>ECU not recognised</strong>  -  Load the ECU&#39;s <code>.ini</code> file manually via <strong>Files → Load Manual INI</strong>.</p>
<h2 id="related-guides">Related guides</h2>
<ul>
<li><a href="https://vetuner.co.uk/start-your-engines/">Starting Your Engine</a>  -  first-start flow and practical checks.</li>
<li><a href="https://vetuner.co.uk/start-doctor/">Start Doctor</a>  -  diagnose no-start and unstable cranking.</li>
<li><a href="https://vetuner.co.uk/tuning/">Editing Tuning Tables</a>  -  edit, burn, and save tune data safely.</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Using VETuner Offline</title>
      <link>https://vetuner.co.uk/offline/</link>
      <guid isPermaLink="true">https://vetuner.co.uk/offline/</guid>
      <pubDate>Mon, 19 Oct 2026 00:00:00 GMT</pubDate>
      <description><![CDATA[<h1 id="using-vetuner-offline">Using VETuner Offline</h1>
<p>Tuning does not need the internet. VETuner runs in your browser and talks to your ECU over USB. Load the app once and it keeps running whether or not you have a connection, which is the point of it  -  garages and paddocks have unreliable signal at best.</p>
<h2 id="quotofflinequot-covers-two-things-here">&quot;Offline&quot; covers two things here</h2>
<p>The site uses the word for two different situations:</p>
<table>
<thead>
<tr>
<th>Phrase</th>
<th>Means</th>
</tr>
</thead>
<tbody><tr>
<td><strong>No ECU</strong></td>
<td>No ECU is attached, so you are working on an MSQ file instead. Covered in <a href="https://vetuner.co.uk/connecting/">Connecting to Your ECU</a>.</td>
</tr>
<tr>
<td><strong>No connection</strong></td>
<td>No internet. The app keeps running, and an ECU can still be connected over USB.</td>
</tr>
</tbody></table>
<h2 id="the-first-load-needs-a-connection">The first load needs a connection</h2>
<p>Open VETuner once while online. That load caches the app on your device, and from then on it starts and runs with no connection at all. If the very first visit happens with no signal, the browser has nothing to fetch and you get a browser error rather than VETuner.</p>
<h2 id="installing-it-as-an-app">Installing it as an app</h2>
<p>Installing is optional, but an installed VETuner gets its own window and icon and starts from your device instead of from a bookmark:</p>
<ul>
<li><strong>Chrome or Edge on a computer</strong>  -  <strong>Install</strong> in the address bar, or <em>Menu → Cast, save and share → Install page as app</em>.</li>
<li><strong>Android</strong>  -  <em>Menu → Add to Home screen</em>.</li>
</ul>
<h2 id="what-works-offline">What works offline</h2>
<ul>
<li>Connecting to your ECU over USB and reading live data</li>
<li>Reading and writing tuning tables, and burning them to the ECU</li>
<li>Dashboards, gauges and Focus Mode</li>
<li><a href="https://vetuner.co.uk/start-doctor/">Start Doctor</a> and the <a href="https://vetuner.co.uk/config-checks/">Configuration Health Check</a></li>
<li>Log recording and playback, including marks</li>
<li><a href="https://vetuner.co.uk/ve-analysis/">VE Analysis</a>, the Graph tab, the Data Table and the Tooth Logger</li>
<li>Loading, editing and saving MSQ files, and loading an INI file from disk</li>
<li>ECU definitions you have loaded before  -  VETuner remembers them</li>
<li>GPS tracking  -  the route is recorded to the log as you drive</li>
<li>External sensors over Bluetooth or your local network</li>
</ul>
<p>A few things do reach the VETuner servers and need a connection: signing in, registering, subscribing, cancelling and the billing portal; Cloud Sync (cloud tunes, vehicles, dashboards and the cloud datalog archive); Engine Expert, which diagnoses an uploaded log on the server; Online Tunes and the other shared tune libraries; and bug reports. The GPS route map needs the internet too, so the map is blank offline  -  recording the route still works.</p>
<p>One more edge case: the first time you use an ECU definition VETuner has not seen before, the definition is fetched from the server. If that happens offline, load the <code>.ini</code> file by hand through <strong>Files → Load Manual INI</strong>.</p>
<blockquote>
<p><strong>Note:</strong> working with no ECU and no connection needs nothing more than an imported INI or MSQ file on disk.</p>
</blockquote>
<h2 id="pro-features-with-no-connection">Pro features with no connection</h2>
<p>A <a href="https://vetuner.co.uk/vetuner-pro/">VETuner Pro</a> subscription keeps working offline for the remaining duration of the period you have paid for. VE Analysis, the Graph tab, the Tooth Logger, log recording and playback, and the premium gauge designs all run on your own machine, so all of them stay available. The cloud features need a connection for the same reasons as everything else in the list above.</p>
<p>Sign in before you lose signal. VETuner stays signed in while offline and re-checks your subscription the next time it reaches the server.</p>
<h2 id="updates">Updates</h2>
<p>VETuner updates itself the next time you start it with a connection. Once a new version has been fetched, the app tells you a reload is available. Take it at a natural break rather than mid-tune.</p>
<h2 id="related-guides">Related guides</h2>
<ul>
<li><a href="https://vetuner.co.uk/connecting/">Connecting to Your ECU</a>  -  live connection and file-only mode</li>
<li><a href="https://vetuner.co.uk/vetuner-pro/">VETuner Pro</a>  -  what a subscription includes</li>
<li><a href="https://vetuner.co.uk/tuning/">Editing Tuning Tables</a>  -  making safe table changes</li>
</ul>
]]></description>
      <content:encoded><![CDATA[<h1 id="using-vetuner-offline">Using VETuner Offline</h1>
<p>Tuning does not need the internet. VETuner runs in your browser and talks to your ECU over USB. Load the app once and it keeps running whether or not you have a connection, which is the point of it  -  garages and paddocks have unreliable signal at best.</p>
<h2 id="quotofflinequot-covers-two-things-here">&quot;Offline&quot; covers two things here</h2>
<p>The site uses the word for two different situations:</p>
<table>
<thead>
<tr>
<th>Phrase</th>
<th>Means</th>
</tr>
</thead>
<tbody><tr>
<td><strong>No ECU</strong></td>
<td>No ECU is attached, so you are working on an MSQ file instead. Covered in <a href="https://vetuner.co.uk/connecting/">Connecting to Your ECU</a>.</td>
</tr>
<tr>
<td><strong>No connection</strong></td>
<td>No internet. The app keeps running, and an ECU can still be connected over USB.</td>
</tr>
</tbody></table>
<h2 id="the-first-load-needs-a-connection">The first load needs a connection</h2>
<p>Open VETuner once while online. That load caches the app on your device, and from then on it starts and runs with no connection at all. If the very first visit happens with no signal, the browser has nothing to fetch and you get a browser error rather than VETuner.</p>
<h2 id="installing-it-as-an-app">Installing it as an app</h2>
<p>Installing is optional, but an installed VETuner gets its own window and icon and starts from your device instead of from a bookmark:</p>
<ul>
<li><strong>Chrome or Edge on a computer</strong>  -  <strong>Install</strong> in the address bar, or <em>Menu → Cast, save and share → Install page as app</em>.</li>
<li><strong>Android</strong>  -  <em>Menu → Add to Home screen</em>.</li>
</ul>
<h2 id="what-works-offline">What works offline</h2>
<ul>
<li>Connecting to your ECU over USB and reading live data</li>
<li>Reading and writing tuning tables, and burning them to the ECU</li>
<li>Dashboards, gauges and Focus Mode</li>
<li><a href="https://vetuner.co.uk/start-doctor/">Start Doctor</a> and the <a href="https://vetuner.co.uk/config-checks/">Configuration Health Check</a></li>
<li>Log recording and playback, including marks</li>
<li><a href="https://vetuner.co.uk/ve-analysis/">VE Analysis</a>, the Graph tab, the Data Table and the Tooth Logger</li>
<li>Loading, editing and saving MSQ files, and loading an INI file from disk</li>
<li>ECU definitions you have loaded before  -  VETuner remembers them</li>
<li>GPS tracking  -  the route is recorded to the log as you drive</li>
<li>External sensors over Bluetooth or your local network</li>
</ul>
<p>A few things do reach the VETuner servers and need a connection: signing in, registering, subscribing, cancelling and the billing portal; Cloud Sync (cloud tunes, vehicles, dashboards and the cloud datalog archive); Engine Expert, which diagnoses an uploaded log on the server; Online Tunes and the other shared tune libraries; and bug reports. The GPS route map needs the internet too, so the map is blank offline  -  recording the route still works.</p>
<p>One more edge case: the first time you use an ECU definition VETuner has not seen before, the definition is fetched from the server. If that happens offline, load the <code>.ini</code> file by hand through <strong>Files → Load Manual INI</strong>.</p>
<blockquote>
<p><strong>Note:</strong> working with no ECU and no connection needs nothing more than an imported INI or MSQ file on disk.</p>
</blockquote>
<h2 id="pro-features-with-no-connection">Pro features with no connection</h2>
<p>A <a href="https://vetuner.co.uk/vetuner-pro/">VETuner Pro</a> subscription keeps working offline for the remaining duration of the period you have paid for. VE Analysis, the Graph tab, the Tooth Logger, log recording and playback, and the premium gauge designs all run on your own machine, so all of them stay available. The cloud features need a connection for the same reasons as everything else in the list above.</p>
<p>Sign in before you lose signal. VETuner stays signed in while offline and re-checks your subscription the next time it reaches the server.</p>
<h2 id="updates">Updates</h2>
<p>VETuner updates itself the next time you start it with a connection. Once a new version has been fetched, the app tells you a reload is available. Take it at a natural break rather than mid-tune.</p>
<h2 id="related-guides">Related guides</h2>
<ul>
<li><a href="https://vetuner.co.uk/connecting/">Connecting to Your ECU</a>  -  live connection and file-only mode</li>
<li><a href="https://vetuner.co.uk/vetuner-pro/">VETuner Pro</a>  -  what a subscription includes</li>
<li><a href="https://vetuner.co.uk/tuning/">Editing Tuning Tables</a>  -  making safe table changes</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Starting Your Engine The First Time</title>
      <link>https://vetuner.co.uk/start-your-engines/</link>
      <guid isPermaLink="true">https://vetuner.co.uk/start-your-engines/</guid>
      <pubDate>Wed, 16 Sep 2026 00:00:00 GMT</pubDate>
      <description><![CDATA[<h1 id="starting-your-engine">Starting Your Engine</h1>
<p><strong>VETuner</strong> aims  to help you start your engine  for the first time.  You&#39;ve done a scary thing, you&#39;ve done a brain transplant on your engine and now it needs to live.  All the bravado and bluster disappears and the tension mounts as you turn the key or press the button for the first time.  It is scary, and to be honest it probably isn&#39;t going to work.</p>
<p>Use this page as your practical getting-started flow:</p>
<ol>
<li>Establish a stable ECU connection</li>
<li>Run the initial sanity checks</li>
<li>Use Start Doctor if it does not fire</li>
<li>Stay in Focus Mode until it idles cleanly</li>
</ol>
<p>VETuner assumes you have already worked through at least this check list</p>
<ol>
<li>You have read all the pertinent documentation for <a href="https://wiki.speeduino.com/en/home">Speeduino</a> or <a href="https://www.msextra.com/manuals/">MegaSquirt</a></li>
<li>You have fuel in the tank</li>
<li>You have a fully charged battery</li>
<li>All your hoses  and electrical connections are tight.</li>
<li><a href="https://youtube.com/shorts/mEHl2s6CUTs?feature=share">You have really checked your hoses as petrol at 40psi squirting across your garage onto an ignition source is not fun</a></li>
<li>The right spark plug is connected to the right lead.</li>
<li>You have a fire extinguisher to hand.</li>
<li>Have you checked your hoses for leaks?</li>
</ol>
<h2 id="establishing-a-connection">Establishing a Connection</h2>
<p>VETuner only supports Speeduino and MegaSquirt-derived ECUs.  Connection is via Web Serial in Chrome or Edge.</p>
<ol>
<li>Plug in your ECU USB/serial cable and turn ignition on.</li>
<li>Open <strong>Connection Setup</strong> and click <strong>Connect ECU</strong>.</li>
<li>When the browser permission prompt appears, choose the correct serial device.</li>
<li>Wait for signature detection and page read to complete.</li>
</ol>
<p>If all goes well, VETuner will recognise the ECU, load the matching INI definition, and pull the current configuration from the ECU.</p>
<p><img src="https://vetuner.co.uk/images/initial-dashboard.png" alt="VETuner dashboard after first connection"></p>
<p>If auto-detection does not complete:</p>
<ol>
<li>Confirm ignition is on and ECU has power (and grounds).</li>
<li>Reconnect the cable and try a different USB port.</li>
<li>Close other tuning tools that may already have the serial port open.</li>
<li>Manually load the INI via <strong>Files → Load Manual INI</strong>. (and then email it to <a href="mailto:admin@vetuner.co.uk">admin@vetuner.co.uk</a> so I can add it to the collection)</li>
</ol>
<p>Connection guide with more detail: <a href="https://vetuner.co.uk/connecting/">Connecting to your ECU</a>.</p>
<p><img src="https://vetuner.co.uk/images/start-doctor-offer.png" alt="Offer to switch to Start Doctor when engine is not running"></p>
<h2 id="focus-mode">Focus Mode</h2>
<p>By default, VETuner will run in Focus Mode.  This removes a lot of the &#39;noise&#39; from the user interface of things that you don&#39;t need to get your engine running.  It focusses on the fundamentals of</p>
<ol>
<li>Spark settings</li>
<li>Fuel settings</li>
<li>Cranking and starting settings</li>
</ol>
<p><img src="https://vetuner.co.uk/images/focus-mode-menu.png" alt="Focus Mode sidebar showing curated menu of essential settings">
If those aren&#39;t right, there is no point worrying about VE tuning, acceleration enrichment, boost control, DFCO or all the other things you <em>can</em> tweak; if the engine doesn&#39;t run.  Get the engine running, idling and warm before anything else.</p>
<p>VETuner automatically checks your ECU configuration for common problems when you connect. See the <a href="https://vetuner.co.uk/config-checks/">Configuration Health Check</a> guide for the full list of checks and how to fix them.</p>
<h2 id="start-doctor"><a href="https://vetuner.co.uk/start-doctor/">Start Doctor</a></h2>
<p>The Start Doctor watches what happens as you crank the engine and looks for common problems  -  battery voltage drop, a missing crank signal, implausible sensor readings, electrical noise, ECU reboots, and whether the injector pulse width and ignition advance are in the right ballpark.  It automatically captures and downloads a log file while it runs, so if you get stuck you can share it with others to help diagnose what is going wrong.  Check your Downloads folder afterwards to find it.</p>
<h2 id="it-won39t-start---now-what">It Won&#39;t Start  -  Now What?</h2>
<p>Don&#39;t panic.  It is very normal for an engine not to fire on the first attempt.  Work through the Start Doctor findings one at a time.  Here are the most common culprits:</p>
<ul>
<li><strong>No crank signal</strong>  -  the ECU cannot see the engine turning.  Double-check your trigger wheel sensor wiring, air gap and the trigger angle setting in the firmware.</li>
<li><strong>Wrong trigger pattern</strong>  -  make sure the trigger type, tooth count and missing tooth count match your actual trigger wheel.</li>
<li><strong>Flooded</strong>  -  if you have been cranking a lot without success there may be too much fuel in the cylinders.  Hold the throttle wide open (flood-clear mode) and crank until it clears.  Be aware that when doing this the engine can suddenly start and rev as you&#39;ve got your foot to the floor.  Don&#39;t panic, switch off and revel in the sweet noise you just made.  Bonus points if it is 2am and your neighbour has just got their baby to sleep<sup><a id="footnote-ref-1" href="#footnote-1" data-footnote-ref aria-describedby="footnote-label">1</a></sup></li>
<li><strong>No spark</strong>  -  Remove a spark plug and earth it against the engine, crank and see if it sparks.  A bad coil driver setting or wrong dwell time is a common cause.</li>
<li><strong>No fuel pressure</strong>  -  listen for the fuel pump priming when you turn the key.  If you hear nothing, check the pump fuse and relay first.</li>
<li><strong>Electrical noise</strong>  -  the Start Doctor will flag this if it spots it.  Ignition systems are brutal sources of electrical interference and can corrupt the crank signal, causing misfires or a complete refusal to run.  The most common fixes are a dedicated star-point earth on the ECU, shielded cabling for the crank and cam sensors, and keeping sensor wiring well away from HT leads and coil packs.  Resistor spark plugs and suppressed HT leads are not optional on an EFI conversion  -  if you have straight copper leads or non-resistor plugs, change them.</li>
</ul>
<h2 id="it-started-what-now">It Started! What Now?</h2>
<p>Congratulations  -  that is genuinely exciting.  Now resist the urge to rev it.  Let it idle and watch the gauges in VETuner.</p>
<h3 id="coolant-temperature">Coolant Temperature</h3>
<p>It should be reading something believable.  An implausibly high reading at a cold start usually means the sensor wiring is reversed or the wrong sensor type is selected in the firmware.</p>
<h3 id="idle-speed">Idle Speed</h3>
<p>Is the engine idling at something recognisable as an idle?  Very high idle (above 2000 RPM) can mean a vacuum leak  -  check your hoses again.  Very low and hunting idle usually means the cranking enrichment is bleeding away too quickly or the idle air control valve isn&#39;t set up yet.</p>
<h3 id="afr-lambda">AFR / Lambda</h3>
<p>If you have a wideband O2 sensor connected<sup><a id="footnote-ref-2" href="#footnote-2" data-footnote-ref aria-describedby="footnote-label">2</a></sup>, watch your AFR at idle.  It should be somewhere in the 13–15:1 range.  If it is very lean (above 16:1) the engine will hunt and may stall.  If it is very rich (below 12:1) it will smoke, foul plugs and smell.</p>
<h3 id="oil-pressure">Oil Pressure</h3>
<p>You do have an oil pressure sender, right?  Keep a very close eye on this in the first few minutes of running.  If oil pressure does not come up quickly, shut it down immediately.</p>
<h2 id="warming-up">Warming Up</h2>
<p>Let the engine warm up fully at idle before driving it anywhere.  Watch the coolant temperature rise steadily through 70–90 °C.  While it warms up, notice how the idle changes  -  most engines need progressively less fuel enrichment as they warm up.  VETuner&#39;s Warm-Up Enrichment (WUE) table controls this.</p>
<p>If the idle speed drops and the engine stalls as it warms up, it usually means the afterstart enrichment table is set too aggressively and needs trimming back, or the idle valve needs tuning, or idle advance.</p>
<h2 id="first-drive">First Drive</h2>
<p>Once the engine is warm and idling stably you can take it for a very short, gentle drive  -  no more than 5–10 minutes, staying close to home.</p>
<ol>
<li>Keep RPM modest  -  under 3000 RPM.</li>
<li>Watch for overheating.  The cooling system may have air locks that only clear once the thermostat opens.</li>
<li>Listen for any unusual knocking, rattling or hissing.</li>
<li>If anything seems wrong, pull over and investigate before continuing.</li>
</ol>
<p>After the first drive, let the engine cool down and check under the bonnet for any fresh leaks, loose hoses or flames.</p>
<h2 id="getting-ready-for-ve-tuning">Getting Ready for VE Tuning</h2>
<p>Once you have a warm, stable idle and can drive the car gently without problems, you are ready to start properly tuning the VE (Volumetric Efficiency) table.  This is where VETuner really comes into its own.</p>
<p>The VE table controls how much fuel the ECU injects across all engine speeds and loads.  Getting it right means better power, better economy and a cleaner-running engine.  VETuner can analyse a driving log and suggest corrections to the VE table automatically  -  but that is a topic for the <a href="https://vetuner.co.uk/ve-analysis/">VE Tuning section</a>.</p>
<h2 id="related-guides">Related guides</h2>
<ul>
<li><a href="https://vetuner.co.uk/connecting/">Connecting to Your ECU</a>  -  detailed connection setup and serial troubleshooting.</li>
<li><a href="https://vetuner.co.uk/start-doctor/">Start Doctor</a>  -  guided diagnostics during cranking and early running.</li>
<li><a href="https://vetuner.co.uk/ve-analysis/">VE Analysis</a>  -  next step once idle and warm-up are stable.</li>
</ul>
<section class="footnotes" data-footnotes>
<h2 id="footnote-label" class="sr-only">Footnotes</h2>
<ol>
<li id="footnote-1">
<p>Seriously, do this when you are well rested and sober.  If you are not thinking straight then you will make mistakes and get frustrated.  Walk away and come back another day. <a href="#footnote-ref-1" data-footnote-backref aria-label="Back to reference 1">↩</a></p>
</li>
<li id="footnote-2">
<p>You really should have one.  You are hobbling your ability to get this working without one. <a href="#footnote-ref-2" data-footnote-backref aria-label="Back to reference 2">↩</a></p>
</li>
</ol>
</section>
]]></description>
      <content:encoded><![CDATA[<h1 id="starting-your-engine">Starting Your Engine</h1>
<p><strong>VETuner</strong> aims  to help you start your engine  for the first time.  You&#39;ve done a scary thing, you&#39;ve done a brain transplant on your engine and now it needs to live.  All the bravado and bluster disappears and the tension mounts as you turn the key or press the button for the first time.  It is scary, and to be honest it probably isn&#39;t going to work.</p>
<p>Use this page as your practical getting-started flow:</p>
<ol>
<li>Establish a stable ECU connection</li>
<li>Run the initial sanity checks</li>
<li>Use Start Doctor if it does not fire</li>
<li>Stay in Focus Mode until it idles cleanly</li>
</ol>
<p>VETuner assumes you have already worked through at least this check list</p>
<ol>
<li>You have read all the pertinent documentation for <a href="https://wiki.speeduino.com/en/home">Speeduino</a> or <a href="https://www.msextra.com/manuals/">MegaSquirt</a></li>
<li>You have fuel in the tank</li>
<li>You have a fully charged battery</li>
<li>All your hoses  and electrical connections are tight.</li>
<li><a href="https://youtube.com/shorts/mEHl2s6CUTs?feature=share">You have really checked your hoses as petrol at 40psi squirting across your garage onto an ignition source is not fun</a></li>
<li>The right spark plug is connected to the right lead.</li>
<li>You have a fire extinguisher to hand.</li>
<li>Have you checked your hoses for leaks?</li>
</ol>
<h2 id="establishing-a-connection">Establishing a Connection</h2>
<p>VETuner only supports Speeduino and MegaSquirt-derived ECUs.  Connection is via Web Serial in Chrome or Edge.</p>
<ol>
<li>Plug in your ECU USB/serial cable and turn ignition on.</li>
<li>Open <strong>Connection Setup</strong> and click <strong>Connect ECU</strong>.</li>
<li>When the browser permission prompt appears, choose the correct serial device.</li>
<li>Wait for signature detection and page read to complete.</li>
</ol>
<p>If all goes well, VETuner will recognise the ECU, load the matching INI definition, and pull the current configuration from the ECU.</p>
<p><img src="https://vetuner.co.uk/images/initial-dashboard.png" alt="VETuner dashboard after first connection"></p>
<p>If auto-detection does not complete:</p>
<ol>
<li>Confirm ignition is on and ECU has power (and grounds).</li>
<li>Reconnect the cable and try a different USB port.</li>
<li>Close other tuning tools that may already have the serial port open.</li>
<li>Manually load the INI via <strong>Files → Load Manual INI</strong>. (and then email it to <a href="mailto:admin@vetuner.co.uk">admin@vetuner.co.uk</a> so I can add it to the collection)</li>
</ol>
<p>Connection guide with more detail: <a href="https://vetuner.co.uk/connecting/">Connecting to your ECU</a>.</p>
<p><img src="https://vetuner.co.uk/images/start-doctor-offer.png" alt="Offer to switch to Start Doctor when engine is not running"></p>
<h2 id="focus-mode">Focus Mode</h2>
<p>By default, VETuner will run in Focus Mode.  This removes a lot of the &#39;noise&#39; from the user interface of things that you don&#39;t need to get your engine running.  It focusses on the fundamentals of</p>
<ol>
<li>Spark settings</li>
<li>Fuel settings</li>
<li>Cranking and starting settings</li>
</ol>
<p><img src="https://vetuner.co.uk/images/focus-mode-menu.png" alt="Focus Mode sidebar showing curated menu of essential settings">
If those aren&#39;t right, there is no point worrying about VE tuning, acceleration enrichment, boost control, DFCO or all the other things you <em>can</em> tweak; if the engine doesn&#39;t run.  Get the engine running, idling and warm before anything else.</p>
<p>VETuner automatically checks your ECU configuration for common problems when you connect. See the <a href="https://vetuner.co.uk/config-checks/">Configuration Health Check</a> guide for the full list of checks and how to fix them.</p>
<h2 id="start-doctor"><a href="https://vetuner.co.uk/start-doctor/">Start Doctor</a></h2>
<p>The Start Doctor watches what happens as you crank the engine and looks for common problems  -  battery voltage drop, a missing crank signal, implausible sensor readings, electrical noise, ECU reboots, and whether the injector pulse width and ignition advance are in the right ballpark.  It automatically captures and downloads a log file while it runs, so if you get stuck you can share it with others to help diagnose what is going wrong.  Check your Downloads folder afterwards to find it.</p>
<h2 id="it-won39t-start---now-what">It Won&#39;t Start  -  Now What?</h2>
<p>Don&#39;t panic.  It is very normal for an engine not to fire on the first attempt.  Work through the Start Doctor findings one at a time.  Here are the most common culprits:</p>
<ul>
<li><strong>No crank signal</strong>  -  the ECU cannot see the engine turning.  Double-check your trigger wheel sensor wiring, air gap and the trigger angle setting in the firmware.</li>
<li><strong>Wrong trigger pattern</strong>  -  make sure the trigger type, tooth count and missing tooth count match your actual trigger wheel.</li>
<li><strong>Flooded</strong>  -  if you have been cranking a lot without success there may be too much fuel in the cylinders.  Hold the throttle wide open (flood-clear mode) and crank until it clears.  Be aware that when doing this the engine can suddenly start and rev as you&#39;ve got your foot to the floor.  Don&#39;t panic, switch off and revel in the sweet noise you just made.  Bonus points if it is 2am and your neighbour has just got their baby to sleep<sup><a id="footnote-ref-1" href="#footnote-1" data-footnote-ref aria-describedby="footnote-label">1</a></sup></li>
<li><strong>No spark</strong>  -  Remove a spark plug and earth it against the engine, crank and see if it sparks.  A bad coil driver setting or wrong dwell time is a common cause.</li>
<li><strong>No fuel pressure</strong>  -  listen for the fuel pump priming when you turn the key.  If you hear nothing, check the pump fuse and relay first.</li>
<li><strong>Electrical noise</strong>  -  the Start Doctor will flag this if it spots it.  Ignition systems are brutal sources of electrical interference and can corrupt the crank signal, causing misfires or a complete refusal to run.  The most common fixes are a dedicated star-point earth on the ECU, shielded cabling for the crank and cam sensors, and keeping sensor wiring well away from HT leads and coil packs.  Resistor spark plugs and suppressed HT leads are not optional on an EFI conversion  -  if you have straight copper leads or non-resistor plugs, change them.</li>
</ul>
<h2 id="it-started-what-now">It Started! What Now?</h2>
<p>Congratulations  -  that is genuinely exciting.  Now resist the urge to rev it.  Let it idle and watch the gauges in VETuner.</p>
<h3 id="coolant-temperature">Coolant Temperature</h3>
<p>It should be reading something believable.  An implausibly high reading at a cold start usually means the sensor wiring is reversed or the wrong sensor type is selected in the firmware.</p>
<h3 id="idle-speed">Idle Speed</h3>
<p>Is the engine idling at something recognisable as an idle?  Very high idle (above 2000 RPM) can mean a vacuum leak  -  check your hoses again.  Very low and hunting idle usually means the cranking enrichment is bleeding away too quickly or the idle air control valve isn&#39;t set up yet.</p>
<h3 id="afr-lambda">AFR / Lambda</h3>
<p>If you have a wideband O2 sensor connected<sup><a id="footnote-ref-2" href="#footnote-2" data-footnote-ref aria-describedby="footnote-label">2</a></sup>, watch your AFR at idle.  It should be somewhere in the 13–15:1 range.  If it is very lean (above 16:1) the engine will hunt and may stall.  If it is very rich (below 12:1) it will smoke, foul plugs and smell.</p>
<h3 id="oil-pressure">Oil Pressure</h3>
<p>You do have an oil pressure sender, right?  Keep a very close eye on this in the first few minutes of running.  If oil pressure does not come up quickly, shut it down immediately.</p>
<h2 id="warming-up">Warming Up</h2>
<p>Let the engine warm up fully at idle before driving it anywhere.  Watch the coolant temperature rise steadily through 70–90 °C.  While it warms up, notice how the idle changes  -  most engines need progressively less fuel enrichment as they warm up.  VETuner&#39;s Warm-Up Enrichment (WUE) table controls this.</p>
<p>If the idle speed drops and the engine stalls as it warms up, it usually means the afterstart enrichment table is set too aggressively and needs trimming back, or the idle valve needs tuning, or idle advance.</p>
<h2 id="first-drive">First Drive</h2>
<p>Once the engine is warm and idling stably you can take it for a very short, gentle drive  -  no more than 5–10 minutes, staying close to home.</p>
<ol>
<li>Keep RPM modest  -  under 3000 RPM.</li>
<li>Watch for overheating.  The cooling system may have air locks that only clear once the thermostat opens.</li>
<li>Listen for any unusual knocking, rattling or hissing.</li>
<li>If anything seems wrong, pull over and investigate before continuing.</li>
</ol>
<p>After the first drive, let the engine cool down and check under the bonnet for any fresh leaks, loose hoses or flames.</p>
<h2 id="getting-ready-for-ve-tuning">Getting Ready for VE Tuning</h2>
<p>Once you have a warm, stable idle and can drive the car gently without problems, you are ready to start properly tuning the VE (Volumetric Efficiency) table.  This is where VETuner really comes into its own.</p>
<p>The VE table controls how much fuel the ECU injects across all engine speeds and loads.  Getting it right means better power, better economy and a cleaner-running engine.  VETuner can analyse a driving log and suggest corrections to the VE table automatically  -  but that is a topic for the <a href="https://vetuner.co.uk/ve-analysis/">VE Tuning section</a>.</p>
<h2 id="related-guides">Related guides</h2>
<ul>
<li><a href="https://vetuner.co.uk/connecting/">Connecting to Your ECU</a>  -  detailed connection setup and serial troubleshooting.</li>
<li><a href="https://vetuner.co.uk/start-doctor/">Start Doctor</a>  -  guided diagnostics during cranking and early running.</li>
<li><a href="https://vetuner.co.uk/ve-analysis/">VE Analysis</a>  -  next step once idle and warm-up are stable.</li>
</ul>
<section class="footnotes" data-footnotes>
<h2 id="footnote-label" class="sr-only">Footnotes</h2>
<ol>
<li id="footnote-1">
<p>Seriously, do this when you are well rested and sober.  If you are not thinking straight then you will make mistakes and get frustrated.  Walk away and come back another day. <a href="#footnote-ref-1" data-footnote-backref aria-label="Back to reference 1">↩</a></p>
</li>
<li id="footnote-2">
<p>You really should have one.  You are hobbling your ability to get this working without one. <a href="#footnote-ref-2" data-footnote-backref aria-label="Back to reference 2">↩</a></p>
</li>
</ol>
</section>
]]></content:encoded>
    </item>
    <item>
      <title>Configuration Health Check</title>
      <link>https://vetuner.co.uk/config-checks/</link>
      <guid isPermaLink="true">https://vetuner.co.uk/config-checks/</guid>
      <pubDate>Wed, 16 Sep 2026 00:00:00 GMT</pubDate>
      <description><![CDATA[<h1 id="configuration-health-check">Configuration Health Check</h1>
<p>When you connect to your ECU in Focus Mode, VETuner automatically checks your configuration against a set of sanity rules. This catches common setup mistakes before you waste time chasing tuning problems that are really configuration errors.</p>
<h2 id="when-it-runs">When it runs</h2>
<p>The checks run automatically after VETuner has read your ECU&#39;s current settings. You will see one of three outcomes:</p>
<ul>
<li><strong>All clear</strong> — everything looks sane. You carry on without interruption.</li>
<li><strong>Issues found</strong> — the Config Health Wizard opens and walks you through each problem one at a time.</li>
<li><strong>ECU looks unconfigured</strong> — every critical check has failed. VETuner offers to load a tune file rather than fixing dozens of individual values.</li>
</ul>
<h2 id="critical-vs-warning">Critical vs Warning</h2>
<p>Issues are divided into two severity levels:</p>
<p><strong>Critical</strong> — the engine almost certainly will not run until this is fixed. Think cylinder count set to zero, or required fuel at zero.</p>
<p><strong>Warning</strong> — the engine may run but behave poorly or unpredictably: a flat VE table suggesting the ECU has never been calibrated, injector dead time not set, or TPS calibration backwards.</p>
<h2 id="what-happens-when-an-issue-is-found">What happens when an issue is found</h2>
<p>The Config Health Wizard lists every problem and lets you work through them one at a time. Each entry has a description of what is wrong, why it matters, and a <strong>Fix it</strong> button that opens the correct settings dialog. Fix the value, confirm, and the wizard moves on to the next issue.</p>
<p>Once all issues are cleared you are ready to move on to the Start Doctor for your first crank.</p>
<h2 id="related-guides">Related guides</h2>
<ul>
<li><a href="https://vetuner.co.uk/adv-config-checks/">Configuration Health Check Reference</a>  -  the complete list of every check and how to fix each one.</li>
<li><a href="https://vetuner.co.uk/start-your-engines/">Starting Your Engine</a>  -  the full first-start walkthrough.</li>
<li><a href="https://vetuner.co.uk/start-doctor/">Start Doctor</a>  -  diagnose no-start behaviour after your configuration is sane.</li>
</ul>
]]></description>
      <content:encoded><![CDATA[<h1 id="configuration-health-check">Configuration Health Check</h1>
<p>When you connect to your ECU in Focus Mode, VETuner automatically checks your configuration against a set of sanity rules. This catches common setup mistakes before you waste time chasing tuning problems that are really configuration errors.</p>
<h2 id="when-it-runs">When it runs</h2>
<p>The checks run automatically after VETuner has read your ECU&#39;s current settings. You will see one of three outcomes:</p>
<ul>
<li><strong>All clear</strong> — everything looks sane. You carry on without interruption.</li>
<li><strong>Issues found</strong> — the Config Health Wizard opens and walks you through each problem one at a time.</li>
<li><strong>ECU looks unconfigured</strong> — every critical check has failed. VETuner offers to load a tune file rather than fixing dozens of individual values.</li>
</ul>
<h2 id="critical-vs-warning">Critical vs Warning</h2>
<p>Issues are divided into two severity levels:</p>
<p><strong>Critical</strong> — the engine almost certainly will not run until this is fixed. Think cylinder count set to zero, or required fuel at zero.</p>
<p><strong>Warning</strong> — the engine may run but behave poorly or unpredictably: a flat VE table suggesting the ECU has never been calibrated, injector dead time not set, or TPS calibration backwards.</p>
<h2 id="what-happens-when-an-issue-is-found">What happens when an issue is found</h2>
<p>The Config Health Wizard lists every problem and lets you work through them one at a time. Each entry has a description of what is wrong, why it matters, and a <strong>Fix it</strong> button that opens the correct settings dialog. Fix the value, confirm, and the wizard moves on to the next issue.</p>
<p>Once all issues are cleared you are ready to move on to the Start Doctor for your first crank.</p>
<h2 id="related-guides">Related guides</h2>
<ul>
<li><a href="https://vetuner.co.uk/adv-config-checks/">Configuration Health Check Reference</a>  -  the complete list of every check and how to fix each one.</li>
<li><a href="https://vetuner.co.uk/start-your-engines/">Starting Your Engine</a>  -  the full first-start walkthrough.</li>
<li><a href="https://vetuner.co.uk/start-doctor/">Start Doctor</a>  -  diagnose no-start behaviour after your configuration is sane.</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Start Doctor  -  Engine Start Diagnostics</title>
      <link>https://vetuner.co.uk/start-doctor/</link>
      <guid isPermaLink="true">https://vetuner.co.uk/start-doctor/</guid>
      <pubDate>Wed, 16 Sep 2026 00:00:00 GMT</pubDate>
      <description><![CDATA[<h1 id="start-doctor">Start Doctor</h1>
<p>The Start Doctor is a real-time diagnostic tool that watches your ECU data while you crank the engine and automatically checks the most common reasons an engine fails to start. When you stop the consultation it gives you a ranked list of problems to investigate, with direct links to the relevant settings page where appropriate.</p>
<p><img src="https://vetuner.co.uk/images/start-doctor-dashboard.svg" alt="Start Doctor dashboard during a cranking consultation"></p>
<h2 id="opening-the-start-doctor">Opening the Start Doctor</h2>
<p>Open the Start Doctor from the <strong>sidebar → Tools → 🩺 Start Doctor</strong>. The panel is only available when an ECU is connected or a log file is loaded.</p>
<p>The panel layout has four areas:</p>
<ul>
<li><strong>Header bar</strong>  -  title, phase badge (IDLE / CRANKING / RUNNING / FAILED), and the control buttons.</li>
<li><strong>Diagnostic Checks</strong> (left column)  -  twelve cards, one per check, updated as data arrives.</li>
<li><strong>Live Vitals</strong> (right column)  -  ten real-time sparklines showing RPM, battery, MAP, pulse width, AFR, temperatures, TPS, advance, and dwell.</li>
<li><strong>Channel History</strong> (bottom)  -  a 10-second scrolling graph of RPM, battery voltage, MAP, pulse width, and AFR.</li>
</ul>
<h2 id="running-a-consultation">Running a Consultation</h2>
<ol>
<li>Connect to your ECU (or load a log file  -  see <a href="#loading-a-log-file">Loading a Log File</a> below).</li>
<li>Click <strong>▶ Start Consultation</strong>.</li>
<li>Crank the engine as you normally would.</li>
<li>The Start Doctor watches the data and updates the diagnostic cards as it gathers information.</li>
<li>Click <strong>⏹ Stop &amp; Diagnose</strong> when you are done, or let the engine run  -  the Doctor automatically transitions to RUNNING or FAILED when the engine fires or cranking times out (10 seconds).</li>
</ol>
<blockquote>
<p><strong>Auto-recording:</strong> As soon as you click Start Consultation, VETuner automatically begins recording a log file if one is not already in progress. The log is saved to a file when the consultation ends. This means you always have a recording of the diagnostic session to share with others.</p>
</blockquote>
<p><img src="https://vetuner.co.uk/images/start-doctor-running.png" alt="Start Doctor during a cranking consultation"></p>
<h3 id="engine-phases">Engine Phases</h3>
<p>The Doctor tracks which phase the engine is in and adjusts all checks accordingly:</p>
<table>
<thead>
<tr>
<th>Phase</th>
<th>Meaning</th>
</tr>
</thead>
<tbody><tr>
<td><strong>IDLE</strong></td>
<td>Key on, engine not cranking. Battery baseline is captured here.</td>
</tr>
<tr>
<td><strong>CRANKING</strong></td>
<td>Battery voltage dropped ≥ 1.5 V  -  starter motor is engaged. RPM below 400.</td>
</tr>
<tr>
<td><strong>RUNNING</strong></td>
<td>RPM exceeded 400  -  engine has started.</td>
</tr>
<tr>
<td><strong>FAILED</strong></td>
<td>Cranking exceeded 10 seconds without the engine firing.</td>
</tr>
</tbody></table>
<p>Once cranking is detected the phase only moves forward  -  only <strong>↺ Reset</strong> returns to IDLE.</p>
<hr>
<h2 id="diagnostic-cards">Diagnostic Cards</h2>
<p>Each card corresponds to one automated check. The status icons and border colours tell you at a glance what the Doctor has found:</p>
<p><img src="https://vetuner.co.uk/images/start-doctor-cards.svg" alt="Diagnostic cards showing all four status states"></p>
<table>
<thead>
<tr>
<th>Status</th>
<th>Meaning</th>
</tr>
</thead>
<tbody><tr>
<td>⏳ <strong>Pending</strong></td>
<td>Not enough data yet, or the check only applies to a later phase.</td>
</tr>
<tr>
<td>✅ <strong>OK</strong></td>
<td>Channel is within the expected range.</td>
</tr>
<tr>
<td>⚠️ <strong>Warning</strong></td>
<td>Something is outside normal limits but not immediately fatal.</td>
</tr>
<tr>
<td>❌ <strong>Fail</strong></td>
<td>A clear problem that will prevent or impair starting.</td>
</tr>
</tbody></table>
<p>Cards update approximately every five samples (~100 ms at 50 Hz). Hover or tap a card to see its detail text.</p>
<p><img src="https://vetuner.co.uk/images/start-doctor-cards.png" alt="Diagnostic cards showing check results after a consultation"></p>
<hr>
<h2 id="what-the-doctor-checks">What the Doctor Checks</h2>
<h3 id="battery-voltage">Battery Voltage</h3>
<p>Checks battery voltage before and during cranking.</p>
<ul>
<li>Warns if voltage is below 12.0 V before cranking (battery not fully charged).</li>
<li>Warns if cranking voltage drops below 9.5 V  -  borderline for reliable spark and injection.</li>
<li>Fails if cranking voltage drops below 7.0 V  -  almost certain to cause misfires and no-starts.</li>
<li>Advice includes checking the 12 V supply rail that goes live in RUN but is sometimes missing during cranking (a surprisingly common wiring issue).</li>
</ul>
<h3 id="crank-sensor">Crank Sensor</h3>
<p>Checks whether the ECU can see the engine turning.</p>
<ul>
<li>Fails if RPM remains at zero throughout cranking  -  no signal at all.</li>
<li>Warns if RPM is erratic (standard deviation &gt; 150 RPM)  -  check trigger wheel, air gap, and shielding.</li>
<li>Monitors the ECU&#39;s sync-loss counter (<code>synccnt</code> / <code>syncLossCounter</code>)  -  warns at 1+ events, fails at 3+.</li>
<li>Also detects <strong>RPM dropout</strong>  -  RPM briefly falling to zero while other channels remain normal  -  which is the signature of crank-position sync loss even without a dedicated counter.</li>
<li>Monitoring continues into the RUNNING phase; sync losses during running will also be flagged.</li>
</ul>
<h3 id="map-sensor">MAP Sensor</h3>
<p>Checks the manifold air pressure sensor in three phases:</p>
<p><strong>At key-on (IDLE):</strong> MAP should be near atmospheric pressure (typically 85–110 kPa). A reading below 85 kPa suggests a blocked or kinked vacuum reference hose. A reading above 110 kPa is physically impossible on a naturally-aspirated engine at rest and suggests a damaged sensor or incorrect type configuration.</p>
<p><strong>During cranking (CRANKING/FAILED):</strong> The Doctor tracks the minimum MAP seen throughout the cranking attempt. If MAP never drops below 80 kPa after cranking times out, it fails — the intake never built vacuum, which points to large vacuum leaks, a disconnected MAP hose, or very low compression.</p>
<blockquote>
<p>If the throttle is open during cranking (detected from TPS), high MAP is expected, and the check is suppressed to avoid false positives.</p>
</blockquote>
<p><strong>While running (RUNNING):</strong> Checks for a stuck sensor — a variance below 1 kPa² while the engine is running indicates the sensor is disconnected or faulty.</p>
<h3 id="temperature-sensors">Temperature Sensors</h3>
<p>Checks that coolant (CLT) and intake air (IAT) temperatures are within plausible ranges.</p>
<ul>
<li>Warns if readings are outside −20 °C to 150 °C (CLT) or −40 °C to 80 °C (IAT).</li>
<li>Auto-detects °F vs °C: if readings exceed the °C maximum but fall within the °F range, Fahrenheit is assumed and thresholds are adjusted accordingly.</li>
</ul>
<p><strong>Key-on divergence check:</strong> After a cold soak both sensors should read close to ambient. If CLT is below 40 °C and CLT and IAT differ by more than 20 °C, the Doctor warns of a sensor wiring or calibration fault. This check is suppressed when CLT is above 40 °C because the engine was recently run and CLT legitimately diverges from IAT.</p>
<p>Rapid transient spikes on CLT or IAT (a strong indicator of electrical noise or poor wiring) are caught by the Signal Quality check, not by this one.</p>
<h3 id="tps-at-key-on">TPS at Key-On</h3>
<p>Checks throttle position before cranking begins (IDLE phase only). The throttle pedal should be fully released. If TPS is at or above the ECU&#39;s flood-clear threshold when you turn the key, the ECU will cut all injector pulses during the first crank attempt and the engine cannot start.</p>
<ul>
<li>Fails if TPS is at or above the ECU&#39;s flood-clear threshold (read directly from the tune file when available).</li>
<li>Warns if TPS is close to the flood-clear threshold (≥ 80% of it) — a calibration offset or mechanical binding could push it over the threshold during the vibration of cranking.</li>
<li>Warns if TPS reads 50% or higher and the ECU threshold is unknown (tune not loaded) — prompts loading the MSQ to confirm the exact setting.</li>
</ul>
<h3 id="pulse-width">Pulse Width</h3>
<p>Confirms the ECU is actually commanding fuel delivery.</p>
<p><strong>Prime pulse (key-on):</strong> Reads the prime pulse duration from the tune file. If prime pulse is set to 0 ms, warns — a small prime pulse (1–3 ms) wets the intake before the first crank and significantly improves cold-start reliability.</p>
<p><strong>Cranking:</strong></p>
<ul>
<li>Fails if the maximum commanded pulse width throughout cranking is below 0.5 ms — the ECU is not scheduling any fuel. Check injector wiring, fuses, fuel enable settings, cranking enrichment, and prime pulse duration.</li>
<li>Fails if flood clear is active (high TPS cuts injector output — see the TPS at Key-On card for detail).</li>
<li>Warns if cranking PW exceeds 15 ms — dangerously high and risks flooding the engine, especially on repeated failed starts.</li>
<li>Warns if CLT is below freezing (0 °C / 32 °F) and mean cranking PW is below 2.0 ms — cold engines need significantly more fuel; this suggests cold-start enrichment may be disabled or the cold PW table is set too lean.</li>
</ul>
<p><strong>Running:</strong></p>
<ul>
<li>Warns if commanded pulse width is below 0.3 ms — suspiciously low, engine may be lean or injectors inactive.</li>
<li>Warns if pulse width exceeds 20 ms — possible duty-cycle saturation; check fuel pressure and injector sizing.</li>
</ul>
<h3 id="afr">AFR</h3>
<p>Checks the air-fuel ratio from your wideband or narrowband O₂ sensor.</p>
<ul>
<li>Fails if AFR is below 8.0 (extremely rich  -  stuck injector, fuel pressure issue, or sensor fault).</li>
<li>Fails if AFR is above 20.0 (extremely lean  -  potential engine damage from detonation).</li>
<li>Warns at AFR &lt; 10.0 (rich) or &gt; 18.0 (lean).</li>
</ul>
<blockquote>
<p>If the engine never fires and AFR reads rich, the Doctor interprets this as unburnt fuel passing the sensor (normal) and suppresses the AFR symptom so it does not drown out the real problem.</p>
</blockquote>
<h3 id="signal-quality">Signal Quality</h3>
<p>Checks for excessive electrical noise on the battery voltage, MAP, TPS, CLT, and IAT channels using two complementary methods:</p>
<p><strong>Spike detection</strong> (all phases, including cranking): detects large sample-to-sample jumps on any channel that exceed a per-channel threshold. Legitimate cranking changes  -  smooth battery voltage sag, gentle MAP pulsing  -  produce small deltas and do not trigger spikes. Sudden transients caused by bad grounds, poor shielding, or faulty sensor wiring do.</p>
<p><strong>Variance analysis</strong> (idle, running, and failed phases only): warns if the standard deviation of battery voltage exceeds 0.3 V. A settled idle should have rock-steady battery voltage; sustained variance indicates alternator ripple or poor grounds. MAP and TPS are intentionally excluded from this check — both vary naturally with engine load, and genuine noise on those channels is already caught by the spike detector above.</p>
<h3 id="ecu-stability">ECU Stability</h3>
<p>Monitors the ECU&#39;s seconds counter (<code>SecL</code>) to detect unexpected reboots.</p>
<ul>
<li>Warns on the first reboot  -  power supply, grounds, or alternator noise.</li>
<li>Fails on two or more reboots  -  the ECU is crashing repeatedly.</li>
<li>Natural byte-boundary wrap-arounds (255 → 0, 65535 → 0, etc.) are correctly ignored.</li>
</ul>
<h3 id="enrichment">Enrichment</h3>
<p>Checks the ECU&#39;s enrichment strategy (warm-up enrichment, after-start enrichment, air-density correction) that is needed to fire a cold engine.</p>
<ul>
<li>Reads enrichment values from the live data and cross-checks them against the ECU constants from your tune file.</li>
<li>Requires the engine to have entered the RUNNING or FAILED phase before a conclusion is drawn.</li>
</ul>
<h3 id="ignition-advance">Ignition Advance</h3>
<p>Checks that cranking ignition advance is within a sensible range.</p>
<ul>
<li>Fails if peak advance exceeds 25°  -  excessive advance during cranking risks starter kickback and mechanical damage.</li>
<li>Warns if advance exceeds 15°  -  most engines start most reliably between 6° and 10°.</li>
<li>Warns if advance is below 2°  -  too little for reliable ignition.</li>
<li>Warns if dwell is below 0.5 ms  -  coil may not be charging sufficiently for a strong spark.</li>
</ul>
<h3 id="ecu-errors">ECU Errors</h3>
<p>Reads the ECU&#39;s built-in fault code register and flags any active error codes.</p>
<p>Supports two firmware families:</p>
<ul>
<li><strong>Speeduino</strong>: reads the <code>currentError</code> and <code>errorNum</code> output channels. Decodes up to 13 fault codes covering shorted/grounded IAT, CLT, O2, TPS, MAP sensors and out-of-range battery voltage.</li>
<li><strong>MS3</strong>: reads the <code>cel_status</code> bitmask (and <code>cel_status2</code> on newer firmware), covering sensor faults, trigger errors, cam sensor issues, fuel and oil pressure faults, flex sensor, and safety shutdowns.</li>
</ul>
<p>Any active fault code produces a WARN or FAIL (severity follows the fault&#39;s documented impact). When a sensor is in limp-home mode the card shows the substitute value the ECU is using.</p>
<p>This check remains PENDING on firmware families that do not expose a fault code channel (e.g. MS2Extra).</p>
<h3 id="running-phase-analysis">Running Phase Analysis</h3>
<p>Once the engine fires and the Doctor enters the RUNNING phase, three additional checks activate. These are not shown as separate cards but do appear in the Diagnosis overlay when issues are found.</p>
<p><strong>Idle RPM Stability:</strong> Collects RPM samples during idle conditions (TPS at 0%, RPM between 400 and 1500) and calculates the coefficient of variation (CV = stddev / mean). A CV above 5% produces a Warning (mildly unsteady); above 10% produces a Fail (rough idle). Suggests checking vacuum leaks, IAC control settings, warmup enrichment, and idle ignition correction.</p>
<p><strong>Idle AFR Accuracy:</strong> Compares mean idle AFR against the programmed target from the tune file. Warns at ±1.0 AFR units deviation from target; fails at ±2.0 AFR units deviation. If no target data is available, evaluates against the rich/lean warning thresholds instead.</p>
<p><strong>Post-Throttle RPM Stability:</strong> Watches RPM in the 3 seconds after the throttle closes from an open position. An RPM drop greater than 250 RPM produces a Warning; a drop greater than 400 RPM or RPM falling below 600 produces a Fail (near-stall). Reads DFCO configuration and IAC type from the tune file to give specific advice about re-engage RPM, fuel cut settings, and IAC idle-up.</p>
<hr>
<h2 id="the-diagnosis">The Diagnosis</h2>
<p>When the consultation ends (you press Stop, the engine starts, or cranking times out), the Diagnosis overlay appears automatically.</p>
<p><img src="https://vetuner.co.uk/images/start-doctor-diagnosis.png" alt="Diagnosis overlay showing ranked problems with severity badges"></p>
<p>The overlay shows:</p>
<ul>
<li>A <strong>summary line</strong>  -  &quot;All clear&quot; or the number of problems found.</li>
<li>Up to <strong>three ranked problems</strong>, each with:<ul>
<li>A severity badge (🔴 Critical / 🟡 Warning).</li>
<li>A type badge  -  ⚙️ <strong>Configuration</strong> (fixable in the app) or 🔧 <strong>Physical</strong> (wiring / hardware).</li>
<li>The problem title and the detail message from the diagnostic card.</li>
<li>Advice text in italic.</li>
<li>For configuration problems, a <strong>Open [Settings] →</strong> button that navigates directly to the relevant settings dialog.</li>
</ul>
</li>
<li>A footer note if more than three issues were found.</li>
</ul>
<h3 id="how-problems-are-ranked">How problems are ranked</h3>
<p>The Doctor uses a heuristic expert system that reasons about cause and effect:</p>
<ul>
<li><strong>Root causes are promoted</strong> to the top. If the pulse width check fails (ECU not commanding fuel), that is ranked above a lean AFR reading, because the lean condition is a <em>consequence</em> of the missing fuel command, not an independent problem.</li>
<li><strong>Downstream consequences are suppressed</strong> to avoid noise. A rich AFR when the engine never fired is expected (unburnt fuel passing the sensor) and is filtered out unless it persists after firing.</li>
<li><strong>ECU reboots</strong> are always raised to highest priority  -  an unstable ECU makes every other check unreliable.</li>
<li><strong>Stall patterns</strong> influence enrichment diagnosis: a stall within three seconds of starting points straight at after-start enrichment (ASE); a stall within thirty seconds points to warmup enrichment (WUE).</li>
</ul>
<h3 id="stall-pattern-classification">Stall pattern classification</h3>
<p>If the engine starts and then stalls, the Doctor classifies the stall:</p>
<table>
<thead>
<tr>
<th>Pattern</th>
<th>Stall after</th>
<th>Most likely cause</th>
</tr>
</thead>
<tbody><tr>
<td>Immediate</td>
<td>&lt; 3 seconds</td>
<td>After-start enrichment (ASE) too low or tapering too fast</td>
</tr>
<tr>
<td>Warmup</td>
<td>3 – 30 seconds</td>
<td>Warmup enrichment (WUE) insufficient at current temperature</td>
</tr>
<tr>
<td>Running</td>
<td>&gt; 30 seconds</td>
<td>Fuelling or ignition issue at the operating point</td>
</tr>
</tbody></table>
<hr>
<h2 id="threshold-overrides">Threshold Overrides</h2>
<p>Advanced users can adjust the thresholds used by each check. Click <strong>⚙️ Thresholds</strong> in the header to open the drawer.</p>
<p><img src="https://vetuner.co.uk/images/start-doctor-thresholds.svg" alt="Threshold override drawer showing all configurable groups"></p>
<p>Thresholds are organised into nine groups  -  Battery, Crank Sensor, MAP Sensor, Temperatures, Signal Noise, Pulse Width, AFR, Ignition, and Stall Detection.</p>
<ul>
<li><strong>Modified values</strong> are highlighted with an amber border so you can see at a glance what has been changed.</li>
<li>Changes apply immediately to the running consultation.</li>
<li>Values are saved to <code>localStorage</code> under <code>startDoctor_thresholdOverrides</code> and persist across sessions.</li>
<li>Click <strong>↺ Defaults</strong> to restore all thresholds to the built-in values.</li>
</ul>
<p>Overrides survive <strong>↺ Reset</strong>  -  they are configuration, not session state.</p>
<hr>
<h2 id="loading-a-log-file">Loading a Log File</h2>
<p>You do not need a live ECU connection to use the Start Doctor. Click <strong>Load Log</strong> (in the Start Doctor header bar) to load a previously recorded log file (MLG, MSL+MSQ, or JSON recording). VETuner replays the log through the same Start Doctor engine, giving you a full analysis of a past cranking attempt.</p>
<blockquote>
<p><strong>VETuner Pro required.</strong> Loading a previously saved log file is a VETuner Pro feature. Upgrade to VETuner Pro to unlock log file analysis.</p>
</blockquote>
<p>This is useful for:</p>
<ul>
<li>Diagnosing a friend&#39;s engine based on a log they have sent you.</li>
<li>Comparing before-and-after logs after making a change.</li>
<li>Getting a diagnosis on a log file captured on the dyno or during a road session.</li>
</ul>
<hr>
<h2 id="tips">Tips</h2>
<ul>
<li><strong>Record multiple attempts.</strong> The Doctor analyses one cranking event per consultation, but you can load the same log file multiple times to examine different attempts within it, or load separate recordings.</li>
<li><strong>Share the auto-captured log.</strong> Every consultation automatically creates a log file. If you cannot diagnose the problem yourself, share that file with someone else who can load it in VETuner.</li>
<li><strong>Check battery first.</strong> A low battery affects almost every other check. A fully charged battery (12.6 V resting) eliminates one of the most common no-start causes before you investigate anything else.</li>
<li><strong>Cranking advance matters.</strong> Many people tune the running advance tables carefully and ignore the cranking advance. If the Ignition card warns about high advance, lowering the cranking advance to 8°–10° is a quick win.</li>
<li><strong>Trust the suppression.</strong> If you see only one or two problems after a complicated-looking crank, the Doctor has already filtered out the downstream noise  -  focus on what the Diagnosis actually highlights.</li>
</ul>
<hr>
<h2 id="related-guides">Related guides</h2>
<ul>
<li><a href="https://vetuner.co.uk/start-your-engines/">Starting Your Engine</a>  -  first-time starting checklist and guidance</li>
<li><a href="https://vetuner.co.uk/connecting/">Connecting to Your ECU</a>  -  setting up a live ECU connection</li>
<li><a href="https://vetuner.co.uk/ve-analysis/">VE Analysis</a>  -  automated VE table correction once the engine is running reliably</li>
<li><a href="https://vetuner.co.uk/tuning/">Editing Tuning Tables</a>  -  apply and persist the configuration changes identified by diagnosis</li>
</ul>
]]></description>
      <content:encoded><![CDATA[<h1 id="start-doctor">Start Doctor</h1>
<p>The Start Doctor is a real-time diagnostic tool that watches your ECU data while you crank the engine and automatically checks the most common reasons an engine fails to start. When you stop the consultation it gives you a ranked list of problems to investigate, with direct links to the relevant settings page where appropriate.</p>
<p><img src="https://vetuner.co.uk/images/start-doctor-dashboard.svg" alt="Start Doctor dashboard during a cranking consultation"></p>
<h2 id="opening-the-start-doctor">Opening the Start Doctor</h2>
<p>Open the Start Doctor from the <strong>sidebar → Tools → 🩺 Start Doctor</strong>. The panel is only available when an ECU is connected or a log file is loaded.</p>
<p>The panel layout has four areas:</p>
<ul>
<li><strong>Header bar</strong>  -  title, phase badge (IDLE / CRANKING / RUNNING / FAILED), and the control buttons.</li>
<li><strong>Diagnostic Checks</strong> (left column)  -  twelve cards, one per check, updated as data arrives.</li>
<li><strong>Live Vitals</strong> (right column)  -  ten real-time sparklines showing RPM, battery, MAP, pulse width, AFR, temperatures, TPS, advance, and dwell.</li>
<li><strong>Channel History</strong> (bottom)  -  a 10-second scrolling graph of RPM, battery voltage, MAP, pulse width, and AFR.</li>
</ul>
<h2 id="running-a-consultation">Running a Consultation</h2>
<ol>
<li>Connect to your ECU (or load a log file  -  see <a href="#loading-a-log-file">Loading a Log File</a> below).</li>
<li>Click <strong>▶ Start Consultation</strong>.</li>
<li>Crank the engine as you normally would.</li>
<li>The Start Doctor watches the data and updates the diagnostic cards as it gathers information.</li>
<li>Click <strong>⏹ Stop &amp; Diagnose</strong> when you are done, or let the engine run  -  the Doctor automatically transitions to RUNNING or FAILED when the engine fires or cranking times out (10 seconds).</li>
</ol>
<blockquote>
<p><strong>Auto-recording:</strong> As soon as you click Start Consultation, VETuner automatically begins recording a log file if one is not already in progress. The log is saved to a file when the consultation ends. This means you always have a recording of the diagnostic session to share with others.</p>
</blockquote>
<p><img src="https://vetuner.co.uk/images/start-doctor-running.png" alt="Start Doctor during a cranking consultation"></p>
<h3 id="engine-phases">Engine Phases</h3>
<p>The Doctor tracks which phase the engine is in and adjusts all checks accordingly:</p>
<table>
<thead>
<tr>
<th>Phase</th>
<th>Meaning</th>
</tr>
</thead>
<tbody><tr>
<td><strong>IDLE</strong></td>
<td>Key on, engine not cranking. Battery baseline is captured here.</td>
</tr>
<tr>
<td><strong>CRANKING</strong></td>
<td>Battery voltage dropped ≥ 1.5 V  -  starter motor is engaged. RPM below 400.</td>
</tr>
<tr>
<td><strong>RUNNING</strong></td>
<td>RPM exceeded 400  -  engine has started.</td>
</tr>
<tr>
<td><strong>FAILED</strong></td>
<td>Cranking exceeded 10 seconds without the engine firing.</td>
</tr>
</tbody></table>
<p>Once cranking is detected the phase only moves forward  -  only <strong>↺ Reset</strong> returns to IDLE.</p>
<hr>
<h2 id="diagnostic-cards">Diagnostic Cards</h2>
<p>Each card corresponds to one automated check. The status icons and border colours tell you at a glance what the Doctor has found:</p>
<p><img src="https://vetuner.co.uk/images/start-doctor-cards.svg" alt="Diagnostic cards showing all four status states"></p>
<table>
<thead>
<tr>
<th>Status</th>
<th>Meaning</th>
</tr>
</thead>
<tbody><tr>
<td>⏳ <strong>Pending</strong></td>
<td>Not enough data yet, or the check only applies to a later phase.</td>
</tr>
<tr>
<td>✅ <strong>OK</strong></td>
<td>Channel is within the expected range.</td>
</tr>
<tr>
<td>⚠️ <strong>Warning</strong></td>
<td>Something is outside normal limits but not immediately fatal.</td>
</tr>
<tr>
<td>❌ <strong>Fail</strong></td>
<td>A clear problem that will prevent or impair starting.</td>
</tr>
</tbody></table>
<p>Cards update approximately every five samples (~100 ms at 50 Hz). Hover or tap a card to see its detail text.</p>
<p><img src="https://vetuner.co.uk/images/start-doctor-cards.png" alt="Diagnostic cards showing check results after a consultation"></p>
<hr>
<h2 id="what-the-doctor-checks">What the Doctor Checks</h2>
<h3 id="battery-voltage">Battery Voltage</h3>
<p>Checks battery voltage before and during cranking.</p>
<ul>
<li>Warns if voltage is below 12.0 V before cranking (battery not fully charged).</li>
<li>Warns if cranking voltage drops below 9.5 V  -  borderline for reliable spark and injection.</li>
<li>Fails if cranking voltage drops below 7.0 V  -  almost certain to cause misfires and no-starts.</li>
<li>Advice includes checking the 12 V supply rail that goes live in RUN but is sometimes missing during cranking (a surprisingly common wiring issue).</li>
</ul>
<h3 id="crank-sensor">Crank Sensor</h3>
<p>Checks whether the ECU can see the engine turning.</p>
<ul>
<li>Fails if RPM remains at zero throughout cranking  -  no signal at all.</li>
<li>Warns if RPM is erratic (standard deviation &gt; 150 RPM)  -  check trigger wheel, air gap, and shielding.</li>
<li>Monitors the ECU&#39;s sync-loss counter (<code>synccnt</code> / <code>syncLossCounter</code>)  -  warns at 1+ events, fails at 3+.</li>
<li>Also detects <strong>RPM dropout</strong>  -  RPM briefly falling to zero while other channels remain normal  -  which is the signature of crank-position sync loss even without a dedicated counter.</li>
<li>Monitoring continues into the RUNNING phase; sync losses during running will also be flagged.</li>
</ul>
<h3 id="map-sensor">MAP Sensor</h3>
<p>Checks the manifold air pressure sensor in three phases:</p>
<p><strong>At key-on (IDLE):</strong> MAP should be near atmospheric pressure (typically 85–110 kPa). A reading below 85 kPa suggests a blocked or kinked vacuum reference hose. A reading above 110 kPa is physically impossible on a naturally-aspirated engine at rest and suggests a damaged sensor or incorrect type configuration.</p>
<p><strong>During cranking (CRANKING/FAILED):</strong> The Doctor tracks the minimum MAP seen throughout the cranking attempt. If MAP never drops below 80 kPa after cranking times out, it fails — the intake never built vacuum, which points to large vacuum leaks, a disconnected MAP hose, or very low compression.</p>
<blockquote>
<p>If the throttle is open during cranking (detected from TPS), high MAP is expected, and the check is suppressed to avoid false positives.</p>
</blockquote>
<p><strong>While running (RUNNING):</strong> Checks for a stuck sensor — a variance below 1 kPa² while the engine is running indicates the sensor is disconnected or faulty.</p>
<h3 id="temperature-sensors">Temperature Sensors</h3>
<p>Checks that coolant (CLT) and intake air (IAT) temperatures are within plausible ranges.</p>
<ul>
<li>Warns if readings are outside −20 °C to 150 °C (CLT) or −40 °C to 80 °C (IAT).</li>
<li>Auto-detects °F vs °C: if readings exceed the °C maximum but fall within the °F range, Fahrenheit is assumed and thresholds are adjusted accordingly.</li>
</ul>
<p><strong>Key-on divergence check:</strong> After a cold soak both sensors should read close to ambient. If CLT is below 40 °C and CLT and IAT differ by more than 20 °C, the Doctor warns of a sensor wiring or calibration fault. This check is suppressed when CLT is above 40 °C because the engine was recently run and CLT legitimately diverges from IAT.</p>
<p>Rapid transient spikes on CLT or IAT (a strong indicator of electrical noise or poor wiring) are caught by the Signal Quality check, not by this one.</p>
<h3 id="tps-at-key-on">TPS at Key-On</h3>
<p>Checks throttle position before cranking begins (IDLE phase only). The throttle pedal should be fully released. If TPS is at or above the ECU&#39;s flood-clear threshold when you turn the key, the ECU will cut all injector pulses during the first crank attempt and the engine cannot start.</p>
<ul>
<li>Fails if TPS is at or above the ECU&#39;s flood-clear threshold (read directly from the tune file when available).</li>
<li>Warns if TPS is close to the flood-clear threshold (≥ 80% of it) — a calibration offset or mechanical binding could push it over the threshold during the vibration of cranking.</li>
<li>Warns if TPS reads 50% or higher and the ECU threshold is unknown (tune not loaded) — prompts loading the MSQ to confirm the exact setting.</li>
</ul>
<h3 id="pulse-width">Pulse Width</h3>
<p>Confirms the ECU is actually commanding fuel delivery.</p>
<p><strong>Prime pulse (key-on):</strong> Reads the prime pulse duration from the tune file. If prime pulse is set to 0 ms, warns — a small prime pulse (1–3 ms) wets the intake before the first crank and significantly improves cold-start reliability.</p>
<p><strong>Cranking:</strong></p>
<ul>
<li>Fails if the maximum commanded pulse width throughout cranking is below 0.5 ms — the ECU is not scheduling any fuel. Check injector wiring, fuses, fuel enable settings, cranking enrichment, and prime pulse duration.</li>
<li>Fails if flood clear is active (high TPS cuts injector output — see the TPS at Key-On card for detail).</li>
<li>Warns if cranking PW exceeds 15 ms — dangerously high and risks flooding the engine, especially on repeated failed starts.</li>
<li>Warns if CLT is below freezing (0 °C / 32 °F) and mean cranking PW is below 2.0 ms — cold engines need significantly more fuel; this suggests cold-start enrichment may be disabled or the cold PW table is set too lean.</li>
</ul>
<p><strong>Running:</strong></p>
<ul>
<li>Warns if commanded pulse width is below 0.3 ms — suspiciously low, engine may be lean or injectors inactive.</li>
<li>Warns if pulse width exceeds 20 ms — possible duty-cycle saturation; check fuel pressure and injector sizing.</li>
</ul>
<h3 id="afr">AFR</h3>
<p>Checks the air-fuel ratio from your wideband or narrowband O₂ sensor.</p>
<ul>
<li>Fails if AFR is below 8.0 (extremely rich  -  stuck injector, fuel pressure issue, or sensor fault).</li>
<li>Fails if AFR is above 20.0 (extremely lean  -  potential engine damage from detonation).</li>
<li>Warns at AFR &lt; 10.0 (rich) or &gt; 18.0 (lean).</li>
</ul>
<blockquote>
<p>If the engine never fires and AFR reads rich, the Doctor interprets this as unburnt fuel passing the sensor (normal) and suppresses the AFR symptom so it does not drown out the real problem.</p>
</blockquote>
<h3 id="signal-quality">Signal Quality</h3>
<p>Checks for excessive electrical noise on the battery voltage, MAP, TPS, CLT, and IAT channels using two complementary methods:</p>
<p><strong>Spike detection</strong> (all phases, including cranking): detects large sample-to-sample jumps on any channel that exceed a per-channel threshold. Legitimate cranking changes  -  smooth battery voltage sag, gentle MAP pulsing  -  produce small deltas and do not trigger spikes. Sudden transients caused by bad grounds, poor shielding, or faulty sensor wiring do.</p>
<p><strong>Variance analysis</strong> (idle, running, and failed phases only): warns if the standard deviation of battery voltage exceeds 0.3 V. A settled idle should have rock-steady battery voltage; sustained variance indicates alternator ripple or poor grounds. MAP and TPS are intentionally excluded from this check — both vary naturally with engine load, and genuine noise on those channels is already caught by the spike detector above.</p>
<h3 id="ecu-stability">ECU Stability</h3>
<p>Monitors the ECU&#39;s seconds counter (<code>SecL</code>) to detect unexpected reboots.</p>
<ul>
<li>Warns on the first reboot  -  power supply, grounds, or alternator noise.</li>
<li>Fails on two or more reboots  -  the ECU is crashing repeatedly.</li>
<li>Natural byte-boundary wrap-arounds (255 → 0, 65535 → 0, etc.) are correctly ignored.</li>
</ul>
<h3 id="enrichment">Enrichment</h3>
<p>Checks the ECU&#39;s enrichment strategy (warm-up enrichment, after-start enrichment, air-density correction) that is needed to fire a cold engine.</p>
<ul>
<li>Reads enrichment values from the live data and cross-checks them against the ECU constants from your tune file.</li>
<li>Requires the engine to have entered the RUNNING or FAILED phase before a conclusion is drawn.</li>
</ul>
<h3 id="ignition-advance">Ignition Advance</h3>
<p>Checks that cranking ignition advance is within a sensible range.</p>
<ul>
<li>Fails if peak advance exceeds 25°  -  excessive advance during cranking risks starter kickback and mechanical damage.</li>
<li>Warns if advance exceeds 15°  -  most engines start most reliably between 6° and 10°.</li>
<li>Warns if advance is below 2°  -  too little for reliable ignition.</li>
<li>Warns if dwell is below 0.5 ms  -  coil may not be charging sufficiently for a strong spark.</li>
</ul>
<h3 id="ecu-errors">ECU Errors</h3>
<p>Reads the ECU&#39;s built-in fault code register and flags any active error codes.</p>
<p>Supports two firmware families:</p>
<ul>
<li><strong>Speeduino</strong>: reads the <code>currentError</code> and <code>errorNum</code> output channels. Decodes up to 13 fault codes covering shorted/grounded IAT, CLT, O2, TPS, MAP sensors and out-of-range battery voltage.</li>
<li><strong>MS3</strong>: reads the <code>cel_status</code> bitmask (and <code>cel_status2</code> on newer firmware), covering sensor faults, trigger errors, cam sensor issues, fuel and oil pressure faults, flex sensor, and safety shutdowns.</li>
</ul>
<p>Any active fault code produces a WARN or FAIL (severity follows the fault&#39;s documented impact). When a sensor is in limp-home mode the card shows the substitute value the ECU is using.</p>
<p>This check remains PENDING on firmware families that do not expose a fault code channel (e.g. MS2Extra).</p>
<h3 id="running-phase-analysis">Running Phase Analysis</h3>
<p>Once the engine fires and the Doctor enters the RUNNING phase, three additional checks activate. These are not shown as separate cards but do appear in the Diagnosis overlay when issues are found.</p>
<p><strong>Idle RPM Stability:</strong> Collects RPM samples during idle conditions (TPS at 0%, RPM between 400 and 1500) and calculates the coefficient of variation (CV = stddev / mean). A CV above 5% produces a Warning (mildly unsteady); above 10% produces a Fail (rough idle). Suggests checking vacuum leaks, IAC control settings, warmup enrichment, and idle ignition correction.</p>
<p><strong>Idle AFR Accuracy:</strong> Compares mean idle AFR against the programmed target from the tune file. Warns at ±1.0 AFR units deviation from target; fails at ±2.0 AFR units deviation. If no target data is available, evaluates against the rich/lean warning thresholds instead.</p>
<p><strong>Post-Throttle RPM Stability:</strong> Watches RPM in the 3 seconds after the throttle closes from an open position. An RPM drop greater than 250 RPM produces a Warning; a drop greater than 400 RPM or RPM falling below 600 produces a Fail (near-stall). Reads DFCO configuration and IAC type from the tune file to give specific advice about re-engage RPM, fuel cut settings, and IAC idle-up.</p>
<hr>
<h2 id="the-diagnosis">The Diagnosis</h2>
<p>When the consultation ends (you press Stop, the engine starts, or cranking times out), the Diagnosis overlay appears automatically.</p>
<p><img src="https://vetuner.co.uk/images/start-doctor-diagnosis.png" alt="Diagnosis overlay showing ranked problems with severity badges"></p>
<p>The overlay shows:</p>
<ul>
<li>A <strong>summary line</strong>  -  &quot;All clear&quot; or the number of problems found.</li>
<li>Up to <strong>three ranked problems</strong>, each with:<ul>
<li>A severity badge (🔴 Critical / 🟡 Warning).</li>
<li>A type badge  -  ⚙️ <strong>Configuration</strong> (fixable in the app) or 🔧 <strong>Physical</strong> (wiring / hardware).</li>
<li>The problem title and the detail message from the diagnostic card.</li>
<li>Advice text in italic.</li>
<li>For configuration problems, a <strong>Open [Settings] →</strong> button that navigates directly to the relevant settings dialog.</li>
</ul>
</li>
<li>A footer note if more than three issues were found.</li>
</ul>
<h3 id="how-problems-are-ranked">How problems are ranked</h3>
<p>The Doctor uses a heuristic expert system that reasons about cause and effect:</p>
<ul>
<li><strong>Root causes are promoted</strong> to the top. If the pulse width check fails (ECU not commanding fuel), that is ranked above a lean AFR reading, because the lean condition is a <em>consequence</em> of the missing fuel command, not an independent problem.</li>
<li><strong>Downstream consequences are suppressed</strong> to avoid noise. A rich AFR when the engine never fired is expected (unburnt fuel passing the sensor) and is filtered out unless it persists after firing.</li>
<li><strong>ECU reboots</strong> are always raised to highest priority  -  an unstable ECU makes every other check unreliable.</li>
<li><strong>Stall patterns</strong> influence enrichment diagnosis: a stall within three seconds of starting points straight at after-start enrichment (ASE); a stall within thirty seconds points to warmup enrichment (WUE).</li>
</ul>
<h3 id="stall-pattern-classification">Stall pattern classification</h3>
<p>If the engine starts and then stalls, the Doctor classifies the stall:</p>
<table>
<thead>
<tr>
<th>Pattern</th>
<th>Stall after</th>
<th>Most likely cause</th>
</tr>
</thead>
<tbody><tr>
<td>Immediate</td>
<td>&lt; 3 seconds</td>
<td>After-start enrichment (ASE) too low or tapering too fast</td>
</tr>
<tr>
<td>Warmup</td>
<td>3 – 30 seconds</td>
<td>Warmup enrichment (WUE) insufficient at current temperature</td>
</tr>
<tr>
<td>Running</td>
<td>&gt; 30 seconds</td>
<td>Fuelling or ignition issue at the operating point</td>
</tr>
</tbody></table>
<hr>
<h2 id="threshold-overrides">Threshold Overrides</h2>
<p>Advanced users can adjust the thresholds used by each check. Click <strong>⚙️ Thresholds</strong> in the header to open the drawer.</p>
<p><img src="https://vetuner.co.uk/images/start-doctor-thresholds.svg" alt="Threshold override drawer showing all configurable groups"></p>
<p>Thresholds are organised into nine groups  -  Battery, Crank Sensor, MAP Sensor, Temperatures, Signal Noise, Pulse Width, AFR, Ignition, and Stall Detection.</p>
<ul>
<li><strong>Modified values</strong> are highlighted with an amber border so you can see at a glance what has been changed.</li>
<li>Changes apply immediately to the running consultation.</li>
<li>Values are saved to <code>localStorage</code> under <code>startDoctor_thresholdOverrides</code> and persist across sessions.</li>
<li>Click <strong>↺ Defaults</strong> to restore all thresholds to the built-in values.</li>
</ul>
<p>Overrides survive <strong>↺ Reset</strong>  -  they are configuration, not session state.</p>
<hr>
<h2 id="loading-a-log-file">Loading a Log File</h2>
<p>You do not need a live ECU connection to use the Start Doctor. Click <strong>Load Log</strong> (in the Start Doctor header bar) to load a previously recorded log file (MLG, MSL+MSQ, or JSON recording). VETuner replays the log through the same Start Doctor engine, giving you a full analysis of a past cranking attempt.</p>
<blockquote>
<p><strong>VETuner Pro required.</strong> Loading a previously saved log file is a VETuner Pro feature. Upgrade to VETuner Pro to unlock log file analysis.</p>
</blockquote>
<p>This is useful for:</p>
<ul>
<li>Diagnosing a friend&#39;s engine based on a log they have sent you.</li>
<li>Comparing before-and-after logs after making a change.</li>
<li>Getting a diagnosis on a log file captured on the dyno or during a road session.</li>
</ul>
<hr>
<h2 id="tips">Tips</h2>
<ul>
<li><strong>Record multiple attempts.</strong> The Doctor analyses one cranking event per consultation, but you can load the same log file multiple times to examine different attempts within it, or load separate recordings.</li>
<li><strong>Share the auto-captured log.</strong> Every consultation automatically creates a log file. If you cannot diagnose the problem yourself, share that file with someone else who can load it in VETuner.</li>
<li><strong>Check battery first.</strong> A low battery affects almost every other check. A fully charged battery (12.6 V resting) eliminates one of the most common no-start causes before you investigate anything else.</li>
<li><strong>Cranking advance matters.</strong> Many people tune the running advance tables carefully and ignore the cranking advance. If the Ignition card warns about high advance, lowering the cranking advance to 8°–10° is a quick win.</li>
<li><strong>Trust the suppression.</strong> If you see only one or two problems after a complicated-looking crank, the Doctor has already filtered out the downstream noise  -  focus on what the Diagnosis actually highlights.</li>
</ul>
<hr>
<h2 id="related-guides">Related guides</h2>
<ul>
<li><a href="https://vetuner.co.uk/start-your-engines/">Starting Your Engine</a>  -  first-time starting checklist and guidance</li>
<li><a href="https://vetuner.co.uk/connecting/">Connecting to Your ECU</a>  -  setting up a live ECU connection</li>
<li><a href="https://vetuner.co.uk/ve-analysis/">VE Analysis</a>  -  automated VE table correction once the engine is running reliably</li>
<li><a href="https://vetuner.co.uk/tuning/">Editing Tuning Tables</a>  -  apply and persist the configuration changes identified by diagnosis</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Editing Tuning Tables</title>
      <link>https://vetuner.co.uk/tuning/</link>
      <guid isPermaLink="true">https://vetuner.co.uk/tuning/</guid>
      <pubDate>Wed, 16 Sep 2026 00:00:00 GMT</pubDate>
      <description><![CDATA[<h1 id="editing-tuning-tables">Editing Tuning Tables</h1>
<h2 id="opening-a-table-or-curve">Opening a table or curve</h2>
<p>Tuning tables and curves are accessed through the <strong>Configuration</strong> section of the sidebar.  The menus are generated from the ECU definition file, so the exact layout depends on your ECU.</p>
<p>Common tables include:</p>
<ul>
<li><strong>VE Table</strong>  -  volumetric efficiency by RPM and load (the main fuelling map)</li>
<li><strong>Ignition Advance</strong>  -  timing by RPM and load</li>
<li><strong>AFR Targets</strong>  -  target air-fuel ratio by RPM and load</li>
<li><strong>Cranking Enrichment</strong>, <strong>Warmup Enrichment</strong>, <strong>Accel Enrichment</strong>  -  transient corrections</li>
</ul>
<h2 id="editing-cells">Editing cells</h2>
<p>Click any cell to select it.  Drag across cells to select a rectangle.  Hold <strong>Ctrl</strong> or <strong>Shift</strong> while clicking or dragging to add to the current selection without clearing it.</p>
<p>Once cells are selected, use the toolbar buttons above the table:</p>
<ul>
<li><strong>+</strong> / <strong>−</strong>  -  increment or decrement all selected cells by 1</li>
<li><strong>=</strong>  -  set all selected cells to a specific value (prompts for the number)</li>
<li><strong>S</strong>  -  smooth the selected area using a 5-point average</li>
<li><strong>I</strong>  -  bilinearly interpolate the selected area between its corner values</li>
</ul>
<p>If no cells are selected, <strong>+</strong>, <strong>−</strong>, and <strong>=</strong> apply to the entire table.</p>
<p>The heat map colour coding updates as you edit, giving immediate visual feedback.</p>
<h2 id="burning-to-the-ecu">Burning to the ECU</h2>
<p>Any change you make in the table editor is held in memory.  To write changes to ECU flash memory, click <strong>Burn to ECU</strong> in the sidebar.  Burning is required for changes to persist after the ECU is powered off.</p>
<blockquote>
<p><strong>Warning:</strong> burning writes to non-volatile flash.  Always keep a backup MSQ file before making significant changes.</p>
</blockquote>
<h2 id="saving-to-a-file">Saving to a file</h2>
<p>Use <strong>Files → Download MSQ</strong> to export the current tune as an MSQ file.  MSQ files are compatible with TunerStudio and other MegaSquirt tools.</p>
<h2 id="undo">Undo</h2>
<p>Any edits made since the table was opened can be reverted with the <strong>Undo</strong> button in the table header.  A confirmation dialog prevents accidental reverts.  This is a single-level undo — it reverts to the state the table was in when it was opened, not to individual cell changes.</p>
<h2 id="related-guides">Related guides</h2>
<ul>
<li><a href="https://vetuner.co.uk/ve-analysis/">VE Analysis</a>  -  generate statistically-based VE corrections from driving data.</li>
<li><a href="https://vetuner.co.uk/adv-data-logging/">Data Logging for VE Analysis</a>  -  collect cleaner logs for better correction quality.</li>
<li><a href="https://vetuner.co.uk/adv-fuel-equation/">The Fuel Equation</a>  -  understand how table values affect pulse width.</li>
</ul>
]]></description>
      <content:encoded><![CDATA[<h1 id="editing-tuning-tables">Editing Tuning Tables</h1>
<h2 id="opening-a-table-or-curve">Opening a table or curve</h2>
<p>Tuning tables and curves are accessed through the <strong>Configuration</strong> section of the sidebar.  The menus are generated from the ECU definition file, so the exact layout depends on your ECU.</p>
<p>Common tables include:</p>
<ul>
<li><strong>VE Table</strong>  -  volumetric efficiency by RPM and load (the main fuelling map)</li>
<li><strong>Ignition Advance</strong>  -  timing by RPM and load</li>
<li><strong>AFR Targets</strong>  -  target air-fuel ratio by RPM and load</li>
<li><strong>Cranking Enrichment</strong>, <strong>Warmup Enrichment</strong>, <strong>Accel Enrichment</strong>  -  transient corrections</li>
</ul>
<h2 id="editing-cells">Editing cells</h2>
<p>Click any cell to select it.  Drag across cells to select a rectangle.  Hold <strong>Ctrl</strong> or <strong>Shift</strong> while clicking or dragging to add to the current selection without clearing it.</p>
<p>Once cells are selected, use the toolbar buttons above the table:</p>
<ul>
<li><strong>+</strong> / <strong>−</strong>  -  increment or decrement all selected cells by 1</li>
<li><strong>=</strong>  -  set all selected cells to a specific value (prompts for the number)</li>
<li><strong>S</strong>  -  smooth the selected area using a 5-point average</li>
<li><strong>I</strong>  -  bilinearly interpolate the selected area between its corner values</li>
</ul>
<p>If no cells are selected, <strong>+</strong>, <strong>−</strong>, and <strong>=</strong> apply to the entire table.</p>
<p>The heat map colour coding updates as you edit, giving immediate visual feedback.</p>
<h2 id="burning-to-the-ecu">Burning to the ECU</h2>
<p>Any change you make in the table editor is held in memory.  To write changes to ECU flash memory, click <strong>Burn to ECU</strong> in the sidebar.  Burning is required for changes to persist after the ECU is powered off.</p>
<blockquote>
<p><strong>Warning:</strong> burning writes to non-volatile flash.  Always keep a backup MSQ file before making significant changes.</p>
</blockquote>
<h2 id="saving-to-a-file">Saving to a file</h2>
<p>Use <strong>Files → Download MSQ</strong> to export the current tune as an MSQ file.  MSQ files are compatible with TunerStudio and other MegaSquirt tools.</p>
<h2 id="undo">Undo</h2>
<p>Any edits made since the table was opened can be reverted with the <strong>Undo</strong> button in the table header.  A confirmation dialog prevents accidental reverts.  This is a single-level undo — it reverts to the state the table was in when it was opened, not to individual cell changes.</p>
<h2 id="related-guides">Related guides</h2>
<ul>
<li><a href="https://vetuner.co.uk/ve-analysis/">VE Analysis</a>  -  generate statistically-based VE corrections from driving data.</li>
<li><a href="https://vetuner.co.uk/adv-data-logging/">Data Logging for VE Analysis</a>  -  collect cleaner logs for better correction quality.</li>
<li><a href="https://vetuner.co.uk/adv-fuel-equation/">The Fuel Equation</a>  -  understand how table values affect pulse width.</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>External Sensors</title>
      <link>https://vetuner.co.uk/external-sensors/</link>
      <guid isPermaLink="true">https://vetuner.co.uk/external-sensors/</guid>
      <pubDate>Wed, 16 Sep 2026 00:00:00 GMT</pubDate>
      <description><![CDATA[<h1 id="external-sensors">External Sensors</h1>
<p>External sensors give you additional temperature readings alongside your ECU data — without wiring them into the ECU itself. VETuner supports <strong>Shelly Pill</strong>, a USB-C powered Bluetooth bridge that connects up to 5 DS18B20 temperature probes.</p>
<p>Temperature readings appear in:</p>
<ul>
<li><strong>Gauges</strong> — add a gauge to your dashboard and select the sensor channel</li>
<li><strong>Data Table</strong> — sensor channels appear automatically alongside ECU channels</li>
<li><strong>Log files</strong> — sensor values are recorded alongside ECU data during logging</li>
<li><strong>Gauge config dialogs</strong> — sensor channels are listed in the channel picker</li>
</ul>
<hr>
<h2 id="requirements">Requirements</h2>
<ul>
<li>A <a href="https://www.shelly.com/products/the-pill-by-shelly">Shelly Pill</a> device with USB-C power</li>
<li>One or more <a href="https://www.shelly.com/products/temperature-sensor-ds18b20-3-5-mm-jack-1-m-cable">Shelly DS18B20 temperature sensors with 3.5 mm jack cable</a></li>
<li>A computer with Bluetooth LE (Bluetooth 4.0+)</li>
<li><strong>Chrome</strong>, <strong>Edge</strong>, or another Chromium-based browser (Web Bluetooth API required)</li>
<li>An active <a href="https://vetuner.co.uk/vetuner-pro/">VETuner Pro</a> subscription</li>
</ul>
<hr>
<h2 id="connecting-the-pill">Connecting the Pill</h2>
<ol>
<li>Power the Shelly Pill via USB-C (the Pill has no battery — it must be plugged in).</li>
<li>Plug your DS18B20 probes into the Pill&#39;s 3.5 mm jack sockets.</li>
<li>Open VETuner and go to <strong>Settings → External Sensors</strong>.</li>
<li>Click the <strong>Temperature Sensors (Pill)</strong> toggle.</li>
<li>The browser will show a Bluetooth device chooser. Select your Shelly Pill.</li>
</ol>
<p>Once connected, VETuner probes for attached sensors and lists them in the settings panel.</p>
<hr>
<h2 id="naming-sensors">Naming Sensors</h2>
<p>Temperature sensors appear with default names based on their sensor ID (200–214). You can rename them to something meaningful:</p>
<ol>
<li>In <strong>Settings → External Sensors</strong>, click the sensor name text field.</li>
<li>Type a descriptive name (e.g. <code>Intake Air</code>, <code>Oil Temp</code>, <code>Coolant In</code>).</li>
<li>Press <strong>Enter</strong> or click away to save.</li>
</ol>
<p>The name is used as the channel identifier everywhere — gauge config, data table, and log files. Renaming a sensor changes the channel key, so any gauge configured with the old name will need to be re-configured.</p>
<p>Names are stored in your browser&#39;s local storage and persist across page reloads.</p>
<hr>
<h2 id="adding-temperature-gauges">Adding Temperature Gauges</h2>
<p>Once the Pill is connected and sensors are named, you can add them to your dashboard:</p>
<ol>
<li>On the <strong>Dashboard</strong> tab, enter edit mode.</li>
<li>Tap <strong>+</strong> and choose <strong>Gauge</strong>.</li>
<li>In the channel picker, select your temperature sensor (e.g. <code>Intake Air</code>).</li>
<li>Configure the gauge title, units, and range as needed.</li>
<li>Save the gauge.</li>
</ol>
<p>The gauge updates automatically as new temperature readings arrive (roughly every 1-2 seconds for 3 sensors).</p>
<hr>
<h2 id="how-it-works">How it Works</h2>
<p>The Pill runs its own independent polling loop. Temperature values are pushed into the data pipeline as they arrive — no ECU connection required, so you can see sensor readings on the dashboard even when you&#39;re not connected to your car. Connect an ECU and the Pill values merge into your ECU data automatically.</p>
<hr>
<h2 id="troubleshooting">Troubleshooting</h2>
<table>
<thead>
<tr>
<th>Symptom</th>
<th>Likely cause</th>
</tr>
</thead>
<tbody><tr>
<td>Pill not found in Bluetooth chooser</td>
<td>Pill not powered (USB-C required), or out of range. Try unplugging and re-plugging the USB-C cable.</td>
</tr>
<tr>
<td>No sensors appear after connecting</td>
<td>Sensor not plugged into the 3.5 mm jack.</td>
</tr>
</tbody></table>
<hr>
<h2 id="related-guides">Related guides</h2>
<ul>
<li><a href="https://vetuner.co.uk/vetuner-pro/">VETuner Pro</a>  -  subscription details and feature list</li>
<li><a href="https://vetuner.co.uk/tuning/">Configuring Gauges</a>  -  setting up your dashboard</li>
<li><a href="https://vetuner.co.uk/adv-data-logging/">Data Logging</a>  -  recording sensor data to log files</li>
</ul>
]]></description>
      <content:encoded><![CDATA[<h1 id="external-sensors">External Sensors</h1>
<p>External sensors give you additional temperature readings alongside your ECU data — without wiring them into the ECU itself. VETuner supports <strong>Shelly Pill</strong>, a USB-C powered Bluetooth bridge that connects up to 5 DS18B20 temperature probes.</p>
<p>Temperature readings appear in:</p>
<ul>
<li><strong>Gauges</strong> — add a gauge to your dashboard and select the sensor channel</li>
<li><strong>Data Table</strong> — sensor channels appear automatically alongside ECU channels</li>
<li><strong>Log files</strong> — sensor values are recorded alongside ECU data during logging</li>
<li><strong>Gauge config dialogs</strong> — sensor channels are listed in the channel picker</li>
</ul>
<hr>
<h2 id="requirements">Requirements</h2>
<ul>
<li>A <a href="https://www.shelly.com/products/the-pill-by-shelly">Shelly Pill</a> device with USB-C power</li>
<li>One or more <a href="https://www.shelly.com/products/temperature-sensor-ds18b20-3-5-mm-jack-1-m-cable">Shelly DS18B20 temperature sensors with 3.5 mm jack cable</a></li>
<li>A computer with Bluetooth LE (Bluetooth 4.0+)</li>
<li><strong>Chrome</strong>, <strong>Edge</strong>, or another Chromium-based browser (Web Bluetooth API required)</li>
<li>An active <a href="https://vetuner.co.uk/vetuner-pro/">VETuner Pro</a> subscription</li>
</ul>
<hr>
<h2 id="connecting-the-pill">Connecting the Pill</h2>
<ol>
<li>Power the Shelly Pill via USB-C (the Pill has no battery — it must be plugged in).</li>
<li>Plug your DS18B20 probes into the Pill&#39;s 3.5 mm jack sockets.</li>
<li>Open VETuner and go to <strong>Settings → External Sensors</strong>.</li>
<li>Click the <strong>Temperature Sensors (Pill)</strong> toggle.</li>
<li>The browser will show a Bluetooth device chooser. Select your Shelly Pill.</li>
</ol>
<p>Once connected, VETuner probes for attached sensors and lists them in the settings panel.</p>
<hr>
<h2 id="naming-sensors">Naming Sensors</h2>
<p>Temperature sensors appear with default names based on their sensor ID (200–214). You can rename them to something meaningful:</p>
<ol>
<li>In <strong>Settings → External Sensors</strong>, click the sensor name text field.</li>
<li>Type a descriptive name (e.g. <code>Intake Air</code>, <code>Oil Temp</code>, <code>Coolant In</code>).</li>
<li>Press <strong>Enter</strong> or click away to save.</li>
</ol>
<p>The name is used as the channel identifier everywhere — gauge config, data table, and log files. Renaming a sensor changes the channel key, so any gauge configured with the old name will need to be re-configured.</p>
<p>Names are stored in your browser&#39;s local storage and persist across page reloads.</p>
<hr>
<h2 id="adding-temperature-gauges">Adding Temperature Gauges</h2>
<p>Once the Pill is connected and sensors are named, you can add them to your dashboard:</p>
<ol>
<li>On the <strong>Dashboard</strong> tab, enter edit mode.</li>
<li>Tap <strong>+</strong> and choose <strong>Gauge</strong>.</li>
<li>In the channel picker, select your temperature sensor (e.g. <code>Intake Air</code>).</li>
<li>Configure the gauge title, units, and range as needed.</li>
<li>Save the gauge.</li>
</ol>
<p>The gauge updates automatically as new temperature readings arrive (roughly every 1-2 seconds for 3 sensors).</p>
<hr>
<h2 id="how-it-works">How it Works</h2>
<p>The Pill runs its own independent polling loop. Temperature values are pushed into the data pipeline as they arrive — no ECU connection required, so you can see sensor readings on the dashboard even when you&#39;re not connected to your car. Connect an ECU and the Pill values merge into your ECU data automatically.</p>
<hr>
<h2 id="troubleshooting">Troubleshooting</h2>
<table>
<thead>
<tr>
<th>Symptom</th>
<th>Likely cause</th>
</tr>
</thead>
<tbody><tr>
<td>Pill not found in Bluetooth chooser</td>
<td>Pill not powered (USB-C required), or out of range. Try unplugging and re-plugging the USB-C cable.</td>
</tr>
<tr>
<td>No sensors appear after connecting</td>
<td>Sensor not plugged into the 3.5 mm jack.</td>
</tr>
</tbody></table>
<hr>
<h2 id="related-guides">Related guides</h2>
<ul>
<li><a href="https://vetuner.co.uk/vetuner-pro/">VETuner Pro</a>  -  subscription details and feature list</li>
<li><a href="https://vetuner.co.uk/tuning/">Configuring Gauges</a>  -  setting up your dashboard</li>
<li><a href="https://vetuner.co.uk/adv-data-logging/">Data Logging</a>  -  recording sensor data to log files</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>VE Analysis</title>
      <link>https://vetuner.co.uk/ve-analysis/</link>
      <guid isPermaLink="true">https://vetuner.co.uk/ve-analysis/</guid>
      <pubDate>Wed, 16 Sep 2026 00:00:00 GMT</pubDate>
      <description><![CDATA[<h1 id="ve-analysis">VE Analysis</h1>
<p>VE Analysis automates the tedious process of adjusting your VE (Volumetric Efficiency) table to achieve your target AFR (Air-Fuel Ratio).</p>
<h2 id="how-it-works">How it works</h2>
<ol>
<li>VETuner watches the live wideband AFR reading from your O2 sensor while you drive</li>
<li>Each moment is recorded against where in the RPM/load map you are (using bilinear interpolation to identify which cells are active)</li>
<li>The actual AFR is compared against your tune&#39;s target</li>
<li>Over time this builds a statistical picture of which cells are lean or rich, accounting for O2 sensor lag and other sources of noise</li>
<li>Finally, VETuner calculates the percentage adjustment each cell needs and applies it to a copy of your VE table</li>
</ol>
<h2 id="running-ve-analysis">Running VE Analysis</h2>
<ol>
<li>Connect to your ECU and ensure a wideband O2 sensor is configured</li>
<li>Open the <strong>VE Analysis</strong> tab</li>
<li>Click <strong>Start Analysis</strong> and go for a drive  -  try to cover all areas of the RPM/load map</li>
<li>VETuner shows a live heat map of the adjustments suggested so far — switch the <strong>Select Display</strong> dropdown to <strong>Updated VE Table</strong> to see the adjusted values, or <strong>Delta VE Table</strong> to see the percentage change per cell</li>
<li>When satisfied with the results, open the <strong>VE Table</strong> directly from the Configuration menu and apply the suggested values manually, using the analysis heat maps as a reference guide</li>
</ol>
<p><img src="https://vetuner.co.uk/images/ve-analysis-heatmap.png" alt="VE Analysis heat map showing suggested corrections"></p>
<h2 id="tips-for-good-results">Tips for good results</h2>
<ul>
<li><strong>Cover the full map</strong>  -  spend time in each RPM/load region, especially the areas you use most in normal driving</li>
<li><strong>Avoid transients</strong>  -  steady throttle and steady RPM give the cleanest data; hard accelerations confuse the O2 sensor lag compensation</li>
<li><strong>Warm engine</strong>  -  run VE Analysis with the engine fully at operating temperature</li>
<li><strong>Multiple sessions</strong>  -  you can run several sessions and accumulate data; VETuner merges them statistically</li>
</ul>
<h2 id="reading-the-heat-map">Reading the heat map</h2>
<p>The VE Analysis heat map shows the suggested percentage change for each cell:</p>
<ul>
<li><strong>Blue</strong>  -  cell is rich; VE values should decrease</li>
<li><strong>Red</strong>  -  cell is lean; VE values should increase</li>
<li><strong>Grey</strong>  -  insufficient data; the cell has not been visited enough to make a reliable suggestion</li>
</ul>
<h2 id="o2-sensor-delay-compensation">O2 sensor delay compensation</h2>
<p>VETuner automatically calculates the delay between a fuelling event and when the exhaust gas reaches the O2 sensor, based on engine RPM and exhaust system geometry.  This compensation is essential for accurate VE corrections at higher RPM.</p>
<p>You can adjust the delay parameters in <strong>Settings → VE Analysis</strong>.</p>
<h2 id="related-guides">Related guides</h2>
<ul>
<li><a href="https://vetuner.co.uk/tuning/">Editing Tuning Tables</a>  -  where VE changes are reviewed and burned to ECU flash.</li>
<li><a href="https://vetuner.co.uk/adv-data-logging/">Data Logging for VE Analysis</a>  -  practical logging workflow for clean data.</li>
<li><a href="https://vetuner.co.uk/adv-lambda-afr/">Lambda and AFR</a>  -  interpret sensor readings and target choices correctly.</li>
</ul>
]]></description>
      <content:encoded><![CDATA[<h1 id="ve-analysis">VE Analysis</h1>
<p>VE Analysis automates the tedious process of adjusting your VE (Volumetric Efficiency) table to achieve your target AFR (Air-Fuel Ratio).</p>
<h2 id="how-it-works">How it works</h2>
<ol>
<li>VETuner watches the live wideband AFR reading from your O2 sensor while you drive</li>
<li>Each moment is recorded against where in the RPM/load map you are (using bilinear interpolation to identify which cells are active)</li>
<li>The actual AFR is compared against your tune&#39;s target</li>
<li>Over time this builds a statistical picture of which cells are lean or rich, accounting for O2 sensor lag and other sources of noise</li>
<li>Finally, VETuner calculates the percentage adjustment each cell needs and applies it to a copy of your VE table</li>
</ol>
<h2 id="running-ve-analysis">Running VE Analysis</h2>
<ol>
<li>Connect to your ECU and ensure a wideband O2 sensor is configured</li>
<li>Open the <strong>VE Analysis</strong> tab</li>
<li>Click <strong>Start Analysis</strong> and go for a drive  -  try to cover all areas of the RPM/load map</li>
<li>VETuner shows a live heat map of the adjustments suggested so far — switch the <strong>Select Display</strong> dropdown to <strong>Updated VE Table</strong> to see the adjusted values, or <strong>Delta VE Table</strong> to see the percentage change per cell</li>
<li>When satisfied with the results, open the <strong>VE Table</strong> directly from the Configuration menu and apply the suggested values manually, using the analysis heat maps as a reference guide</li>
</ol>
<p><img src="https://vetuner.co.uk/images/ve-analysis-heatmap.png" alt="VE Analysis heat map showing suggested corrections"></p>
<h2 id="tips-for-good-results">Tips for good results</h2>
<ul>
<li><strong>Cover the full map</strong>  -  spend time in each RPM/load region, especially the areas you use most in normal driving</li>
<li><strong>Avoid transients</strong>  -  steady throttle and steady RPM give the cleanest data; hard accelerations confuse the O2 sensor lag compensation</li>
<li><strong>Warm engine</strong>  -  run VE Analysis with the engine fully at operating temperature</li>
<li><strong>Multiple sessions</strong>  -  you can run several sessions and accumulate data; VETuner merges them statistically</li>
</ul>
<h2 id="reading-the-heat-map">Reading the heat map</h2>
<p>The VE Analysis heat map shows the suggested percentage change for each cell:</p>
<ul>
<li><strong>Blue</strong>  -  cell is rich; VE values should decrease</li>
<li><strong>Red</strong>  -  cell is lean; VE values should increase</li>
<li><strong>Grey</strong>  -  insufficient data; the cell has not been visited enough to make a reliable suggestion</li>
</ul>
<h2 id="o2-sensor-delay-compensation">O2 sensor delay compensation</h2>
<p>VETuner automatically calculates the delay between a fuelling event and when the exhaust gas reaches the O2 sensor, based on engine RPM and exhaust system geometry.  This compensation is essential for accurate VE corrections at higher RPM.</p>
<p>You can adjust the delay parameters in <strong>Settings → VE Analysis</strong>.</p>
<h2 id="related-guides">Related guides</h2>
<ul>
<li><a href="https://vetuner.co.uk/tuning/">Editing Tuning Tables</a>  -  where VE changes are reviewed and burned to ECU flash.</li>
<li><a href="https://vetuner.co.uk/adv-data-logging/">Data Logging for VE Analysis</a>  -  practical logging workflow for clean data.</li>
<li><a href="https://vetuner.co.uk/adv-lambda-afr/">Lambda and AFR</a>  -  interpret sensor readings and target choices correctly.</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>VETuner Pro</title>
      <link>https://vetuner.co.uk/vetuner-pro/</link>
      <guid isPermaLink="true">https://vetuner.co.uk/vetuner-pro/</guid>
      <pubDate>Wed, 16 Sep 2026 00:00:00 GMT</pubDate>
      <description><![CDATA[<h1 id="vetuner-pro">VETuner Pro</h1>
<p>VETuner is free to use for core ECU tuning. A <strong>VETuner Pro</strong> subscription unlocks the full feature set, including advanced diagnostic and visualisation tools that go beyond basic table editing.</p>
<p>Subscribe from <strong>Settings → Subscription</strong> inside the app. You need a free account to subscribe  -  sign up or sign in from the <strong>Account</strong> item in the sidebar.</p>
<hr>
<h2 id="what39s-included-in-vetuner-pro">What&#39;s included in VETuner Pro</h2>
<h3 id="advanced-mode">Advanced Mode</h3>
<p>Subscribing upgrades you from Focus Mode to Advanced Mode. Advanced Mode reveals the full application interface:</p>
<table>
<thead>
<tr>
<th>Feature</th>
<th align="center">Focus Mode</th>
<th align="center">VETuner Pro</th>
</tr>
</thead>
<tbody><tr>
<td>Dashboard (live gauges)</td>
<td align="center">✅</td>
<td align="center">✅</td>
</tr>
<tr>
<td>Connection &amp; file loading</td>
<td align="center">✅</td>
<td align="center">✅</td>
</tr>
<tr>
<td>Tuning table &amp; curve editor</td>
<td align="center">✅</td>
<td align="center">✅</td>
</tr>
<tr>
<td>Start Doctor</td>
<td align="center">✅</td>
<td align="center">✅</td>
</tr>
<tr>
<td>Settings</td>
<td align="center">✅</td>
<td align="center">✅</td>
</tr>
<tr>
<td>Config Health Check</td>
<td align="center">✅</td>
<td align="center">✅</td>
</tr>
<tr>
<td>Tune Diff Report</td>
<td align="center">✅</td>
<td align="center">✅</td>
</tr>
<tr>
<td><strong>VE Analysis tab</strong></td>
<td align="center">❌</td>
<td align="center">✅</td>
</tr>
<tr>
<td><strong>Graph tab</strong></td>
<td align="center">❌</td>
<td align="center">✅</td>
</tr>
<tr>
<td><strong>Tooth Logger tab</strong></td>
<td align="center">❌</td>
<td align="center">✅</td>
</tr>
<tr>
<td><strong>Data Table tab</strong></td>
<td align="center">❌</td>
<td align="center">✅</td>
</tr>
<tr>
<td><strong>Event Log tab</strong></td>
<td align="center">❌</td>
<td align="center">✅</td>
</tr>
<tr>
<td><strong>Full ECU menu</strong></td>
<td align="center">❌</td>
<td align="center">✅</td>
</tr>
<tr>
<td><strong>Log Recording &amp; Playback</strong></td>
<td align="center">❌</td>
<td align="center">✅</td>
</tr>
<tr>
<td><strong>CAN Bus Discovery</strong></td>
<td align="center">❌</td>
<td align="center">✅</td>
</tr>
<tr>
<td><strong>Idle Advance Doctor</strong></td>
<td align="center">❌</td>
<td align="center">✅</td>
</tr>
<tr>
<td><strong>GPS Route Map</strong></td>
<td align="center">❌</td>
<td align="center">✅</td>
</tr>
<tr>
<td><strong>GPS Tracking</strong></td>
<td align="center">❌</td>
<td align="center">✅</td>
</tr>
<tr>
<td><strong>Cloud Sync</strong></td>
<td align="center">❌</td>
<td align="center">✅</td>
</tr>
</tbody></table>
<h3 id="real-time-graph">Real-time Graph</h3>
<p>A live multi-channel line chart that plots any ECU output channel at up to 50 Hz. Transient fuelling, ignition and sensor behaviour that vanishes in a static gauge display shows up clearly here.</p>
<h3 id="tooth-logger">Tooth Logger</h3>
<p>Captures and displays the raw crank and cam trigger signals as seen by the ECU. When a trigger wheel, air gap or shielding problem is causing sync loss and misfires, this is where you see it happen.</p>
<h3 id="log-recording-amp-playback">Log Recording &amp; Playback</h3>
<p>Start and stop log recording directly from the app, add named markers at key moments, and replay previously recorded sessions. All log formats (MLG, MSL+MSQ) can be loaded back into any VETuner tool  -  including the <a href="https://vetuner.co.uk/start-doctor/">Start Doctor</a>.</p>
<h3 id="full-ecu-menu">Full ECU Menu</h3>
<p>In Focus Mode, the sidebar shows a curated menu of the most important dialogs. VETuner Pro expands this to the complete INI-driven menu  -  every dialog, table, and curve defined in your ECU&#39;s definition file, accessible from the sidebar search.</p>
<h3 id="idle-advance-doctor">Idle Advance Doctor</h3>
<p>Analyses idle stability in real time by monitoring RPM fluctuations and ignition advance patterns. It classifies the idle behaviour (stable, hunting, dropping, surging) and suggests advance table adjustments to improve idle quality. After a vacuum leak, an injector change or a cam swap, look here first.</p>
<h3 id="ve-analysis">VE Analysis</h3>
<p>The <a href="https://vetuner.co.uk/ve-analysis/">VE Analysis</a> tab uses statistical scoring to identify which cells in your VE table are lean or rich, accounting for O2 sensor lag. It generates a heat map of suggested corrections and shows a delta table of adjustments. Available in the toolbar once a wideband sensor is configured and data has been collected.</p>
<h3 id="premium-gauge-designs">Premium Gauge Designs</h3>
<p>VETuner Pro unlocks additional gauge styles in the dashboard gauge editor:</p>
<ul>
<li><strong>SVG Design 1 &amp; 2</strong>  -  high-quality vector circular gauges</li>
<li><strong>Linear Design 1 &amp; 2</strong>  -  horizontal/vertical bar-style gauges</li>
<li><strong>Dual-Channel Design</strong>  -  a single gauge tile showing two channels simultaneously</li>
</ul>
<p><img src="https://vetuner.co.uk/images/light-mode-dashboard.png" alt="Light mode dashboard with premium gauge designs"></p>
<p><img src="https://vetuner.co.uk/images/live-graph.png" alt="Live multi-channel graph"></p>
<hr>
<h2 id="subscribing">Subscribing</h2>
<p>VETuner Pro costs <strong>£10 per year</strong>. Your first month is free — no payment is taken until the trial ends.</p>
<ol>
<li>Open the app and click <strong>Sign In</strong> in the sidebar (or create a free account).</li>
<li>Go to <strong>Settings → Subscription</strong>.</li>
<li>Click <strong>Subscribe</strong>  -  you will be taken to the secure checkout.</li>
<li>Once payment is confirmed, VETuner Pro is activated immediately and the advanced features unlock without needing to reload.</li>
</ol>
<p>Subscriptions are managed through <strong>Polar.sh</strong>. You can cancel at any time from the Polar customer portal  -  your access continues until the end of the current billing period.</p>
<hr>
<h2 id="using-pro-offline">Using Pro offline</h2>
<p>A Pro subscription keeps working without an internet connection; only the server-backed features (Cloud Sync, vehicles, cloud dashboards, cloud logs, Engine Expert) need one. See <a href="https://vetuner.co.uk/offline/">Using VETuner Offline</a> for full details.</p>
<hr>
<h2 id="related-guides">Related guides</h2>
<ul>
<li><a href="https://vetuner.co.uk/start-your-engines/">Starting Your Engine</a>  -  initial setup and ECU connection</li>
<li><a href="https://vetuner.co.uk/ve-analysis/">VE Analysis</a>  -  automated VE table correction</li>
<li><a href="https://vetuner.co.uk/start-doctor/">Start Doctor</a>  -  engine no-start diagnostics</li>
<li><a href="https://vetuner.co.uk/connecting/">Connecting to Your ECU</a>  -  live connection and file-only mode with no ECU</li>
<li><a href="https://vetuner.co.uk/offline/">Using VETuner Offline</a>  -  what works with no internet connection</li>
</ul>
]]></description>
      <content:encoded><![CDATA[<h1 id="vetuner-pro">VETuner Pro</h1>
<p>VETuner is free to use for core ECU tuning. A <strong>VETuner Pro</strong> subscription unlocks the full feature set, including advanced diagnostic and visualisation tools that go beyond basic table editing.</p>
<p>Subscribe from <strong>Settings → Subscription</strong> inside the app. You need a free account to subscribe  -  sign up or sign in from the <strong>Account</strong> item in the sidebar.</p>
<hr>
<h2 id="what39s-included-in-vetuner-pro">What&#39;s included in VETuner Pro</h2>
<h3 id="advanced-mode">Advanced Mode</h3>
<p>Subscribing upgrades you from Focus Mode to Advanced Mode. Advanced Mode reveals the full application interface:</p>
<table>
<thead>
<tr>
<th>Feature</th>
<th align="center">Focus Mode</th>
<th align="center">VETuner Pro</th>
</tr>
</thead>
<tbody><tr>
<td>Dashboard (live gauges)</td>
<td align="center">✅</td>
<td align="center">✅</td>
</tr>
<tr>
<td>Connection &amp; file loading</td>
<td align="center">✅</td>
<td align="center">✅</td>
</tr>
<tr>
<td>Tuning table &amp; curve editor</td>
<td align="center">✅</td>
<td align="center">✅</td>
</tr>
<tr>
<td>Start Doctor</td>
<td align="center">✅</td>
<td align="center">✅</td>
</tr>
<tr>
<td>Settings</td>
<td align="center">✅</td>
<td align="center">✅</td>
</tr>
<tr>
<td>Config Health Check</td>
<td align="center">✅</td>
<td align="center">✅</td>
</tr>
<tr>
<td>Tune Diff Report</td>
<td align="center">✅</td>
<td align="center">✅</td>
</tr>
<tr>
<td><strong>VE Analysis tab</strong></td>
<td align="center">❌</td>
<td align="center">✅</td>
</tr>
<tr>
<td><strong>Graph tab</strong></td>
<td align="center">❌</td>
<td align="center">✅</td>
</tr>
<tr>
<td><strong>Tooth Logger tab</strong></td>
<td align="center">❌</td>
<td align="center">✅</td>
</tr>
<tr>
<td><strong>Data Table tab</strong></td>
<td align="center">❌</td>
<td align="center">✅</td>
</tr>
<tr>
<td><strong>Event Log tab</strong></td>
<td align="center">❌</td>
<td align="center">✅</td>
</tr>
<tr>
<td><strong>Full ECU menu</strong></td>
<td align="center">❌</td>
<td align="center">✅</td>
</tr>
<tr>
<td><strong>Log Recording &amp; Playback</strong></td>
<td align="center">❌</td>
<td align="center">✅</td>
</tr>
<tr>
<td><strong>CAN Bus Discovery</strong></td>
<td align="center">❌</td>
<td align="center">✅</td>
</tr>
<tr>
<td><strong>Idle Advance Doctor</strong></td>
<td align="center">❌</td>
<td align="center">✅</td>
</tr>
<tr>
<td><strong>GPS Route Map</strong></td>
<td align="center">❌</td>
<td align="center">✅</td>
</tr>
<tr>
<td><strong>GPS Tracking</strong></td>
<td align="center">❌</td>
<td align="center">✅</td>
</tr>
<tr>
<td><strong>Cloud Sync</strong></td>
<td align="center">❌</td>
<td align="center">✅</td>
</tr>
</tbody></table>
<h3 id="real-time-graph">Real-time Graph</h3>
<p>A live multi-channel line chart that plots any ECU output channel at up to 50 Hz. Transient fuelling, ignition and sensor behaviour that vanishes in a static gauge display shows up clearly here.</p>
<h3 id="tooth-logger">Tooth Logger</h3>
<p>Captures and displays the raw crank and cam trigger signals as seen by the ECU. When a trigger wheel, air gap or shielding problem is causing sync loss and misfires, this is where you see it happen.</p>
<h3 id="log-recording-amp-playback">Log Recording &amp; Playback</h3>
<p>Start and stop log recording directly from the app, add named markers at key moments, and replay previously recorded sessions. All log formats (MLG, MSL+MSQ) can be loaded back into any VETuner tool  -  including the <a href="https://vetuner.co.uk/start-doctor/">Start Doctor</a>.</p>
<h3 id="full-ecu-menu">Full ECU Menu</h3>
<p>In Focus Mode, the sidebar shows a curated menu of the most important dialogs. VETuner Pro expands this to the complete INI-driven menu  -  every dialog, table, and curve defined in your ECU&#39;s definition file, accessible from the sidebar search.</p>
<h3 id="idle-advance-doctor">Idle Advance Doctor</h3>
<p>Analyses idle stability in real time by monitoring RPM fluctuations and ignition advance patterns. It classifies the idle behaviour (stable, hunting, dropping, surging) and suggests advance table adjustments to improve idle quality. After a vacuum leak, an injector change or a cam swap, look here first.</p>
<h3 id="ve-analysis">VE Analysis</h3>
<p>The <a href="https://vetuner.co.uk/ve-analysis/">VE Analysis</a> tab uses statistical scoring to identify which cells in your VE table are lean or rich, accounting for O2 sensor lag. It generates a heat map of suggested corrections and shows a delta table of adjustments. Available in the toolbar once a wideband sensor is configured and data has been collected.</p>
<h3 id="premium-gauge-designs">Premium Gauge Designs</h3>
<p>VETuner Pro unlocks additional gauge styles in the dashboard gauge editor:</p>
<ul>
<li><strong>SVG Design 1 &amp; 2</strong>  -  high-quality vector circular gauges</li>
<li><strong>Linear Design 1 &amp; 2</strong>  -  horizontal/vertical bar-style gauges</li>
<li><strong>Dual-Channel Design</strong>  -  a single gauge tile showing two channels simultaneously</li>
</ul>
<p><img src="https://vetuner.co.uk/images/light-mode-dashboard.png" alt="Light mode dashboard with premium gauge designs"></p>
<p><img src="https://vetuner.co.uk/images/live-graph.png" alt="Live multi-channel graph"></p>
<hr>
<h2 id="subscribing">Subscribing</h2>
<p>VETuner Pro costs <strong>£10 per year</strong>. Your first month is free — no payment is taken until the trial ends.</p>
<ol>
<li>Open the app and click <strong>Sign In</strong> in the sidebar (or create a free account).</li>
<li>Go to <strong>Settings → Subscription</strong>.</li>
<li>Click <strong>Subscribe</strong>  -  you will be taken to the secure checkout.</li>
<li>Once payment is confirmed, VETuner Pro is activated immediately and the advanced features unlock without needing to reload.</li>
</ol>
<p>Subscriptions are managed through <strong>Polar.sh</strong>. You can cancel at any time from the Polar customer portal  -  your access continues until the end of the current billing period.</p>
<hr>
<h2 id="using-pro-offline">Using Pro offline</h2>
<p>A Pro subscription keeps working without an internet connection; only the server-backed features (Cloud Sync, vehicles, cloud dashboards, cloud logs, Engine Expert) need one. See <a href="https://vetuner.co.uk/offline/">Using VETuner Offline</a> for full details.</p>
<hr>
<h2 id="related-guides">Related guides</h2>
<ul>
<li><a href="https://vetuner.co.uk/start-your-engines/">Starting Your Engine</a>  -  initial setup and ECU connection</li>
<li><a href="https://vetuner.co.uk/ve-analysis/">VE Analysis</a>  -  automated VE table correction</li>
<li><a href="https://vetuner.co.uk/start-doctor/">Start Doctor</a>  -  engine no-start diagnostics</li>
<li><a href="https://vetuner.co.uk/connecting/">Connecting to Your ECU</a>  -  live connection and file-only mode with no ECU</li>
<li><a href="https://vetuner.co.uk/offline/">Using VETuner Offline</a>  -  what works with no internet connection</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Privacy Policy</title>
      <link>https://vetuner.co.uk/privacy/</link>
      <guid isPermaLink="true">https://vetuner.co.uk/privacy/</guid>
      <pubDate>Wed, 16 Sep 2026 00:00:00 GMT</pubDate>
      <description><![CDATA[<h1 id="privacy-policy">Privacy Policy</h1>
<p><strong>Effective date:</strong> 13 March 2026</p>
<p>VETuner (&quot;we&quot;, &quot;us&quot;) is a browser-based ECU tuning application hosted at vetuner.co.uk. This policy explains what data VETuner collects, why, and how you can control it.</p>
<h2 id="data-we-collect">Data we collect</h2>
<h3 id="account-data">Account data</h3>
<p>If you create an account, we store your <strong>email address</strong> and a securely hashed password. If you sign in via Google OAuth, we receive only the email address authorised by your Google account. We do not access your Google password, contacts, or any other Google data.</p>
<h3 id="subscription-data">Subscription data</h3>
<p>Subscription payments are processed by <strong>Polar.sh</strong>. We do not store your card details. Polar shares your subscription status with us so we can grant access to paid features. Refer to <a href="https://polar.sh/legal/privacy">Polar&#39;s privacy policy</a> for how Polar handles your payment data.</p>
<h3 id="local-storage">Local storage</h3>
<p>VETuner stores preferences, cached ECU definitions, and session tokens in your browser&#39;s <code>localStorage</code>. This data never leaves your device unless you explicitly sign in to sync.</p>
<h3 id="ecu-signature-telemetry">ECU signature telemetry</h3>
<p>When your browser connects to an ECU, VETuner sends the <strong>firmware signature string</strong> (e.g. &quot;MS3 Format 0601.16&quot; or &quot;speeduino 202310&quot;) to our server. This tells us which ECU types are in active use so we can prioritise compatibility work. The signature contains no personally identifiable information and is not linked to your account.</p>
<h3 id="automatic-connection-diagnostics">Automatic connection diagnostics</h3>
<p>When VETuner encounters an unexpected disconnect or connection error, it automatically uploads a diagnostic bundle to our server and saves a copy to your device. The bundle contains:</p>
<ul>
<li>Your browser type, version, and operating system (from the browser&#39;s user-agent string)</li>
<li>Screen resolution and device pixel ratio</li>
<li>Application state flags (e.g. which features were active, ECU firmware signature)</li>
<li>Recent in-app event log and browser console output</li>
<li>Raw ECU request/response byte sequences with millisecond timing (hexadecimal only — no decoded values)</li>
</ul>
<p>The bundle <strong>does not contain</strong> ECU tuning data, VE table values, sensor readings, or MSQ file content.</p>
<p>If you are signed in, the report is linked to your account so you can request its deletion. Anonymous reports are also accepted. You may request deletion of any report linked to your account by emailing <strong><a href="mailto:admin@vetuner.co.uk">admin@vetuner.co.uk</a></strong>.</p>
<h3 id="bug-reports">Bug reports</h3>
<p>When you submit a bug report, VETuner collects the same diagnostics listed under Automatic connection diagnostics above, plus a screenshot of any visible canvas content (graphs, heatmaps) and a snapshot of the active tab&#39;s HTML structure. If you choose to provide a description or email address, those are included. Bug reports are submitted as confidential issues to our private Forgejo repository via a server-side proxy — reports are only visible to project maintainers. They contain <strong>no ECU tuning data, sensor readings, or data logs</strong>.</p>
<h4 id="detailed-communication-logs-opt-in">Detailed communication logs (opt-in)</h4>
<p>The bug report form includes an optional <strong>&quot;Send detailed communication logs&quot;</strong> checkbox. If you tick this box, the following additional data is included in your report:</p>
<ul>
<li>The last 100 raw ECU request/response byte sequences (shown as hexadecimal), with millisecond timing for each exchange</li>
<li>The filename of your INI definition file</li>
<li>The filename and full XML content of your loaded MSQ tune file</li>
</ul>
<p>This data <strong>does contain your ECU tuning values</strong> (VE tables, fuel maps, spark tables, and all other constants stored in the MSQ). Only enable this option if you are comfortable sharing that data with VETuner maintainers and the issue you are reporting is related to ECU communication behaviour. This option is unchecked by default.</p>
<h3 id="ecu-data">ECU data</h3>
<p>All other ECU communication (tuning tables, sensor readings, data logs) happens directly between your browser and the ECU over USB/serial. This data is processed entirely on your device and is <strong>never sent to our servers</strong>.</p>
<h2 id="data-we-do-not-collect">Data we do not collect</h2>
<ul>
<li>No analytics or tracking scripts</li>
<li>No third-party advertising</li>
<li>No fingerprinting or cross-site tracking</li>
</ul>
<h2 id="cookies">Cookies</h2>
<p>VETuner does not set any cookies. Authentication tokens are stored in <code>localStorage</code>.</p>
<h2 id="data-retention">Data retention</h2>
<p>Account data is retained while your account is active. You may delete your account at any time by contacting us, which permanently removes your email and all associated data from our servers.</p>
<h2 id="third-party-services">Third-party services</h2>
<table>
<thead>
<tr>
<th>Service</th>
<th>Purpose</th>
<th>Data shared</th>
</tr>
</thead>
<tbody><tr>
<td>PocketBase (self-hosted)</td>
<td>Authentication, account management</td>
<td>Email, hashed password</td>
</tr>
<tr>
<td>Forgejo (self-hosted)</td>
<td>Bug report storage (confidential issues)</td>
<td>Bug report diagnostics, optional email, browser info, screenshots, DOM snapshots</td>
</tr>
<tr>
<td>Polar.sh</td>
<td>Subscription billing</td>
<td>Email, payment details (handled by Polar)</td>
</tr>
<tr>
<td>Google OAuth (optional)</td>
<td>Sign-in convenience</td>
<td>Email address only</td>
</tr>
</tbody></table>
<h2 id="your-rights">Your rights</h2>
<p>You may request access to, correction of, or deletion of your personal data at any time by emailing <strong><a href="mailto:admin@vetuner.co.uk">admin@vetuner.co.uk</a></strong>.</p>
<h2 id="changes-to-this-policy">Changes to this policy</h2>
<p>We will update this page if our practices change. Material changes will be noted with an updated effective date at the top.</p>
<h2 id="contact">Contact</h2>
<p>For privacy-related questions, email <strong><a href="mailto:admin@vetuner.co.uk">admin@vetuner.co.uk</a></strong>.</p>
]]></description>
      <content:encoded><![CDATA[<h1 id="privacy-policy">Privacy Policy</h1>
<p><strong>Effective date:</strong> 13 March 2026</p>
<p>VETuner (&quot;we&quot;, &quot;us&quot;) is a browser-based ECU tuning application hosted at vetuner.co.uk. This policy explains what data VETuner collects, why, and how you can control it.</p>
<h2 id="data-we-collect">Data we collect</h2>
<h3 id="account-data">Account data</h3>
<p>If you create an account, we store your <strong>email address</strong> and a securely hashed password. If you sign in via Google OAuth, we receive only the email address authorised by your Google account. We do not access your Google password, contacts, or any other Google data.</p>
<h3 id="subscription-data">Subscription data</h3>
<p>Subscription payments are processed by <strong>Polar.sh</strong>. We do not store your card details. Polar shares your subscription status with us so we can grant access to paid features. Refer to <a href="https://polar.sh/legal/privacy">Polar&#39;s privacy policy</a> for how Polar handles your payment data.</p>
<h3 id="local-storage">Local storage</h3>
<p>VETuner stores preferences, cached ECU definitions, and session tokens in your browser&#39;s <code>localStorage</code>. This data never leaves your device unless you explicitly sign in to sync.</p>
<h3 id="ecu-signature-telemetry">ECU signature telemetry</h3>
<p>When your browser connects to an ECU, VETuner sends the <strong>firmware signature string</strong> (e.g. &quot;MS3 Format 0601.16&quot; or &quot;speeduino 202310&quot;) to our server. This tells us which ECU types are in active use so we can prioritise compatibility work. The signature contains no personally identifiable information and is not linked to your account.</p>
<h3 id="automatic-connection-diagnostics">Automatic connection diagnostics</h3>
<p>When VETuner encounters an unexpected disconnect or connection error, it automatically uploads a diagnostic bundle to our server and saves a copy to your device. The bundle contains:</p>
<ul>
<li>Your browser type, version, and operating system (from the browser&#39;s user-agent string)</li>
<li>Screen resolution and device pixel ratio</li>
<li>Application state flags (e.g. which features were active, ECU firmware signature)</li>
<li>Recent in-app event log and browser console output</li>
<li>Raw ECU request/response byte sequences with millisecond timing (hexadecimal only — no decoded values)</li>
</ul>
<p>The bundle <strong>does not contain</strong> ECU tuning data, VE table values, sensor readings, or MSQ file content.</p>
<p>If you are signed in, the report is linked to your account so you can request its deletion. Anonymous reports are also accepted. You may request deletion of any report linked to your account by emailing <strong><a href="mailto:admin@vetuner.co.uk">admin@vetuner.co.uk</a></strong>.</p>
<h3 id="bug-reports">Bug reports</h3>
<p>When you submit a bug report, VETuner collects the same diagnostics listed under Automatic connection diagnostics above, plus a screenshot of any visible canvas content (graphs, heatmaps) and a snapshot of the active tab&#39;s HTML structure. If you choose to provide a description or email address, those are included. Bug reports are submitted as confidential issues to our private Forgejo repository via a server-side proxy — reports are only visible to project maintainers. They contain <strong>no ECU tuning data, sensor readings, or data logs</strong>.</p>
<h4 id="detailed-communication-logs-opt-in">Detailed communication logs (opt-in)</h4>
<p>The bug report form includes an optional <strong>&quot;Send detailed communication logs&quot;</strong> checkbox. If you tick this box, the following additional data is included in your report:</p>
<ul>
<li>The last 100 raw ECU request/response byte sequences (shown as hexadecimal), with millisecond timing for each exchange</li>
<li>The filename of your INI definition file</li>
<li>The filename and full XML content of your loaded MSQ tune file</li>
</ul>
<p>This data <strong>does contain your ECU tuning values</strong> (VE tables, fuel maps, spark tables, and all other constants stored in the MSQ). Only enable this option if you are comfortable sharing that data with VETuner maintainers and the issue you are reporting is related to ECU communication behaviour. This option is unchecked by default.</p>
<h3 id="ecu-data">ECU data</h3>
<p>All other ECU communication (tuning tables, sensor readings, data logs) happens directly between your browser and the ECU over USB/serial. This data is processed entirely on your device and is <strong>never sent to our servers</strong>.</p>
<h2 id="data-we-do-not-collect">Data we do not collect</h2>
<ul>
<li>No analytics or tracking scripts</li>
<li>No third-party advertising</li>
<li>No fingerprinting or cross-site tracking</li>
</ul>
<h2 id="cookies">Cookies</h2>
<p>VETuner does not set any cookies. Authentication tokens are stored in <code>localStorage</code>.</p>
<h2 id="data-retention">Data retention</h2>
<p>Account data is retained while your account is active. You may delete your account at any time by contacting us, which permanently removes your email and all associated data from our servers.</p>
<h2 id="third-party-services">Third-party services</h2>
<table>
<thead>
<tr>
<th>Service</th>
<th>Purpose</th>
<th>Data shared</th>
</tr>
</thead>
<tbody><tr>
<td>PocketBase (self-hosted)</td>
<td>Authentication, account management</td>
<td>Email, hashed password</td>
</tr>
<tr>
<td>Forgejo (self-hosted)</td>
<td>Bug report storage (confidential issues)</td>
<td>Bug report diagnostics, optional email, browser info, screenshots, DOM snapshots</td>
</tr>
<tr>
<td>Polar.sh</td>
<td>Subscription billing</td>
<td>Email, payment details (handled by Polar)</td>
</tr>
<tr>
<td>Google OAuth (optional)</td>
<td>Sign-in convenience</td>
<td>Email address only</td>
</tr>
</tbody></table>
<h2 id="your-rights">Your rights</h2>
<p>You may request access to, correction of, or deletion of your personal data at any time by emailing <strong><a href="mailto:admin@vetuner.co.uk">admin@vetuner.co.uk</a></strong>.</p>
<h2 id="changes-to-this-policy">Changes to this policy</h2>
<p>We will update this page if our practices change. Material changes will be noted with an updated effective date at the top.</p>
<h2 id="contact">Contact</h2>
<p>For privacy-related questions, email <strong><a href="mailto:admin@vetuner.co.uk">admin@vetuner.co.uk</a></strong>.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Configuration Health Check Reference</title>
      <link>https://vetuner.co.uk/adv-config-checks/</link>
      <guid isPermaLink="true">https://vetuner.co.uk/adv-config-checks/</guid>
      <pubDate>Wed, 16 Sep 2026 00:00:00 GMT</pubDate>
      <description><![CDATA[<h1 id="configuration-health-check-reference">Configuration Health Check Reference</h1>
<p>This page lists every configuration check VETuner performs automatically after connecting to your ECU in Focus Mode. Use it to understand what each check means and where to fix it.</p>
<p>See the <a href="https://vetuner.co.uk/config-checks/">Configuration Health Check overview</a> if you want to know when and why these checks run rather than the full reference.</p>
<h2 id="how-the-check-engine-works">How the check engine works</h2>
<p>VETuner checks your ECU&#39;s current configuration values — the live data read from the ECU after connection, or the values loaded from a tune file — against a fixed set of rules. Each rule targets a specific constant by name and evaluates its value using one of the rule types described below. Only constants that exist in your ECU&#39;s firmware definition are checked; parameters absent from your firmware are silently skipped.</p>
<h3 id="rule-types">Rule types</h3>
<table>
<thead>
<tr>
<th>Rule</th>
<th>What it does</th>
</tr>
</thead>
<tbody><tr>
<td><code>nonzero</code></td>
<td>Fails if the value is exactly zero. Used for parameters where zero is never valid (e.g. cylinder count).</td>
</tr>
<tr>
<td><code>min</code></td>
<td>Fails if the value is below a threshold. Used for parameters that must be above a minimum (e.g. dwell time must be at least 0.5 ms).</td>
</tr>
<tr>
<td><code>max</code></td>
<td>Fails if the value exceeds a threshold.</td>
</tr>
<tr>
<td><code>range</code></td>
<td>Fails if the value falls outside a defined minimum-to-maximum window.</td>
</tr>
<tr>
<td><code>flat_table</code></td>
<td>Fails if every cell in a 2D table (like a VE table or AFR target table) contains the same value. A flat table almost always means the ECU has never been calibrated.</td>
</tr>
<tr>
<td><code>inverted_pair</code></td>
<td>Fails if one value is greater than another when it should be the opposite. Currently used to detect when <code>tpsMin</code> is higher than <code>tpsMax</code>, meaning the TPS calibration was performed backwards.</td>
</tr>
</tbody></table>
<h3 id="unconfigured-ecu-detection">Unconfigured ECU detection</h3>
<p>When all three critical checks fail at once — cylinder count is zero, injector count is zero, and required fuel is zero — VETuner recognises that the ECU is almost certainly running on factory defaults rather than a real tune. The prompt may also appear with other combinations of critical and flat-table failures. Instead of walking you through dozens of individual fixes, it offers to load a tune file so you can start from sensible values.</p>
<h2 id="full-check-list">Full check list</h2>
<table>
<thead>
<tr>
<th>Check</th>
<th>Parameter</th>
<th>Rule</th>
<th>Severity</th>
<th>What it means</th>
<th>Where to fix</th>
</tr>
</thead>
<tbody><tr>
<td>Cylinder count not set</td>
<td><code>nCylinders</code></td>
<td>nonzero</td>
<td>critical</td>
<td>The cylinder count is zero or invalid. Every fuel and ignition calculation depends on this — the engine will run extremely rich or refuse to start until corrected.</td>
<td>Engine Constants</td>
</tr>
<tr>
<td>Injector count not set</td>
<td><code>nInjectors</code></td>
<td>nonzero</td>
<td>critical</td>
<td>The number of injectors is zero. No fuel will be injected until this matches your engine.</td>
<td>Engine Constants</td>
</tr>
<tr>
<td>Required fuel is zero</td>
<td><code>reqFuel</code></td>
<td>min: 0.5</td>
<td>critical</td>
<td>Required fuel is zero — the base fuel pulse width. If zero, the engine receives no fuel at all.</td>
<td>reqFuel calculator</td>
</tr>
<tr>
<td>Injector opening time not set</td>
<td><code>injOpen</code></td>
<td>min: 0.05</td>
<td>warning</td>
<td>Injector dead time (opening time) is zero or not set. This causes incorrect fuelling at low pulse widths, particularly at idle. Typical values are 0.7–1.5 ms at 14 V.</td>
<td>Injector settings</td>
</tr>
<tr>
<td>Coil dwell time not set</td>
<td><code>dwellrun</code></td>
<td>min: 0.5</td>
<td>warning</td>
<td>Running dwell time is zero or extremely low. The ignition coil will not have time to charge, causing a weak or absent spark. Typical values are 2–4 ms.</td>
<td>Ignition settings</td>
</tr>
<tr>
<td>VE table appears flat</td>
<td><code>veTable</code></td>
<td>flat_table</td>
<td>warning</td>
<td>Every cell in the VE table contains the same value. A flat VE table is a strong sign the ECU has never been calibrated — real engines always need non-uniform VE values.</td>
<td>Load a tune file</td>
</tr>
<tr>
<td>AFR target table appears flat</td>
<td><code>afrTable</code></td>
<td>flat_table</td>
<td>warning</td>
<td>Every cell in the AFR target table contains the same value. A properly tuned engine needs richer targets under load and leaner targets at cruise.</td>
<td>Load a tune file</td>
</tr>
<tr>
<td>Spark advance table appears flat</td>
<td><code>advanceTable</code></td>
<td>flat_table</td>
<td>warning</td>
<td>Every cell in the spark advance table contains the same value. Ignition timing should vary considerably across the RPM and load range.</td>
<td>Load a tune file</td>
</tr>
<tr>
<td>TPS calibration inverted</td>
<td><code>tpsMin / tpsMax</code></td>
<td>inverted_pair</td>
<td>warning</td>
<td>The closed-throttle ADC value (tpsMin) is higher than the open-throttle value (tpsMax). The TPS gauge will read incorrectly. Re-run the TPS calibration.</td>
<td>TPS Calibration</td>
</tr>
</tbody></table>
<h2 id="related-guides">Related guides</h2>
<ul>
<li><a href="https://vetuner.co.uk/config-checks/">Configuration Health Check overview</a>  -  when the checks run and what happens when issues are found.</li>
<li><a href="https://vetuner.co.uk/start-your-engines/">Starting Your Engine</a>  -  the full first-start walkthrough.</li>
</ul>
]]></description>
      <content:encoded><![CDATA[<h1 id="configuration-health-check-reference">Configuration Health Check Reference</h1>
<p>This page lists every configuration check VETuner performs automatically after connecting to your ECU in Focus Mode. Use it to understand what each check means and where to fix it.</p>
<p>See the <a href="https://vetuner.co.uk/config-checks/">Configuration Health Check overview</a> if you want to know when and why these checks run rather than the full reference.</p>
<h2 id="how-the-check-engine-works">How the check engine works</h2>
<p>VETuner checks your ECU&#39;s current configuration values — the live data read from the ECU after connection, or the values loaded from a tune file — against a fixed set of rules. Each rule targets a specific constant by name and evaluates its value using one of the rule types described below. Only constants that exist in your ECU&#39;s firmware definition are checked; parameters absent from your firmware are silently skipped.</p>
<h3 id="rule-types">Rule types</h3>
<table>
<thead>
<tr>
<th>Rule</th>
<th>What it does</th>
</tr>
</thead>
<tbody><tr>
<td><code>nonzero</code></td>
<td>Fails if the value is exactly zero. Used for parameters where zero is never valid (e.g. cylinder count).</td>
</tr>
<tr>
<td><code>min</code></td>
<td>Fails if the value is below a threshold. Used for parameters that must be above a minimum (e.g. dwell time must be at least 0.5 ms).</td>
</tr>
<tr>
<td><code>max</code></td>
<td>Fails if the value exceeds a threshold.</td>
</tr>
<tr>
<td><code>range</code></td>
<td>Fails if the value falls outside a defined minimum-to-maximum window.</td>
</tr>
<tr>
<td><code>flat_table</code></td>
<td>Fails if every cell in a 2D table (like a VE table or AFR target table) contains the same value. A flat table almost always means the ECU has never been calibrated.</td>
</tr>
<tr>
<td><code>inverted_pair</code></td>
<td>Fails if one value is greater than another when it should be the opposite. Currently used to detect when <code>tpsMin</code> is higher than <code>tpsMax</code>, meaning the TPS calibration was performed backwards.</td>
</tr>
</tbody></table>
<h3 id="unconfigured-ecu-detection">Unconfigured ECU detection</h3>
<p>When all three critical checks fail at once — cylinder count is zero, injector count is zero, and required fuel is zero — VETuner recognises that the ECU is almost certainly running on factory defaults rather than a real tune. The prompt may also appear with other combinations of critical and flat-table failures. Instead of walking you through dozens of individual fixes, it offers to load a tune file so you can start from sensible values.</p>
<h2 id="full-check-list">Full check list</h2>
<table>
<thead>
<tr>
<th>Check</th>
<th>Parameter</th>
<th>Rule</th>
<th>Severity</th>
<th>What it means</th>
<th>Where to fix</th>
</tr>
</thead>
<tbody><tr>
<td>Cylinder count not set</td>
<td><code>nCylinders</code></td>
<td>nonzero</td>
<td>critical</td>
<td>The cylinder count is zero or invalid. Every fuel and ignition calculation depends on this — the engine will run extremely rich or refuse to start until corrected.</td>
<td>Engine Constants</td>
</tr>
<tr>
<td>Injector count not set</td>
<td><code>nInjectors</code></td>
<td>nonzero</td>
<td>critical</td>
<td>The number of injectors is zero. No fuel will be injected until this matches your engine.</td>
<td>Engine Constants</td>
</tr>
<tr>
<td>Required fuel is zero</td>
<td><code>reqFuel</code></td>
<td>min: 0.5</td>
<td>critical</td>
<td>Required fuel is zero — the base fuel pulse width. If zero, the engine receives no fuel at all.</td>
<td>reqFuel calculator</td>
</tr>
<tr>
<td>Injector opening time not set</td>
<td><code>injOpen</code></td>
<td>min: 0.05</td>
<td>warning</td>
<td>Injector dead time (opening time) is zero or not set. This causes incorrect fuelling at low pulse widths, particularly at idle. Typical values are 0.7–1.5 ms at 14 V.</td>
<td>Injector settings</td>
</tr>
<tr>
<td>Coil dwell time not set</td>
<td><code>dwellrun</code></td>
<td>min: 0.5</td>
<td>warning</td>
<td>Running dwell time is zero or extremely low. The ignition coil will not have time to charge, causing a weak or absent spark. Typical values are 2–4 ms.</td>
<td>Ignition settings</td>
</tr>
<tr>
<td>VE table appears flat</td>
<td><code>veTable</code></td>
<td>flat_table</td>
<td>warning</td>
<td>Every cell in the VE table contains the same value. A flat VE table is a strong sign the ECU has never been calibrated — real engines always need non-uniform VE values.</td>
<td>Load a tune file</td>
</tr>
<tr>
<td>AFR target table appears flat</td>
<td><code>afrTable</code></td>
<td>flat_table</td>
<td>warning</td>
<td>Every cell in the AFR target table contains the same value. A properly tuned engine needs richer targets under load and leaner targets at cruise.</td>
<td>Load a tune file</td>
</tr>
<tr>
<td>Spark advance table appears flat</td>
<td><code>advanceTable</code></td>
<td>flat_table</td>
<td>warning</td>
<td>Every cell in the spark advance table contains the same value. Ignition timing should vary considerably across the RPM and load range.</td>
<td>Load a tune file</td>
</tr>
<tr>
<td>TPS calibration inverted</td>
<td><code>tpsMin / tpsMax</code></td>
<td>inverted_pair</td>
<td>warning</td>
<td>The closed-throttle ADC value (tpsMin) is higher than the open-throttle value (tpsMax). The TPS gauge will read incorrectly. Re-run the TPS calibration.</td>
<td>TPS Calibration</td>
</tr>
</tbody></table>
<h2 id="related-guides">Related guides</h2>
<ul>
<li><a href="https://vetuner.co.uk/config-checks/">Configuration Health Check overview</a>  -  when the checks run and what happens when issues are found.</li>
<li><a href="https://vetuner.co.uk/start-your-engines/">Starting Your Engine</a>  -  the full first-start walkthrough.</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Terms of Service</title>
      <link>https://vetuner.co.uk/terms/</link>
      <guid isPermaLink="true">https://vetuner.co.uk/terms/</guid>
      <pubDate>Wed, 16 Sep 2026 00:00:00 GMT</pubDate>
      <description><![CDATA[<h1 id="terms-of-service">Terms of Service</h1>
<p><strong>Effective date:</strong> 13 March 2026</p>
<p>These terms govern your use of VETuner (&quot;the Service&quot;), a browser-based ECU tuning application operated at vetuner.co.uk (&quot;we&quot;, &quot;us&quot;). By accessing or using the Service you agree to be bound by these terms. If you do not agree, do not use the Service.</p>
<h2 id="description-of-the-service">Description of the Service</h2>
<p>VETuner is a web application that parses ECU definition files and communicates with engine control units over USB/serial. It allows you to view and edit tuning tables, visualise real-time sensor data, and perform volumetric efficiency analysis.</p>
<h2 id="account-registration">Account registration</h2>
<p>You may use parts of the Service without an account. Certain features require registration. You are responsible for keeping your login credentials confidential and for all activity under your account. You must provide accurate information when registering and promptly update it if it changes.</p>
<h2 id="acceptable-use">Acceptable use</h2>
<p>You agree not to:</p>
<ul>
<li>Use the Service for any unlawful purpose</li>
<li>Attempt to reverse-engineer, decompile, or extract the source code of the Service beyond what is permitted by applicable law</li>
<li>Interfere with or disrupt the Service or its infrastructure</li>
<li>Redistribute, resell, or sublicense access to the Service without our written consent</li>
<li>Misrepresent your identity or affiliation when using the Service</li>
</ul>
<h2 id="subscriptions-and-payments">Subscriptions and payments</h2>
<p>Paid features are billed through <strong>Polar.sh</strong>. Subscription terms, pricing, and cancellation are presented at the point of purchase. We reserve the right to change pricing with reasonable notice. Refunds are handled in accordance with Polar&#39;s policies and applicable consumer law.</p>
<h2 id="bug-report-incentive-programme">Bug report incentive programme</h2>
<p>We may offer a free subscription to the first user who reports a confirmed, fixable bug. Eligibility is determined at our sole discretion. We reserve the right to modify or discontinue this programme at any time without notice. Submitting a bug report grants us the right to use the diagnostic data contained in the report  -  including application screenshots, DOM snapshots, browser information, and application state  -  for the purpose of diagnosing, reproducing, and fixing issues in the Service. Bug reports are stored as confidential issues in our private Forgejo repository and are only accessible to project maintainers.</p>
<h2 id="ecu-tuning-disclaimer">ECU tuning disclaimer</h2>
<p><strong>Engine tuning carries inherent risk.</strong> Incorrect fuel, ignition, or boost maps can cause engine damage, fire, or personal injury. VETuner is a tool  -  it does not validate whether a particular set of values is safe for your engine, vehicle, or circumstances.</p>
<p>You acknowledge that:</p>
<ul>
<li>You are solely responsible for any changes you make to your ECU</li>
<li>You should verify all modifications on a dynamometer or in a controlled environment before road use</li>
<li>VE analysis suggestions are statistical estimates, not guaranteed-correct values</li>
<li>Real-time data displayed by VETuner depends on the accuracy of your ECU&#39;s sensors and firmware</li>
</ul>
<p><strong>We accept no liability for damage to engines, vehicles, or other property, or for personal injury, arising from the use of the Service.</strong></p>
<h2 id="intellectual-property">Intellectual property</h2>
<p>All content, design, and software comprising the Service are owned by us or our licensors and are protected by copyright and other intellectual property laws. Your use of the Service does not grant you any ownership rights.</p>
<h2 id="availability-and-changes">Availability and changes</h2>
<p>We aim to keep the Service available but do not guarantee uninterrupted access. We may modify, suspend, or discontinue any part of the Service at any time without notice, and we are not liable for any such modification, suspension, or discontinuation.</p>
<h2 id="limitation-of-liability">Limitation of liability</h2>
<p>To the fullest extent permitted by law:</p>
<ul>
<li>The Service is provided <strong>&quot;as is&quot;</strong> without warranties of any kind, whether express or implied, including but not limited to merchantability, fitness for a particular purpose, or non-infringement</li>
<li>We shall not be liable for any indirect, incidental, special, consequential, or punitive damages arising from your use of the Service</li>
<li>Our total aggregate liability for any claim relating to the Service shall not exceed the amount you have paid us in the twelve months preceding the claim.</li>
</ul>
<h2 id="indemnification">Indemnification</h2>
<p>You agree to indemnify and hold us harmless from any claims, losses, or damages (including legal fees) arising from your use of the Service or your breach of these terms.</p>
<h2 id="termination">Termination</h2>
<p>We may suspend or terminate your access to the Service at any time for violation of these terms or for any other reason at our discretion. Upon termination, your right to use the Service ceases immediately. Provisions that by their nature should survive termination (including liability limitations and indemnification) will remain in effect.</p>
<h2 id="governing-law">Governing law</h2>
<p>These terms are governed by the laws of England and Wales. Any disputes shall be subject to the exclusive jurisdiction of the courts of England and Wales.</p>
<h2 id="changes-to-these-terms">Changes to these terms</h2>
<p>We may update these terms from time to time. Material changes will be noted with an updated effective date at the top of this page. Continued use of the Service after changes constitutes acceptance of the revised terms.</p>
<h2 id="contact">Contact</h2>
<p>For questions about these terms, email <strong><a href="mailto:admin@vetuner.co.uk">admin@vetuner.co.uk</a></strong>.</p>
]]></description>
      <content:encoded><![CDATA[<h1 id="terms-of-service">Terms of Service</h1>
<p><strong>Effective date:</strong> 13 March 2026</p>
<p>These terms govern your use of VETuner (&quot;the Service&quot;), a browser-based ECU tuning application operated at vetuner.co.uk (&quot;we&quot;, &quot;us&quot;). By accessing or using the Service you agree to be bound by these terms. If you do not agree, do not use the Service.</p>
<h2 id="description-of-the-service">Description of the Service</h2>
<p>VETuner is a web application that parses ECU definition files and communicates with engine control units over USB/serial. It allows you to view and edit tuning tables, visualise real-time sensor data, and perform volumetric efficiency analysis.</p>
<h2 id="account-registration">Account registration</h2>
<p>You may use parts of the Service without an account. Certain features require registration. You are responsible for keeping your login credentials confidential and for all activity under your account. You must provide accurate information when registering and promptly update it if it changes.</p>
<h2 id="acceptable-use">Acceptable use</h2>
<p>You agree not to:</p>
<ul>
<li>Use the Service for any unlawful purpose</li>
<li>Attempt to reverse-engineer, decompile, or extract the source code of the Service beyond what is permitted by applicable law</li>
<li>Interfere with or disrupt the Service or its infrastructure</li>
<li>Redistribute, resell, or sublicense access to the Service without our written consent</li>
<li>Misrepresent your identity or affiliation when using the Service</li>
</ul>
<h2 id="subscriptions-and-payments">Subscriptions and payments</h2>
<p>Paid features are billed through <strong>Polar.sh</strong>. Subscription terms, pricing, and cancellation are presented at the point of purchase. We reserve the right to change pricing with reasonable notice. Refunds are handled in accordance with Polar&#39;s policies and applicable consumer law.</p>
<h2 id="bug-report-incentive-programme">Bug report incentive programme</h2>
<p>We may offer a free subscription to the first user who reports a confirmed, fixable bug. Eligibility is determined at our sole discretion. We reserve the right to modify or discontinue this programme at any time without notice. Submitting a bug report grants us the right to use the diagnostic data contained in the report  -  including application screenshots, DOM snapshots, browser information, and application state  -  for the purpose of diagnosing, reproducing, and fixing issues in the Service. Bug reports are stored as confidential issues in our private Forgejo repository and are only accessible to project maintainers.</p>
<h2 id="ecu-tuning-disclaimer">ECU tuning disclaimer</h2>
<p><strong>Engine tuning carries inherent risk.</strong> Incorrect fuel, ignition, or boost maps can cause engine damage, fire, or personal injury. VETuner is a tool  -  it does not validate whether a particular set of values is safe for your engine, vehicle, or circumstances.</p>
<p>You acknowledge that:</p>
<ul>
<li>You are solely responsible for any changes you make to your ECU</li>
<li>You should verify all modifications on a dynamometer or in a controlled environment before road use</li>
<li>VE analysis suggestions are statistical estimates, not guaranteed-correct values</li>
<li>Real-time data displayed by VETuner depends on the accuracy of your ECU&#39;s sensors and firmware</li>
</ul>
<p><strong>We accept no liability for damage to engines, vehicles, or other property, or for personal injury, arising from the use of the Service.</strong></p>
<h2 id="intellectual-property">Intellectual property</h2>
<p>All content, design, and software comprising the Service are owned by us or our licensors and are protected by copyright and other intellectual property laws. Your use of the Service does not grant you any ownership rights.</p>
<h2 id="availability-and-changes">Availability and changes</h2>
<p>We aim to keep the Service available but do not guarantee uninterrupted access. We may modify, suspend, or discontinue any part of the Service at any time without notice, and we are not liable for any such modification, suspension, or discontinuation.</p>
<h2 id="limitation-of-liability">Limitation of liability</h2>
<p>To the fullest extent permitted by law:</p>
<ul>
<li>The Service is provided <strong>&quot;as is&quot;</strong> without warranties of any kind, whether express or implied, including but not limited to merchantability, fitness for a particular purpose, or non-infringement</li>
<li>We shall not be liable for any indirect, incidental, special, consequential, or punitive damages arising from your use of the Service</li>
<li>Our total aggregate liability for any claim relating to the Service shall not exceed the amount you have paid us in the twelve months preceding the claim.</li>
</ul>
<h2 id="indemnification">Indemnification</h2>
<p>You agree to indemnify and hold us harmless from any claims, losses, or damages (including legal fees) arising from your use of the Service or your breach of these terms.</p>
<h2 id="termination">Termination</h2>
<p>We may suspend or terminate your access to the Service at any time for violation of these terms or for any other reason at our discretion. Upon termination, your right to use the Service ceases immediately. Provisions that by their nature should survive termination (including liability limitations and indemnification) will remain in effect.</p>
<h2 id="governing-law">Governing law</h2>
<p>These terms are governed by the laws of England and Wales. Any disputes shall be subject to the exclusive jurisdiction of the courts of England and Wales.</p>
<h2 id="changes-to-these-terms">Changes to these terms</h2>
<p>We may update these terms from time to time. Material changes will be noted with an updated effective date at the top of this page. Continued use of the Service after changes constitutes acceptance of the revised terms.</p>
<h2 id="contact">Contact</h2>
<p>For questions about these terms, email <strong><a href="mailto:admin@vetuner.co.uk">admin@vetuner.co.uk</a></strong>.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Volumetric Efficiency Theory</title>
      <link>https://vetuner.co.uk/adv-ve-theory/</link>
      <guid isPermaLink="true">https://vetuner.co.uk/adv-ve-theory/</guid>
      <pubDate>Wed, 16 Sep 2026 00:00:00 GMT</pubDate>
      <description><![CDATA[<h1 id="volumetric-efficiency-theory">Volumetric Efficiency Theory</h1>
<h2 id="what-is-volumetric-efficiency">What is volumetric efficiency?</h2>
<p>Volumetric efficiency (VE) is the ratio of air mass actually drawn into a cylinder on an intake stroke to the theoretical maximum that cylinder could hold at ambient conditions.</p>
<p>A naturally aspirated engine at peak VE might fill its cylinders to 85-95% of swept volume. The remaining percentage is lost to flow restrictions, heat transfer, valve timing constraints, and inertia effects. A well-tuned intake with resonant ram charging can push VE above 100% at certain RPM.</p>
<p>Forced induction (turbocharging or supercharging) compresses the intake charge above atmospheric pressure, forcing more air into the cylinder than it could draw unaided. VE values of 150-200% or higher are common on boosted engines. The VE table handles this naturally: cells at high MAP values simply contain larger numbers.</p>
<p>VE is expressed as a percentage: a reading of 80% means the cylinder drew in 80% of the air that would fit at standard temperature and pressure.</p>
<h2 id="why-efi-uses-a-ve-table">Why EFI uses a VE table</h2>
<p>A fuel-injected engine needs to deliver the correct mass of fuel for the air entering the cylinder. The ECU cannot measure air mass directly; it infers it from manifold absolute pressure (MAP), intake air temperature (IAT), engine displacement, and VE.</p>
<p>The VE table maps VE against RPM and load (usually MAP or throttle position). At each combination of RPM and load, the table tells the ECU what fraction of the cylinder is actually filling with air. The ECU uses that to calculate how much fuel to inject.</p>
<p>Getting the VE table right is the core of fuel tuning: an accurate table means accurate fuelling across the whole operating range.</p>
<h2 id="how-ve-varies-with-operating-conditions">How VE varies with operating conditions</h2>
<p><strong>RPM</strong> affects VE through several mechanisms:</p>
<ul>
<li>At low RPM, gas velocity is low and inertia charging is minimal. VE tends to be modest.</li>
<li>As RPM rises, inertia charging improves and VE climbs, up to a point.</li>
<li>Beyond peak torque RPM, the intake can no longer fill the cylinder in the available time. VE falls.</li>
<li>Valve timing is fixed on most engines, so it is optimised for a particular RPM range. Variable valve timing shifts this window.</li>
</ul>
<p><strong>Inertia charging</strong> (also called ram charging) is the effect where the moving column of air in the intake tract has momentum. As the intake valve closes, the air that was flowing towards the cylinder doesn&#39;t stop instantly; it piles up against the closed valve, briefly raising local pressure and packing more charge into the cylinder. At certain RPM, the pressure wave reflections from the intake plenum and runners arrive back at the valve just as it is closing, amplifying the effect. This is why an engine&#39;s torque curve has a peak: VE rises to a maximum at the RPM where intake geometry and valve timing align with the inertia charging resonance.</p>
<p><strong>Load (MAP)</strong> affects VE because it sets the pressure differential driving air into the cylinder:</p>
<ul>
<li>At light throttle (low MAP), the intake manifold is at high vacuum. Residual exhaust gas dilutes the fresh charge more, reducing effective VE.</li>
<li>At wide-open throttle (WOT), MAP approaches atmospheric and the VE table more closely reflects the engine&#39;s true breathing capacity.</li>
</ul>
<p><strong>Temperature</strong> matters because air density changes with temperature. IAT compensation is handled separately from the VE table; the ECU multiplies the VE-derived air mass by a correction factor based on measured IAT.</p>
<h2 id="the-ve-table-axes">The VE table axes</h2>
<p>Most ECUs use a 2D lookup table with:</p>
<ul>
<li><strong>X axis: RPM.</strong> Typically 8-16 breakpoints from idle (e.g. 500 RPM) to redline</li>
<li><strong>Y axis: MAP or TPS.</strong> MAP-based load is most common on speed-density systems</li>
</ul>
<p>Between breakpoints the ECU interpolates bilinearly, so the actual VE value used is a weighted blend of the four surrounding cells.</p>
<p>The table only needs to be accurate in regions the engine actually visits. Cells you never run in don&#39;t matter, but a cold-start idle at 900 RPM will use a completely different region of the table than a motorway cruise at 2500 RPM and 50 kPa.</p>
<h2 id="speed-density-vs-alpha-n">Speed-density vs alpha-n</h2>
<p><strong>Speed-density</strong> systems (used by Speeduino and most MegaSquirt setups) use MAP as the load axis. The ECU calculates air mass from MAP, IAT, and VE. This works well for most naturally aspirated and turbocharged engines.</p>
<p>Where MAP itself is an unreliable load signal, some setups switch to <strong>Alpha-N</strong> and use throttle position as the load axis instead. That is common on high-cam engines with aggressive overlap, where manifold vacuum fluctuates so much at idle that MAP becomes useless. Alpha-N trades away some of the VE table&#39;s physical meaning but can be more tractable on difficult engines.</p>
<p>Speeduino offers a middle path for engines with mild overlap issues: MAP sampling can be configured to average the reading across the full crank rotation rather than sampling at a single fixed point. This smooths out the pressure pulses caused by valve events and produces a more stable load signal without abandoning speed-density entirely.</p>
<h2 id="ve-and-fuelling-accuracy">VE and fuelling accuracy</h2>
<p>A 1% error in the VE table produces roughly a 1% fuelling error. At stoichiometry (lambda=1), this is small but measurable. Under heavy load with a rich target (e.g. lambda=0.85 for power), fuelling errors compound with the enrichment correction, so accuracy matters more.</p>
<p>VE Analysis in VETuner automates the process of correcting these errors by comparing actual measured lambda against your target lambda across the operating map. See <a href="https://vetuner.co.uk/ve-analysis/">VE Analysis</a> for how to run it.</p>
<h2 id="related-guides">Related guides</h2>
<ul>
<li><a href="https://vetuner.co.uk/adv-fuel-equation/">The Fuel Equation</a></li>
<li><a href="https://vetuner.co.uk/adv-lambda-afr/">Lambda and AFR</a></li>
<li><a href="https://vetuner.co.uk/ve-analysis/">VE Analysis</a></li>
</ul>
]]></description>
      <content:encoded><![CDATA[<h1 id="volumetric-efficiency-theory">Volumetric Efficiency Theory</h1>
<h2 id="what-is-volumetric-efficiency">What is volumetric efficiency?</h2>
<p>Volumetric efficiency (VE) is the ratio of air mass actually drawn into a cylinder on an intake stroke to the theoretical maximum that cylinder could hold at ambient conditions.</p>
<p>A naturally aspirated engine at peak VE might fill its cylinders to 85-95% of swept volume. The remaining percentage is lost to flow restrictions, heat transfer, valve timing constraints, and inertia effects. A well-tuned intake with resonant ram charging can push VE above 100% at certain RPM.</p>
<p>Forced induction (turbocharging or supercharging) compresses the intake charge above atmospheric pressure, forcing more air into the cylinder than it could draw unaided. VE values of 150-200% or higher are common on boosted engines. The VE table handles this naturally: cells at high MAP values simply contain larger numbers.</p>
<p>VE is expressed as a percentage: a reading of 80% means the cylinder drew in 80% of the air that would fit at standard temperature and pressure.</p>
<h2 id="why-efi-uses-a-ve-table">Why EFI uses a VE table</h2>
<p>A fuel-injected engine needs to deliver the correct mass of fuel for the air entering the cylinder. The ECU cannot measure air mass directly; it infers it from manifold absolute pressure (MAP), intake air temperature (IAT), engine displacement, and VE.</p>
<p>The VE table maps VE against RPM and load (usually MAP or throttle position). At each combination of RPM and load, the table tells the ECU what fraction of the cylinder is actually filling with air. The ECU uses that to calculate how much fuel to inject.</p>
<p>Getting the VE table right is the core of fuel tuning: an accurate table means accurate fuelling across the whole operating range.</p>
<h2 id="how-ve-varies-with-operating-conditions">How VE varies with operating conditions</h2>
<p><strong>RPM</strong> affects VE through several mechanisms:</p>
<ul>
<li>At low RPM, gas velocity is low and inertia charging is minimal. VE tends to be modest.</li>
<li>As RPM rises, inertia charging improves and VE climbs, up to a point.</li>
<li>Beyond peak torque RPM, the intake can no longer fill the cylinder in the available time. VE falls.</li>
<li>Valve timing is fixed on most engines, so it is optimised for a particular RPM range. Variable valve timing shifts this window.</li>
</ul>
<p><strong>Inertia charging</strong> (also called ram charging) is the effect where the moving column of air in the intake tract has momentum. As the intake valve closes, the air that was flowing towards the cylinder doesn&#39;t stop instantly; it piles up against the closed valve, briefly raising local pressure and packing more charge into the cylinder. At certain RPM, the pressure wave reflections from the intake plenum and runners arrive back at the valve just as it is closing, amplifying the effect. This is why an engine&#39;s torque curve has a peak: VE rises to a maximum at the RPM where intake geometry and valve timing align with the inertia charging resonance.</p>
<p><strong>Load (MAP)</strong> affects VE because it sets the pressure differential driving air into the cylinder:</p>
<ul>
<li>At light throttle (low MAP), the intake manifold is at high vacuum. Residual exhaust gas dilutes the fresh charge more, reducing effective VE.</li>
<li>At wide-open throttle (WOT), MAP approaches atmospheric and the VE table more closely reflects the engine&#39;s true breathing capacity.</li>
</ul>
<p><strong>Temperature</strong> matters because air density changes with temperature. IAT compensation is handled separately from the VE table; the ECU multiplies the VE-derived air mass by a correction factor based on measured IAT.</p>
<h2 id="the-ve-table-axes">The VE table axes</h2>
<p>Most ECUs use a 2D lookup table with:</p>
<ul>
<li><strong>X axis: RPM.</strong> Typically 8-16 breakpoints from idle (e.g. 500 RPM) to redline</li>
<li><strong>Y axis: MAP or TPS.</strong> MAP-based load is most common on speed-density systems</li>
</ul>
<p>Between breakpoints the ECU interpolates bilinearly, so the actual VE value used is a weighted blend of the four surrounding cells.</p>
<p>The table only needs to be accurate in regions the engine actually visits. Cells you never run in don&#39;t matter, but a cold-start idle at 900 RPM will use a completely different region of the table than a motorway cruise at 2500 RPM and 50 kPa.</p>
<h2 id="speed-density-vs-alpha-n">Speed-density vs alpha-n</h2>
<p><strong>Speed-density</strong> systems (used by Speeduino and most MegaSquirt setups) use MAP as the load axis. The ECU calculates air mass from MAP, IAT, and VE. This works well for most naturally aspirated and turbocharged engines.</p>
<p>Where MAP itself is an unreliable load signal, some setups switch to <strong>Alpha-N</strong> and use throttle position as the load axis instead. That is common on high-cam engines with aggressive overlap, where manifold vacuum fluctuates so much at idle that MAP becomes useless. Alpha-N trades away some of the VE table&#39;s physical meaning but can be more tractable on difficult engines.</p>
<p>Speeduino offers a middle path for engines with mild overlap issues: MAP sampling can be configured to average the reading across the full crank rotation rather than sampling at a single fixed point. This smooths out the pressure pulses caused by valve events and produces a more stable load signal without abandoning speed-density entirely.</p>
<h2 id="ve-and-fuelling-accuracy">VE and fuelling accuracy</h2>
<p>A 1% error in the VE table produces roughly a 1% fuelling error. At stoichiometry (lambda=1), this is small but measurable. Under heavy load with a rich target (e.g. lambda=0.85 for power), fuelling errors compound with the enrichment correction, so accuracy matters more.</p>
<p>VE Analysis in VETuner automates the process of correcting these errors by comparing actual measured lambda against your target lambda across the operating map. See <a href="https://vetuner.co.uk/ve-analysis/">VE Analysis</a> for how to run it.</p>
<h2 id="related-guides">Related guides</h2>
<ul>
<li><a href="https://vetuner.co.uk/adv-fuel-equation/">The Fuel Equation</a></li>
<li><a href="https://vetuner.co.uk/adv-lambda-afr/">Lambda and AFR</a></li>
<li><a href="https://vetuner.co.uk/ve-analysis/">VE Analysis</a></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>The Fuel Equation</title>
      <link>https://vetuner.co.uk/adv-fuel-equation/</link>
      <guid isPermaLink="true">https://vetuner.co.uk/adv-fuel-equation/</guid>
      <pubDate>Wed, 16 Sep 2026 00:00:00 GMT</pubDate>
      <description><![CDATA[<h1 id="the-fuel-equation">The Fuel Equation</h1>
<h2 id="overview">Overview</h2>
<p>Every time a cylinder fires, the ECU must decide how long to open the injector. Too short and the mixture is lean; too long and it is rich. The calculation starts with the VE table and works through a chain of corrections to arrive at an injector pulse width in milliseconds.</p>
<h2 id="air-mass-calculation">Air mass calculation</h2>
<p>The ECU first estimates the mass of air entering the cylinder:</p>
<pre><code>air_mass = (MAP / (R * IAT)) * displacement_per_cylinder * VE
</code></pre>
<p>Where:</p>
<ul>
<li><strong>MAP:</strong> manifold absolute pressure in kPa</li>
<li><strong>R:</strong> specific gas constant for air (287 J/kg/K)</li>
<li><strong>IAT:</strong> intake air temperature in Kelvin (deg C + 273.15)</li>
<li><strong>displacement_per_cylinder:</strong> engine swept volume divided by cylinder count, in litres</li>
<li><strong>VE:</strong> volumetric efficiency from the table, as a fraction (e.g. 0.80 for 80%)</li>
</ul>
<p>This is the ideal gas law applied to the intake charge. It gives air mass in grams.</p>
<h2 id="fuel-mass-required">Fuel mass required</h2>
<p>The required fuel mass follows directly from the air mass and the target AFR:</p>
<pre><code>fuel_mass = air_mass / target_AFR
</code></pre>
<p>Target AFR comes from the AFR target table (also called the lambda target table). At stoichiometry for petrol, AFR is 14.7:1, so <code>fuel_mass = air_mass / 14.7</code>.</p>
<h2 id="injector-pulse-width">Injector pulse width</h2>
<p>The ECU converts fuel mass to a time duration using the injector&#39;s flow rate:</p>
<pre><code>pulse_width = fuel_mass / injector_flow_rate
</code></pre>
<p>Injector flow rate is set in the firmware configuration (typically in cc/min or lb/hr at a reference fuel pressure). The ECU divides the required fuel mass by this rate to get a duration in milliseconds.</p>
<p>A staging factor applies if the engine has more than one injector per cylinder (staged injection), but on most single-injector-per-cylinder setups it is 1.</p>
<h2 id="dead-time-injector-latency">Dead time (injector latency)</h2>
<p>Injectors do not respond instantly. From when the ECU sends the open signal to when fuel actually flows, there is a dead time, typically 0.5-1.5 ms depending on the injector and battery voltage. The ECU adds this to every pulse:</p>
<pre><code>effective_pulse_width = pulse_width + dead_time(battery_voltage)
</code></pre>
<p>Dead time increases as battery voltage drops (the solenoid takes longer to open). The dead time table maps battery voltage to dead time in milliseconds. Getting this wrong introduces a constant fuelling offset that is worst at idle, where pulse widths are short and dead time is a larger fraction of the total.</p>
<h2 id="fuel-pressure-correction">Fuel pressure correction</h2>
<p>Injector flow rate is specified at a reference pressure (usually 3 bar or 43.5 psi differential). If your fuel pressure differs, the effective flow rate changes:</p>
<pre><code>corrected_flow = rated_flow * sqrt(actual_pressure / reference_pressure)
</code></pre>
<p>Flow scales with the square root of the pressure differential (Bernoulli). Some ECUs handle this automatically via a fuel pressure sensor; others require the injector size to be entered at the actual operating pressure.</p>
<h2 id="correction-multipliers">Correction multipliers</h2>
<p>The base pulse width is multiplied by several correction factors before it reaches the injector:</p>
<table>
<thead>
<tr>
<th>Correction</th>
<th>Purpose</th>
</tr>
</thead>
<tbody><tr>
<td><strong>Warmup enrichment (WUE)</strong></td>
<td>Extra fuel during cold running; tapers to 1.0 at operating temperature</td>
</tr>
<tr>
<td><strong>Afterstart enrichment (ASE)</strong></td>
<td>Brief enrichment immediately after the engine fires; prevents stall on start</td>
</tr>
<tr>
<td><strong>Accel enrichment (AE)</strong></td>
<td>Transient fuel added on sudden throttle opening to compensate for wall-wetting</td>
</tr>
<tr>
<td><strong>IAT correction</strong></td>
<td>Adjusts for air density changes with temperature; lean at high IAT, rich at low IAT</td>
</tr>
<tr>
<td><strong>Barometric correction</strong></td>
<td>Adjusts for altitude; air is less dense at high altitude</td>
</tr>
<tr>
<td><strong>Closed-loop trim</strong></td>
<td>O2 sensor feedback correction when closed-loop is active</td>
</tr>
</tbody></table>
<p>These all multiply together. An engine starting from cold will see WUE of perhaps 1.3 (30% extra fuel) and ASE on top of that; as it warms up both taper toward 1.0.</p>
<h2 id="what-goes-wrong-and-why">What goes wrong and why</h2>
<p><strong>Lean at idle, correct at load:</strong> often dead time is wrong. Dead time affects short pulses (idle) far more than long ones (full load).</p>
<p><strong>Correct at idle, lean at full load:</strong> VE table is too low in the high-RPM/high-load region, or the injectors are undersized.</p>
<p><strong>Rich on tip-in, correct in steady state:</strong> accel enrichment is over-set.</p>
<p><strong>Consistently lean or rich everywhere:</strong> injector size (cc/min) is entered incorrectly, or the fuel pressure differs from the reference without correction.</p>
<p><strong>Hunting idle, correct elsewhere:</strong> check warmup enrichment is not still active at operating temperature, and that the idle ignition advance is reasonable (see <a href="https://vetuner.co.uk/adv-ignition-theory/">Ignition Timing Theory</a>).</p>
<h2 id="injector-sizing">Injector sizing</h2>
<p>As a rule of thumb, choose injectors so that they run at no more than 80% duty cycle at peak power. Duty cycle is pulse width divided by the time available between injections (60,000 / RPM / cylinders for sequential, or half that for batch fire).</p>
<pre><code>max_flow_needed = (power_kW * BSFC) / (num_cylinders * 0.80)
</code></pre>
<p>Where BSFC (brake specific fuel consumption) is typically 0.27-0.32 kg/kWh for a naturally aspirated petrol engine at WOT. Convert to cc/min using fuel density (~0.74 kg/litre for petrol).</p>
<p>Oversized injectors are harder to tune at idle because pulse widths become very short relative to dead time; undersized injectors cannot supply enough fuel at peak power.</p>
<h2 id="related-guides">Related guides</h2>
<ul>
<li><a href="https://vetuner.co.uk/adv-ve-theory/">Volumetric Efficiency Theory</a></li>
<li><a href="https://vetuner.co.uk/adv-lambda-afr/">Lambda and AFR</a></li>
<li><a href="https://vetuner.co.uk/tuning/">Editing Tuning Tables</a></li>
</ul>
]]></description>
      <content:encoded><![CDATA[<h1 id="the-fuel-equation">The Fuel Equation</h1>
<h2 id="overview">Overview</h2>
<p>Every time a cylinder fires, the ECU must decide how long to open the injector. Too short and the mixture is lean; too long and it is rich. The calculation starts with the VE table and works through a chain of corrections to arrive at an injector pulse width in milliseconds.</p>
<h2 id="air-mass-calculation">Air mass calculation</h2>
<p>The ECU first estimates the mass of air entering the cylinder:</p>
<pre><code>air_mass = (MAP / (R * IAT)) * displacement_per_cylinder * VE
</code></pre>
<p>Where:</p>
<ul>
<li><strong>MAP:</strong> manifold absolute pressure in kPa</li>
<li><strong>R:</strong> specific gas constant for air (287 J/kg/K)</li>
<li><strong>IAT:</strong> intake air temperature in Kelvin (deg C + 273.15)</li>
<li><strong>displacement_per_cylinder:</strong> engine swept volume divided by cylinder count, in litres</li>
<li><strong>VE:</strong> volumetric efficiency from the table, as a fraction (e.g. 0.80 for 80%)</li>
</ul>
<p>This is the ideal gas law applied to the intake charge. It gives air mass in grams.</p>
<h2 id="fuel-mass-required">Fuel mass required</h2>
<p>The required fuel mass follows directly from the air mass and the target AFR:</p>
<pre><code>fuel_mass = air_mass / target_AFR
</code></pre>
<p>Target AFR comes from the AFR target table (also called the lambda target table). At stoichiometry for petrol, AFR is 14.7:1, so <code>fuel_mass = air_mass / 14.7</code>.</p>
<h2 id="injector-pulse-width">Injector pulse width</h2>
<p>The ECU converts fuel mass to a time duration using the injector&#39;s flow rate:</p>
<pre><code>pulse_width = fuel_mass / injector_flow_rate
</code></pre>
<p>Injector flow rate is set in the firmware configuration (typically in cc/min or lb/hr at a reference fuel pressure). The ECU divides the required fuel mass by this rate to get a duration in milliseconds.</p>
<p>A staging factor applies if the engine has more than one injector per cylinder (staged injection), but on most single-injector-per-cylinder setups it is 1.</p>
<h2 id="dead-time-injector-latency">Dead time (injector latency)</h2>
<p>Injectors do not respond instantly. From when the ECU sends the open signal to when fuel actually flows, there is a dead time, typically 0.5-1.5 ms depending on the injector and battery voltage. The ECU adds this to every pulse:</p>
<pre><code>effective_pulse_width = pulse_width + dead_time(battery_voltage)
</code></pre>
<p>Dead time increases as battery voltage drops (the solenoid takes longer to open). The dead time table maps battery voltage to dead time in milliseconds. Getting this wrong introduces a constant fuelling offset that is worst at idle, where pulse widths are short and dead time is a larger fraction of the total.</p>
<h2 id="fuel-pressure-correction">Fuel pressure correction</h2>
<p>Injector flow rate is specified at a reference pressure (usually 3 bar or 43.5 psi differential). If your fuel pressure differs, the effective flow rate changes:</p>
<pre><code>corrected_flow = rated_flow * sqrt(actual_pressure / reference_pressure)
</code></pre>
<p>Flow scales with the square root of the pressure differential (Bernoulli). Some ECUs handle this automatically via a fuel pressure sensor; others require the injector size to be entered at the actual operating pressure.</p>
<h2 id="correction-multipliers">Correction multipliers</h2>
<p>The base pulse width is multiplied by several correction factors before it reaches the injector:</p>
<table>
<thead>
<tr>
<th>Correction</th>
<th>Purpose</th>
</tr>
</thead>
<tbody><tr>
<td><strong>Warmup enrichment (WUE)</strong></td>
<td>Extra fuel during cold running; tapers to 1.0 at operating temperature</td>
</tr>
<tr>
<td><strong>Afterstart enrichment (ASE)</strong></td>
<td>Brief enrichment immediately after the engine fires; prevents stall on start</td>
</tr>
<tr>
<td><strong>Accel enrichment (AE)</strong></td>
<td>Transient fuel added on sudden throttle opening to compensate for wall-wetting</td>
</tr>
<tr>
<td><strong>IAT correction</strong></td>
<td>Adjusts for air density changes with temperature; lean at high IAT, rich at low IAT</td>
</tr>
<tr>
<td><strong>Barometric correction</strong></td>
<td>Adjusts for altitude; air is less dense at high altitude</td>
</tr>
<tr>
<td><strong>Closed-loop trim</strong></td>
<td>O2 sensor feedback correction when closed-loop is active</td>
</tr>
</tbody></table>
<p>These all multiply together. An engine starting from cold will see WUE of perhaps 1.3 (30% extra fuel) and ASE on top of that; as it warms up both taper toward 1.0.</p>
<h2 id="what-goes-wrong-and-why">What goes wrong and why</h2>
<p><strong>Lean at idle, correct at load:</strong> often dead time is wrong. Dead time affects short pulses (idle) far more than long ones (full load).</p>
<p><strong>Correct at idle, lean at full load:</strong> VE table is too low in the high-RPM/high-load region, or the injectors are undersized.</p>
<p><strong>Rich on tip-in, correct in steady state:</strong> accel enrichment is over-set.</p>
<p><strong>Consistently lean or rich everywhere:</strong> injector size (cc/min) is entered incorrectly, or the fuel pressure differs from the reference without correction.</p>
<p><strong>Hunting idle, correct elsewhere:</strong> check warmup enrichment is not still active at operating temperature, and that the idle ignition advance is reasonable (see <a href="https://vetuner.co.uk/adv-ignition-theory/">Ignition Timing Theory</a>).</p>
<h2 id="injector-sizing">Injector sizing</h2>
<p>As a rule of thumb, choose injectors so that they run at no more than 80% duty cycle at peak power. Duty cycle is pulse width divided by the time available between injections (60,000 / RPM / cylinders for sequential, or half that for batch fire).</p>
<pre><code>max_flow_needed = (power_kW * BSFC) / (num_cylinders * 0.80)
</code></pre>
<p>Where BSFC (brake specific fuel consumption) is typically 0.27-0.32 kg/kWh for a naturally aspirated petrol engine at WOT. Convert to cc/min using fuel density (~0.74 kg/litre for petrol).</p>
<p>Oversized injectors are harder to tune at idle because pulse widths become very short relative to dead time; undersized injectors cannot supply enough fuel at peak power.</p>
<h2 id="related-guides">Related guides</h2>
<ul>
<li><a href="https://vetuner.co.uk/adv-ve-theory/">Volumetric Efficiency Theory</a></li>
<li><a href="https://vetuner.co.uk/adv-lambda-afr/">Lambda and AFR</a></li>
<li><a href="https://vetuner.co.uk/tuning/">Editing Tuning Tables</a></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Lambda and AFR</title>
      <link>https://vetuner.co.uk/adv-lambda-afr/</link>
      <guid isPermaLink="true">https://vetuner.co.uk/adv-lambda-afr/</guid>
      <pubDate>Wed, 16 Sep 2026 00:00:00 GMT</pubDate>
      <description><![CDATA[<h1 id="lambda-and-afr">Lambda and AFR</h1>
<h2 id="lambda-and-afr-compared">Lambda and AFR compared</h2>
<p>Lambda (lambda) and air-fuel ratio (AFR) both describe how much air is mixed with fuel relative to a chemically ideal mixture.</p>
<p><strong>Lambda</strong> is a normalised ratio. lambda = 1.0 means exactly stoichiometric: neither lean nor rich. lambda &lt; 1.0 is rich; lambda &gt; 1.0 is lean. Lambda is fuel-independent: lambda = 0.85 means 15% rich regardless of whether you are running petrol, ethanol, or any other fuel.</p>
<p><strong>AFR</strong> is the mass ratio of air to fuel. It depends on the fuel. Stoichiometric AFR for petrol is approximately 14.7:1; for ethanol it is 9.0:1; for E85 it is around 9.8:1.</p>
<p>The conversion is simple:</p>
<pre><code>lambda = AFR / stoichiometric_AFR
</code></pre>
<p>Most wideband controllers can display either. Lambda is the more useful value when comparing across fuels or when communicating with other tuners.</p>
<h2 id="stoichiometric-afr-by-fuel">Stoichiometric AFR by fuel</h2>
<table>
<thead>
<tr>
<th>Fuel</th>
<th>Stoichiometric AFR</th>
</tr>
</thead>
<tbody><tr>
<td>Petrol (typical)</td>
<td>14.7:1</td>
</tr>
<tr>
<td>Ethanol (E100)</td>
<td>9.0:1</td>
</tr>
<tr>
<td>E85</td>
<td>~9.8:1</td>
</tr>
<tr>
<td>LPG (propane)</td>
<td>15.7:1</td>
</tr>
<tr>
<td>Methanol</td>
<td>6.5:1</td>
</tr>
<tr>
<td>Diesel</td>
<td>~14.5:1</td>
</tr>
</tbody></table>
<p>E85 varies in practice: the ethanol percentage in pump E85 ranges from about 51% to 83% depending on season and region, so the stoichiometric AFR shifts accordingly. Flex-fuel systems measure ethanol content in real time; fixed E85 tunes typically assume a worst case or a local average.</p>
<h2 id="rich-and-lean-in-practice">Rich and lean in practice</h2>
<p>A petrol engine does not always run at stoichiometry. Different operating conditions call for different lambda targets:</p>
<table>
<thead>
<tr>
<th>Condition</th>
<th>Typical lambda</th>
<th>Reason</th>
</tr>
</thead>
<tbody><tr>
<td>Idle (warm)</td>
<td>0.97-1.03</td>
<td>Near stoich for emissions and efficiency</td>
</tr>
<tr>
<td>Cruise (light load)</td>
<td>0.95-1.05</td>
<td>Economy, catalyst efficiency</td>
</tr>
<tr>
<td>Full load (power)</td>
<td>0.82-0.90</td>
<td>Charge cooling, knock suppression</td>
</tr>
<tr>
<td>Cold start</td>
<td>0.70-0.85</td>
<td>Compensates for poor atomisation</td>
</tr>
<tr>
<td>Overrun (decel)</td>
<td>&gt;1.2</td>
<td>Closed throttle, minimal injection</td>
</tr>
</tbody></table>
<p>The AFR target table in the ECU defines the target lambda (or AFR) for every cell in the RPM/load map. VETuner&#39;s VE Analysis compares the measured wideband lambda against this target to calculate VE corrections.</p>
<h2 id="narrowband-vs-wideband-sensors">Narrowband vs wideband sensors</h2>
<p>A <strong>narrowband (NBO2)</strong> sensor works like a switch: its voltage steps sharply near stoichiometry, high when rich and low when lean, with a very narrow transition band around lambda = 1.0. It tells you which side of stoich you are on, but not by how much. Useful only for closed-loop idle trims near stoich.</p>
<p><strong>Wideband (WBO2)</strong> sensors measure a continuous current proportional to oxygen content across a broad range, typically lambda = 0.65-1.6 or wider. They require a dedicated controller (Innovate, AEM, PLX, etc.) that converts the sensor current to a usable output (0-5 V analogue, serial, or CAN).</p>
<p>VETuner&#39;s VE Analysis requires a wideband sensor. A narrowband sensor provides only binary rich/lean information and cannot be used for accurate corrections.</p>
<h2 id="wideband-accuracy-and-pitfalls">Wideband accuracy and pitfalls</h2>
<p>Wideband sensors are accurate in steady-state conditions but can give misleading readings when:</p>
<ul>
<li><strong>Exhaust scavenging</strong> pulls fresh air past the sensor on overlap, making the mixture appear lean</li>
<li><strong>Misfires</strong> pass unburnt fuel and oxygen through, giving erratic readings</li>
<li><strong>Cold sensors</strong> take 20-30 seconds to reach operating temperature; readings before that are invalid</li>
<li><strong>Sensor poisoning</strong> from leaded fuel, silicone gasket sealant, or certain coolant additives permanently degrades accuracy</li>
<li><strong>Exhaust leaks upstream</strong> of the sensor dilute exhaust with ambient air, biasing toward lean</li>
</ul>
<p>VETuner&#39;s dead lambda filter rejects sensor readings that are implausible or stuck, which catches some of these conditions, but physical checks on sensor placement and exhaust integrity are still necessary for clean data.</p>
<h2 id="lambda-and-knock">Lambda and knock</h2>
<p>Running lean increases combustion temperature and the risk of knock (detonation). A common error on first tunes is running a lean mixture at full load in the belief that it is more economical. It is, briefly, right up until bits of your engine come out of the exhaust port, or the side of the block.</p>
<p>At full load, the fuelling target should be rich enough to keep combustion temperatures under control. The appropriate lambda depends on the engine, compression ratio, and fuel quality. For a mild road engine on 95-98 RON petrol, lambda = 0.85-0.88 at WOT is a reasonable starting point. Reduce if knock is present; do not lean out further to chase power without addressing knock first.</p>
<h2 id="configuring-the-correct-stoichiometric-afr-in-the-ecu">Configuring the correct stoichiometric AFR in the ECU</h2>
<p>The stoichiometric AFR setting tells the ECU what AFR corresponds to lambda=1.0 for your fuel. If it is wrong, the ECU&#39;s AFR display and targets are calibrated against the wrong reference point.</p>
<p>The simplest way to see why this matters: an AFR reading of 14.7 on a petrol engine is stoichiometric and unremarkable. The same reading of 14.7 on an E85 engine means the actual lambda is 14.7 / 9.8 ~ 1.5, dangerously lean. If the ECU&#39;s stoich is set to 14.7 (petrol) on an E85 engine, the display and fuel targets will treat 14.7 as stoich, hiding a severely lean condition.</p>
<p>Always verify the stoichiometric AFR setting matches your actual fuel before tuning or interpreting data.</p>
<h2 id="related-guides">Related guides</h2>
<ul>
<li><a href="https://vetuner.co.uk/adv-fuel-equation/">The Fuel Equation</a></li>
<li><a href="https://vetuner.co.uk/adv-closed-loop/">Closed-Loop Fuel Control</a></li>
<li><a href="https://vetuner.co.uk/ve-analysis/">VE Analysis</a></li>
</ul>
]]></description>
      <content:encoded><![CDATA[<h1 id="lambda-and-afr">Lambda and AFR</h1>
<h2 id="lambda-and-afr-compared">Lambda and AFR compared</h2>
<p>Lambda (lambda) and air-fuel ratio (AFR) both describe how much air is mixed with fuel relative to a chemically ideal mixture.</p>
<p><strong>Lambda</strong> is a normalised ratio. lambda = 1.0 means exactly stoichiometric: neither lean nor rich. lambda &lt; 1.0 is rich; lambda &gt; 1.0 is lean. Lambda is fuel-independent: lambda = 0.85 means 15% rich regardless of whether you are running petrol, ethanol, or any other fuel.</p>
<p><strong>AFR</strong> is the mass ratio of air to fuel. It depends on the fuel. Stoichiometric AFR for petrol is approximately 14.7:1; for ethanol it is 9.0:1; for E85 it is around 9.8:1.</p>
<p>The conversion is simple:</p>
<pre><code>lambda = AFR / stoichiometric_AFR
</code></pre>
<p>Most wideband controllers can display either. Lambda is the more useful value when comparing across fuels or when communicating with other tuners.</p>
<h2 id="stoichiometric-afr-by-fuel">Stoichiometric AFR by fuel</h2>
<table>
<thead>
<tr>
<th>Fuel</th>
<th>Stoichiometric AFR</th>
</tr>
</thead>
<tbody><tr>
<td>Petrol (typical)</td>
<td>14.7:1</td>
</tr>
<tr>
<td>Ethanol (E100)</td>
<td>9.0:1</td>
</tr>
<tr>
<td>E85</td>
<td>~9.8:1</td>
</tr>
<tr>
<td>LPG (propane)</td>
<td>15.7:1</td>
</tr>
<tr>
<td>Methanol</td>
<td>6.5:1</td>
</tr>
<tr>
<td>Diesel</td>
<td>~14.5:1</td>
</tr>
</tbody></table>
<p>E85 varies in practice: the ethanol percentage in pump E85 ranges from about 51% to 83% depending on season and region, so the stoichiometric AFR shifts accordingly. Flex-fuel systems measure ethanol content in real time; fixed E85 tunes typically assume a worst case or a local average.</p>
<h2 id="rich-and-lean-in-practice">Rich and lean in practice</h2>
<p>A petrol engine does not always run at stoichiometry. Different operating conditions call for different lambda targets:</p>
<table>
<thead>
<tr>
<th>Condition</th>
<th>Typical lambda</th>
<th>Reason</th>
</tr>
</thead>
<tbody><tr>
<td>Idle (warm)</td>
<td>0.97-1.03</td>
<td>Near stoich for emissions and efficiency</td>
</tr>
<tr>
<td>Cruise (light load)</td>
<td>0.95-1.05</td>
<td>Economy, catalyst efficiency</td>
</tr>
<tr>
<td>Full load (power)</td>
<td>0.82-0.90</td>
<td>Charge cooling, knock suppression</td>
</tr>
<tr>
<td>Cold start</td>
<td>0.70-0.85</td>
<td>Compensates for poor atomisation</td>
</tr>
<tr>
<td>Overrun (decel)</td>
<td>&gt;1.2</td>
<td>Closed throttle, minimal injection</td>
</tr>
</tbody></table>
<p>The AFR target table in the ECU defines the target lambda (or AFR) for every cell in the RPM/load map. VETuner&#39;s VE Analysis compares the measured wideband lambda against this target to calculate VE corrections.</p>
<h2 id="narrowband-vs-wideband-sensors">Narrowband vs wideband sensors</h2>
<p>A <strong>narrowband (NBO2)</strong> sensor works like a switch: its voltage steps sharply near stoichiometry, high when rich and low when lean, with a very narrow transition band around lambda = 1.0. It tells you which side of stoich you are on, but not by how much. Useful only for closed-loop idle trims near stoich.</p>
<p><strong>Wideband (WBO2)</strong> sensors measure a continuous current proportional to oxygen content across a broad range, typically lambda = 0.65-1.6 or wider. They require a dedicated controller (Innovate, AEM, PLX, etc.) that converts the sensor current to a usable output (0-5 V analogue, serial, or CAN).</p>
<p>VETuner&#39;s VE Analysis requires a wideband sensor. A narrowband sensor provides only binary rich/lean information and cannot be used for accurate corrections.</p>
<h2 id="wideband-accuracy-and-pitfalls">Wideband accuracy and pitfalls</h2>
<p>Wideband sensors are accurate in steady-state conditions but can give misleading readings when:</p>
<ul>
<li><strong>Exhaust scavenging</strong> pulls fresh air past the sensor on overlap, making the mixture appear lean</li>
<li><strong>Misfires</strong> pass unburnt fuel and oxygen through, giving erratic readings</li>
<li><strong>Cold sensors</strong> take 20-30 seconds to reach operating temperature; readings before that are invalid</li>
<li><strong>Sensor poisoning</strong> from leaded fuel, silicone gasket sealant, or certain coolant additives permanently degrades accuracy</li>
<li><strong>Exhaust leaks upstream</strong> of the sensor dilute exhaust with ambient air, biasing toward lean</li>
</ul>
<p>VETuner&#39;s dead lambda filter rejects sensor readings that are implausible or stuck, which catches some of these conditions, but physical checks on sensor placement and exhaust integrity are still necessary for clean data.</p>
<h2 id="lambda-and-knock">Lambda and knock</h2>
<p>Running lean increases combustion temperature and the risk of knock (detonation). A common error on first tunes is running a lean mixture at full load in the belief that it is more economical. It is, briefly, right up until bits of your engine come out of the exhaust port, or the side of the block.</p>
<p>At full load, the fuelling target should be rich enough to keep combustion temperatures under control. The appropriate lambda depends on the engine, compression ratio, and fuel quality. For a mild road engine on 95-98 RON petrol, lambda = 0.85-0.88 at WOT is a reasonable starting point. Reduce if knock is present; do not lean out further to chase power without addressing knock first.</p>
<h2 id="configuring-the-correct-stoichiometric-afr-in-the-ecu">Configuring the correct stoichiometric AFR in the ECU</h2>
<p>The stoichiometric AFR setting tells the ECU what AFR corresponds to lambda=1.0 for your fuel. If it is wrong, the ECU&#39;s AFR display and targets are calibrated against the wrong reference point.</p>
<p>The simplest way to see why this matters: an AFR reading of 14.7 on a petrol engine is stoichiometric and unremarkable. The same reading of 14.7 on an E85 engine means the actual lambda is 14.7 / 9.8 ~ 1.5, dangerously lean. If the ECU&#39;s stoich is set to 14.7 (petrol) on an E85 engine, the display and fuel targets will treat 14.7 as stoich, hiding a severely lean condition.</p>
<p>Always verify the stoichiometric AFR setting matches your actual fuel before tuning or interpreting data.</p>
<h2 id="related-guides">Related guides</h2>
<ul>
<li><a href="https://vetuner.co.uk/adv-fuel-equation/">The Fuel Equation</a></li>
<li><a href="https://vetuner.co.uk/adv-closed-loop/">Closed-Loop Fuel Control</a></li>
<li><a href="https://vetuner.co.uk/ve-analysis/">VE Analysis</a></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Closed-Loop Fuel Control</title>
      <link>https://vetuner.co.uk/adv-closed-loop/</link>
      <guid isPermaLink="true">https://vetuner.co.uk/adv-closed-loop/</guid>
      <pubDate>Wed, 16 Sep 2026 00:00:00 GMT</pubDate>
      <description><![CDATA[<h1 id="closed-loop-fuel-control">Closed-Loop Fuel Control</h1>
<h2 id="what-closed-loop-does">What closed-loop does</h2>
<p>In open-loop operation the ECU injects fuel based purely on the VE table and correction factors, with no feedback from the exhaust. Closed-loop control adds a feedback loop: the ECU reads the O2 sensor, compares the actual mixture to the target, and trims the fuel delivery up or down to reduce the error.</p>
<p>The correction is applied as a multiplier, typically called the short-term fuel trim (STFT). If the wideband reads lean (lambda &gt; target), STFT increases above 1.0, adding fuel. If rich, STFT falls below 1.0, removing fuel. Some ECUs also accumulate a long-term fuel trim (LTFT) that persists across key cycles.</p>
<p>Closed-loop is not a substitute for a correctly tuned VE table. It is a fine-trim mechanism. If the VE table is 30% wrong, the closed-loop system will spend its entire authority trying to compensate and will still be wrong at any operating point where the trim limit is reached.</p>
<h2 id="narrowband-closed-loop">Narrowband closed-loop</h2>
<p>A narrowband (NBO2) sensor produces a step voltage near stoichiometry: high when rich, low when lean, with a transition band of roughly +/-2% lambda. The ECU hunts either side of stoich, oscillating the mixture at a few Hz. This is normal and visible in any data log.</p>
<p>All that hunting only works at or very near stoichiometry (lambda = 0.97-1.03); ask a narrowband sensor to hold a rich WOT target and it has nothing useful to say. Within its window it is cheap and reliable, and entirely adequate for light-load cruise correction on a well-tuned petrol engine.</p>
<h2 id="wideband-closed-loop">Wideband closed-loop</h2>
<p>A wideband sensor measures lambda continuously across the full operating range (typically lambda = 0.65-1.6), so it can chase any target lambda, including rich power targets. That makes it useful across far more of the map than narrowband.</p>
<p>What it will not do is filter out bad information. Exhaust leaks, misfires and a cold sensor all corrupt the reading (see <a href="https://vetuner.co.uk/adv-lambda-afr/">Lambda and AFR</a>), and a trim driven in the wrong direction is more dangerous than no correction at all. Check the sensor is healthy and the exhaust system sound before relying on it.</p>
<h2 id="trim-limits">Trim limits</h2>
<p>Every closed-loop implementation has trim limits: the maximum percentage by which the fuel trim can adjust injection. Typical settings are +/-10-15%. If the required correction exceeds the limit, the trim saturates and the actual mixture diverges from target.</p>
<p>A saturated trim is a sign that the VE table needs correcting in that region, not that the trim limit should be increased. Increasing trim limits allows larger corrections but makes the system more sensitive to sensor faults.</p>
<h2 id="operating-conditions-for-closed-loop">Operating conditions for closed-loop</h2>
<p>Most ECUs allow closed-loop to be gated by conditions:</p>
<table>
<thead>
<tr>
<th>Condition</th>
<th>Why</th>
</tr>
</thead>
<tbody><tr>
<td>Coolant temperature above threshold</td>
<td>Cold engines run deliberately rich; closing the loop before warm-up completes fights the warm-up enrichment</td>
</tr>
<tr>
<td>RPM within range</td>
<td>Very low idle and very high RPM are often excluded to avoid hunting</td>
</tr>
<tr>
<td>Load within range</td>
<td>Typically disabled at high load/WOT where a rich target is essential for engine protection</td>
</tr>
<tr>
<td>After-start delay</td>
<td>Gives the sensor time to reach operating temperature</td>
</tr>
</tbody></table>
<p>Getting these gates right matters. Closed-loop active during cold start enrichment will strip out the extra fuel the engine needs to run cleanly when cold.</p>
<h2 id="long-term-fuel-trims">Long-term fuel trims</h2>
<p>Some ECUs accumulate closed-loop corrections into a long-term trim table, indexed by RPM and load. This is essentially a correction map that overlays the VE table. Over many drive cycles, the LTFT learns the systematic errors in the VE table and compensates automatically.</p>
<p>The right approach is to use the accumulated LTFT data to correct the underlying VE table, then reset the LTFT to zero. Leaving a large LTFT in place means the engine is dependent on learned correction; a reset (after a firmware update, for example) will cause poor running until it relearns.</p>
<h2 id="closed-loop-and-ve-analysis">Closed-loop and VE Analysis</h2>
<p>VETuner&#39;s VE Analysis tool works from recorded wideband data rather than real-time closed-loop correction. It is complementary: use VE Analysis to build an accurate base VE table, then use closed-loop as a fine trim to absorb day-to-day variation (fuel quality, temperature, sensor drift).</p>
<h2 id="related-guides">Related guides</h2>
<ul>
<li><a href="https://vetuner.co.uk/adv-lambda-afr/">Lambda and AFR</a>  -  what the O2 sensor is actually measuring.</li>
<li><a href="https://vetuner.co.uk/ve-analysis/">VE Analysis</a>  -  build the base VE table first, then let closed-loop trim it.</li>
<li><a href="https://vetuner.co.uk/adv-ve-theory/">Volumetric Efficiency Theory</a>  -  why the VE table is the thing being corrected.</li>
</ul>
]]></description>
      <content:encoded><![CDATA[<h1 id="closed-loop-fuel-control">Closed-Loop Fuel Control</h1>
<h2 id="what-closed-loop-does">What closed-loop does</h2>
<p>In open-loop operation the ECU injects fuel based purely on the VE table and correction factors, with no feedback from the exhaust. Closed-loop control adds a feedback loop: the ECU reads the O2 sensor, compares the actual mixture to the target, and trims the fuel delivery up or down to reduce the error.</p>
<p>The correction is applied as a multiplier, typically called the short-term fuel trim (STFT). If the wideband reads lean (lambda &gt; target), STFT increases above 1.0, adding fuel. If rich, STFT falls below 1.0, removing fuel. Some ECUs also accumulate a long-term fuel trim (LTFT) that persists across key cycles.</p>
<p>Closed-loop is not a substitute for a correctly tuned VE table. It is a fine-trim mechanism. If the VE table is 30% wrong, the closed-loop system will spend its entire authority trying to compensate and will still be wrong at any operating point where the trim limit is reached.</p>
<h2 id="narrowband-closed-loop">Narrowband closed-loop</h2>
<p>A narrowband (NBO2) sensor produces a step voltage near stoichiometry: high when rich, low when lean, with a transition band of roughly +/-2% lambda. The ECU hunts either side of stoich, oscillating the mixture at a few Hz. This is normal and visible in any data log.</p>
<p>All that hunting only works at or very near stoichiometry (lambda = 0.97-1.03); ask a narrowband sensor to hold a rich WOT target and it has nothing useful to say. Within its window it is cheap and reliable, and entirely adequate for light-load cruise correction on a well-tuned petrol engine.</p>
<h2 id="wideband-closed-loop">Wideband closed-loop</h2>
<p>A wideband sensor measures lambda continuously across the full operating range (typically lambda = 0.65-1.6), so it can chase any target lambda, including rich power targets. That makes it useful across far more of the map than narrowband.</p>
<p>What it will not do is filter out bad information. Exhaust leaks, misfires and a cold sensor all corrupt the reading (see <a href="https://vetuner.co.uk/adv-lambda-afr/">Lambda and AFR</a>), and a trim driven in the wrong direction is more dangerous than no correction at all. Check the sensor is healthy and the exhaust system sound before relying on it.</p>
<h2 id="trim-limits">Trim limits</h2>
<p>Every closed-loop implementation has trim limits: the maximum percentage by which the fuel trim can adjust injection. Typical settings are +/-10-15%. If the required correction exceeds the limit, the trim saturates and the actual mixture diverges from target.</p>
<p>A saturated trim is a sign that the VE table needs correcting in that region, not that the trim limit should be increased. Increasing trim limits allows larger corrections but makes the system more sensitive to sensor faults.</p>
<h2 id="operating-conditions-for-closed-loop">Operating conditions for closed-loop</h2>
<p>Most ECUs allow closed-loop to be gated by conditions:</p>
<table>
<thead>
<tr>
<th>Condition</th>
<th>Why</th>
</tr>
</thead>
<tbody><tr>
<td>Coolant temperature above threshold</td>
<td>Cold engines run deliberately rich; closing the loop before warm-up completes fights the warm-up enrichment</td>
</tr>
<tr>
<td>RPM within range</td>
<td>Very low idle and very high RPM are often excluded to avoid hunting</td>
</tr>
<tr>
<td>Load within range</td>
<td>Typically disabled at high load/WOT where a rich target is essential for engine protection</td>
</tr>
<tr>
<td>After-start delay</td>
<td>Gives the sensor time to reach operating temperature</td>
</tr>
</tbody></table>
<p>Getting these gates right matters. Closed-loop active during cold start enrichment will strip out the extra fuel the engine needs to run cleanly when cold.</p>
<h2 id="long-term-fuel-trims">Long-term fuel trims</h2>
<p>Some ECUs accumulate closed-loop corrections into a long-term trim table, indexed by RPM and load. This is essentially a correction map that overlays the VE table. Over many drive cycles, the LTFT learns the systematic errors in the VE table and compensates automatically.</p>
<p>The right approach is to use the accumulated LTFT data to correct the underlying VE table, then reset the LTFT to zero. Leaving a large LTFT in place means the engine is dependent on learned correction; a reset (after a firmware update, for example) will cause poor running until it relearns.</p>
<h2 id="closed-loop-and-ve-analysis">Closed-loop and VE Analysis</h2>
<p>VETuner&#39;s VE Analysis tool works from recorded wideband data rather than real-time closed-loop correction. It is complementary: use VE Analysis to build an accurate base VE table, then use closed-loop as a fine trim to absorb day-to-day variation (fuel quality, temperature, sensor drift).</p>
<h2 id="related-guides">Related guides</h2>
<ul>
<li><a href="https://vetuner.co.uk/adv-lambda-afr/">Lambda and AFR</a>  -  what the O2 sensor is actually measuring.</li>
<li><a href="https://vetuner.co.uk/ve-analysis/">VE Analysis</a>  -  build the base VE table first, then let closed-loop trim it.</li>
<li><a href="https://vetuner.co.uk/adv-ve-theory/">Volumetric Efficiency Theory</a>  -  why the VE table is the thing being corrected.</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Ignition Timing Theory</title>
      <link>https://vetuner.co.uk/adv-ignition-theory/</link>
      <guid isPermaLink="true">https://vetuner.co.uk/adv-ignition-theory/</guid>
      <pubDate>Wed, 16 Sep 2026 00:00:00 GMT</pubDate>
      <description><![CDATA[<h1 id="ignition-timing-theory">Ignition Timing Theory</h1>
<h2 id="what-ignition-advance-does">What ignition advance does</h2>
<p>The ignition spark fires before the piston reaches top dead centre (TDC). This lead time is the <strong>ignition advance</strong>, measured in degrees of crankshaft rotation before TDC (deg BTDC).</p>
<p>After the spark, the flame front takes time to propagate across the combustion chamber. The goal is for peak cylinder pressure to occur a few degrees after TDC (roughly 15-20 deg ATDC on most engines), where the piston geometry gives the best mechanical advantage on the crankshaft.</p>
<p>If the spark fires too late (retarded), combustion is still developing as the piston descends; the expansion ratio is wasted and power and efficiency fall.</p>
<p>Advancing it too far brings its own problem. Peak pressure arrives before the piston reaches TDC, so the burning mixture pushes against a rising piston, increasing pumping work and generating heat rather than torque.</p>
<h2 id="mbt-maximum-brake-torque">MBT: maximum brake torque</h2>
<p><strong>MBT (maximum brake torque)</strong> is the advance angle that produces the highest torque at a given RPM and load. It is the optimum timing in the absence of knock.</p>
<p>MBT varies considerably across the operating range:</p>
<p>At light load (low MAP, small throttle opening) the charge is dilute with residuals and burns slowly, so it wants more advance — often 35-45 deg BTDC at light cruise. Towards WOT the charge is dense and burns faster, and a mild road engine typically needs only 15-28 deg BTDC at high load (high MAP).</p>
<p>RPM matters just as much, for a different reason: low RPM leaves plenty of time for combustion, so less advance is needed, while at high RPM the time per cycle shrinks and timing has to come forward — though the faster gas velocity partially compensates.</p>
<h2 id="knock-detonation">Knock (detonation)</h2>
<p><strong>Knock</strong> is uncontrolled auto-ignition of the end-gas (the unburnt charge ahead of the flame front) before the flame reaches it. The rapid pressure rise creates a characteristic metallic knock or ping. Sustained knock causes piston crown erosion, head gasket failure, and eventually catastrophic engine damage.</p>
<p>The knock threshold is the maximum advance that can be used before detonation occurs. It is always equal to or less than MBT. On a healthy engine with good fuel, knock threshold and MBT are close; on a compromised engine (carbon deposits, poor cooling, low-octane fuel), knock threshold may be well below MBT.</p>
<p><strong>Octane rating</strong> (RON/MON) measures a fuel&#39;s resistance to knock. Higher octane fuel tolerates more advance before detonating. Running higher-octane fuel on a well-tuned engine allows the timing to be advanced closer to MBT, recovering power and efficiency that would otherwise be sacrificed for safety margin.</p>
<h2 id="the-ignition-advance-table">The ignition advance table</h2>
<p>Like the VE table, the ignition advance table is a 2D map indexed by RPM and load. Each cell contains the advance in degrees BTDC.</p>
<p>A starting point for a mild naturally aspirated road engine:</p>
<ul>
<li>Idle (600-900 RPM, low MAP): 10-15 deg BTDC</li>
<li>Light cruise (1500-2500 RPM, 30-60 kPa MAP): 30-40 deg BTDC</li>
<li>WOT at low RPM (1500-2500 RPM, 90-100 kPa MAP): 18-25 deg BTDC</li>
<li>WOT at mid RPM (3000-4000 RPM, 90-100 kPa MAP): 22-30 deg BTDC</li>
<li>WOT at high RPM (5000+ RPM, 90-100 kPa MAP): varies widely with engine</li>
</ul>
<p>Always start conservative (less advance than you think you need) and work towards MBT carefully, listening for knock and watching coolant temperature.</p>
<h2 id="knock-sensitivity-and-safety-margin">Knock sensitivity and safety margin</h2>
<p>Tuning towards MBT requires a safety margin below the knock threshold. How much depends on how consistently the engine can be expected to stay cool, the fuel quality available, and whether a knock sensor is fitted.</p>
<p>Without a knock sensor, use a generous margin (3-5 deg below the point where knock is first heard). With a knock sensor and active retard, the ECU can pull timing when knock is detected, allowing the table to run closer to the edge.</p>
<p>Never tune WOT timing without monitoring coolant temperature. An overheating engine will knock at advance angles that are safe when cold.</p>
<h2 id="cranking-and-idle-advance">Cranking and idle advance</h2>
<p><strong>Cranking advance</strong> is typically 5-10 deg BTDC, and usually a fixed value rather than a table. More advance during cranking makes starting harder; too little and the engine fires weakly.</p>
<p><strong>Idle advance</strong> has an outsized effect on idle quality. Run it too low and the engine is rough and hot; raise it and idle speed comes up. The ECU can exploit that as a fast-idle correction, trimming timing back to lower idle RPM — faster to respond than adjusting injector pulse width.</p>
<h2 id="dwell">Dwell</h2>
<p>Dwell is the time the coil primary circuit is energised before the spark fires, during which the coil stores energy. It is measured in milliseconds (or degrees on some ECUs).</p>
<p>Give the coil too little time and it never fully charges: the spark is weak and the engine misfires, particularly at high RPM where the time between events is short anyway. Too much is no better — the wasted energy heats the coil, and the coil driver in the ECU can be damaged. At high RPM the charging window can even overlap the next one.</p>
<p>The manufacturer specifies the correct value, typically 2-4 ms. A coil charges more slowly at low battery voltage, so cold cranking needs dwell stretched to reach full saturation.</p>
<h2 id="ignition-advance-and-fuelling-interaction">Ignition advance and fuelling interaction</h2>
<p>Retarding timing at WOT is sometimes used to manage exhaust temperature on turbocharged engines; more retard increases exhaust enthalpy and spools the turbo faster, at the cost of some efficiency. This is a deliberate tuning choice, not a problem to fix.</p>
<p>Conversely, a rich mixture (low lambda) burns more slowly, which shifts the MBT angle towards more advance. If VE table corrections change the mixture significantly, the ignition table may need revisiting.</p>
<h2 id="related-guides">Related guides</h2>
<ul>
<li><a href="https://vetuner.co.uk/adv-fuel-equation/">The Fuel Equation</a>  -  how mixture and pulse width are calculated, and why mixture changes shift MBT.</li>
<li><a href="https://vetuner.co.uk/adv-lambda-afr/">Lambda and AFR</a>  -  what the sensor measures, and why rich mixtures burn slower.</li>
</ul>
]]></description>
      <content:encoded><![CDATA[<h1 id="ignition-timing-theory">Ignition Timing Theory</h1>
<h2 id="what-ignition-advance-does">What ignition advance does</h2>
<p>The ignition spark fires before the piston reaches top dead centre (TDC). This lead time is the <strong>ignition advance</strong>, measured in degrees of crankshaft rotation before TDC (deg BTDC).</p>
<p>After the spark, the flame front takes time to propagate across the combustion chamber. The goal is for peak cylinder pressure to occur a few degrees after TDC (roughly 15-20 deg ATDC on most engines), where the piston geometry gives the best mechanical advantage on the crankshaft.</p>
<p>If the spark fires too late (retarded), combustion is still developing as the piston descends; the expansion ratio is wasted and power and efficiency fall.</p>
<p>Advancing it too far brings its own problem. Peak pressure arrives before the piston reaches TDC, so the burning mixture pushes against a rising piston, increasing pumping work and generating heat rather than torque.</p>
<h2 id="mbt-maximum-brake-torque">MBT: maximum brake torque</h2>
<p><strong>MBT (maximum brake torque)</strong> is the advance angle that produces the highest torque at a given RPM and load. It is the optimum timing in the absence of knock.</p>
<p>MBT varies considerably across the operating range:</p>
<p>At light load (low MAP, small throttle opening) the charge is dilute with residuals and burns slowly, so it wants more advance — often 35-45 deg BTDC at light cruise. Towards WOT the charge is dense and burns faster, and a mild road engine typically needs only 15-28 deg BTDC at high load (high MAP).</p>
<p>RPM matters just as much, for a different reason: low RPM leaves plenty of time for combustion, so less advance is needed, while at high RPM the time per cycle shrinks and timing has to come forward — though the faster gas velocity partially compensates.</p>
<h2 id="knock-detonation">Knock (detonation)</h2>
<p><strong>Knock</strong> is uncontrolled auto-ignition of the end-gas (the unburnt charge ahead of the flame front) before the flame reaches it. The rapid pressure rise creates a characteristic metallic knock or ping. Sustained knock causes piston crown erosion, head gasket failure, and eventually catastrophic engine damage.</p>
<p>The knock threshold is the maximum advance that can be used before detonation occurs. It is always equal to or less than MBT. On a healthy engine with good fuel, knock threshold and MBT are close; on a compromised engine (carbon deposits, poor cooling, low-octane fuel), knock threshold may be well below MBT.</p>
<p><strong>Octane rating</strong> (RON/MON) measures a fuel&#39;s resistance to knock. Higher octane fuel tolerates more advance before detonating. Running higher-octane fuel on a well-tuned engine allows the timing to be advanced closer to MBT, recovering power and efficiency that would otherwise be sacrificed for safety margin.</p>
<h2 id="the-ignition-advance-table">The ignition advance table</h2>
<p>Like the VE table, the ignition advance table is a 2D map indexed by RPM and load. Each cell contains the advance in degrees BTDC.</p>
<p>A starting point for a mild naturally aspirated road engine:</p>
<ul>
<li>Idle (600-900 RPM, low MAP): 10-15 deg BTDC</li>
<li>Light cruise (1500-2500 RPM, 30-60 kPa MAP): 30-40 deg BTDC</li>
<li>WOT at low RPM (1500-2500 RPM, 90-100 kPa MAP): 18-25 deg BTDC</li>
<li>WOT at mid RPM (3000-4000 RPM, 90-100 kPa MAP): 22-30 deg BTDC</li>
<li>WOT at high RPM (5000+ RPM, 90-100 kPa MAP): varies widely with engine</li>
</ul>
<p>Always start conservative (less advance than you think you need) and work towards MBT carefully, listening for knock and watching coolant temperature.</p>
<h2 id="knock-sensitivity-and-safety-margin">Knock sensitivity and safety margin</h2>
<p>Tuning towards MBT requires a safety margin below the knock threshold. How much depends on how consistently the engine can be expected to stay cool, the fuel quality available, and whether a knock sensor is fitted.</p>
<p>Without a knock sensor, use a generous margin (3-5 deg below the point where knock is first heard). With a knock sensor and active retard, the ECU can pull timing when knock is detected, allowing the table to run closer to the edge.</p>
<p>Never tune WOT timing without monitoring coolant temperature. An overheating engine will knock at advance angles that are safe when cold.</p>
<h2 id="cranking-and-idle-advance">Cranking and idle advance</h2>
<p><strong>Cranking advance</strong> is typically 5-10 deg BTDC, and usually a fixed value rather than a table. More advance during cranking makes starting harder; too little and the engine fires weakly.</p>
<p><strong>Idle advance</strong> has an outsized effect on idle quality. Run it too low and the engine is rough and hot; raise it and idle speed comes up. The ECU can exploit that as a fast-idle correction, trimming timing back to lower idle RPM — faster to respond than adjusting injector pulse width.</p>
<h2 id="dwell">Dwell</h2>
<p>Dwell is the time the coil primary circuit is energised before the spark fires, during which the coil stores energy. It is measured in milliseconds (or degrees on some ECUs).</p>
<p>Give the coil too little time and it never fully charges: the spark is weak and the engine misfires, particularly at high RPM where the time between events is short anyway. Too much is no better — the wasted energy heats the coil, and the coil driver in the ECU can be damaged. At high RPM the charging window can even overlap the next one.</p>
<p>The manufacturer specifies the correct value, typically 2-4 ms. A coil charges more slowly at low battery voltage, so cold cranking needs dwell stretched to reach full saturation.</p>
<h2 id="ignition-advance-and-fuelling-interaction">Ignition advance and fuelling interaction</h2>
<p>Retarding timing at WOT is sometimes used to manage exhaust temperature on turbocharged engines; more retard increases exhaust enthalpy and spools the turbo faster, at the cost of some efficiency. This is a deliberate tuning choice, not a problem to fix.</p>
<p>Conversely, a rich mixture (low lambda) burns more slowly, which shifts the MBT angle towards more advance. If VE table corrections change the mixture significantly, the ignition table may need revisiting.</p>
<h2 id="related-guides">Related guides</h2>
<ul>
<li><a href="https://vetuner.co.uk/adv-fuel-equation/">The Fuel Equation</a>  -  how mixture and pulse width are calculated, and why mixture changes shift MBT.</li>
<li><a href="https://vetuner.co.uk/adv-lambda-afr/">Lambda and AFR</a>  -  what the sensor measures, and why rich mixtures burn slower.</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Data Logging for VE Analysis</title>
      <link>https://vetuner.co.uk/adv-data-logging/</link>
      <guid isPermaLink="true">https://vetuner.co.uk/adv-data-logging/</guid>
      <pubDate>Wed, 16 Sep 2026 00:00:00 GMT</pubDate>
      <description><![CDATA[<h1 id="data-logging-for-ve-analysis">Data Logging for VE Analysis</h1>
<h2 id="what-makes-a-good-log">What makes a good log</h2>
<p>VETuner&#39;s VE Analysis compares actual lambda to target lambda at each RPM/load cell and calculates the correction each cell needs. The quality of the result depends entirely on the quality of the data: noisy, sparse, or condition-contaminated logs produce poor corrections.</p>
<p>A good log has:</p>
<ul>
<li><strong>Coverage:</strong> every cell you care about visited enough times to build statistical confidence</li>
<li><strong>Steady-state data:</strong> stable throttle and RPM so the sensor reading reflects the fuelling at the current operating point, not a transient</li>
<li><strong>Clean sensor readings:</strong> wideband warm, exhaust leak-free, no misfires</li>
<li><strong>Warm engine:</strong> coolant at operating temperature throughout</li>
</ul>
<h2 id="pre-log-checklist">Pre-log checklist</h2>
<p>Before starting a logging session:</p>
<ol>
<li>Engine fully warm: at least 5 minutes of running, coolant above 80 deg C</li>
<li>Wideband sensor at operating temperature: allow 30-60 seconds after startup before trusting readings</li>
<li>No active fault codes that could affect fuelling (failed MAT sensor, coolant sensor out of range, etc.)</li>
<li>Fuel level adequate: running out of fuel mid-log contaminates data with lean transients</li>
<li>No recent cold start enrichment still bleeding off. If in doubt, drive gently for a few minutes before starting the analysis</li>
</ol>
<h2 id="drive-technique">Drive technique</h2>
<p><strong>Steady-state passes</strong> give the cleanest data. Pick a target RPM and load, hold them stable for 5-10 seconds, then move to the next operating point. On a public road, a dual carriageway at part throttle works well for the 2000-3500 RPM cruise region. A long gentle hill covers high-load low-RPM cells.</p>
<p>Avoid:</p>
<ul>
<li><strong>Hard accelerations:</strong> transient enrichment (accel enrichment, open-loop AE) masks the underlying VE table fuelling</li>
<li><strong>Rapid throttle changes:</strong> the lambda sensor lags behind the fuelling event; reading it during a transient attributes the wrong correction to the wrong cell</li>
<li><strong>Cold operating conditions:</strong> warm-up enrichment and afterstart enrichment are active; any corrections made to the VE table while these are running will be wrong once the engine is warm</li>
</ul>
<h2 id="map-coverage">Map coverage</h2>
<p>Divide the VE table into regions and work methodically:</p>
<table>
<thead>
<tr>
<th>Region</th>
<th>How to cover it</th>
</tr>
</thead>
<tbody><tr>
<td>Idle (500-1000 RPM, low MAP)</td>
<td>Sit at idle; use idle speed adjustment to vary slightly</td>
</tr>
<tr>
<td>Light cruise (1500-3000 RPM, 30-60 kPa)</td>
<td>Gentle driving, steady speed on flat road</td>
</tr>
<tr>
<td>Medium load (2000-4000 RPM, 60-85 kPa)</td>
<td>Moderate throttle, steady speed uphill or against headwind</td>
</tr>
<tr>
<td>High load / WOT (all RPM, 90-100 kPa)</td>
<td>Full-throttle runs in appropriate gears. Be sensible about where and when.</td>
</tr>
<tr>
<td>Overrun (any RPM, very low MAP)</td>
<td>Closed throttle, engine braking. Fuelling is typically cut entirely; less useful for VE correction.</td>
</tr>
</tbody></table>
<p>High-load and WOT cells are the most safety-critical to get right. Visit these last, once you are confident the light-load and cruise cells are close to correct.</p>
<h2 id="how-many-passes">How many passes?</h2>
<p>VETuner accumulates data statistically. More passes mean more confidence. As a rough guide:</p>
<ul>
<li>Light-load cruise cells: 3-5 steady passes per cell is usually enough</li>
<li>High-load cells: aim for at least 3 clean passes per cell</li>
<li>Idle: the engine spends a lot of time here naturally; idle cells typically fill quickly</li>
</ul>
<p>The VE Analysis heat map shows cell confidence visually. Grey cells have insufficient data; coloured cells have enough to make a suggestion. Do not apply corrections to grey cells.</p>
<h2 id="sensor-placement-and-exhaust-leaks">Sensor placement and exhaust leaks</h2>
<p>The wideband sensor should be in the exhaust collector, after all cylinders have merged, far enough downstream to avoid scavenging effects from valve overlap. Sensors positioned too close to the head or to individual header primaries can read false-lean during scavenging events.</p>
<p>An exhaust leak upstream of the sensor dilutes exhaust gas with ambient air, making every reading appear lean. If your VE Analysis consistently suggests the whole map is lean when the engine seems to be running acceptably, check for exhaust leaks before adjusting anything.</p>
<h2 id="sessions-and-merging">Sessions and merging</h2>
<p>Each VE Analysis session accumulates data independently. VETuner merges sessions statistically, so you can run multiple shorter logs rather than one long session. This is useful for:</p>
<ul>
<li>Building coverage gradually across different driving conditions</li>
<li>Comparing before/after a hardware change</li>
<li>Logging different temperature conditions separately if the engine behaves differently when very hot</li>
</ul>
<p>After applying corrections from one session, reset and start a fresh session to validate the results rather than accumulating old corrections on top of new ones.</p>
<h2 id="what-to-do-with-the-results">What to do with the results</h2>
<p>Once the heat map shows reasonable coverage and the suggested corrections are small (within +/-5% on most cells), apply the changes to the VE table and take another validation log. The corrections should converge towards zero. If corrections remain large after two or three rounds, check:</p>
<ul>
<li>Wideband calibration: compare against a known-good sensor or calibration gas</li>
<li>AFR target table: are the targets actually achievable and sensible?</li>
<li>Injector dead time: systematic lean-at-idle / correct-at-load points to wrong dead time</li>
<li>Fuel pressure: if pressure varies with load, injector effective flow rate changes</li>
</ul>
<p>Large corrections that refuse to converge, or corrections that are large in one direction across the whole map, usually indicate a hardware or configuration issue rather than a VE table problem.</p>
<h2 id="related-guides">Related guides</h2>
<ul>
<li><a href="https://vetuner.co.uk/ve-analysis/">VE Analysis</a>  -  turn clean logs into statistically-based VE corrections</li>
<li><a href="https://vetuner.co.uk/tuning/">Editing Tuning Tables</a>  -  where those corrections are reviewed and burned to ECU flash</li>
<li><a href="https://vetuner.co.uk/adv-fuel-equation/">The Fuel Equation</a>  -  how the VE table feeds into the injector pulse-width calculation</li>
</ul>
]]></description>
      <content:encoded><![CDATA[<h1 id="data-logging-for-ve-analysis">Data Logging for VE Analysis</h1>
<h2 id="what-makes-a-good-log">What makes a good log</h2>
<p>VETuner&#39;s VE Analysis compares actual lambda to target lambda at each RPM/load cell and calculates the correction each cell needs. The quality of the result depends entirely on the quality of the data: noisy, sparse, or condition-contaminated logs produce poor corrections.</p>
<p>A good log has:</p>
<ul>
<li><strong>Coverage:</strong> every cell you care about visited enough times to build statistical confidence</li>
<li><strong>Steady-state data:</strong> stable throttle and RPM so the sensor reading reflects the fuelling at the current operating point, not a transient</li>
<li><strong>Clean sensor readings:</strong> wideband warm, exhaust leak-free, no misfires</li>
<li><strong>Warm engine:</strong> coolant at operating temperature throughout</li>
</ul>
<h2 id="pre-log-checklist">Pre-log checklist</h2>
<p>Before starting a logging session:</p>
<ol>
<li>Engine fully warm: at least 5 minutes of running, coolant above 80 deg C</li>
<li>Wideband sensor at operating temperature: allow 30-60 seconds after startup before trusting readings</li>
<li>No active fault codes that could affect fuelling (failed MAT sensor, coolant sensor out of range, etc.)</li>
<li>Fuel level adequate: running out of fuel mid-log contaminates data with lean transients</li>
<li>No recent cold start enrichment still bleeding off. If in doubt, drive gently for a few minutes before starting the analysis</li>
</ol>
<h2 id="drive-technique">Drive technique</h2>
<p><strong>Steady-state passes</strong> give the cleanest data. Pick a target RPM and load, hold them stable for 5-10 seconds, then move to the next operating point. On a public road, a dual carriageway at part throttle works well for the 2000-3500 RPM cruise region. A long gentle hill covers high-load low-RPM cells.</p>
<p>Avoid:</p>
<ul>
<li><strong>Hard accelerations:</strong> transient enrichment (accel enrichment, open-loop AE) masks the underlying VE table fuelling</li>
<li><strong>Rapid throttle changes:</strong> the lambda sensor lags behind the fuelling event; reading it during a transient attributes the wrong correction to the wrong cell</li>
<li><strong>Cold operating conditions:</strong> warm-up enrichment and afterstart enrichment are active; any corrections made to the VE table while these are running will be wrong once the engine is warm</li>
</ul>
<h2 id="map-coverage">Map coverage</h2>
<p>Divide the VE table into regions and work methodically:</p>
<table>
<thead>
<tr>
<th>Region</th>
<th>How to cover it</th>
</tr>
</thead>
<tbody><tr>
<td>Idle (500-1000 RPM, low MAP)</td>
<td>Sit at idle; use idle speed adjustment to vary slightly</td>
</tr>
<tr>
<td>Light cruise (1500-3000 RPM, 30-60 kPa)</td>
<td>Gentle driving, steady speed on flat road</td>
</tr>
<tr>
<td>Medium load (2000-4000 RPM, 60-85 kPa)</td>
<td>Moderate throttle, steady speed uphill or against headwind</td>
</tr>
<tr>
<td>High load / WOT (all RPM, 90-100 kPa)</td>
<td>Full-throttle runs in appropriate gears. Be sensible about where and when.</td>
</tr>
<tr>
<td>Overrun (any RPM, very low MAP)</td>
<td>Closed throttle, engine braking. Fuelling is typically cut entirely; less useful for VE correction.</td>
</tr>
</tbody></table>
<p>High-load and WOT cells are the most safety-critical to get right. Visit these last, once you are confident the light-load and cruise cells are close to correct.</p>
<h2 id="how-many-passes">How many passes?</h2>
<p>VETuner accumulates data statistically. More passes mean more confidence. As a rough guide:</p>
<ul>
<li>Light-load cruise cells: 3-5 steady passes per cell is usually enough</li>
<li>High-load cells: aim for at least 3 clean passes per cell</li>
<li>Idle: the engine spends a lot of time here naturally; idle cells typically fill quickly</li>
</ul>
<p>The VE Analysis heat map shows cell confidence visually. Grey cells have insufficient data; coloured cells have enough to make a suggestion. Do not apply corrections to grey cells.</p>
<h2 id="sensor-placement-and-exhaust-leaks">Sensor placement and exhaust leaks</h2>
<p>The wideband sensor should be in the exhaust collector, after all cylinders have merged, far enough downstream to avoid scavenging effects from valve overlap. Sensors positioned too close to the head or to individual header primaries can read false-lean during scavenging events.</p>
<p>An exhaust leak upstream of the sensor dilutes exhaust gas with ambient air, making every reading appear lean. If your VE Analysis consistently suggests the whole map is lean when the engine seems to be running acceptably, check for exhaust leaks before adjusting anything.</p>
<h2 id="sessions-and-merging">Sessions and merging</h2>
<p>Each VE Analysis session accumulates data independently. VETuner merges sessions statistically, so you can run multiple shorter logs rather than one long session. This is useful for:</p>
<ul>
<li>Building coverage gradually across different driving conditions</li>
<li>Comparing before/after a hardware change</li>
<li>Logging different temperature conditions separately if the engine behaves differently when very hot</li>
</ul>
<p>After applying corrections from one session, reset and start a fresh session to validate the results rather than accumulating old corrections on top of new ones.</p>
<h2 id="what-to-do-with-the-results">What to do with the results</h2>
<p>Once the heat map shows reasonable coverage and the suggested corrections are small (within +/-5% on most cells), apply the changes to the VE table and take another validation log. The corrections should converge towards zero. If corrections remain large after two or three rounds, check:</p>
<ul>
<li>Wideband calibration: compare against a known-good sensor or calibration gas</li>
<li>AFR target table: are the targets actually achievable and sensible?</li>
<li>Injector dead time: systematic lean-at-idle / correct-at-load points to wrong dead time</li>
<li>Fuel pressure: if pressure varies with load, injector effective flow rate changes</li>
</ul>
<p>Large corrections that refuse to converge, or corrections that are large in one direction across the whole map, usually indicate a hardware or configuration issue rather than a VE table problem.</p>
<h2 id="related-guides">Related guides</h2>
<ul>
<li><a href="https://vetuner.co.uk/ve-analysis/">VE Analysis</a>  -  turn clean logs into statistically-based VE corrections</li>
<li><a href="https://vetuner.co.uk/tuning/">Editing Tuning Tables</a>  -  where those corrections are reviewed and burned to ECU flash</li>
<li><a href="https://vetuner.co.uk/adv-fuel-equation/">The Fuel Equation</a>  -  how the VE table feeds into the injector pulse-width calculation</li>
</ul>
]]></content:encoded>
    </item>
  </channel>
</rss>
