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

<channel>
	<title>emtron - BlownByTwins</title>
	<atom:link href="https://blownbytwins.co.uk/tag/emtron/feed/" rel="self" type="application/rss+xml" />
	<link>https://blownbytwins.co.uk</link>
	<description>Just a tale of one man and his cars...</description>
	<lastBuildDate>Sat, 10 Oct 2026 10:40:22 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://blownbytwins.co.uk/wp-content/uploads/2023/05/cropped-wp20128381-1-32x32.jpg</url>
	<title>emtron - BlownByTwins</title>
	<link>https://blownbytwins.co.uk</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Boost Control on the Emtron KV12: Where the Target Really Comes From</title>
		<link>https://blownbytwins.co.uk/cars/mk4-supra/boost-control-emtron-kv12/</link>
		
		<dc:creator><![CDATA[john]]></dc:creator>
		<pubDate>Sat, 17 Oct 2026 07:00:00 +0000</pubDate>
				<category><![CDATA[Engine Management]]></category>
		<category><![CDATA[Mk4 Supra]]></category>
		<category><![CDATA[boost control]]></category>
		<category><![CDATA[emtron]]></category>
		<category><![CDATA[feedforward]]></category>
		<category><![CDATA[wastegate]]></category>
		<guid isPermaLink="false">https://blownbytwins.co.uk/?p=1208</guid>

					<description><![CDATA[<p>How boost is controlled on the Supra's Emtron KV12: a base table that never asks for boost, a user offset that does, a deliberate clamp, and a PID kept on a short lead so the feedforward does the work.</p>
<p>The post <a href="https://blownbytwins.co.uk/cars/mk4-supra/boost-control-emtron-kv12/">Boost Control on the Emtron KV12: Where the Target Really Comes From</a> first appeared on <a href="https://blownbytwins.co.uk">BlownByTwins</a>.</p>
<p>The post <a rel="nofollow" href="https://blownbytwins.co.uk/cars/mk4-supra/boost-control-emtron-kv12/">Boost Control on the Emtron KV12: Where the Target Really Comes From</a> appeared first on <a rel="nofollow" href="https://blownbytwins.co.uk">BlownByTwins</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="wp-block-paragraph">There is nothing exotic about the boost control on this car. It is Emtron&#8217;s standard closed loop strategy. SRD Tuning built the base, and I have refined the duty cycles from logs since.</p>



<p class="wp-block-paragraph">What is worth showing is how the pieces fit together. Where the boost target actually comes from, which tables do the real work, and how the PID is kept out of the way.</p>



<p class="wp-block-paragraph">Each section is marked. <strong>Verified</strong> means it comes straight from the calibration. <strong>Theory</strong> means it is my reasoning, not something I have measured. <strong>Observed</strong> means it is how the car behaves on the road.</p>



<h2 class="wp-block-heading">Configuration</h2>



<p class="wp-block-paragraph"><strong>Status: Verified</strong></p>



<ul class="wp-block-list">
<li>2JZ-GTE VVTi, 3.4 litre, Pulsar G42-1200, pump fuel</li>



<li>Turbosmart 60 mm wastegate, 15 psi spring, which gives 18 psi as installed</li>



<li>Single Link boost control solenoid</li>



<li><a href="https://emtron.world/products/kv12" target="_blank" rel="noopener">Emtron KV12</a>, closed loop, absolute target, manifold pressure as the control input</li>
</ul>



<p class="wp-block-paragraph">Who did what matters here, so to be clear: the structure, the lockouts and the base duty cycles are SRD&#8217;s. My changes are to the initial position table, made from logged corrections, and none of them is more than 3 percent.</p>



<h2 class="wp-block-heading">Where the target comes from</h2>



<p class="wp-block-paragraph"><strong>Status: Verified</strong></p>



<p class="wp-block-paragraph">Emtron builds the boost target from a base table, adds a stack of offsets, then clamps the result. Here is the base table:</p>



<figure class="bbt-figure" style="margin:1.8rem 0"><table style="border-collapse:collapse;width:100%;font-size:0.85rem;text-align:right"><thead><tr style="border-bottom:2px solid #333"><th style="text-align:left;padding:6px 8px">Pedal demand</th><th style="padding:6px 8px">0 to 2,500 rpm</th><th style="padding:6px 8px">3,000 rpm and above</th></tr></thead><tbody>
<tr style="border-bottom:1px solid #ddd"><td style="text-align:left;padding:6px 8px">0%</td><td style="padding:6px 8px">40</td><td style="padding:6px 8px">40</td></tr>
<tr style="border-bottom:1px solid #ddd"><td style="text-align:left;padding:6px 8px">10 to 30%</td><td style="padding:6px 8px">70</td><td style="padding:6px 8px">70</td></tr>
<tr style="border-bottom:1px solid #ddd"><td style="text-align:left;padding:6px 8px">40 to 98%</td><td style="padding:6px 8px">80</td><td style="padding:6px 8px">100</td></tr>
</tbody></table><figcaption class="bbt-table-note" style="font-size:0.8rem;color:#5f5f5f;line-height:1.5;margin:0.6rem 0 0">Boost Target Table 1, kPa absolute, against throttle area demand from the pedal. Identical rows and columns are merged.</figcaption></figure>



<p class="wp-block-paragraph">Look at the biggest number in it. 100 kPa absolute is atmospheric. The base table on its own never asks for any boost at all.</p>



<p class="wp-block-paragraph">The boost comes from the first of the user offsets:</p>



<figure class="bbt-figure" style="margin:1.8rem 0"><table style="border-collapse:collapse;width:100%;font-size:0.85rem;text-align:right"><thead><tr style="border-bottom:2px solid #333"><th style="text-align:left;padding:6px 8px">Manifold pressure</th><th style="padding:6px 8px">Offset, every rotary position</th></tr></thead><tbody>
<tr style="border-bottom:1px solid #ddd"><td style="text-align:left;padding:6px 8px">0 and 50 kPa</td><td style="padding:6px 8px">0</td></tr>
<tr style="border-bottom:1px solid #ddd"><td style="text-align:left;padding:6px 8px">100, 125 and 150 kPa</td><td style="padding:6px 8px">+200</td></tr>
</tbody></table><figcaption class="bbt-table-note" style="font-size:0.8rem;color:#5f5f5f;line-height:1.5;margin:0.6rem 0 0">User 1 Target Offset Table, kPa, indexed on manifold pressure against the steering wheel rotary (CANRx Vehicle Mode 1). All eight rotary columns are identical.</figcaption></figure>



<p class="wp-block-paragraph">Once the manifold reaches atmospheric, 200 kPa is added to the target. So with the pedal past 40 percent:</p>



<ul class="wp-block-list">
<li>Below 3,000 rpm: 80 + 200 = <strong>280 kPa</strong> absolute</li>



<li>From 3,000 rpm: 100 + 200 = <strong>300 kPa</strong> absolute</li>
</ul>



<p class="wp-block-paragraph">And then the clamp. The Boost Target Clamp is <strong>300 kPa absolute</strong>, roughly 2.0 bar of boost at sea level. Whatever the offsets add up to, the target cannot go past it. That is deliberate. The car runs on pump fuel, and the clamp is the safety switch that stops anything else in the stack asking for more than the fuel will take.</p>



<p class="wp-block-paragraph">The rotary columns being identical is also deliberate. Every traction setting gets the same boost ceiling, and the torque model decides how much of it is actually used. Boost is not the throttle on this car. Torque is, and that is covered in <a href="https://blownbytwins.co.uk/cars/mk4-supra/traction-control-feedforward-pid/">Traction Control on 1,114 whp</a>.</p>



<h3 class="wp-block-heading">Why the offset can look on manifold pressure</h3>



<p class="wp-block-paragraph"><strong>Status: Theory</strong></p>



<p class="wp-block-paragraph">An offset indexed on manifold pressure is a feedback loop: as pressure rises from 50 to 100 kPa, the target rises with it. That would be a problem if the solenoid were active through that range. It isn&#8217;t, which is the next table.</p>



<h2 class="wp-block-heading">When the solenoid is allowed to work</h2>



<p class="wp-block-paragraph"><strong>Status: Verified</strong></p>



<figure class="bbt-figure" style="margin:1.8rem 0"><table style="border-collapse:collapse;width:100%;font-size:0.85rem"><thead><tr style="border-bottom:2px solid #333"><th style="text-align:left;padding:6px 8px">Lockout</th><th style="text-align:right;padding:6px 8px">Value</th></tr></thead><tbody>
<tr style="border-bottom:1px solid #ddd"><td style="padding:6px 8px">Throttle</td><td style="text-align:right;padding:6px 8px">10%</td></tr>
<tr style="border-bottom:1px solid #ddd"><td style="padding:6px 8px">Engine speed</td><td style="text-align:right;padding:6px 8px">1,800 rpm</td></tr>
<tr style="border-bottom:1px solid #ddd"><td style="padding:6px 8px">Manifold pressure</td><td style="text-align:right;padding:6px 8px">110 kPa</td></tr>
<tr style="border-bottom:1px solid #ddd"><td style="padding:6px 8px">Engine temperature</td><td style="text-align:right;padding:6px 8px">60 &deg;C</td></tr>
</tbody></table><figcaption class="bbt-table-note" style="font-size:0.8rem;color:#5f5f5f;line-height:1.5;margin:0.6rem 0 0">Boost OL/CL Lockouts, set by SRD. Below any of these the solenoid is switched off and the wastegate runs on its spring.</figcaption></figure>



<p class="wp-block-paragraph">The solenoid stays off until the manifold is already 10 kPa above atmospheric. By then the user offset has finished ramping in and the target is fixed. Off boost, cold, or at a whisker of throttle, the wastegate simply does what its spring tells it.</p>



<h2 class="wp-block-heading">What takes boost away</h2>



<p class="wp-block-paragraph"><strong>Status: Verified</strong></p>



<p class="wp-block-paragraph">Three offsets pull the target down. Two are protection, and both are indexed against the target itself, so the higher the target, the more they take.</p>



<figure class="bbt-figure" style="margin:1.8rem 0"><table style="border-collapse:collapse;width:100%;font-size:0.85rem;text-align:right"><thead><tr style="border-bottom:2px solid #333"><th style="text-align:left;padding:6px 8px">Target vs engine temp</th><th style="padding:6px 8px">up to 100 &deg;C</th><th style="padding:6px 8px">110 &deg;C</th><th style="padding:6px 8px">120 &deg;C and above</th></tr></thead><tbody>
<tr style="border-bottom:1px solid #ddd"><td style="text-align:left;padding:6px 8px">180 kPa</td><td style="padding:6px 8px">0</td><td style="padding:6px 8px">0</td><td style="padding:6px 8px">0</td></tr>
<tr style="border-bottom:1px solid #ddd"><td style="text-align:left;padding:6px 8px">200 kPa</td><td style="padding:6px 8px">0</td><td style="padding:6px 8px">-10</td><td style="padding:6px 8px">-20</td></tr>
<tr style="border-bottom:1px solid #ddd"><td style="text-align:left;padding:6px 8px">220 kPa</td><td style="padding:6px 8px">0</td><td style="padding:6px 8px">-40</td><td style="padding:6px 8px">-40</td></tr>
<tr style="border-bottom:1px solid #ddd"><td style="text-align:left;padding:6px 8px">240 kPa</td><td style="padding:6px 8px">0</td><td style="padding:6px 8px">-50</td><td style="padding:6px 8px">-60</td></tr>
<tr style="border-bottom:1px solid #ddd"><td style="text-align:left;padding:6px 8px">260 kPa</td><td style="padding:6px 8px">0</td><td style="padding:6px 8px">-50</td><td style="padding:6px 8px">-80</td></tr>
<tr style="border-bottom:1px solid #ddd"><td style="text-align:left;padding:6px 8px">280 kPa</td><td style="padding:6px 8px">0</td><td style="padding:6px 8px">-50</td><td style="padding:6px 8px">-100</td></tr>
</tbody></table><figcaption class="bbt-table-note" style="font-size:0.8rem;color:#5f5f5f;line-height:1.5;margin:0.6rem 0 0">Engine Temperature Target Offset Table, kPa. Every column from -50 to 100 &deg;C is zero.</figcaption></figure>



<figure class="bbt-figure" style="margin:1.8rem 0"><table style="border-collapse:collapse;width:100%;font-size:0.85rem;text-align:right"><thead><tr style="border-bottom:2px solid #333"><th style="text-align:left;padding:6px 8px">Target vs inlet air temp</th><th style="padding:6px 8px">up to 40 &deg;C</th><th style="padding:6px 8px">50</th><th style="padding:6px 8px">60</th><th style="padding:6px 8px">70</th><th style="padding:6px 8px">80</th><th style="padding:6px 8px">100</th><th style="padding:6px 8px">120</th></tr></thead><tbody>
<tr style="border-bottom:1px solid #ddd"><td style="text-align:left;padding:6px 8px">100 and 150 kPa</td><td style="padding:6px 8px">0</td><td style="padding:6px 8px">0</td><td style="padding:6px 8px">0</td><td style="padding:6px 8px">0</td><td style="padding:6px 8px">0</td><td style="padding:6px 8px">0</td><td style="padding:6px 8px">0</td></tr>
<tr style="border-bottom:1px solid #ddd"><td style="text-align:left;padding:6px 8px">200 to 300 kPa</td><td style="padding:6px 8px">0</td><td style="padding:6px 8px">-3</td><td style="padding:6px 8px">-10</td><td style="padding:6px 8px">-20</td><td style="padding:6px 8px">-30</td><td style="padding:6px 8px">-40</td><td style="padding:6px 8px">-50</td></tr>
</tbody></table><figcaption class="bbt-table-note" style="font-size:0.8rem;color:#5f5f5f;line-height:1.5;margin:0.6rem 0 0">Air Temperature Target Offset Table, kPa. Identical rows are merged.</figcaption></figure>



<p class="wp-block-paragraph">The third is by gear, and it is there for the gearbox rather than the engine:</p>



<figure class="bbt-figure" style="margin:1.8rem 0"><table style="border-collapse:collapse;width:100%;font-size:0.85rem;text-align:center"><thead><tr style="border-bottom:2px solid #333"><th style="text-align:left;padding:6px">Gear</th><th style="padding:6px">R, N, 1 to 5</th><th style="padding:6px">6</th><th style="padding:6px">7</th><th style="padding:6px">8</th></tr></thead><tbody>
<tr style="border-bottom:1px solid #ddd"><td style="text-align:left;padding:6px">Offset, kPa</td><td>0</td><td>-10</td><td>-20</td><td>-30</td></tr>
</tbody></table><figcaption class="bbt-table-note" style="font-size:0.8rem;color:#5f5f5f;line-height:1.5;margin:0.6rem 0 0">Gear Target Offset Table.</figcaption></figure>



<p class="wp-block-paragraph">Sixth, seventh and eighth lose 10, 20 and 30 kPa to protect the ZF&#8217;s clutches from slip. Where that gearbox runs out of capacity is covered in <a href="https://blownbytwins.co.uk/?p=1093">Where the Stock ZF 8HP70 Gives Up</a>.</p>



<h2 class="wp-block-heading">The table that does the work</h2>



<p class="wp-block-paragraph"><strong>Status: Verified</strong></p>



<p class="wp-block-paragraph">Everything above decides what boost to ask for. This decides how to get it. The initial position table is the feedforward: the solenoid duty the ECU applies before the PID has done anything at all.</p>



<figure class="bbt-figure" style="margin:1.8rem 0"><table style="border-collapse:collapse;width:100%;font-size:0.8rem;text-align:right"><thead><tr style="border-bottom:2px solid #333"><th style="text-align:left;padding:5px 6px">Target vs rpm</th><th style="padding:5px 6px">1,000 to 1,500</th><th style="padding:5px 6px">2,000 to 3,500</th><th style="padding:5px 6px">4,000</th><th style="padding:5px 6px">4,500</th><th style="padding:5px 6px">5,000</th><th style="padding:5px 6px">5,500</th><th style="padding:5px 6px">6,000</th><th style="padding:5px 6px">6,500</th><th style="padding:5px 6px">7,000</th><th style="padding:5px 6px">7,500</th><th style="padding:5px 6px">8,000</th></tr></thead><tbody>
<tr style="border-bottom:1px solid #ddd"><td style="text-align:left;padding:5px 6px">125 to 200 kPa</td><td style="padding:5px 6px">0</td><td style="padding:5px 6px">0</td><td style="padding:5px 6px">0</td><td style="padding:5px 6px">0</td><td style="padding:5px 6px">0</td><td style="padding:5px 6px">0</td><td style="padding:5px 6px">0</td><td style="padding:5px 6px">0</td><td style="padding:5px 6px">0</td><td style="padding:5px 6px">0</td><td style="padding:5px 6px">0</td></tr>
<tr style="border-bottom:1px solid #ddd"><td style="text-align:left;padding:5px 6px">220 kPa</td><td style="padding:5px 6px">0</td><td style="padding:5px 6px">100</td><td style="padding:5px 6px">26.5</td><td style="padding:5px 6px">20.0</td><td style="padding:5px 6px">13.0</td><td style="padding:5px 6px">10.5</td><td style="padding:5px 6px">8.0</td><td style="padding:5px 6px">5.0</td><td style="padding:5px 6px">2.5</td><td style="padding:5px 6px">0</td><td style="padding:5px 6px">0</td></tr>
<tr style="border-bottom:1px solid #ddd"><td style="text-align:left;padding:5px 6px">240 kPa</td><td style="padding:5px 6px">0</td><td style="padding:5px 6px">100</td><td style="padding:5px 6px">28.0</td><td style="padding:5px 6px">22.5</td><td style="padding:5px 6px">17.0</td><td style="padding:5px 6px">16.5</td><td style="padding:5px 6px">15.0</td><td style="padding:5px 6px">13.0</td><td style="padding:5px 6px">11.5</td><td style="padding:5px 6px">9.5</td><td style="padding:5px 6px">10.5</td></tr>
<tr style="border-bottom:1px solid #ddd"><td style="text-align:left;padding:5px 6px">250 kPa</td><td style="padding:5px 6px">0</td><td style="padding:5px 6px">100</td><td style="padding:5px 6px">29.0</td><td style="padding:5px 6px">24.0</td><td style="padding:5px 6px">18.5</td><td style="padding:5px 6px">18.0</td><td style="padding:5px 6px">17.0</td><td style="padding:5px 6px">16.5</td><td style="padding:5px 6px">15.5</td><td style="padding:5px 6px">14.5</td><td style="padding:5px 6px">16.0</td></tr>
<tr style="border-bottom:1px solid #ddd"><td style="text-align:left;padding:5px 6px">260 kPa</td><td style="padding:5px 6px">0</td><td style="padding:5px 6px">100</td><td style="padding:5px 6px">29.5</td><td style="padding:5px 6px">25.0</td><td style="padding:5px 6px">20.5</td><td style="padding:5px 6px">19.5</td><td style="padding:5px 6px">19.5</td><td style="padding:5px 6px">19.5</td><td style="padding:5px 6px">19.5</td><td style="padding:5px 6px">19.5</td><td style="padding:5px 6px">21.0</td></tr>
<tr style="border-bottom:1px solid #ddd"><td style="text-align:left;padding:5px 6px">280 kPa</td><td style="padding:5px 6px">0</td><td style="padding:5px 6px">100</td><td style="padding:5px 6px">31.0</td><td style="padding:5px 6px">28.0</td><td style="padding:5px 6px">24.5</td><td style="padding:5px 6px">23.0</td><td style="padding:5px 6px">24.5</td><td style="padding:5px 6px">26.0</td><td style="padding:5px 6px">27.5</td><td style="padding:5px 6px">29.0</td><td style="padding:5px 6px">31.5</td></tr>
<tr style="border-bottom:1px solid #ddd"><td style="text-align:left;padding:5px 6px"><strong>300 kPa</strong></td><td style="padding:5px 6px">0</td><td style="padding:5px 6px">100</td><td style="padding:5px 6px"><strong>32.5</strong></td><td style="padding:5px 6px"><strong>30.5</strong></td><td style="padding:5px 6px"><strong>28.0</strong></td><td style="padding:5px 6px"><strong>26.0</strong></td><td style="padding:5px 6px"><strong>26.0</strong></td><td style="padding:5px 6px"><strong>30.0</strong></td><td style="padding:5px 6px"><strong>32.0</strong></td><td style="padding:5px 6px"><strong>36.5</strong></td><td style="padding:5px 6px"><strong>42.0</strong></td></tr>
</tbody></table><figcaption class="bbt-table-note" style="font-size:0.8rem;color:#5f5f5f;line-height:1.5;margin:0.6rem 0 0">Initial Position Table, % duty, boost target against engine speed. Bold is the row the car lives on at full demand. The table also has 320 and 340 kPa rows, which the 300 kPa clamp means are never used.</figcaption></figure>



<p class="wp-block-paragraph">Read the 300 kPa row from left to right and it tells the story of a pull.</p>



<p class="wp-block-paragraph"><strong>2,000 to 3,500 rpm: 100.</strong> Hold the wastegate shut and let the turbo spool. In practice this is 80, not 100, because the Max Duty table clamps the output at 80 percent everywhere. The 100 in the table is a way of saying &#8220;as much as you&#8217;re allowed&#8221;.</p>



<p class="wp-block-paragraph"><strong>4,000 rpm: 32.5.</strong> The turbo is lit. Drop straight to the duty that holds 300 kPa, so the gate opens instead of letting boost run past the target.</p>



<p class="wp-block-paragraph"><strong>5,500 to 6,000 rpm: 26.</strong> The lowest duty in the row.</p>



<p class="wp-block-paragraph"><strong>6,500 to 8,000 rpm: 30 rising to 42.</strong> More duty is needed to hold the same target as rpm rises.</p>



<p class="wp-block-paragraph">The lower rows show the spring at work. The spring holds 18 psi as installed, about 225 kPa absolute. So at a 220 kPa target the duty falls away as rpm rises, and by 7,500 rpm it is zero: the spring alone is enough. Every row above that is the solenoid adding pressure on top of the spring.</p>



<h3 class="wp-block-heading">Why the duty rises at the top</h3>



<p class="wp-block-paragraph"><strong>Status: Theory</strong></p>



<p class="wp-block-paragraph">A wastegate valve is pushed open by exhaust pressure acting on its face, as well as by boost pressure acting on its diaphragm. As rpm rises, exhaust manifold pressure rises with it, and the valve gets more help opening. To hold the same boost, the solenoid has to fight harder, so the duty goes up. I don&#8217;t measure exhaust manifold pressure on this car, so that is the mechanism I&#8217;d expect rather than one I have logged.</p>



<h3 class="wp-block-heading">How I refined it</h3>



<p class="wp-block-paragraph"><strong>Status: Verified</strong></p>



<p class="wp-block-paragraph">If the initial position were perfect, the PID would have nothing to correct. So the logs tell you where it is wrong. Wherever the closed loop consistently added or removed duty in the same cell, the feedforward was out by about that much.</p>



<p class="wp-block-paragraph">I moved those cells towards what the PID was asking for. None by more than 3 percent. It&#8217;s refinement, not a rebuild. The aim was to take work away from the closed loop wherever the data said it was doing work it shouldn&#8217;t have to.</p>



<h2 class="wp-block-heading">The PID: kept on a short lead</h2>



<p class="wp-block-paragraph"><strong>Status: Verified</strong></p>



<p class="wp-block-paragraph">The loop runs at 35 Hz, against Emtron&#8217;s typical 25, with a deadband of ±0.1 kPa and no input or target filtering. Emtron&#8217;s own note on the control rate is worth repeating: change it and the gains need re-tuning, because every gain is effectively per calculation.</p>



<p class="wp-block-paragraph">All three gains are scheduled on boost target error. Negative error means boost is above target.</p>



<figure class="bbt-figure" style="margin:1.8rem 0"><table style="border-collapse:collapse;width:100%;font-size:0.85rem;text-align:right"><thead><tr style="border-bottom:2px solid #333"><th style="text-align:left;padding:6px 8px">Error, kPa</th><th style="padding:6px 8px">-50</th><th style="padding:6px 8px">-25</th><th style="padding:6px 8px">-10</th><th style="padding:6px 8px">-5</th><th style="padding:6px 8px">-2</th><th style="padding:6px 8px">2</th><th style="padding:6px 8px">5</th><th style="padding:6px 8px">10</th><th style="padding:6px 8px">25</th><th style="padding:6px 8px">60</th></tr></thead><tbody>
<tr style="border-bottom:1px solid #ddd"><td style="text-align:left;padding:6px 8px">Proportional</td><td style="padding:6px 8px">0.50</td><td style="padding:6px 8px">0.50</td><td style="padding:6px 8px">0.20</td><td style="padding:6px 8px">0.20</td><td style="padding:6px 8px">0.10</td><td style="padding:6px 8px">0.10</td><td style="padding:6px 8px">0.50</td><td style="padding:6px 8px">0.50</td><td style="padding:6px 8px">0.50</td><td style="padding:6px 8px">0.50</td></tr>
<tr style="border-bottom:1px solid #ddd"><td style="text-align:left;padding:6px 8px">Integral</td><td style="padding:6px 8px">0</td><td style="padding:6px 8px">0</td><td style="padding:6px 8px">0</td><td style="padding:6px 8px">0.018</td><td style="padding:6px 8px">0.025</td><td style="padding:6px 8px">0.025</td><td style="padding:6px 8px">0.018</td><td style="padding:6px 8px">0</td><td style="padding:6px 8px">0</td><td style="padding:6px 8px">0</td></tr>
<tr style="border-bottom:1px solid #ddd"><td style="text-align:left;padding:6px 8px">Derivative</td><td style="padding:6px 8px">3.00</td><td style="padding:6px 8px">0</td><td style="padding:6px 8px">0</td><td style="padding:6px 8px">0</td><td style="padding:6px 8px">0</td><td style="padding:6px 8px">0</td><td style="padding:6px 8px">0</td><td style="padding:6px 8px">3.00</td><td style="padding:6px 8px">3.00</td><td style="padding:6px 8px">0</td></tr>
</tbody></table><figcaption class="bbt-table-note" style="font-size:0.8rem;color:#5f5f5f;line-height:1.5;margin:0.6rem 0 0">Proportional, Integral and Derivative Gain Tables combined. The three tables use slightly different breakpoints; where a column is beyond a table&#8217;s axis, its end value is shown. Derivative is 0 from -40 to +5 kPa. Proportional also has a dMAP axis, flat apart from one cell, covered below.</figcaption></figure>



<p class="wp-block-paragraph">The integral is clamped as well: the Positive and Negative Integral Limit tables hold it to <strong>±5 percent duty</strong> at every rpm. Overall output is held between a 5 percent minimum and an 80 percent maximum.</p>



<p class="wp-block-paragraph">One cell in the proportional table stands out. At -25 kPa of error, with manifold pressure rising at 5 percent per second, the gain is <strong>10.00</strong> instead of 0.50. That is the overboost catch. Boost well over target and still climbing is the one situation where the controller is allowed to hit hard.</p>



<h3 class="wp-block-heading">Why it is shaped this way</h3>



<p class="wp-block-paragraph"><strong>Status: Theory</strong></p>



<p class="wp-block-paragraph">Proportional gain is smallest near target. Once the boost is where it should be, small errors are corrected gently, so the solenoid isn&#8217;t hunting.</p>



<p class="wp-block-paragraph">Integral only works within 5 kPa of target and is zero beyond 10. During spool the error is enormous, and an integrator running through that would wind up and then overshoot when the turbo arrives. Here it simply doesn&#8217;t run until boost is close. Add the ±5 percent clamp and the integrator can trim the feedforward but never replace it.</p>



<p class="wp-block-paragraph">Derivative is active between 10 and 25 kPa below target. That is boost on its final approach, rising fast towards the target. Derivative reacts to rate of change, so it starts opening the gate before the boost gets there, taking the edge off the arrival rather than correcting an overshoot afterwards.</p>



<p class="wp-block-paragraph">It&#8217;s the same philosophy as the <a href="https://blownbytwins.co.uk/cars/mk4-supra/traction-control-feedforward-pid/">traction control</a>. Feedforward does the work. The closed loop is soft near target, gated where it could do harm, and clamped so it can never take over.</p>



<h2 class="wp-block-heading">Housekeeping</h2>



<p class="wp-block-paragraph"><strong>Status: Verified</strong></p>



<p class="wp-block-paragraph">Two things in the file worth knowing if you are reading your own:</p>



<ul class="wp-block-list">
<li>The Boost Solenoid Deadtime table is zero from 10 to 20 V, so solenoid duty isn&#8217;t corrected for supply voltage.</li>



<li>The Boost Overall Target Trim is zero. It&#8217;s a single number that shifts every target at once, which makes it a quick way to test a change without touching the tables.</li>
</ul>



<h2 class="wp-block-heading">Does it work?</h2>



<p class="wp-block-paragraph"><strong>Status: Observed</strong></p>



<p class="wp-block-paragraph">Spooled by 3,400 rpm. On target by 4,200. And from there it pulls, hard, all the way to 8,400.</p>



<p class="wp-block-paragraph">That lines up with the table. The 100 percent hold ends at 3,500, the duty drops to 32.5 at 4,000, and the car is on target 200 rpm later.</p>



<h2 class="wp-block-heading">The principle</h2>



<p class="wp-block-paragraph">Get the feedforward right and the PID has almost nothing to do. Then let the logs tell you where it isn&#8217;t right: wherever the closed loop is consistently correcting, the initial position is wrong by that much.</p>



<p class="wp-block-paragraph">Every number here is specific to this turbo, this wastegate, this spring and this fuel. <strong>The data is not transferable, but the principle is.</strong></p>



<hr class="wp-block-separator has-alpha-channel-opacity" />



<p class="wp-block-paragraph"><em>How the torque model decides how much of this boost is actually used is in <a href="https://blownbytwins.co.uk/cars/mk4-supra/traction-control-feedforward-pid/">Traction Control on 1,114 whp</a>. Why the top gears lose boost is in <a href="https://blownbytwins.co.uk/?p=1093">Where the Stock ZF 8HP70 Gives Up</a>. The fuel system feeding all of it is in <a href="https://blownbytwins.co.uk/?p=1194">Staged Injection on the Emtron KV12</a>. Full specification is on the <a href="https://blownbytwins.co.uk/toyota-supra-mk4-delta/">Supra project page</a>.</em></p><p>The post <a href="https://blownbytwins.co.uk/cars/mk4-supra/boost-control-emtron-kv12/">Boost Control on the Emtron KV12: Where the Target Really Comes From</a> first appeared on <a href="https://blownbytwins.co.uk">BlownByTwins</a>.</p><p>The post <a rel="nofollow" href="https://blownbytwins.co.uk/cars/mk4-supra/boost-control-emtron-kv12/">Boost Control on the Emtron KV12: Where the Target Really Comes From</a> appeared first on <a rel="nofollow" href="https://blownbytwins.co.uk">BlownByTwins</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Staged Injection on the Emtron KV12: A Blend, Not a Switch</title>
		<link>https://blownbytwins.co.uk/cars/mk4-supra/staged-injection-emtron-kv12/</link>
		
		<dc:creator><![CDATA[john]]></dc:creator>
		<pubDate>Sat, 10 Oct 2026 07:00:00 +0000</pubDate>
				<category><![CDATA[Engine Management]]></category>
		<category><![CDATA[Mk4 Supra]]></category>
		<category><![CDATA[emtron]]></category>
		<category><![CDATA[fuel system]]></category>
		<category><![CDATA[injectors]]></category>
		<category><![CDATA[staged injection]]></category>
		<guid isPermaLink="false">https://blownbytwins.co.uk/?p=1194</guid>

					<description><![CDATA[<p>How the Emtron KV12 stages twelve CP1000 injectors on the Supra: every table that controls the handover, what the logs show, and where the secondaries sit uncomfortably close to their minimum pulse width.</p>
<p>The post <a href="https://blownbytwins.co.uk/cars/mk4-supra/staged-injection-emtron-kv12/">Staged Injection on the Emtron KV12: A Blend, Not a Switch</a> first appeared on <a href="https://blownbytwins.co.uk">BlownByTwins</a>.</p>
<p>The post <a rel="nofollow" href="https://blownbytwins.co.uk/cars/mk4-supra/staged-injection-emtron-kv12/">Staged Injection on the Emtron KV12: A Blend, Not a Switch</a> appeared first on <a rel="nofollow" href="https://blownbytwins.co.uk">BlownByTwins</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="wp-block-paragraph">In <a href="https://blownbytwins.co.uk/cars/mk4-supra/twelve-small-injectors-instead-of-six-big-ones/">Twelve Small Injectors Instead of Six Big Ones</a> I explained why this car runs two injectors per cylinder. I finished by saying the handover between primaries and secondaries was the part I knew least about, and where I&#8217;d expect the problems to live.</p>



<p class="wp-block-paragraph">This is the follow up. How the Emtron KV12 actually stages twelve injectors, every table that controls it, and one thing I had described wrongly.</p>



<p class="wp-block-paragraph">Each section is marked. <strong>Verified</strong> means it comes straight from the calibration or the logs. <strong>Theory</strong> means it is my reasoning or arithmetic, not something I have measured.</p>



<h2 class="wp-block-heading">Configuration</h2>



<p class="wp-block-paragraph"><strong>Status: Verified</strong></p>



<ul class="wp-block-list">
<li>2JZ-GTE VVTi, 3,353 cc, flex fuel</li>



<li>Plazmaman intake manifold, twin fuel rails mounted on the runners</li>



<li>Twelve CP1000 injectors, rated 1,000 cc/min at 3 bar, high impedance</li>



<li>1:1 rising rate regulator, fuel pressure sensor fitted</li>



<li>Three Walbro 485 pumps</li>



<li><a href="https://emtron.world/products/kv12" target="_blank" rel="noopener">Emtron KV12</a>, every injector on its own channel</li>
</ul>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="1600" height="1200" src="https://blownbytwins.co.uk/wp-content/uploads/2026/05/51187a24-0987-48db-b993-81482362b806.jpeg" alt="Supra 2JZ-GTE engine bay with a Plazmaman intake manifold and two black Plazmaman fuel rails running along the intake runners" class="wp-image-1025" srcset="https://blownbytwins.co.uk/wp-content/uploads/2026/05/51187a24-0987-48db-b993-81482362b806.jpeg 1600w, https://blownbytwins.co.uk/wp-content/uploads/2026/05/51187a24-0987-48db-b993-81482362b806-300x225.jpeg 300w, https://blownbytwins.co.uk/wp-content/uploads/2026/05/51187a24-0987-48db-b993-81482362b806-1024x768.jpeg 1024w, https://blownbytwins.co.uk/wp-content/uploads/2026/05/51187a24-0987-48db-b993-81482362b806-768x576.jpeg 768w, https://blownbytwins.co.uk/wp-content/uploads/2026/05/51187a24-0987-48db-b993-81482362b806-1536x1152.jpeg 1536w" sizes="(max-width: 1600px) 100vw, 1600px" /><figcaption class="wp-element-caption">Installed. Two Plazmaman rails, six injectors each, running along the runners between the head and the plenum.</figcaption></figure>



<h2 class="wp-block-heading">How Emtron does it</h2>



<p class="wp-block-paragraph"><strong>Status: Verified</strong></p>



<p class="wp-block-paragraph">Staging is an injection mode, not an add on. The KV12 offers seven:</p>



<ul class="wp-block-list">
<li>0: Off</li>



<li>1: Sequential</li>



<li><strong>2: Sequential/Staged Sequential</strong> (this car)</li>



<li>3: Sequential/Staged Group</li>



<li>4: Non Sequential</li>



<li>5: GDI Sequential</li>



<li>6: GDI Sequential/Staged, primary GDI and secondary port</li>
</ul>



<p class="wp-block-paragraph">Mode 2 fires the secondaries sequentially as well, each one timed to its own cylinder. Mode 3 groups them, which is what you would use on an ECU without enough channels. With twelve dedicated outputs there is no reason to group anything.</p>



<p class="wp-block-paragraph">Once staging is enabled, the secondaries get their own setup page, and it mirrors the primary one line for line:</p>



<figure class="bbt-figure" style="margin:1.8rem 0"><table style="border-collapse:collapse;width:100%;font-size:0.85rem"><thead><tr style="border-bottom:2px solid #333"><th style="text-align:left;padding:6px 8px">Setting</th><th style="text-align:right;padding:6px 8px">Primary</th><th style="text-align:right;padding:6px 8px">Secondary</th></tr></thead><tbody>
<tr style="border-bottom:1px solid #ddd"><td style="padding:6px 8px">Reference injector size</td><td style="text-align:right;padding:6px 8px">1,190 cc/min</td><td style="text-align:right;padding:6px 8px">1,190 cc/min</td></tr>
<tr style="border-bottom:1px solid #ddd"><td style="padding:6px 8px">Reference static fuel pressure</td><td style="text-align:right;padding:6px 8px">400 kPa</td><td style="text-align:right;padding:6px 8px">400 kPa</td></tr>
<tr style="border-bottom:1px solid #ddd"><td style="padding:6px 8px">Injection timing</td><td style="text-align:right;padding:6px 8px">End of injection</td><td style="text-align:right;padding:6px 8px">End of injection</td></tr>
<tr style="border-bottom:1px solid #ddd"><td style="padding:6px 8px">Nozzle reference pressure</td><td style="text-align:right;padding:6px 8px">Manifold pressure</td><td style="text-align:right;padding:6px 8px">Manifold pressure</td></tr>
<tr style="border-bottom:1px solid #ddd"><td style="padding:6px 8px">Fuel pressure correction</td><td style="text-align:right;padding:6px 8px">On, sensor fitted</td><td style="text-align:right;padding:6px 8px">On, sensor fitted</td></tr>
<tr style="border-bottom:1px solid #ddd"><td style="padding:6px 8px">Injector max duty clamp</td><td style="text-align:right;padding:6px 8px">95%</td><td style="text-align:right;padding:6px 8px">n/a</td></tr>
<tr style="border-bottom:1px solid #ddd"><td style="padding:6px 8px">Minimum effective pulse width</td><td style="text-align:right;padding:6px 8px">0.200 ms</td><td style="text-align:right;padding:6px 8px">n/a</td></tr>
<tr style="border-bottom:1px solid #ddd"><td style="padding:6px 8px">Staging rpm lockout</td><td style="text-align:right;padding:6px 8px">n/a</td><td style="text-align:right;padding:6px 8px">1,000 rpm</td></tr>
<tr style="border-bottom:1px solid #ddd"><td style="padding:6px 8px">Staging ON, balance table above</td><td style="text-align:right;padding:6px 8px">n/a</td><td style="text-align:right;padding:6px 8px">5.0</td></tr>
<tr style="border-bottom:1px solid #ddd"><td style="padding:6px 8px">Staging OFF, balance table below</td><td style="text-align:right;padding:6px 8px">n/a</td><td style="text-align:right;padding:6px 8px">5.0</td></tr>
</tbody></table><figcaption class="bbt-table-note" style="font-size:0.8rem;color:#5f5f5f;line-height:1.5;margin:0.6rem 0 0">Fuel Main and Fuel Secondary Setup, as configured. The separate secondary settings mean the two banks could be different injectors at different pressures. Here they are identical.</figcaption></figure>



<p class="wp-block-paragraph">Fuel pressure correction being on with a sensor fitted matters more than it looks. The ECU is not trusting the regulator to hold 400 kPa across the injector. It measures the differential and corrects flow for it. A 1:1 regulator gets you close, but close is not the same as measured.</p>



<h3 class="wp-block-heading">The channel map</h3>



<figure class="bbt-figure" style="margin:1.8rem 0"><table style="border-collapse:collapse;width:100%;font-size:0.85rem;text-align:center"><thead><tr style="border-bottom:2px solid #333"><th style="text-align:left;padding:6px">Channel</th><th style="padding:6px">1</th><th style="padding:6px">2</th><th style="padding:6px">3</th><th style="padding:6px">4</th><th style="padding:6px">5</th><th style="padding:6px">6</th><th style="padding:6px">7</th><th style="padding:6px">8</th><th style="padding:6px">9</th><th style="padding:6px">10</th><th style="padding:6px">11</th><th style="padding:6px">12</th></tr></thead><tbody>
<tr style="border-bottom:1px solid #ddd"><td style="text-align:left;padding:6px">Primary, cylinder</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>&ndash;</td><td>&ndash;</td><td>&ndash;</td><td>&ndash;</td><td>&ndash;</td><td>&ndash;</td></tr>
<tr style="border-bottom:1px solid #ddd"><td style="text-align:left;padding:6px">Secondary, cylinder</td><td>&ndash;</td><td>&ndash;</td><td>&ndash;</td><td>&ndash;</td><td>&ndash;</td><td>&ndash;</td><td>5</td><td>6</td><td>3</td><td>2</td><td>1</td><td>4</td></tr>
</tbody></table><figcaption class="bbt-table-note" style="font-size:0.8rem;color:#5f5f5f;line-height:1.5;margin:0.6rem 0 0">Injection Channel Assignment. The secondaries are not in cylinder order.</figcaption></figure>



<p class="wp-block-paragraph">Channels 7 to 12 do not run 1 to 6. That is fine, as long as the map matches the wiring. Get one wrong and a secondary fires on the wrong cylinder&#8217;s timing. You will not see that on a single wideband, because the total fuel is still right. The only proper check is firing each channel individually.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="2048" height="1536" src="https://blownbytwins.co.uk/wp-content/uploads/2026/05/de67d480-a6d0-4a81-9476-154df154cc39.jpeg" alt="3.4 litre 2JZ-GTE on an engine stand with the Plazmaman intake manifold and both fuel rails fitted, before installation" class="wp-image-1008" srcset="https://blownbytwins.co.uk/wp-content/uploads/2026/05/de67d480-a6d0-4a81-9476-154df154cc39.jpeg 2048w, https://blownbytwins.co.uk/wp-content/uploads/2026/05/de67d480-a6d0-4a81-9476-154df154cc39-300x225.jpeg 300w, https://blownbytwins.co.uk/wp-content/uploads/2026/05/de67d480-a6d0-4a81-9476-154df154cc39-1024x768.jpeg 1024w, https://blownbytwins.co.uk/wp-content/uploads/2026/05/de67d480-a6d0-4a81-9476-154df154cc39-768x576.jpeg 768w, https://blownbytwins.co.uk/wp-content/uploads/2026/05/de67d480-a6d0-4a81-9476-154df154cc39-1536x1152.jpeg 1536w" sizes="(max-width: 2048px) 100vw, 2048px" /><figcaption class="wp-element-caption">On the stand before installation. Twelve injectors means twelve connectors, and every one has to land on the right channel.</figcaption></figure>



<h2 class="wp-block-heading">Characterising the injector</h2>



<p class="wp-block-paragraph"><strong>Status: Verified</strong></p>



<p class="wp-block-paragraph">The injectors are CP1000s, rated 1,000 cc/min at 3 bar. Scaled to the 400 kPa this car runs across the injector, that is about 1,155 cc/min each, roughly 13,860 cc/min across all twelve, the equivalent of six 2,310 cc injectors.</p>



<p class="wp-block-paragraph">The calibration doesn&#8217;t use 1,155. Its reference size is 1,190 cc/min at 400 kPa, taken from CP Fuel and Race data rather than scaled from the headline rating. The square root rule is a good approximation, not a measurement. Where the manufacturer has measured the injector at your pressure, use their number.</p>



<p class="wp-block-paragraph">The dead time table is identical for both banks, which is correct for identical injectors:</p>



<figure class="bbt-figure" style="margin:1.8rem 0"><table style="border-collapse:collapse;width:100%;font-size:0.85rem;text-align:right"><thead><tr style="border-bottom:2px solid #333"><th style="text-align:left;padding:6px 8px">Diff pressure vs supply</th><th style="padding:6px 8px">8 V</th><th style="padding:6px 8px">10 V</th><th style="padding:6px 8px">12 V</th><th style="padding:6px 8px">14 V</th><th style="padding:6px 8px">16 V</th></tr></thead><tbody>
<tr style="border-bottom:1px solid #ddd"><td style="text-align:left;padding:6px 8px">300 kPa</td><td style="padding:6px 8px">2.609</td><td style="padding:6px 8px">1.675</td><td style="padding:6px 8px">1.240</td><td style="padding:6px 8px">0.960</td><td style="padding:6px 8px">0.756</td></tr>
<tr style="border-bottom:1px solid #ddd"><td style="text-align:left;padding:6px 8px">400 kPa</td><td style="padding:6px 8px">3.053</td><td style="padding:6px 8px">1.892</td><td style="padding:6px 8px">1.353</td><td style="padding:6px 8px"><strong>1.057</strong></td><td style="padding:6px 8px">0.836</td></tr>
<tr style="border-bottom:1px solid #ddd"><td style="text-align:left;padding:6px 8px">500 kPa</td><td style="padding:6px 8px">3.659</td><td style="padding:6px 8px">2.086</td><td style="padding:6px 8px">1.484</td><td style="padding:6px 8px">1.125</td><td style="padding:6px 8px">0.910</td></tr>
</tbody></table><figcaption class="bbt-table-note" style="font-size:0.8rem;color:#5f5f5f;line-height:1.5;margin:0.6rem 0 0">Injector Deadtime Table, ms, primary and secondary. Bold is roughly where the car lives: 400 kPa across the injector, 14 V supply.</figcaption></figure>



<p class="wp-block-paragraph">Dead time rises with pressure and falls with voltage. The solenoid has to pull the pintle open against the fuel pressure, and a higher supply voltage builds current in the coil faster. On a running car at 14 V and 400 kPa, the first 1.057 ms of every pulse is dead time: the injector is energised but not yet delivering its rated flow.</p>



<p class="wp-block-paragraph">Both banks run saturated drive, which is right for a high impedance injector. Peak and hold is for low impedance injectors that need a current limit.</p>



<h3 class="wp-block-heading">Flex fuel is handled underneath</h3>



<p class="wp-block-paragraph">The fuel model works in mass, so the ECU needs to know two things about whatever is in the tank: how much air it needs to burn completely, and how dense it is.</p>



<figure class="bbt-figure" style="margin:1.8rem 0"><table style="border-collapse:collapse;width:100%;font-size:0.85rem;text-align:right"><thead><tr style="border-bottom:2px solid #333"><th style="text-align:left;padding:6px 8px">Ethanol</th><th style="padding:6px 8px">0%</th><th style="padding:6px 8px">10%</th><th style="padding:6px 8px">20%</th><th style="padding:6px 8px">30%</th><th style="padding:6px 8px">40%</th><th style="padding:6px 8px">50%</th><th style="padding:6px 8px">60%</th><th style="padding:6px 8px">70%</th><th style="padding:6px 8px">80%</th><th style="padding:6px 8px">90%</th><th style="padding:6px 8px">100%</th></tr></thead><tbody>
<tr style="border-bottom:1px solid #ddd"><td style="text-align:left;padding:6px 8px">Stoich AFR</td><td style="padding:6px 8px">14.70</td><td style="padding:6px 8px">14.13</td><td style="padding:6px 8px">13.56</td><td style="padding:6px 8px">12.99</td><td style="padding:6px 8px">12.42</td><td style="padding:6px 8px">11.85</td><td style="padding:6px 8px">11.28</td><td style="padding:6px 8px">10.71</td><td style="padding:6px 8px">10.14</td><td style="padding:6px 8px">9.57</td><td style="padding:6px 8px">9.00</td></tr>
</tbody></table><figcaption class="bbt-table-note" style="font-size:0.8rem;color:#5f5f5f;line-height:1.5;margin:0.6rem 0 0">Stoichiometric Custom Table. It also has an engine speed axis, but every column is the same, so only one row is shown.</figcaption></figure>



<p class="wp-block-paragraph">The table is a straight line between petrol and ethanol, by volume. Strictly, stoichiometry blends by mass, not volume, so I checked it. At E85, weighting by mass gives 9.81. The table interpolates to 9.86. Half a percent, well inside what the closed loop trims absorb. Not worth correcting.</p>



<figure class="bbt-figure" style="margin:1.8rem 0"><table style="border-collapse:collapse;width:100%;font-size:0.85rem;text-align:right"><thead><tr style="border-bottom:2px solid #333"><th style="text-align:left;padding:6px 8px">Ethanol vs fuel temp</th><th style="padding:6px 8px">-20 &deg;C</th><th style="padding:6px 8px">0 &deg;C</th><th style="padding:6px 8px">20 &deg;C</th><th style="padding:6px 8px">40 &deg;C</th><th style="padding:6px 8px">60 &deg;C</th><th style="padding:6px 8px">80 &deg;C</th><th style="padding:6px 8px">90 &deg;C</th></tr></thead><tbody>
<tr style="border-bottom:1px solid #ddd"><td style="text-align:left;padding:6px 8px">0%</td><td style="padding:6px 8px">0.773</td><td style="padding:6px 8px">0.759</td><td style="padding:6px 8px">0.745</td><td style="padding:6px 8px">0.731</td><td style="padding:6px 8px">0.717</td><td style="padding:6px 8px">0.703</td><td style="padding:6px 8px">0.690</td></tr>
<tr style="border-bottom:1px solid #ddd"><td style="text-align:left;padding:6px 8px">50%</td><td style="padding:6px 8px">0.800</td><td style="padding:6px 8px">0.784</td><td style="padding:6px 8px">0.768</td><td style="padding:6px 8px">0.752</td><td style="padding:6px 8px">0.736</td><td style="padding:6px 8px">0.720</td><td style="padding:6px 8px">0.710</td></tr>
<tr style="border-bottom:1px solid #ddd"><td style="text-align:left;padding:6px 8px">100%</td><td style="padding:6px 8px">0.825</td><td style="padding:6px 8px">0.807</td><td style="padding:6px 8px">0.789</td><td style="padding:6px 8px">0.771</td><td style="padding:6px 8px">0.753</td><td style="padding:6px 8px">0.735</td><td style="padding:6px 8px">0.720</td></tr>
</tbody></table><figcaption class="bbt-table-note" style="font-size:0.8rem;color:#5f5f5f;line-height:1.5;margin:0.6rem 0 0">Fuel Density Table, g/mL, three rows of eleven and selected columns. Ethanol at 20 &deg;C reads 0.789, which is the textbook value.</figcaption></figure>



<p class="wp-block-paragraph">One small oddity: the step from 80 to 90 °C is steeper than every other step in the table, and the 90 °C column is rounded to two decimal places. It doesn&#8217;t matter here, because the fuel in this rail never gets near 90 °C. If yours does, that column is worth a second look.</p>



<h2 class="wp-block-heading">The balance table: a blend, not a switch</h2>



<p class="wp-block-paragraph"><strong>Status: Verified</strong></p>



<p class="wp-block-paragraph">This is the table that decides who does the work. The value is the secondary bank&#8217;s share of total fuel. Zero means primaries only. Fifty means an even split.</p>



<figure class="bbt-figure" style="margin:1.8rem 0"><table style="border-collapse:collapse;width:100%;font-size:0.85rem;text-align:right"><thead><tr style="border-bottom:2px solid #333"><th style="text-align:left;padding:6px 8px">MAP vs rpm</th><th style="padding:6px 8px">1,000</th><th style="padding:6px 8px">1,500</th><th style="padding:6px 8px">2,000</th><th style="padding:6px 8px">2,500</th><th style="padding:6px 8px">3,000</th><th style="padding:6px 8px">3,500</th><th style="padding:6px 8px">4,000</th><th style="padding:6px 8px">4,500</th><th style="padding:6px 8px">5,000+</th></tr></thead><tbody>
<tr style="border-bottom:1px solid #ddd"><td style="text-align:left;padding:6px 8px">20 to 100 kPa</td><td style="padding:6px 8px">0</td><td style="padding:6px 8px">15</td><td style="padding:6px 8px">20</td><td style="padding:6px 8px">25</td><td style="padding:6px 8px">30</td><td style="padding:6px 8px">35</td><td style="padding:6px 8px">40</td><td style="padding:6px 8px">45</td><td style="padding:6px 8px">50</td></tr>
<tr style="border-bottom:1px solid #ddd"><td style="text-align:left;padding:6px 8px">120 kPa</td><td style="padding:6px 8px">0</td><td style="padding:6px 8px">26.5</td><td style="padding:6px 8px">30</td><td style="padding:6px 8px">33.5</td><td style="padding:6px 8px">36.5</td><td style="padding:6px 8px">40</td><td style="padding:6px 8px">43.5</td><td style="padding:6px 8px">46.5</td><td style="padding:6px 8px">50</td></tr>
<tr style="border-bottom:1px solid #ddd"><td style="text-align:left;padding:6px 8px">140 kPa</td><td style="padding:6px 8px">0</td><td style="padding:6px 8px">38.5</td><td style="padding:6px 8px">40</td><td style="padding:6px 8px">41.5</td><td style="padding:6px 8px">43.5</td><td style="padding:6px 8px">45</td><td style="padding:6px 8px">46.5</td><td style="padding:6px 8px">48.5</td><td style="padding:6px 8px">50</td></tr>
<tr style="border-bottom:1px solid #ddd"><td style="text-align:left;padding:6px 8px">160 to 180 kPa</td><td style="padding:6px 8px">0</td><td style="padding:6px 8px">50</td><td style="padding:6px 8px">50</td><td style="padding:6px 8px">50</td><td style="padding:6px 8px">50</td><td style="padding:6px 8px">50</td><td style="padding:6px 8px">50</td><td style="padding:6px 8px">50</td><td style="padding:6px 8px">50</td></tr>
<tr style="border-bottom:1px solid #ddd"><td style="text-align:left;padding:6px 8px">200 to 240 kPa</td><td style="padding:6px 8px">50</td><td style="padding:6px 8px">50</td><td style="padding:6px 8px">50</td><td style="padding:6px 8px">50</td><td style="padding:6px 8px">50</td><td style="padding:6px 8px">50</td><td style="padding:6px 8px">50</td><td style="padding:6px 8px">50</td><td style="padding:6px 8px">50</td></tr>
</tbody></table><figcaption class="bbt-table-note" style="font-size:0.8rem;color:#5f5f5f;line-height:1.5;margin:0.6rem 0 0">Secondary Balance Table, percent of total fuel from the secondaries. Identical rows are merged. Every row is 50 from 5,000 rpm to the end of the axis at 11,500.</figcaption></figure>



<p class="wp-block-paragraph">Read the top row. At 1,500 rpm in vacuum, the secondaries supply 15 percent. By 2,000 it is 20. The share climbs 5 points every 500 rpm until it reaches an even split at 5,000.</p>



<p class="wp-block-paragraph">Add boost and the ramp gets steeper. At 140 kPa the secondaries are already at 38.5 percent by 1,500 rpm, and from 160 kPa upwards it is an even split everywhere above 1,000.</p>



<p class="wp-block-paragraph">Which means I described this wrongly. In <a href="https://blownbytwins.co.uk/cars/mk4-supra/twelve-small-injectors-instead-of-six-big-ones/">Twelve Small Injectors</a> I wrote that at idle, around town, and at any low load, only the primaries fire. The table says otherwise. Around town at 2,000 rpm, a fifth of the fuel is coming from the secondaries. Only idle runs on primaries alone.</p>



<p class="wp-block-paragraph">This isn&#8217;t staging in the on/off sense. It&#8217;s a blend with a floor.</p>



<h3 class="wp-block-heading">Where the switch actually is</h3>



<p class="wp-block-paragraph">Two settings decide when the secondaries are allowed to fire at all.</p>



<p class="wp-block-paragraph">The <strong>staging rpm lockout</strong> holds them off below 1,000 rpm, whatever the table says. Above that, staging comes on when the interpolated balance value rises above 5.0 and goes off when it falls below 5.0.</p>



<p class="wp-block-paragraph">The table goes from 0 at 1,000 rpm to 15 at 1,500. Interpolating between them, it crosses 5 at about <strong>1,170 rpm</strong>, at every MAP up to 100 kPa. That is the real staging point for normal driving.</p>



<p class="wp-block-paragraph">And because ON and OFF are both 5.0, there is no hysteresis. The same threshold switches the bank in and out. Sitting at 1,170 rpm, the secondaries could in principle toggle on every fluctuation of engine speed.</p>



<p class="wp-block-paragraph">What keeps idle clean is the idle target. I moved it to 950 rpm, under the lockout, so at idle the secondaries are never asked to fire.</p>



<h2 class="wp-block-heading">What the secondaries are being asked to do</h2>



<p class="wp-block-paragraph"><strong>Status: Verified</strong></p>



<p class="wp-block-paragraph">The whole reason for twelve injectors is to keep pulse widths out of the region where an injector stops being predictable. So it&#8217;s worth asking what pulse width the secondaries actually see at light load.</p>



<p class="wp-block-paragraph">I haven&#8217;t measured this directly. This is arithmetic from the fuel model, assuming 80 percent volumetric efficiency, 30 °C charge and lambda 1:</p>



<figure class="bbt-figure" style="margin:1.8rem 0"><table style="border-collapse:collapse;width:100%;font-size:0.85rem;text-align:right"><thead><tr style="border-bottom:2px solid #333"><th style="text-align:left;padding:6px 8px">Condition</th><th style="padding:6px 8px">All fuel through one injector</th><th style="padding:6px 8px">Secondary at 5%</th><th style="padding:6px 8px">Secondary at 15%</th><th style="padding:6px 8px">Secondary at 20%</th></tr></thead><tbody>
<tr style="border-bottom:1px solid #ddd"><td style="text-align:left;padding:6px 8px">40 kPa, E85</td><td style="padding:6px 8px">1.36 ms</td><td style="padding:6px 8px">0.07 ms</td><td style="padding:6px 8px">0.21 ms</td><td style="padding:6px 8px">0.27 ms</td></tr>
<tr style="border-bottom:1px solid #ddd"><td style="text-align:left;padding:6px 8px">40 kPa, petrol</td><td style="padding:6px 8px">0.95 ms</td><td style="padding:6px 8px">0.05 ms</td><td style="padding:6px 8px">0.14 ms</td><td style="padding:6px 8px">0.19 ms</td></tr>
<tr style="border-bottom:1px solid #ddd"><td style="text-align:left;padding:6px 8px">60 kPa, E85</td><td style="padding:6px 8px">2.05 ms</td><td style="padding:6px 8px">0.10 ms</td><td style="padding:6px 8px">0.31 ms</td><td style="padding:6px 8px">0.41 ms</td></tr>
</tbody></table><figcaption class="bbt-table-note" style="font-size:0.8rem;color:#5f5f5f;line-height:1.5;margin:0.6rem 0 0">Effective pulse width, after dead time. Estimated, not logged. The minimum effective pulse width in the calibration is 0.200 ms.</figcaption></figure>



<p class="wp-block-paragraph">At 1,500 rpm in light cruise, the secondaries sit right on the 0.200 ms minimum on E85 and below it on petrol. At the moment staging switches on, with the balance at 5 percent, they are being asked for something like a third of the minimum.</p>



<p class="wp-block-paragraph">That is exactly the region <a href="https://blownbytwins.co.uk/cars/mk4-supra/twelve-small-injectors-instead-of-six-big-ones/">Twelve Small Injectors</a> says staging exists to avoid. The primaries are comfortable. The secondaries are not.</p>



<p class="wp-block-paragraph">The calibration has no short pulse correction either. For very short pulses, the ECU is converting fuel mass to time using dead time and a straight line slope, and a straight line is exactly what an injector stops being down there.</p>



<p class="wp-block-paragraph">What the KV12 does with a request below its own minimum, whether it clamps up to 0.200 ms or drops the pulse, I don&#8217;t know. Either way, the secondary delivery in that window is not what the model thinks it is.</p>



<h2 class="wp-block-heading">What the logs say</h2>



<p class="wp-block-paragraph"><strong>Status: Verified</strong></p>



<p class="wp-block-paragraph">Lambda control is good through the staging region. On the road the handover is transparent. I can&#8217;t feel it, and the wideband doesn&#8217;t show a step.</p>



<p class="wp-block-paragraph">Which looks like it contradicts the section above. I don&#8217;t think it does. Maybe we can refine this in the future.</p>



<h3 class="wp-block-heading">Why it holds up anyway</h3>



<p class="wp-block-paragraph"><strong>Status: Theory</strong></p>



<p class="wp-block-paragraph">Two reasons, and I suspect both apply.</p>



<p class="wp-block-paragraph">First, the error is a percentage of a small number. If a secondary at 15 percent share delivers 20 percent more or less than asked, the cylinder sees a 3 percent error in total fuel. That is inside what closed loop trims correct without anyone noticing.</p>



<p class="wp-block-paragraph">Second, the closed loop may be doing exactly that. Good lambda control in a region where the open loop model is weakest doesn&#8217;t prove the model is right. It may only prove the trims are working. The way to tell the difference is to log the trims, not lambda, through the 1,170 to 2,500 rpm band. Emtron logs the effective and actual pulse width of both banks separately, so the secondary pulse widths can be checked against the estimates above.</p>



<h3 class="wp-block-heading">Where the injectors are, and why it barely shows</h3>



<p class="wp-block-paragraph"><strong>Status: Theory</strong></p>



<figure class="wp-block-image size-full"><img decoding="async" width="1536" height="2048" src="https://blownbytwins.co.uk/wp-content/uploads/2026/05/31f6c2df-564c-42ed-ad76-ba52a0361695.jpeg" alt="Close-up of two Plazmaman fuel rails on the intake runners, each feeding six injectors, one row nearer the cylinder head than the other" class="wp-image-1010" srcset="https://blownbytwins.co.uk/wp-content/uploads/2026/05/31f6c2df-564c-42ed-ad76-ba52a0361695.jpeg 1536w, https://blownbytwins.co.uk/wp-content/uploads/2026/05/31f6c2df-564c-42ed-ad76-ba52a0361695-225x300.jpeg 225w, https://blownbytwins.co.uk/wp-content/uploads/2026/05/31f6c2df-564c-42ed-ad76-ba52a0361695-768x1024.jpeg 768w, https://blownbytwins.co.uk/wp-content/uploads/2026/05/31f6c2df-564c-42ed-ad76-ba52a0361695-1152x1536.jpeg 1152w" sizes="(max-width: 1536px) 100vw, 1536px" /><figcaption class="wp-element-caption">The two rows. One sits close to the head, the other further out along the runners.</figcaption></figure>



<p class="wp-block-paragraph">Both rails sit on the runners, one row close to the head and the other further out along the runner. So the two banks do not take quite the same path to the valve. Fuel from the outer row travels further, wets more runner wall, and arrives slightly later. Calibrating a handover between two injector positions means accounting for two transport paths.</p>



<p class="wp-block-paragraph">On this manifold the gap between the two rows is short, far shorter than on layouts that put the secondaries up in the plenum or the intake tract. I&#8217;d expect the difference in transport and wall wetting to be small. It also matters least where the secondaries carry the smallest share of the fuel, which is exactly the light load region above. That is probably part of why the handover is transparent, but I haven&#8217;t measured it.</p>



<h2 class="wp-block-heading">What I&#8217;d change</h2>



<p class="wp-block-paragraph"><strong>Status: Working conclusion</strong></p>



<p class="wp-block-paragraph">Nothing is broken, so none of this is urgent. But the calibration is relying on the trims in a region where it doesn&#8217;t need to.</p>



<ul class="wp-block-list">
<li><strong>Bring the secondaries in later and bigger.</strong> Six 1,000 cc primaries have far more than enough capacity to carry light cruise on their own. Holding the secondaries at zero through light load, and bringing them in where their share gives a pulse width comfortably clear of the minimum, means they never operate in the bottom of their range.</li>



<li><strong>Split ON and OFF.</strong> Identical thresholds mean no hysteresis. A gap between them stops the bank chattering at the switch point.</li>



<li><strong>Mind the margin at idle.</strong> 950 rpm against a 1,000 rpm lockout is 50 rpm of margin. Anything that lifts the idle above 1,000, such as a higher cold idle target, an idle flare or load compensation, brings the secondaries in at the smallest pulse widths in the table.</li>



<li><strong>Add short pulse data if the ECU will take it.</strong> It is the one piece of the injector model the calibration doesn&#8217;t have, and it matters most in exactly the light load region above.</li>
</ul>



<h2 class="wp-block-heading">The principle</h2>



<p class="wp-block-paragraph">Staging solves a pulse width problem. The balance table can quietly give it straight back by handing the secondaries a sliver of fuel at light load.</p>



<p class="wp-block-paragraph">So when you set one up, don&#8217;t only check that lambda is clean through the transition. Work out the secondary pulse width at the first non zero cell in the table, and check it against the injector&#8217;s minimum. If it is below, the ECU is guessing and the closed loop is covering for it.</p>



<p class="wp-block-paragraph">Every number here is specific to this car, these injectors and this manifold. <strong>The data is not transferable, but the principle is.</strong></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"><em>Why the car has twelve injectors in the first place, and the flow arithmetic behind them, is in <a href="https://blownbytwins.co.uk/cars/mk4-supra/twelve-small-injectors-instead-of-six-big-ones/">Twelve Small Injectors Instead of Six Big Ones</a>. What the fuel system makes possible on E85 is in <a href="https://blownbytwins.co.uk/?p=1107">What E85 Actually Buys</a>. Full specification is on the <a href="https://blownbytwins.co.uk/toyota-supra-mk4-delta/">Supra project page</a>.</em></p>



<p class="wp-block-paragraph">If you run a staged setup on an Emtron and know what the KV12 does with a request below the minimum effective pulse width, I&#8217;d like to hear it.</p><p>The post <a href="https://blownbytwins.co.uk/cars/mk4-supra/staged-injection-emtron-kv12/">Staged Injection on the Emtron KV12: A Blend, Not a Switch</a> first appeared on <a href="https://blownbytwins.co.uk">BlownByTwins</a>.</p><p>The post <a rel="nofollow" href="https://blownbytwins.co.uk/cars/mk4-supra/staged-injection-emtron-kv12/">Staged Injection on the Emtron KV12: A Blend, Not a Switch</a> appeared first on <a rel="nofollow" href="https://blownbytwins.co.uk">BlownByTwins</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Tuning Cruise Control on a 1,000+ bhp Toyota Supra</title>
		<link>https://blownbytwins.co.uk/cars/mk4-supra/supra-cruise-control-emtron-pid-tuning/</link>
		
		<dc:creator><![CDATA[john]]></dc:creator>
		<pubDate>Wed, 07 Oct 2026 14:13:36 +0000</pubDate>
				<category><![CDATA[Engine Management]]></category>
		<category><![CDATA[Mk4 Supra]]></category>
		<category><![CDATA[Tuning]]></category>
		<category><![CDATA[calibration]]></category>
		<category><![CDATA[cruise control]]></category>
		<category><![CDATA[dbw]]></category>
		<category><![CDATA[emtron]]></category>
		<guid isPermaLink="false">https://blownbytwins.co.uk/?p=1210</guid>

					<description><![CDATA[<p>How to read a cruise control log on a torque-based Emtron KV12: one sample log from a 2JZ Supra, six checks that derive what P, I, D and base torque are really doing, and the formulas to redo them for your own gearing.</p>
<p>The post <a href="https://blownbytwins.co.uk/cars/mk4-supra/supra-cruise-control-emtron-pid-tuning/">Tuning Cruise Control on a 1,000+ bhp Toyota Supra</a> first appeared on <a href="https://blownbytwins.co.uk">BlownByTwins</a>.</p>
<p>The post <a rel="nofollow" href="https://blownbytwins.co.uk/cars/mk4-supra/supra-cruise-control-emtron-pid-tuning/">Tuning Cruise Control on a 1,000+ bhp Toyota Supra</a> appeared first on <a rel="nofollow" href="https://blownbytwins.co.uk">BlownByTwins</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="wp-block-paragraph">Cruise control is not the first system anyone thinks about on a heavily modified Supra. On a torque-based standalone, though, it is one of the most revealing. Cruise never touches the throttle directly. It asks the engine for torque and trusts every layer underneath to deliver it, so if the torque model, the throttle-area table or the drive-by-wire loop is wrong, cruise is where it shows.</p>



<p class="wp-block-paragraph">This is not a list of gains to copy. Gearing, tyre size and mass change every number below. What carries over is the method: take one sample log, and derive from it what each part of the controller is actually doing. Each check comes with the formula to redo it on your own car.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">The control path</h2>



<p class="wp-block-paragraph">Emtron is not commanding throttle position from speed error. The chain is:</p>



<pre class="wp-block-code"><code>Speed error → Cruise PID → torque correction
Torque Target Base + correction → Torque Target Final
Torque Target Final → TMF → throttle-area demand → DBW → engine torque</code></pre>



<figure class="wp-block-image size-large"><img decoding="async" src="https://blownbytwins.co.uk/wp-content/uploads/2026/10/cruise-control-path-v2.png" alt="Block diagram of the Emtron cruise control path: speed error into the cruise PID, the correction added to a base torque latched when SET is pressed, final torque through TMF to throttle area demand, DBW, engine, ZF 8HP70 and vehicle, with front axle average speed fed back as the cruise speed input"/><figcaption class="wp-element-caption">Cruise sits on top of the torque model. Everything inside the dashed box was tuned before any cruise gain was touched.</figcaption></figure>



<p class="wp-block-paragraph">That ordering matters. Cruise PID behaviour is only meaningful once the layers below it are stable, because any error in the throttle-area model or the DBW loop arrives at the cruise controller looking like road load. On this car the <a href="https://blownbytwins.co.uk/cars/mk4-supra/throttle-body-effective-area/">throttle-area table</a> and DBW PID were both reworked first.</p>



<h2 class="wp-block-heading">How Emtron scales the gains</h2>



<p class="wp-block-paragraph">Emtron&#8217;s cruise gains map directly to torque:</p>



<ul class="wp-block-list">
<li><strong>P = 1.00</strong> gives ±10 Nm for every 1 km/h of speed error.</li>



<li><strong>I = 0.010</strong> gives ±10 Nm/s for every 1 km/h of sustained speed error.</li>
</ul>



<p class="wp-block-paragraph">So P = 1.20 should give 12 Nm per km/h immediately, and I = 0.003 should add 3 Nm every second per km/h for as long as the error lasts. Those two numbers are what the log gets checked against.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1950" height="1050" src="https://blownbytwins.co.uk/wp-content/uploads/2026/10/cruise-pid-p-versus-i-torque.png" alt="Chart of torque contribution against time for a constant 1 km/h speed error: P of 1.20 gives a flat 12 Nm, while I of 0.003, 0.005 and 0.007 ramp at 3, 5 and 7 Nm per second" class="wp-image-1213" srcset="https://blownbytwins.co.uk/wp-content/uploads/2026/10/cruise-pid-p-versus-i-torque.png 1950w, https://blownbytwins.co.uk/wp-content/uploads/2026/10/cruise-pid-p-versus-i-torque-300x162.png 300w, https://blownbytwins.co.uk/wp-content/uploads/2026/10/cruise-pid-p-versus-i-torque-1024x551.png 1024w, https://blownbytwins.co.uk/wp-content/uploads/2026/10/cruise-pid-p-versus-i-torque-768x414.png 768w, https://blownbytwins.co.uk/wp-content/uploads/2026/10/cruise-pid-p-versus-i-torque-1536x827.png 1536w" sizes="auto, (max-width: 1950px) 100vw, 1950px" /><figcaption class="wp-element-caption">P is a step, I is a ramp.</figcaption></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">The sample log</h2>



<figure class="wp-block-image size-large"><img decoding="async" src="https://blownbytwins.co.uk/wp-content/uploads/2026/10/emtron-cruise-closed-loop-setup.png" alt="EMtune Cruise Closed Loop Setup screen: speed channel Front Axle Speed (Avg), proportional gain 1.20, integral gain 0.007, derivative gain 0.10, deadband 0.2 kph, maximum torque clamp 350 Nm, minimum torque clamp minus 50 Nm"/><figcaption class="wp-element-caption">The current calibration. The sample log below was recorded with Integral Gain at 0.003 and everything else as shown.</figcaption></figure>



<p class="wp-block-paragraph">The sample is one drive with cruise set three times, all in eighth gear at around 120 km/h, about four minutes of cruise in total. The longest engagement ran for just over three minutes on an ordinary undulating road.</p>



<figure class="wp-block-image size-large"><img decoding="async" src="https://blownbytwins.co.uk/wp-content/uploads/2026/10/cruise-log-run-trace.png" alt="Logged cruise run at 120.8 km/h: road speed wanders between about 118 and 126 km/h over three minutes while Torque Target Base stays flat at 189 Nm and Torque Target Final moves between about 125 and 215 Nm"/><figcaption class="wp-element-caption">The longest run. Speed wanders slowly either side of target; base torque never moves.</figcaption></figure>



<p class="wp-block-paragraph">Summary of the three engagements, ignoring the first five seconds after each set:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Run</th><th>Target</th><th>Base torque</th><th>Max deviation</th><th>Mean absolute error</th><th>Time within ±1 km/h</th><th>Mean error</th></tr></thead><tbody><tr><td>1 (194 s)</td><td>120.8 km/h</td><td>189 Nm</td><td>5.6 km/h</td><td>1.9 km/h</td><td>32%</td><td>1.0 km/h over</td></tr><tr><td>2 (31 s)</td><td>120.2 km/h</td><td>190 Nm</td><td>4.2 km/h</td><td>1.2 km/h</td><td>49%</td><td>1.0 km/h over</td></tr><tr><td>3 (34 s)</td><td>119.3 km/h</td><td>215 Nm</td><td>6.4 km/h</td><td>2.9 km/h</td><td>42%</td><td>2.1 km/h over</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Deviations of up to about ±3 mph, slow rather than fast. The checks below work out why.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">What to look for</h2>



<h3 class="wp-block-heading">1. Is cruise using the speed you think it is?</h3>



<p class="wp-block-paragraph">Log <code>Cruise - Speed Input</code> alongside whichever channel you selected as the source. Here the source is <code>Front Axle Speed (Avg)</code>, and the two match sample for sample. On a rear-wheel-drive car that is the right source: the front wheels are undriven, so their speed is road speed, not road speed plus whatever slip the rear tyres are carrying.</p>



<p class="wp-block-paragraph">If the two channels disagree on your car, stop there. Nothing else in the analysis means anything until the controller and the log are looking at the same speed.</p>



<h3 class="wp-block-heading">2. What is base torque actually doing?</h3>



<p class="wp-block-paragraph">It is tempting to read <code>Cruise - Torque Target Base</code> as a live road-load estimate. In this log it isn&#8217;t. It is captured when SET is pressed (189, 190 and 215 Nm on the three runs) and then stays flat for the whole engagement. Every newton-metre of movement in Final is closed-loop correction.</p>



<p class="wp-block-paragraph">That makes the moment you press SET part of the calibration. Run 3 was set at 215 Nm, more than the car needed to hold 119 km/h, and it spent the whole run about 2 km/h over target with the controller holding a negative correction the entire time. The base is a starting point. Whatever it gets wrong, the closed loop has to carry.</p>



<h3 class="wp-block-heading">3. Does P match the setting?</h3>



<p class="wp-block-paragraph">Make a derived channel for the correction and plot it against speed error:</p>



<pre class="wp-block-code"><code>Speed Error = Cruise - Speed Target − Cruise - Speed Input
Correction  = Cruise - Torque Target Final − Cruise - Torque Target Base</code></pre>



<figure class="wp-block-image size-large"><img decoding="async" src="https://blownbytwins.co.uk/wp-content/uploads/2026/10/cruise-log-p-response-scatter.png" alt="Scatter of torque correction against speed error for 5,436 logged samples, lying on a straight line with a fitted slope of 11.1 Nm per km/h against an expected 12 Nm per km/h"/><figcaption class="wp-element-caption">Every sample with cruise engaged. A straight line through the origin, with a flat step either side of zero.</figcaption></figure>



<p class="wp-block-paragraph">A straight-line fit gives 11.1 Nm per km/h, which looks slightly low against the 12 expected from P = 1.20. Look closely at the middle of the plot, though: the samples step flat across zero. That is the ±0.2 km/h deadband, and Emtron does not just zero the error inside it. It subtracts the deadband from the error everywhere:</p>



<pre class="wp-block-code"><code>P term = 10 × P × (|Speed Error| − deadband) × sign(Speed Error)</code></pre>



<p class="wp-block-paragraph">Fit against that instead and the slope comes out at 12.0 Nm per km/h, with every sample within 1 Nm of the line, which is the resolution of the logged torque channels. P is doing exactly what its setting says.</p>



<h3 class="wp-block-heading">4. Is the integral doing anything?</h3>



<p class="wp-block-paragraph">This is the check that matters most, and it falls straight out of check 3. Subtract the P term from the correction. Whatever is left is the integral and derivative:</p>



<pre class="wp-block-code"><code>Residual = Correction − P term</code></pre>



<p class="wp-block-paragraph">Then work out what the integral should have contributed. Accumulate the deadbanded speed error over the run and multiply by 1000 × I. For the long run in the sample, the error integrates to about −200 km/h·s. At I = 0.003 that is roughly −600 Nm of integral action, enough to pin the correction against the −50 Nm clamp for the second half of the run.</p>



<figure class="wp-block-image size-large"><img decoding="async" src="https://blownbytwins.co.uk/wp-content/uploads/2026/10/cruise-log-integral-check.png" alt="Logged torque correction overlaid with a proportional-only reconstruction, which matches it almost exactly, and with the expected proportional plus integral correction at I 0.003, which diverges widely and sits on the minus 50 Nm clamp"/><figcaption class="wp-element-caption">The logged correction (black) and the P-only reconstruction (green dashed) are indistinguishable. The red line is what I = 0.003 should have added.</figcaption></figure>



<p class="wp-block-paragraph">In the sample log the residual is zero to within the 1 Nm logging resolution. The correction is proportional only. You can see the consequence on the road too: between about 85 and 110 seconds into the long run, the car sat 3 to 5 km/h over target while the correction barely moved. A working integrator would have kept pulling torque off for the whole of that period.</p>



<p class="wp-block-paragraph">When this check comes back empty, adjusting the integral gain is the wrong next move. Find out why the integrator is not contributing first: whether it is gated by a condition, scaled differently from what you expect, or whether the calibration in the car is not the one you think you loaded. If your firmware can log the individual cruise P, I and D outputs, log them.</p>



<h3 class="wp-block-heading">5. Translate the error into your own car</h3>



<p class="wp-block-paragraph">A proportional-only cruise controller always leaves a steady error when the load changes, because it needs an error to make torque. The size of that error is set by P and by your gearing, which is why nobody else&#8217;s numbers transfer.</p>



<p class="wp-block-paragraph">The extra engine torque a gradient demands:</p>



<pre class="wp-block-code"><code>ΔT_engine = (m × g × sin θ × r_tyre) / (gear ratio × final drive)</code></pre>



<p class="wp-block-paragraph">And the speed error a P-only controller settles at to deliver it:</p>



<pre class="wp-block-code"><code>Δv ≈ ΔT_engine / (10 × P) + deadband</code></pre>



<p class="wp-block-paragraph">For the Supra in eighth (about 0.67) with the 2.93 final drive, a 0.33 m tyre and roughly 1650 kg, a 2% gradient needs about 55 Nm more at the engine. At 12 Nm per km/h that is about 4.8 km/h of steady error, almost exactly the ±3 mph drift in the sample log.</p>



<p class="wp-block-paragraph">Put your own mass, tyre and gearing in and you will get a different number. A car cruising in a lower gear, or on a shorter final drive, sees less engine torque per percent of gradient and a smaller error for the same P.</p>



<h3 class="wp-block-heading">6. Is D visible?</h3>



<p class="wp-block-paragraph">Not at D = 0.10 in this sample. Once the P term is removed there is nothing left above the logging resolution, so nothing can be attributed to D either. At cruise the rate of change of speed error is small, and so is anything a derivative term makes from it.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Changes since the sample</h2>



<p class="wp-block-paragraph">Integral Gain has since gone from 0.003 to 0.005 and then to 0.007, one step at a time, with P held at 1.20, D at 0.10 and the deadband and clamps unchanged.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1950" height="1050" src="https://blownbytwins.co.uk/wp-content/uploads/2026/10/cruise-integral-gain-progression.png" alt="Bar chart of integral torque build-up rate at 1, 2 and 3 km/h of sustained error for I of 0.003, 0.005 and 0.007: 3, 6, 9; 5, 10, 15; and 7, 14, 21 Nm per second" class="wp-image-1211" srcset="https://blownbytwins.co.uk/wp-content/uploads/2026/10/cruise-integral-gain-progression.png 1950w, https://blownbytwins.co.uk/wp-content/uploads/2026/10/cruise-integral-gain-progression-300x162.png 300w, https://blownbytwins.co.uk/wp-content/uploads/2026/10/cruise-integral-gain-progression-1024x551.png 1024w, https://blownbytwins.co.uk/wp-content/uploads/2026/10/cruise-integral-gain-progression-768x414.png 768w, https://blownbytwins.co.uk/wp-content/uploads/2026/10/cruise-integral-gain-progression-1536x827.png 1536w" sizes="auto, (max-width: 1950px) 100vw, 1950px" /><figcaption class="wp-element-caption">What each setting should add per second of sustained error, if the integrator is running.</figcaption></figure>



<p class="wp-block-paragraph">Each step gets judged by check 4 before anything else. A road test on its own cannot separate a better controller from a flatter road. If the residual is still flat at 0.007, the gain was never the problem.</p>



<h2 class="wp-block-heading">When the integral is working: what to expect</h2>



<p class="wp-block-paragraph">From torque to road speed, a car is close to a pure integrator: net torque sets acceleration, and speed is acceleration accumulated. Wrap a PI controller around that and you get a second-order loop whose damping depends on the ratio of the two gains:</p>



<pre class="wp-block-code"><code>k  = (gear ratio × final drive) / (r_tyre × m) × 3.6     km/h per second, per engine Nm
ζ ≈ (k × 10 × P) / (2 × √(k × 1000 × I))</code></pre>



<p class="wp-block-paragraph">Raise I with P fixed and the loop recovers faster but with less damping. For the Supra&#8217;s numbers, damping falls from about 0.39 at I = 0.003 to 0.26 at I = 0.007, and P would need to be around 1.8 to 1.9 to hold the original damping. Your k is different, so your numbers will be too.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="2100" height="1110" src="https://blownbytwins.co.uk/wp-content/uploads/2026/10/cruise-gain-progression-model-prediction.png" alt="Simulated speed traces for P 1.20 with I 0.003, 0.005 and 0.007, plus P 1.86 with I 0.007, through the same climb. Higher integral recovers faster but crosses target more; raising P alongside it settles fastest" class="wp-image-1216" srcset="https://blownbytwins.co.uk/wp-content/uploads/2026/10/cruise-gain-progression-model-prediction.png 2100w, https://blownbytwins.co.uk/wp-content/uploads/2026/10/cruise-gain-progression-model-prediction-300x159.png 300w, https://blownbytwins.co.uk/wp-content/uploads/2026/10/cruise-gain-progression-model-prediction-1024x541.png 1024w, https://blownbytwins.co.uk/wp-content/uploads/2026/10/cruise-gain-progression-model-prediction-768x406.png 768w, https://blownbytwins.co.uk/wp-content/uploads/2026/10/cruise-gain-progression-model-prediction-1536x812.png 1536w, https://blownbytwins.co.uk/wp-content/uploads/2026/10/cruise-gain-progression-model-prediction-2048x1083.png 2048w" sizes="auto, (max-width: 2100px) 100vw, 2100px" /><figcaption class="wp-element-caption">Model, not a log. The trend is the point: more I alone means more crossing of target, and P is what buys the damping back.</figcaption></figure>



<p class="wp-block-paragraph">Each tuning error then has its own signature in the speed trace:</p>



<ul class="wp-block-list">
<li><strong>Too little P:</strong> weak immediate correction. The car sags at the start of every disturbance.</li>



<li><strong>Too much P:</strong> fast oscillation around target, set by the delay in the torque path.</li>



<li><strong>Too little or no I:</strong> a steady offset that follows the gradient, which is what the sample log shows.</li>



<li><strong>Too much I:</strong> slow overshoot and repeated crossing of target.</li>



<li><strong>D:</strong> works on acceleration, which is small and noisy at cruise. If overshoot appears, P is usually the stronger lever.</li>
</ul>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="2100" height="1260" src="https://blownbytwins.co.uk/wp-content/uploads/2026/10/cruise-pid-tuning-failure-modes.png" alt="Four simulated speed traces for the same two-percent climb: too little integral drifts slowly, too much integral overshoots repeatedly, too much proportional oscillates quickly around target, and matched gains recover and settle" class="wp-image-1212" srcset="https://blownbytwins.co.uk/wp-content/uploads/2026/10/cruise-pid-tuning-failure-modes.png 2100w, https://blownbytwins.co.uk/wp-content/uploads/2026/10/cruise-pid-tuning-failure-modes-300x180.png 300w, https://blownbytwins.co.uk/wp-content/uploads/2026/10/cruise-pid-tuning-failure-modes-1024x614.png 1024w, https://blownbytwins.co.uk/wp-content/uploads/2026/10/cruise-pid-tuning-failure-modes-768x461.png 768w, https://blownbytwins.co.uk/wp-content/uploads/2026/10/cruise-pid-tuning-failure-modes-1536x922.png 1536w, https://blownbytwins.co.uk/wp-content/uploads/2026/10/cruise-pid-tuning-failure-modes-2048x1229.png 2048w" sizes="auto, (max-width: 2100px) 100vw, 2100px" /><figcaption class="wp-element-caption">Illustrative simulation, not logged data. Fast wobble points at P, slow wobble at I.</figcaption></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Log layout</h2>



<p class="wp-block-paragraph">Everything above comes from four panels and three derived channels.</p>



<figure class="wp-block-image size-large"><img decoding="async" src="https://blownbytwins.co.uk/wp-content/uploads/2026/10/cruise-log-layout-v2.png" alt="Suggested four-panel log layout: speed panel with speed target, speed input and derived speed error; torque panel with base and final torque targets and derived correction and residual; throttle panel with DBW target, DBW actual and throttle area demand; context panel with MAP, gear and shift state"/><figcaption class="wp-element-caption">If the residual is anything other than flat, that is your integral and derivative at work.</figcaption></figure>



<p class="wp-block-paragraph">Gear and shift state are there to exclude kickdowns and upshifts. They change the torque-to-speed relationship mid-run and will look like controller misbehaviour if left in.</p>



<h2 class="wp-block-heading">Current configuration</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Parameter</th><th>Value</th></tr></thead><tbody><tr><td>Speed source</td><td>Front Axle Speed (Avg)</td></tr><tr><td>Proportional Gain</td><td>1.20</td></tr><tr><td>Integral Gain</td><td>0.007 (sample log at 0.003)</td></tr><tr><td>Derivative Gain</td><td>0.10</td></tr><tr><td>Deadband</td><td>±0.2 km/h</td></tr><tr><td>Maximum Torque Clamp</td><td>+350 Nm</td></tr><tr><td>Minimum Torque Clamp</td><td>−50 Nm</td></tr></tbody></table></figure>



<h2 class="wp-block-heading">The broader point</h2>



<p class="wp-block-paragraph">On a torque-managed standalone, cruise depends on the ECU understanding throttle area, airflow, engine torque, DBW response, road speed and transmission state. Get any of those wrong and cruise will find it.</p>



<p class="wp-block-paragraph">The sample log is a good example of why gains should be derived from the log rather than from how the car feels. The drift looked like a weak integral. The log showed P working exactly as set, a base torque frozen at the moment SET was pressed, and an integral contributing nothing at all. Three different facts, and only one of them is about the integral gain.</p>



<p class="wp-block-paragraph">Run the same six checks on your own log before you change a number.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"><em>Part of the Emtron KV12 series on a 3.4 litre 2JZ. Cruise leans on the same torque model as the <a href="https://blownbytwins.co.uk/?p=1118">traction control strategy</a> and the <a href="https://blownbytwins.co.uk/cars/mk4-supra/throttle-body-effective-area/">throttle-area table</a> underneath both. Full specification is on the <a href="https://blownbytwins.co.uk/toyota-supra-mk4-delta/">Supra project page</a>.</em></p><p>The post <a href="https://blownbytwins.co.uk/cars/mk4-supra/supra-cruise-control-emtron-pid-tuning/">Tuning Cruise Control on a 1,000+ bhp Toyota Supra</a> first appeared on <a href="https://blownbytwins.co.uk">BlownByTwins</a>.</p><p>The post <a rel="nofollow" href="https://blownbytwins.co.uk/cars/mk4-supra/supra-cruise-control-emtron-pid-tuning/">Tuning Cruise Control on a 1,000+ bhp Toyota Supra</a> appeared first on <a rel="nofollow" href="https://blownbytwins.co.uk">BlownByTwins</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>What the Logs Changed in My Supra Traction Control</title>
		<link>https://blownbytwins.co.uk/cars/mk4-supra/what-the-logs-changed-in-my-supra-traction-control/</link>
		
		<dc:creator><![CDATA[john]]></dc:creator>
		<pubDate>Mon, 21 Sep 2026 10:25:00 +0000</pubDate>
				<category><![CDATA[Engine Management]]></category>
		<category><![CDATA[Mk4 Supra]]></category>
		<category><![CDATA[Tuning]]></category>
		<category><![CDATA[emtron]]></category>
		<category><![CDATA[supra]]></category>
		<category><![CDATA[traction control]]></category>
		<guid isPermaLink="false">https://blownbytwins.co.uk/?p=1162</guid>

					<description><![CDATA[<p>The previous version of the traction control worked. That was the problem. It worked well enough to make a 1,114 whp Supra feel calm, so the remaining faults were hidden&#8230;</p>
<p>The post <a href="https://blownbytwins.co.uk/cars/mk4-supra/what-the-logs-changed-in-my-supra-traction-control/">What the Logs Changed in My Supra Traction Control</a> first appeared on <a href="https://blownbytwins.co.uk">BlownByTwins</a>.</p>
<p>The post <a rel="nofollow" href="https://blownbytwins.co.uk/cars/mk4-supra/what-the-logs-changed-in-my-supra-traction-control/">What the Logs Changed in My Supra Traction Control</a> appeared first on <a rel="nofollow" href="https://blownbytwins.co.uk">BlownByTwins</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="wp-block-paragraph">The previous version of the traction control worked. That was the problem. It worked well enough to make a 1,114 whp Supra feel calm, so the remaining faults were hidden inside a system that never looked obviously broken.</p>



<p class="wp-block-paragraph">Then I logged it properly. The logs showed that the tyre produced its best acceleration at less slip than some of my more permissive modes allowed, the speed offsets could drive the final target below zero, and the integral term was storing positive torque while the car was below target. When wheelspin arrived, part of the PID was briefly helping it.</p>



<p class="wp-block-paragraph">This is the latest iteration: what changed, what the evidence actually supports, and what still needs a warm, dry road before I call it finished.</p>



<p class="wp-block-paragraph"><strong>The starting point</strong></p>



<p class="wp-block-paragraph">Status: Verified &#8211; Rear tyres are 295/30/19 Continental SportContact 7s.</p>



<p class="wp-block-paragraph">The strategy has always had two halves. Feedforward predicts the engine torque the tyre should accept. Closed loop PID then corrects whatever the prediction could not know about: temperature, damp patches, surface changes, load transfer and bumps.</p>



<p class="wp-block-paragraph">The torque model is normalised to third gear. The traction strategy itself is not normalised until the final gear scaler is applied. That distinction matters because a torque value in the base table is not the engine torque the car will necessarily receive in second, fourth or fifth.</p>



<p class="wp-block-paragraph"><strong>The tyre peak moved the targets</strong></p>



<p class="wp-block-paragraph">Status: Working conclusion</p>



<p class="wp-block-paragraph">The useful result from the earlier dry data was a tractive force peak around 9,500 to 9,800 N at roughly 5 to 6 percent slip. Once slip moved into the 6 to 8 percent band, median tractive force fell to about 8,860 N. More wheelspin felt more dramatic, but it accelerated the car less.</p>



<p class="wp-block-paragraph">That immediately made two settings look wrong. Mode 7 allowed 7.9 percent straight line slip and Mode 9 allowed 12 percent. Both sat beyond the measured force peak. They were permissive, but they were not the fastest settings.</p>



<p class="wp-block-paragraph">The later road test complicated the picture. It was cooler and the road was not completely dry. Maximum logged tractive force was about 7,982 N rather than 9,500 N. The road rose by only about 0.17 percent over the measured section, worth roughly 30 N on a 1,750 kg car, so gradient could not explain the difference. Tyre and road condition could.</p>



<p class="wp-block-paragraph">That means 9,500 N remains a dry baseline, not a universal grip limit. The system still needs slip feedback because no fixed torque table can know whether the tyre is warm, cold, dry or sitting on a damp seam.</p>



<p class="wp-block-paragraph"><strong>Rebuilding the rotary modes</strong></p>



<p class="wp-block-paragraph">Status Calibration loaded for validation</p>



<p class="wp-block-paragraph">The rotary still selects the character of the car, but the straight line targets now have a cleaner progression. Mode 3 remains the chilled setting. Mode 4 is the normal fast road setting. Mode 5 is for a known dry road on warm tyres. Mode 6 allows movement, but no longer asks the SC7 to live well beyond its measured force peak.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>TC Mode</strong></td><td><strong>Use</strong></td><td><strong>Previous 0 G target</strong></td><td><strong>Revised 0 G target</strong></td></tr><tr><td>1</td><td>Snow and ice</td><td>2.0%</td><td>2.0%</td></tr><tr><td>2</td><td>Damp and cold</td><td>2.0%</td><td>2.5%</td></tr><tr><td>3</td><td>Chilled</td><td>2.8%</td><td>3.0%</td></tr><tr><td>4</td><td>Sporty road</td><td>3.8%</td><td>4.0%</td></tr><tr><td>5</td><td>Known dry roads</td><td>7.9%</td><td>5.5%</td></tr><tr><td>6</td><td>Track</td><td>12.0%</td><td>7.0%</td></tr><tr><td>7</td><td>Very permissive</td><td>20.0%</td><td>10.0%</td></tr><tr><td>8</td><td>Soft off</td><td>28.0%</td><td>28.0%</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">The lateral G shapes were rebuilt at the same time. Both sides are now symmetrical because there was no evidence supporting different left and right targets. Every active road mode tapers as lateral acceleration increases, because the tyre has less longitudinal capacity available while it is also producing cornering force.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="501" src="https://blownbytwins.co.uk/wp-content/uploads/2026/09/tc_target_slip_profiles-1024x501.png" alt="" class="wp-image-1163" srcset="https://blownbytwins.co.uk/wp-content/uploads/2026/09/tc_target_slip_profiles-1024x501.png 1024w, https://blownbytwins.co.uk/wp-content/uploads/2026/09/tc_target_slip_profiles-300x147.png 300w, https://blownbytwins.co.uk/wp-content/uploads/2026/09/tc_target_slip_profiles-768x376.png 768w, https://blownbytwins.co.uk/wp-content/uploads/2026/09/tc_target_slip_profiles-1536x752.png 1536w, https://blownbytwins.co.uk/wp-content/uploads/2026/09/tc_target_slip_profiles-2048x1002.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"><strong>The speed offset was doing too much</strong></p>



<p class="wp-block-paragraph">Status: Calibration loaded for validation</p>



<p class="wp-block-paragraph">The final target is the lateral G table plus a speed offset. The old high speed offsets were large enough to make the combined target negative in the conservative modes. Unless that is correcting a measured wheel speed bias, a negative slip target has no useful meaning.</p>



<p class="wp-block-paragraph">The revised table keeps the low speed launch allowance, but reduces the 25 km/h addition from nine percentage points to five. The target now blends down towards the normal table by 45 km/h instead of falling off a cliff. Above 180 km/h the negative offsets remain, but they are smaller and cannot erase the underlying target.</p>



<p class="wp-block-paragraph">That gives the same rotary a consistent meaning at every speed. Mode 3 remains conservative rather than becoming impossible at high speed, and Mode 7 remains the quickest dry road target rather than turning into an arbitrary number once the car passes 180 km/h.</p>



<p class="wp-block-paragraph"><strong>A feedforward table built around tractive force</strong></p>



<p class="wp-block-paragraph">Status Current baseline</p>



<p class="wp-block-paragraph">The largest architectural change is the main feedforward surface. Instead of treating slip error as the only description of available grip, the new table is indexed by modelled tractive force and engine torque before reductions.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="269" src="https://blownbytwins.co.uk/wp-content/uploads/2026/09/tc_feedforward_table-1024x269.png" alt="" class="wp-image-1165" srcset="https://blownbytwins.co.uk/wp-content/uploads/2026/09/tc_feedforward_table-1024x269.png 1024w, https://blownbytwins.co.uk/wp-content/uploads/2026/09/tc_feedforward_table-300x79.png 300w, https://blownbytwins.co.uk/wp-content/uploads/2026/09/tc_feedforward_table-768x202.png 768w, https://blownbytwins.co.uk/wp-content/uploads/2026/09/tc_feedforward_table.png 1065w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">The surface rises towards 9,500 N, then deliberately falls away. At a 950 Nm unrestricted torque input, the table returns 594.9 Nm at 8,000 N, 652.7 Nm at 9,500 N and 597.1 Nm at 10,500 N.</p>



<p class="wp-block-paragraph">Apply the fourth gear normalisation factor of 1.263 and those become approximately 751, 825 and 754 Nm at the engine. The peak is therefore almost exactly where the warm, dry SC7 data said it should be. Above the peak, the table asks for less torque because the tyre has already moved onto the wrong side of its force curve.</p>



<p class="wp-block-paragraph">This is still a model. Emtron tractive force is largely derived from engine torque and gearing; it is not a strain gauge measuring the contact patch. The table provides a gear aware first estimate. Slip feedback remains the part that discovers the road is wet.</p>



<p class="wp-block-paragraph"><strong>The integrator was adding torque</strong></p>



<p class="wp-block-paragraph">Status: Verified defect</p>



<p class="wp-block-paragraph">The most important log finding was not a lack of negative integral authority. It was positive windup.</p>



<p class="wp-block-paragraph">With slip below target, the original controller allowed the integral output to climb to its positive 50 Nm clamp. One run held it there for about 1.3 seconds. Another retained the full 50 Nm across approximately 2.75 seconds. The tyre was not slipping too much, so the controller stored permission to add torque.</p>



<p class="wp-block-paragraph">When overslip arrived, the proportional and derivative terms reacted immediately, but the integral term had to unwind before it could help. At the worst point in one event the contributions were minus 7.6 Nm proportional, plus 37.6 Nm integral and minus 0.9 Nm derivative. The combined PID contribution was still plus 29.1 Nm while the tyre was already beyond target.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="602" src="https://blownbytwins.co.uk/wp-content/uploads/2026/09/tc_integral_clamps-1024x602.png" alt="" class="wp-image-1164" srcset="https://blownbytwins.co.uk/wp-content/uploads/2026/09/tc_integral_clamps-1024x602.png 1024w, https://blownbytwins.co.uk/wp-content/uploads/2026/09/tc_integral_clamps-300x176.png 300w, https://blownbytwins.co.uk/wp-content/uploads/2026/09/tc_integral_clamps-768x452.png 768w, https://blownbytwins.co.uk/wp-content/uploads/2026/09/tc_integral_clamps-1536x904.png 1536w, https://blownbytwins.co.uk/wp-content/uploads/2026/09/tc_integral_clamps-2048x1205.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">The controller remained stable because the feedforward model, throttle reduction and ignition retard were doing the real work. That does not make the integral behaviour acceptable. A stable result can still contain two control terms fighting each other.</p>



<p class="wp-block-paragraph"><strong>The fix was removing positive authority</strong></p>



<p class="wp-block-paragraph">Status: Changed awaiting full dry validation</p>



<p class="wp-block-paragraph">The positive integral clamp is now zero. The negative clamp remains minus 50 Nm.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="940" height="250" src="https://blownbytwins.co.uk/wp-content/uploads/2026/09/tc_pid_setup.png" alt="" class="wp-image-1166" srcset="https://blownbytwins.co.uk/wp-content/uploads/2026/09/tc_pid_setup.png 940w, https://blownbytwins.co.uk/wp-content/uploads/2026/09/tc_pid_setup-300x80.png 300w, https://blownbytwins.co.uk/wp-content/uploads/2026/09/tc_pid_setup-768x204.png 768w" sizes="auto, (max-width: 940px) 100vw, 940px" /></figure>



<p class="wp-block-paragraph">Below target slip, the integral term now sits at zero. Once the tyre exceeds target it can accumulate negative correction, up to 50 Nm. There is no positive value left to unwind and no stored torque waiting to oppose the first intervention.</p>



<p class="wp-block-paragraph">I initially considered extending the negative clamp to minus 75 Nm. The logs killed that idea. In the later full throttle events the negative integrator reached only minus 4.3 Nm in one run and zero in the other. More negative authority would have solved a problem that was not happening while increasing the risk of a torque hole after the tyre recovered.</p>



<p class="wp-block-paragraph">The proportional, integral gain and derivative tables therefore stay unchanged for the next test. Changing several control terms at once would make the result impossible to attribute. The positive clamp was the proven defect, so that is the change being isolated.</p>



<p class="wp-block-paragraph"><strong>What the road logs now say</strong></p>



<p class="wp-block-paragraph">Status Verified for the logged conditions</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>Log</strong></td><td><strong>Maximum boost</strong></td><td><strong>Target slip</strong></td><td><strong>Maximum WOT slip</strong></td><td><strong>Maximum retard</strong></td><td><strong>Cut</strong></td></tr><tr><td>03</td><td>26.3 psi gauge (181 kPa)</td><td>3.0%</td><td>4.29%</td><td>-3.6 degrees</td><td>None</td></tr><tr><td>04</td><td>30.0 psi gauge (207 kPa)</td><td>2.8 to 3.0%</td><td>4.84%</td><td>-4.2 degrees</td><td>None</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Both runs used the conservative Mode 3 target. Neither needed ignition or fuel cuts. The car controlled the tyre with modest timing reduction and without the controller cycling torque up and down.</p>



<p class="wp-block-paragraph">The lower 7,982 N tractive force result from the cooler, imperfectly dry run should not be used to rewrite the dry table. It is evidence that the available grip changed. That is exactly why the feedforward and feedback halves both exist.</p>



<p class="wp-block-paragraph">The same session produced a roughly 4.8 second 100 to 200 km/h run without full boost at 100 km/h. The performance matters, but the cleaner result is the behaviour: a 914 whp pump fuel car remained controlled on a cool road without cuts or abrupt throttle closure.</p>



<p class="wp-block-paragraph"><strong>Power mode and traction mode are separate decisions</strong></p>



<p class="wp-block-paragraph">Status: Verified</p>



<p class="wp-block-paragraph">The torque request rotary decides how much engine performance is available. The traction rotary decides how much of that performance the tyre may use. Treating them as one setting hides useful control.</p>



<p class="wp-block-paragraph">The high torque modes already allow enough demand to exceed the rear tyre in second and third, while effectively releasing full engine output from fourth upwards. Increasing those torque tables would not make the car faster. It would only give the traction strategy a larger error to remove.</p>



<p class="wp-block-paragraph">For a dry road the useful combination is a high torque request with Mode 5 or Mode 6 traction control. Mode 3 is deliberately conservative. Mode 7 is now a permissive track setting rather than a 12 percent wheelspin setting dressed up as performance.</p>



<p class="wp-block-paragraph"><strong>The current configuration</strong> (Emtron specific)</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>Function</strong></td><td><strong>Current setting</strong></td></tr><tr><td>Feedforward basis</td><td>Engine torque before reduction versus modelled tractive force</td></tr><tr><td>Dry force peak</td><td>Approximately 9,500 N working baseline</td></tr><tr><td>Mode 3 straight target</td><td>3.0 percent</td></tr><tr><td>Mode 4 straight target</td><td>4.0 percent</td></tr><tr><td>Mode 5 straight target</td><td>5.5 percent</td></tr><tr><td>Mode 6 straight target</td><td>7.0 percent</td></tr><tr><td>Integral positive clamp</td><td>0 Nm</td></tr><tr><td>Integral negative clamp</td><td>-50 Nm</td></tr><tr><td>Integral rate</td><td>200 Hz</td></tr><tr><td>Minimum torque clamp</td><td>50 Nm</td></tr><tr><td>Slip target filter</td><td>4</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><strong>What still needs proving</strong></p>



<p class="wp-block-paragraph">The next valid test is on the same dry road, in both directions, with warm tyres. Running in both directions removes most of the gradient and steady wind error. Mode 4 should be tested first, followed by Mode 5, with full pedal held through the shift long enough to see the integrator unwind and torque recover.</p>



<p class="wp-block-paragraph">The stop condition is simple. If slip rises beyond about 6.5 percent and tractive force does not increase, the tyre has crossed the peak. If force continues to rise at 5.5 percent slip, Mode 6 is doing its job. If the controller oscillates or leaves a torque hole after intervention, the PID still needs work.</p>



<p class="wp-block-paragraph">Until that test is complete, the new force peak and the revised permissive modes remain evidence based working settings rather than finished calibration.</p>



<p class="wp-block-paragraph"><strong>The lesson from this iteration</strong></p>



<p class="wp-block-paragraph">The first version was designed to prevent wheelspin. This version is being calibrated to maximise acceleration without making the car unpleasant.</p>



<p class="wp-block-paragraph">That distinction changed the questions. How much slip is allowed is less useful than where the tyre produces maximum force. A larger integral clamp is less useful than checking whether the integrator is acting in the correct direction. More available engine torque is irrelevant when the tyre is already the limit.</p>



<p class="wp-block-paragraph">The car already had enough power. The latest changes are about making the control system stop wasting it, whether that waste comes from excessive wheelspin, an over-conservative target or two parts of the PID fighting each other.</p>



<p class="wp-block-paragraph">That is the point of logging it <span style="text-decoration: underline;">properly</span>. The calibration stops being a table that looks sensible and becomes a system that can explain what the car actually did.</p>



<p class="wp-block-paragraph">Huge thanks to Adrian at Emtron Australia for the pointers in this. It&#8217;s been invaluable.</p>



<p class="wp-block-paragraph"></p><p>The post <a href="https://blownbytwins.co.uk/cars/mk4-supra/what-the-logs-changed-in-my-supra-traction-control/">What the Logs Changed in My Supra Traction Control</a> first appeared on <a href="https://blownbytwins.co.uk">BlownByTwins</a>.</p><p>The post <a rel="nofollow" href="https://blownbytwins.co.uk/cars/mk4-supra/what-the-logs-changed-in-my-supra-traction-control/">What the Logs Changed in My Supra Traction Control</a> appeared first on <a rel="nofollow" href="https://blownbytwins.co.uk">BlownByTwins</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Erratic Shifts and Idle Overfuelling on the 2JZ: Finding a DBW Feed-Forward Fault</title>
		<link>https://blownbytwins.co.uk/cars/mk4-supra/dbw-feedforward-fault/</link>
		
		<dc:creator><![CDATA[john]]></dc:creator>
		<pubDate>Fri, 18 Sep 2026 16:07:52 +0000</pubDate>
				<category><![CDATA[Engine Management]]></category>
		<category><![CDATA[Mk4 Supra]]></category>
		<category><![CDATA[Tuning]]></category>
		<category><![CDATA[2jz]]></category>
		<category><![CDATA[air model]]></category>
		<category><![CDATA[emtron]]></category>
		<category><![CDATA[feedforward]]></category>
		<guid isPermaLink="false">https://blownbytwins.co.uk/?p=1156</guid>

					<description><![CDATA[<p>Inconsistent torque, delivery and shifts, with nothing obvious in the log. Working outwards from the symptom into the DBW loop, and the arithmetic that showed the integrator was spending its whole authority cancelling a feed-forward error.</p>
<p>The post <a href="https://blownbytwins.co.uk/cars/mk4-supra/dbw-feedforward-fault/">Erratic Shifts and Idle Overfuelling on the 2JZ: Finding a DBW Feed-Forward Fault</a> first appeared on <a href="https://blownbytwins.co.uk">BlownByTwins</a>.</p>
<p>The post <a rel="nofollow" href="https://blownbytwins.co.uk/cars/mk4-supra/dbw-feedforward-fault/">Erratic Shifts and Idle Overfuelling on the 2JZ: Finding a DBW Feed-Forward Fault</a> appeared first on <a rel="nofollow" href="https://blownbytwins.co.uk">BlownByTwins</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="wp-block-paragraph">The car was giving me inconsistent torque readings, inconsistent delivery, and downstream of both, inconsistent shifts. And on rarer occasions the car would overfuel like crazy when returning to idle. It&#8217;s done this maybe 6-8 times in 4000 miles of usage. Nothing in the log made the reason obvious.</p>



<p class="wp-block-paragraph">This is how I worked outwards from the symptom until the log told me where to look, and what the arithmetic said once I got there.</p>



<h2 class="wp-block-heading">Ruling things out</h2>



<p class="wp-block-paragraph"><strong>Status: Verified</strong></p>



<p class="wp-block-paragraph">I expanded the log window out and walked the closed loop items one at a time. First question: was idle control intervening during the downshift? It was not. Verified and set aside.</p>



<p class="wp-block-paragraph">The next thing I noticed was that air mass was going erratic, and that is worth being precise about, because the air mass model on this car is a blend. Below 100 kPa it runs the throttle mass flow model exclusively and blends towards speed density above that. In the region where this fault appears the air mass estimate is therefore a function of throttle effective area and pressure ratio and nothing else. No speed density term diluting it, no trapped mass term in the estimate.</p>



<p class="wp-block-paragraph">So erratic air mass in that region means the blade, or the area characterisation, or both. It cannot mean much else.</p>



<p class="wp-block-paragraph">Pedal throttle demand translation was smooth through the whole event. The driver demand table was not doing this. That left the DBW loop, and the DBW PID was the gold seam.</p>


<p><!-- IMAGE SLOT A: emtron-dbw-pid-instability-log.png --></p>


<h2 class="wp-block-heading">What the loop was doing</h2>



<p class="wp-block-paragraph"><strong>Status: Verified</strong></p>



<p class="wp-block-paragraph">Three things stand out.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="566" src="https://blownbytwins.co.uk/wp-content/uploads/2026/09/dbw_pid_errors-1024x566.png" alt="" class="wp-image-1160" srcset="https://blownbytwins.co.uk/wp-content/uploads/2026/09/dbw_pid_errors-1024x566.png 1024w, https://blownbytwins.co.uk/wp-content/uploads/2026/09/dbw_pid_errors-300x166.png 300w, https://blownbytwins.co.uk/wp-content/uploads/2026/09/dbw_pid_errors-768x424.png 768w, https://blownbytwins.co.uk/wp-content/uploads/2026/09/dbw_pid_errors-1536x848.png 1536w, https://blownbytwins.co.uk/wp-content/uploads/2026/09/dbw_pid_errors.png 2046w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Proportional output is saturating at minus 100 percent repeatedly, and topping out near plus 63. That asymmetry is not the axis autoscaling being unhelpful. It is the loop reaching its closing clamp over and over while never reaching the opening one.</p>



<p class="wp-block-paragraph">Integral output is sitting around plus 24 percent and climbing slowly across the window. An integrator that keeps accumulating while the proportional term is pinned at its clamp is not doing the job an integrator is for.</p>



<p class="wp-block-paragraph">The motor command is swinging roughly minus 65 to plus 100 percent while the measured blade position only moves a few percent either side of 15. The blade is inertially filtered. It physically cannot follow a command oscillating at that rate, so the engine never sees the full excursion.</p>



<p class="wp-block-paragraph">That last point is the one that connects back to the shift. The engine does not see it, but the model does. Torque estimate comes from air mass, air mass in this region comes from the throttle mass flow model, and that model reads blade position directly. Every percent of blade wobble goes into the torque estimate whether or not the engine produced any of it.</p>



<p class="wp-block-paragraph">The gearbox was reacting to torque noise that did not exist at the crankshaft.</p>



<h2 class="wp-block-heading">The arithmetic</h2>



<p class="wp-block-paragraph"><strong>Status: Verified</strong></p>



<p class="wp-block-paragraph">This is where the log stops being suggestive and starts being conclusive. At the cursor, 38.138s in the screenshot above:</p>



<ul class="wp-block-list">
<li>Servo Position Main: 3.7 percent</li>



<li>Proportional output: 0.9 percent</li>



<li>Integral output: 24.3 percent</li>



<li>Derivative output: 0.0 percent</li>



<li>Motor command: 6.2 percent</li>
</ul>



<p class="wp-block-paragraph">My feed-forward table runs minus 30 at 0 percent and minus 15 at 5 percent. Interpolated linearly, feed-forward at 3.7 percent is minus 18.9.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="1080" height="678" src="https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-dbw-motor-command-reconstruction.png" alt="Bar chart reconstructing the DBW motor command at 3.7 percent blade: feed-forward -18.9, proportional +0.9, integral +24.3 and derivative 0.0 percent motor duty, summing to +6.3 against a logged +6.2" class="wp-image-1172" style="width:640px" srcset="https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-dbw-motor-command-reconstruction.png 1080w, https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-dbw-motor-command-reconstruction-300x188.png 300w, https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-dbw-motor-command-reconstruction-1024x643.png 1024w, https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-dbw-motor-command-reconstruction-768x482.png 768w" sizes="auto, (max-width: 1080px) 100vw, 1080px" /><figcaption class="wp-element-caption">Reconstructing the motor command at 38.138 s. Shading is by absolute magnitude, so the two terms doing all the work are the ones that stand out.</figcaption></figure>
</div>


<p class="wp-block-paragraph">Two things fall out of a match that close. Motor command is the summed controller output rather than a measured position, and feed-forward interpolates linearly between breakpoints.</p>



<p class="wp-block-paragraph">But the finding is the third thing. <strong>At a near steady 3.7 percent blade position, the integral had wound to plus 24.3 for no purpose other than to cancel a feed-forward of minus 18.9.</strong></p>



<p class="wp-block-paragraph">The feed-forward in the 0 to 5 percent band is asking for roughly 25 points of closing duty that the throttle body does not need. The integral is spending its entire authority undoing it. That is a large stored state sitting permanently in the loop, and every time the proportional term saturates and the target moves, that state has to unwind before anything else can settle.</p>



<p class="wp-block-paragraph">It is a far better explanation for a sustained oscillation than any single gain cell.</p>



<h2 class="wp-block-heading">The feed-forward step, and what it actually is</h2>



<p class="wp-block-paragraph"><strong>Status: Provisional</strong></p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="1080" height="364" src="https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-dbw-feedforward-step-as-found-vs-revised.png" alt="Heatmap of DBW feed-forward, percent motor duty, against throttle target 0, 5, 6, 8 and 10 percent. As found: -30, -15, +10, +10, +10. Revised: -30, -15, -5, +5, +10" class="wp-image-1171" style="width:640px" srcset="https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-dbw-feedforward-step-as-found-vs-revised.png 1080w, https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-dbw-feedforward-step-as-found-vs-revised-300x101.png 300w, https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-dbw-feedforward-step-as-found-vs-revised-1024x345.png 1024w, https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-dbw-feedforward-step-as-found-vs-revised-768x259.png 768w" sizes="auto, (max-width: 1080px) 100vw, 1080px" /><figcaption class="wp-element-caption">Both rows are shaded against the same range, so the revision reads as a smoothing of the step rather than a change of shape.</figcaption></figure>
</div>


<p class="wp-block-paragraph">There is a 25 point change in motor duty for a 1 percent movement in target between 5 and 6 percent, and the log crosses that region immediately before one of the instabilities. My first instinct was that this was simply wrong. It is not, and this is the part most likely to be copied badly, so it is worth saying plainly.</p>



<p class="wp-block-paragraph">The return spring on a DBW body pulls the blade towards its limp home position from both directions. Below limp home you need negative duty to hold the blade down against the spring. Above it you need positive duty to hold it open. A feed-forward table that changes sign between two cells is not a tuning error. It is the table telling you where limp home sits.</p>



<p class="wp-block-paragraph">Delete the step and you have not removed the discontinuity. You have removed the compensation for it, and handed the spring preload to the integrator.</p>



<p class="wp-block-paragraph">The real problems are different. First, the magnitude of the low band values, which the arithmetic above says are too negative. Second, a 25 point change interpolated across 1 percent of travel behaves like a gain of 25 through a region the blade is oscillating in.</p>



<h2 class="wp-block-heading">The proportional gain table</h2>



<p class="wp-block-paragraph"><strong>Status: Provisional</strong></p>



<p class="wp-block-paragraph">The low position P gains are aggressive, and lopsided towards the negative error side.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="1080" height="430" src="https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-dbw-proportional-gain-as-found.png" alt="Heatmap of DBW proportional gain as found, throttle target 5, 15 and 25 percent against target error -12 to +12 percent. Gains run from 12.00 at -12 percent error in the 5 and 15 percent rows down to 5.00 at +12 in every row" class="wp-image-1170" style="width:640px" srcset="https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-dbw-proportional-gain-as-found.png 1080w, https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-dbw-proportional-gain-as-found-300x119.png 300w, https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-dbw-proportional-gain-as-found-1024x408.png 1024w, https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-dbw-proportional-gain-as-found-768x306.png 768w" sizes="auto, (max-width: 1080px) 100vw, 1080px" /><figcaption class="wp-element-caption">Proportional gain as found. Shaded against the same range as the revised table below, so the two are directly comparable.</figcaption></figure>
</div>


<p class="wp-block-paragraph">Reading negative error as blade above target, the closing correction gets close to twice the gain available for an equivalent opening error, at every row.</p>



<p class="wp-block-paragraph">The spring makes this more interesting than a simple symmetry argument, because the asymmetry it creates flips across limp home. Above limp home the spring already assists closing, so the loop needs more authority to open and less to close. Below limp home it reverses.</p>



<p class="wp-block-paragraph">A table that favours the closing side at every row is therefore directionally right in the 5 percent row and wrong in the 15 and 25 percent rows. The blade sits at 15 to 17 percent through this event.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="1080" height="430" src="https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-dbw-proportional-gain-revised.png" alt="Heatmap of DBW proportional gain as revised, throttle target 5, 15 and 25 percent against target error -12 to +12 percent, with every gain between 5.0 and 8.5 and 5.0 at +12 in every row" class="wp-image-1169" style="width:640px" srcset="https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-dbw-proportional-gain-revised.png 1080w, https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-dbw-proportional-gain-revised-300x119.png 300w, https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-dbw-proportional-gain-revised-1024x408.png 1024w, https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-dbw-proportional-gain-revised-768x306.png 768w" sizes="auto, (max-width: 1080px) 100vw, 1080px" /><figcaption class="wp-element-caption">Proportional gain, revised. Same shading range as above. The whole table reads cooler, and the 15 and 25 percent rows now favour the opening side.</figcaption></figure>
</div>


<p class="wp-block-paragraph">One caveat that anyone copying this needs to take seriously. The whole reading above depends on the error channel being target minus actual. If your ECU signs it the other way, the argument inverts and so does the revision. Confirm it on your own log before you touch a cell: find a step where the blade visibly lags a rising target, and read the sign.</p>



<h2 class="wp-block-heading">What I have not proved yet</h2>



<p class="wp-block-paragraph">I changed two tables at once. Until they are separated, no outcome can be attributed to either.</p>



<p class="wp-block-paragraph">I have not measured the true limp home position. The right way is to unpower the driver and read the TPS, then check whether the feed-forward breakpoints actually straddle it. If limp home sits at 6.5 percent rather than between 5 and 6, the compensation is being applied in the wrong place, and that alone would explain the instability without a single gain change.</p>



<p class="wp-block-paragraph">I have not confirmed the error sign convention from a step.</p>



<p class="wp-block-paragraph">And I left the 0 and 5 percent feed-forward cells alone, which are the two cells the arithmetic actually points at.</p>



<p class="wp-block-paragraph">I&#8217;m not declaring this as &#8220;fixed&#8221; yet. However, the gear change is smoother, particularly the upshift. The lower speed acceleration is cleaner and everything just feels much more refined. Always remember the first few percent of opening on a throttle blade are extremely non-linear, and even more so on a 82mm throttle body.</p>



<h2 class="wp-block-heading">The test that closes it</h2>



<p class="wp-block-paragraph">With the loop stable, park the blade at steady positions across 0 to 25 percent, in 2 percent steps through the 0 to 8 percent band, and log feed-forward and integral at each point.</p>



<p class="wp-block-paragraph">Wherever the integral is non-zero at steady state, the feed-forward is wrong by exactly that amount. That lets the whole low band feed-forward table be built by subtraction rather than by iteration. The position at which feed-forward crosses zero and the integral stays at zero is the true limp home. Any step within the sweep settles the sign convention.</p>



<p class="wp-block-paragraph">Run it on the same road and the same coast down and you also get a genuinely matched before and after, rather than two logs taken a week apart under different load.</p>



<h2 class="wp-block-heading">The principle</h2>



<p class="wp-block-paragraph"><strong>The data is not transferable, but the principle is.</strong></p>



<p class="wp-block-paragraph">A feed-forward table and an integrator are solving the same problem from opposite ends. If the integrator is carrying a large standing value at a steady operating point, the feed-forward is wrong by that amount, and you can read the correction straight off the log instead of iterating towards it.</p>



<p class="wp-block-paragraph">The throttle area table that the whole torque model sits on is covered in <a href="https://blownbytwins.co.uk/engine-management/throttle-body-effective-area/">Throttle Body Effective Flow Area</a>, and the same feed-forward versus PID argument applied to traction control is in <a href="https://blownbytwins.co.uk/engine-management/traction-control-feedforward-pid/">Traction Control on 1,114 whp</a>. Full specification is on the <a href="https://blownbytwins.co.uk/toyota-supra-mk4-delta/">Supra project page</a>.</p>



<p class="wp-block-paragraph">If you run a DBW loop and have taken a different view on any of this, particularly the limp home reasoning or the gain asymmetry, I would like to hear it.</p><p>The post <a href="https://blownbytwins.co.uk/cars/mk4-supra/dbw-feedforward-fault/">Erratic Shifts and Idle Overfuelling on the 2JZ: Finding a DBW Feed-Forward Fault</a> first appeared on <a href="https://blownbytwins.co.uk">BlownByTwins</a>.</p><p>The post <a rel="nofollow" href="https://blownbytwins.co.uk/cars/mk4-supra/dbw-feedforward-fault/">Erratic Shifts and Idle Overfuelling on the 2JZ: Finding a DBW Feed-Forward Fault</a> appeared first on <a rel="nofollow" href="https://blownbytwins.co.uk">BlownByTwins</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Traction Control on 1,114 whp: Feedforward, PID, and Why It Never Cuts</title>
		<link>https://blownbytwins.co.uk/cars/mk4-supra/traction-control-feedforward-pid/</link>
		
		<dc:creator><![CDATA[john]]></dc:creator>
		<pubDate>Thu, 17 Sep 2026 09:00:00 +0000</pubDate>
				<category><![CDATA[Engine Management]]></category>
		<category><![CDATA[Mk4 Supra]]></category>
		<category><![CDATA[Tuning]]></category>
		<category><![CDATA[emtron]]></category>
		<category><![CDATA[feedforward]]></category>
		<category><![CDATA[torque model]]></category>
		<category><![CDATA[traction control]]></category>
		<guid isPermaLink="false">https://blownbytwins.co.uk/?p=1118</guid>

					<description><![CDATA[<p>1,114 whp, 880 lb ft, and a 295 section road tyre on the back. Traction control on this car is not a driver aid. It is the thing that makes&#8230;</p>
<p>The post <a href="https://blownbytwins.co.uk/cars/mk4-supra/traction-control-feedforward-pid/">Traction Control on 1,114 whp: Feedforward, PID, and Why It Never Cuts</a> first appeared on <a href="https://blownbytwins.co.uk">BlownByTwins</a>.</p>
<p>The post <a rel="nofollow" href="https://blownbytwins.co.uk/cars/mk4-supra/traction-control-feedforward-pid/">Traction Control on 1,114 whp: Feedforward, PID, and Why It Never Cuts</a> appeared first on <a rel="nofollow" href="https://blownbytwins.co.uk">BlownByTwins</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="wp-block-paragraph">1,114 whp, 880 lb ft, and a 295 section road tyre on the back. Traction control on this car is not a driver aid. It is the thing that makes the car usable at all.</p>



<p class="wp-block-paragraph">Most discussion of traction control stops at &#8220;it cuts power when the wheels spin&#8221;. That describes about a third of what is actually happening, and it is the least interesting third. The system on this car has a predictive half that tries to never need the reactive half, and the whole design is aimed at keeping the reactive half quiet.</p>



<p class="wp-block-paragraph">This is how it is set up, and why. Every table is reproduced in full.</p>



<h2 class="wp-block-heading">Configuration</h2>



<p class="wp-block-paragraph"><strong>Status: Verified</strong></p>



<ul class="wp-block-list">
<li><a href="https://emtron.world/products/kv12" target="_blank" rel="noopener">Emtron KV12</a>, torque based traction control</li>



<li>3.4 litre 2JZ-GTE VVTi, 1,114 whp on E85, torque limited to 880 lb ft</li>



<li>ZF 8HP70, 2.93 final drive, OS Giken LSD</li>



<li>Continental SportContact 7, 265/30/19 front and 295/30/19 rear</li>



<li>Four individual wheel speeds, three axis internal accelerometer</li>



<li>Eight position rotary on the steering wheel, over CAN</li>
</ul>



<p class="wp-block-paragraph">Everything below is my own work. The base calibration on this car came from SRD Tuning, but the traction control strategy is mine start to finish, which is the only reason I can show you the tables.</p>



<h2 class="wp-block-heading">The predictive half: torque feedforward</h2>



<p class="wp-block-paragraph">The core of the system is a table that answers one question: <strong>at what engine torque does this car lose traction?</strong></p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="1080" height="1646" src="https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-traction-torque-feedforward-table.png" alt="Heatmap of the traction control torque feedforward table, slip target error -8 to +2 percent against engine torque 50 to 1,250 Nm. Every row is flat from 750 Nm upwards, with the zero slip error row clamped at 575 Nm" class="wp-image-1178" style="width:640px" srcset="https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-traction-torque-feedforward-table.png 1080w, https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-traction-torque-feedforward-table-197x300.png 197w, https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-traction-torque-feedforward-table-672x1024.png 672w, https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-traction-torque-feedforward-table-768x1170.png 768w, https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-traction-torque-feedforward-table-1008x1536.png 1008w" sizes="auto, (max-width: 1080px) 100vw, 1080px" /><figcaption class="wp-element-caption">Torque Feed Forward Table, Nm. The torque at which traction is lost.</figcaption></figure>
</div>


<p class="wp-block-paragraph">It is indexed on engine torque with no reduction applied, against slip target error. The ECU looks up that number and feeds it forward as the torque target before any measurement of actual slip has influenced anything.</p>



<p class="wp-block-paragraph">That is the whole idea of feedforward. If the model is right, the engine never makes more torque than the tyres can take, the slip never happens, and the closed loop has nothing to correct.</p>



<p class="wp-block-paragraph">Look at the first two columns before anything else. At 50 Nm of engine torque the table returns 50, and at 150 it returns 150. Below about 150 Nm it is a pass through: the feedforward is not limiting anything, because at those loads there is nothing to limit.</p>



<h3 class="wp-block-heading">And this is where the normalisation matters</h3>



<p class="wp-block-paragraph">Read along the zero slip error row and the values climb: 245.3, 340.5, 430.9, 478.9, 527.0, 575.0. And then they stop. Flat at 575 Nm from 750 Nm of engine torque all the way to 1,250.</p>



<p class="wp-block-paragraph">That plateau is deliberate and it is the single most important thing in the setup.</p>



<p class="wp-block-paragraph">Extend the slope before the plateau and an unclamped table would be asking for roughly 815 Nm at the top of the range. The engine makes 1,193 Nm. So without the clamp, the feedforward would be handing the PID a target the tyres cannot deliver, and the PID would spend its entire life trying to close a gap that physics will not close.</p>



<p class="wp-block-paragraph">A saturated PID is not a controller. It is an actuator held wide open. You lose all the proportionality that makes traction control feel like assistance rather than interference.</p>



<p class="wp-block-paragraph">Clamping the feedforward at something the tyres can actually deliver means the PID always has authority in reserve. That is what &#8220;normalised&#8221; means here, and it is why the system feels like it is helping rather than fighting.</p>



<h3 class="wp-block-heading">Normalised against third</h3>



<p class="wp-block-paragraph">The feedforward table is written for third gear. Everything else is scaled off it by two correction tables.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="1080" height="628" src="https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-traction-correction-gear-drpm.png" alt="Heatmap of feedforward correction table 1, gears 1 to 8 against rate of change of engine speed 750 to 4,000 rpm per second, from 0 percent at low dRPM in the low gears to -32 percent in eighth at 4,000" class="wp-image-1177" style="width:640px" srcset="https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-traction-correction-gear-drpm.png 1080w, https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-traction-correction-gear-drpm-300x174.png 300w, https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-traction-correction-gear-drpm-1024x595.png 1024w, https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-traction-correction-gear-drpm-768x447.png 768w" sizes="auto, (max-width: 1080px) 100vw, 1080px" /><figcaption class="wp-element-caption">Correction Table 1, percent applied to the feedforward torque.</figcaption></figure>
</div>


<p class="wp-block-paragraph">Correction Table 1 is indexed on gear against rate of change of engine speed. In first at low dRPM the correction is zero. By eighth at 4,000 dRPM it is minus 32 percent.</p>



<p class="wp-block-paragraph">Which makes sense once you think about what dRPM means in each gear. Engine speed rising at 4,000 rpm per second in first is normal acceleration. The same rate in eighth means the driven wheels are going somewhere the car is not. The correction is reading the rate of change as evidence of impending slip, and pulling the target down before the slip calculation has caught up.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="1080" height="812" src="https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-traction-correction-slip-error.png" alt="Bar chart of feedforward correction table 2 against slip target error: -40 percent at -64, -20 at -32, -10 at -16, -4 at -8, -2 at -4, -1 at -2, 0 at -1 and +10 at 0 percent error" class="wp-image-1176" style="width:640px" srcset="https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-traction-correction-slip-error.png 1080w, https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-traction-correction-slip-error-300x226.png 300w, https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-traction-correction-slip-error-1024x770.png 1024w, https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-traction-correction-slip-error-768x577.png 768w" sizes="auto, (max-width: 1080px) 100vw, 1080px" /><figcaption class="wp-element-caption">Correction Table 2. Note the axis: it runs out to minus 64 percent slip error, far wider than the gain tables further down. These two tables are not directly comparable.</figcaption></figure>
</div>


<p class="wp-block-paragraph">Correction Table 2 does the same job against slip target error directly, from minus 40 percent at large negative error up to plus 10 at zero. That positive 10 at zero error is worth noticing: when the car is exactly on target, the feedforward is allowed to ask for slightly more than the base table says.</p>



<h2 class="wp-block-heading">The slip target, and what the rotary actually does</h2>



<p class="wp-block-paragraph"><strong>Status: Verified</strong></p>



<p class="wp-block-paragraph">Here is the part I had not seen anyone else do.</p>



<p class="wp-block-paragraph">The target slip table is indexed on <strong>lateral G</strong>, from minus 1.5 to plus 1.5, against the rotary position from the steering wheel.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="1080" height="2004" src="https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-traction-target-slip-lateral-g.png" alt="Heatmap of target slip table 1, rotary positions 0 to 12 against lateral G from -1.5 to +1.5. Most rows peak at zero lateral G, from 2 percent permitted slip at position 0 to 28 percent at position 12" class="wp-image-1179" style="width:640px" srcset="https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-traction-target-slip-lateral-g.png 1080w, https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-traction-target-slip-lateral-g-162x300.png 162w, https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-traction-target-slip-lateral-g-552x1024.png 552w, https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-traction-target-slip-lateral-g-768x1425.png 768w, https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-traction-target-slip-lateral-g-828x1536.png 828w" sizes="auto, (max-width: 1080px) 100vw, 1080px" /><figcaption class="wp-element-caption">Target Slip Table 1, permitted slip in percent. Row labels are the eight discrete CAN values the switch produces, so the ECU never interpolates between settings.</figcaption></figure>
</div>


<p class="wp-block-paragraph">Almost every row is a dome. Maximum permitted slip in a straight line, tapering symmetrically as lateral load builds in either direction. At the loosest setting the car allows 28 percent slip straight ahead, falling to 25 at 1.5 G. At the tightest, 2 percent straight ahead and 1 percent once the car is properly loaded up.</p>



<p class="wp-block-paragraph">Setting 1 is the exception, and I would rather point at it than pretend it fits. It permits 2 percent straight ahead, rises to 3 percent at around 0.75 G in either direction, and comes back to 2.5 at full lateral load. It is the only row in the table that allows more slip while cornering than it does in a straight line.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1200" height="631" src="https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-traction-slip-target-vs-lateral-g.png" alt="Chart of permitted wheel slip against lateral G for three traction control settings, each forming a dome that peaks in a straight line and tapers as cornering load builds" class="wp-image-1120" /><figcaption class="wp-element-caption">The same data plotted. The dome is most pronounced in the middle settings and flattens at both extremes.</figcaption></figure>



<p class="wp-block-paragraph">So the rotary is not a gain switch and it is not an on/off. It selects <strong>how much slip you are allowed as a function of how hard you are cornering</strong>, and the system tightens automatically as lateral load increases without the driver doing anything.</p>



<h3 class="wp-block-heading">And then speed offsets all of it</h3>



<p class="wp-block-paragraph">Lateral G is not the only input to the slip target. A second table offsets it by road speed, and it does a lot of work at both ends.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="1080" height="1382" src="https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-traction-target-slip-offset-road-speed.png" alt="Heatmap of the target slip offset by front axle speed, 0 to 330 kph, for each rotary position: +9 points below 25 kph (up to +25 at position 12), zero from 45 to 160 kph, and negative from 180 kph, reaching between -2.0 and -9.4 at 330" class="wp-image-1175" style="width:640px" srcset="https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-traction-target-slip-offset-road-speed.png 1080w, https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-traction-target-slip-offset-road-speed-234x300.png 234w, https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-traction-target-slip-offset-road-speed-800x1024.png 800w, https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-traction-target-slip-offset-road-speed-768x983.png 768w" sizes="auto, (max-width: 1080px) 100vw, 1080px" /><figcaption class="wp-element-caption">Target Slip Offset Table 1, percentage points added to or taken off the slip target by road speed.</figcaption></figure>
</div>


<p class="wp-block-paragraph">Below 25 kph every setting adds nine percentage points of slip, and the loosest adds twenty five. That is the launch allowance. You cannot get a car like this moving from rest on a target of 2 percent, and without that offset the system would strangle it off the line.</p>



<p class="wp-block-paragraph">Between 45 and 160 kph the offset is zero and the lateral G table stands on its own. Above 180 it goes negative, and by 330 kph it is pulling back between 2 and 9.4 points depending on the setting.</p>



<p class="wp-block-paragraph">Which is the right way round. Wheel slip at 40 kph costs you a bit of time. Wheel slip at 300 kph costs you rather more than that.</p>



<h2 class="wp-block-heading">The reactive half: a deliberately soft PID</h2>



<p class="wp-block-paragraph"><strong>Status: Verified</strong></p>



<p class="wp-block-paragraph">When the feedforward is not enough, the PID takes over. And the gains are the opposite shape to what most people would write. All three share exactly the same breakpoints, so they go in one table.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="1080" height="430" src="https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-traction-pid-gains.png" alt="Heatmap of the traction control PID gains against slip target error -25 to 0 percent: proportional 3.00 falling to 0.20, integral 0.000 rising to 0.020, derivative 3.00 falling to 0.10" class="wp-image-1174" style="width:640px" srcset="https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-traction-pid-gains.png 1080w, https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-traction-pid-gains-300x119.png 300w, https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-traction-pid-gains-1024x408.png 1024w, https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-traction-pid-gains-768x306.png 768w" sizes="auto, (max-width: 1080px) 100vw, 1080px" /><figcaption class="wp-element-caption">Each row is shaded against its own range, because integral peaks at 0.020 and proportional at 3.00. The colour shows the shape, not the magnitude.</figcaption></figure>
</div>


<p class="wp-block-paragraph">Proportional gain at zero slip error is 0.20. At minus 25 percent error it is 3.00. Derivative runs the same way, 0.10 at zero, and it saturates at 3.00 from minus 20 onwards.</p>



<p class="wp-block-paragraph">Both are smallest near target and largest far from it.</p>



<p class="wp-block-paragraph">That is a controller designed to be felt as little as possible. Around the target, where you spend almost all of your time, the loop barely reacts and the feedforward carries the car. Only when things run properly away does it bite hard.</p>



<p class="wp-block-paragraph">Tune it the conventional way round, with high gain near target for tight regulation, and you get a car that nibbles at the throttle constantly and feels like it is arguing with you.</p>



<h3 class="wp-block-heading">Integral is almost switched off, on purpose</h3>



<p class="wp-block-paragraph">Look at the integral row against the other two. Peak gain is 0.020, near target. At minus 25 it is <strong>zero</strong>.</p>



<p class="wp-block-paragraph">Zeroing the integral term exactly where the error is worst is anti windup by design. When the car is genuinely out of shape, the integrator stops accumulating instead of building up a correction you then have to unwind on the way out. An integrator that has wound up during a slide gives you a second event when it releases, and the second one is usually the one that catches people out.</p>



<p class="wp-block-paragraph">The rest of the PID setup backs that up:</p>



<ul class="wp-block-list">
<li>Integral control rate: 200 Hz</li>



<li>Integral positive clamp: 50.0 Nm</li>



<li>Integral negative clamp: -50.0 Nm</li>



<li>Minimum torque clamp: 50.0 Nm</li>



<li>Slip target filter: 4</li>
</ul>



<p class="wp-block-paragraph">Fifty Nm either side is a narrow band on an engine making 1,193. The integrator is there to trim, not to intervene.</p>



<h3 class="wp-block-heading">And the PID does not always run</h3>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="1080" height="1778" src="https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-traction-pid-enable-table-1.png" alt="Heatmap of the PID enable table, driver demand torque 0 to 1,000 Nm against slip target error -6 to +5 percent. The loop is off below 300 Nm, then each extra 100 Nm enables one more column in a staircase" class="wp-image-1173" style="width:640px" srcset="https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-traction-pid-enable-table-1.png 1080w, https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-traction-pid-enable-table-1-182x300.png 182w, https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-traction-pid-enable-table-1-622x1024.png 622w, https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-traction-pid-enable-table-1-768x1264.png 768w, https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-traction-pid-enable-table-1-933x1536.png 933w" sizes="auto, (max-width: 1080px) 100vw, 1080px" /><figcaption class="wp-element-caption">PID Enable Table. 1 means the closed loop runs, 0 means it does not.</figcaption></figure>
</div>


<p class="wp-block-paragraph">Below 300 Nm of driver demand it is zero across the whole row. The closed loop simply does not run.</p>



<p class="wp-block-paragraph">Above that it opens up as a staircase. At 300 Nm the loop only runs once slip error is worse than minus 3 percent. Every additional 100 Nm of driver demand brings one more column into play, until at 1,000 Nm it is active everywhere except the far positive corner.</p>



<p class="wp-block-paragraph">So the amount of authority the closed loop has is itself a function of how much the driver is asking for. At low demand, feedforward handles everything alone, which means the PID cannot introduce noise into normal driving, because at normal driving loads it is not switched on.</p>



<h2 class="wp-block-heading">What it is allowed to do about it</h2>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="540" height="195" src="https://blownbytwins.co.uk/wp-content/uploads/2026/09/emtron-torque-limit-actuator-priority.png" alt="Emtron torque limit strategy showing priority 1 throttle area, priority 2 ignition retard, and priority 3 set to OFF so cutting is disabled" class="wp-image-1125" /><figcaption class="wp-element-caption">Priority 1 throttle area, priority 2 ignition retard, priority 3 OFF.</figcaption></figure>



<p class="wp-block-paragraph">Emtron gives you three actuators for torque reduction, in a priority order. Mine reads throttle area, then ignition retard clamped at 11 degrees, then <strong>OFF</strong>.</p>



<p class="wp-block-paragraph">Cutting is disabled. On a car making 1,114 whp, the harshest tool in the box is not in the box.</p>



<p class="wp-block-paragraph">The throttle area minimum clamp bottoms out at 10 percent, so it never closes the throttle fully either. Torque reduction happens by moving the plate and pulling timing, and nothing else.</p>



<p class="wp-block-paragraph">That is a road car decision. Fuel or ignition cutting is fast and effective and it feels like being kicked. On a car that has to be pleasant on a motorway and predictable in the wet, an intervention that arrives as a smooth reduction rather than a hammer blow is worth more than the extra tenth of response.</p>



<h2 class="wp-block-heading">Does it work?</h2>



<p class="wp-block-paragraph">One number from a road log, second gear, full throttle:</p>



<p class="wp-block-paragraph"><strong>Torque reduction by retard: 8.1 percent.</strong></p>



<p class="wp-block-paragraph">Eight percent, in retard, on the second priority, with cutting unavailable and throttle intervention having already done its part. That is the system working gently in the conditions where a badly normalised setup would be reaching for everything it had.</p>



<p class="wp-block-paragraph">It is one data point from one log, so treat it as an illustration rather than proof. But it is the shape of result the whole design is aimed at.</p>



<h2 class="wp-block-heading">The principle, if you take nothing else</h2>



<p class="wp-block-paragraph">A PID is not there to make your feedforward work. It is there to handle what the feedforward could not have known about: a damp patch, a change in surface, a mid corner bump.</p>



<p class="wp-block-paragraph">If your feedforward target is unrealistic, the PID spends its authority correcting your model instead of correcting the road. It saturates, it escalates through the actuator list, and the car feels like it is fighting you.</p>



<p class="wp-block-paragraph">Normalise the target to something the tyres can actually deliver, gate the loop so it only runs when it is needed, keep the gains soft near target, and the reactive half stays quiet almost all the time.</p>



<p class="wp-block-paragraph">Which is the point. The best traction control is the one you do not notice.</p>



<h2 class="wp-block-heading">One thing to be clear about</h2>



<p class="wp-block-paragraph">Every number above is specific to this car: this power, these tyres, this gearbox, this weight distribution. <strong>The data is not transferable, but the principle is.</strong></p>



<p class="wp-block-paragraph">I have published the tables in full because seeing how something is structured teaches you far more than reading a description of it. Copy the structure. Do not copy the values.</p>



<p class="wp-block-paragraph">None of this works without trustworthy wheel speeds, which on a staggered setup is less automatic than it sounds. That is covered in <a href="https://blownbytwins.co.uk/?p=1111">Staggered Tyres and Traction Control</a>. The throttle area table that the whole torque model sits on is covered in <a href="https://blownbytwins.co.uk/engine-management/throttle-body-effective-area/">Throttle Body Effective Flow Area</a>. Full specification is on the <a href="https://blownbytwins.co.uk/toyota-supra-mk4-delta/">Supra project page</a>.</p>



<p class="wp-block-paragraph">If you run torque based traction control and have taken a different view on any of this, particularly the gain shape, the setting 1 anomaly or disabling cut, I would like to hear it. This is the part of the calibration I have changed my mind about most.</p><p>The post <a href="https://blownbytwins.co.uk/cars/mk4-supra/traction-control-feedforward-pid/">Traction Control on 1,114 whp: Feedforward, PID, and Why It Never Cuts</a> first appeared on <a href="https://blownbytwins.co.uk">BlownByTwins</a>.</p><p>The post <a rel="nofollow" href="https://blownbytwins.co.uk/cars/mk4-supra/traction-control-feedforward-pid/">Traction Control on 1,114 whp: Feedforward, PID, and Why It Never Cuts</a> appeared first on <a rel="nofollow" href="https://blownbytwins.co.uk">BlownByTwins</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Twelve Small Injectors Instead of Six Big Ones</title>
		<link>https://blownbytwins.co.uk/cars/mk4-supra/twelve-small-injectors-instead-of-six-big-ones/</link>
		
		<dc:creator><![CDATA[john]]></dc:creator>
		<pubDate>Sun, 13 Sep 2026 09:00:00 +0000</pubDate>
				<category><![CDATA[Engine Management]]></category>
		<category><![CDATA[Mk4 Supra]]></category>
		<category><![CDATA[Tuning]]></category>
		<category><![CDATA[emtron]]></category>
		<category><![CDATA[fuel system]]></category>
		<category><![CDATA[injectors]]></category>
		<category><![CDATA[staged injection]]></category>
		<guid isPermaLink="false">https://blownbytwins.co.uk/?p=1113</guid>

					<description><![CDATA[<p>Every big power build hits the same wall. You need enough injector to feed the engine at full noise, and the injector that does that is too big to idle&#8230;</p>
<p>The post <a href="https://blownbytwins.co.uk/cars/mk4-supra/twelve-small-injectors-instead-of-six-big-ones/">Twelve Small Injectors Instead of Six Big Ones</a> first appeared on <a href="https://blownbytwins.co.uk">BlownByTwins</a>.</p>
<p>The post <a rel="nofollow" href="https://blownbytwins.co.uk/cars/mk4-supra/twelve-small-injectors-instead-of-six-big-ones/">Twelve Small Injectors Instead of Six Big Ones</a> appeared first on <a rel="nofollow" href="https://blownbytwins.co.uk">BlownByTwins</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="wp-block-paragraph">Every big power build hits the same wall. You need enough injector to feed the engine at full noise, and the injector that does that is too big to idle properly.</p>



<p class="wp-block-paragraph">The usual answer is to accept it. Fit the 2000cc units, put up with a lumpy idle and a car that hunts in traffic, and tell yourself it&#8217;s the price of the power.</p>



<p class="wp-block-paragraph">It isn&#8217;t. Here&#8217;s what I did instead, and the arithmetic behind it.</p>



<h2 class="wp-block-heading">Configuration</h2>



<p class="wp-block-paragraph"><strong>Status: Verified</strong></p>



<ul class="wp-block-list">
<li>2JZ-GTE VVTi, 3,353 cc, 1,114 whp on E85</li>



<li>Plazmaman intake manifold, twelve injector provision</li>



<li>Twelve CP1000 injectors, rated 1,000 cc at 3 bar</li>



<li>Aeromotive regulator, 4 bar static, 1:1 rising rate</li>



<li>Three Walbro 485 pumps, -10 feed lines</li>



<li><a href="https://emtron.world/products/kv12" target="_blank" rel="noopener">Emtron KV12</a>, twelve dedicated injection channels, flex fuel</li>
</ul>



<h2 class="wp-block-heading">The problem is minimum pulse width, not flow</h2>



<p class="wp-block-paragraph">An injector is a solenoid valve. It takes a finite time to open and a finite time to close, and during those transitions the flow through it is neither zero nor fully open. It is somewhere in between, and it is not linear.</p>



<p class="wp-block-paragraph">Above a certain pulse width, the opening and closing transitions are a small fraction of the total and the injector behaves predictably. Below it, the transitions dominate. Two commands a fraction of a millisecond apart can deliver very different amounts of fuel, and the relationship stops being something you can characterise reliably.</p>



<p class="wp-block-paragraph">That&#8217;s the minimum controllable pulse width, and it&#8217;s roughly a property of the injector rather than of how much fuel you&#8217;re asking for. A big injector doesn&#8217;t take proportionally longer to open. It just moves more fuel while it does.</p>



<p class="wp-block-paragraph">Which is why big injectors idle badly. At idle you need a very small mass of fuel. With a big injector, that mass corresponds to a pulse width down in the region where the injector is unpredictable. The ECU asks for the same thing twice and gets two different answers. That&#8217;s your lumpy idle, and no amount of tuning fixes it, because the hardware isn&#8217;t repeatable down there.</p>



<h2 class="wp-block-heading">Twelve small ones instead of six big ones</h2>



<p class="wp-block-paragraph">The Plazmaman manifold takes twelve injectors, two per cylinder. Six primaries and six secondaries, each addressed individually on its own channel by the KV12.</p>



<p class="wp-block-paragraph">At idle, around town, and at any low load, only the primaries fire. Six injectors, each a 1000cc unit, sharing the same small fuel demand a set of six would normally handle. Pulse widths sit in the region where a 1000cc injector is well behaved.</p>



<p class="wp-block-paragraph">When load arrives, the secondaries stage in and the full twelve are working.</p>



<p class="wp-block-paragraph">So you get the idle characteristics of a 1000cc injector and the flow of something more than twice the size. That&#8217;s the whole idea, and it costs you nothing except a manifold that takes twelve injectors and an ECU with twelve output channels.</p>



<h2 class="wp-block-heading">The arithmetic, including the bit people get wrong</h2>



<p class="wp-block-paragraph">The injectors are rated 1,000 cc. They are not flowing 1,000 cc.</p>



<figure class="bbt-figure" style="margin:1.8rem 0"><title id="injflow-title">Injector flow against rail pressure</title>Flow rises with the square root of rail pressure. An injector rated 1,000 cc per minute at 3 bar delivers 1,155 cc at 4 bar, not the 1,333 cc a linear assumption would predict.05001,0001,5002,0002,50012345678Rated3 bar, 1,000 ccInstalled4 bar, 1,155 ccThe linear guesswould say 1,333 ccRail pressure, barFlow, cc per minuteInjector flow against rail pressureActual, square root of pressureWhat most people assume<figcaption class="bbt-table-note" style="font-size:0.8rem;color:#5f5f5f;line-height:1.5;margin:0.6rem 0 0">Flow scales with the square root of the pressure differential. A 33 percent pressure increase buys 15 percent more flow, not 33.</figcaption></figure>



<p class="wp-block-paragraph">Injector flow scales with the square root of the pressure differential across it. Rated at 3 bar, run at 4 bar:</p>



<pre class="wp-block-code"><code>flow = rated_flow × √(actual_pressure / rated_pressure)
     = 1000 × √(4 / 3)
     = 1000 × 1.1547
     = 1,155 cc</code></pre>



<p class="wp-block-paragraph">Twelve of those is <strong>roughly 13,900 cc/min installed</strong>, which is the equivalent of six 2,300 cc injectors.</p>



<p class="wp-block-paragraph">That square root matters more than it looks. It cuts both ways: raising fuel pressure buys you less flow than you&#8217;d expect, and dropping it costs you less than you&#8217;d fear. A 33 percent pressure increase gave 15 percent more flow.</p>



<p class="wp-block-paragraph">It also means anyone sizing injectors off the rated figure without checking their base pressure is working from the wrong number.</p>



<h2 class="wp-block-heading">Why the regulator has to be rising rate</h2>



<p class="wp-block-paragraph">What actually drives flow is the pressure <em>differential</em> across the injector: rail pressure minus manifold pressure.</p>



<p class="wp-block-paragraph">With a fixed 4 bar rail and 2.8 bar of boost in the manifold, that differential collapses to 1.2 bar at peak. Flow would fall to roughly 55 percent of what the ECU thinks it&#8217;s getting, at exactly the moment the engine needs the most fuel.</p>



<p class="wp-block-paragraph">A 1:1 rising rate regulator references manifold pressure and raises rail pressure to match, so the differential stays at 4 bar whatever the boost is doing. At 2.8 bar of boost that means roughly 6.8 bar of absolute rail pressure.</p>



<p class="wp-block-paragraph">Which is what the three pumps are for. Walbro 485s at 6.8 bar are working considerably harder than the same pumps at 3 bar, and their flow falls off as pressure rises. Fuel pressure has been confirmed to hold through full load E85 pulls, and the third pump exists for exactly that margin.</p>



<h2 class="wp-block-heading">A headroom check</h2>



<p class="wp-block-paragraph"><strong>Status: Working conclusion</strong></p>



<p class="wp-block-paragraph">Rough demand at 1,114 whp on E85, assuming a brake specific fuel consumption around 0.66 lb/hp/hr and a nominal drivetrain loss, lands somewhere near 8,400 cc/min.</p>



<p class="wp-block-paragraph">Against 13,900 cc/min installed, that&#8217;s roughly 60 percent duty at peak power.</p>



<p class="wp-block-paragraph">Both of those assumptions are mine rather than measured, so treat it as a sanity check rather than a specification. But the shape of the answer is right: there is real headroom, which is what you want on a car that has to survive being driven rather than just surviving a dyno pull.</p>



<h2 class="wp-block-heading">What this costs</h2>



<p class="wp-block-paragraph">It isn&#8217;t free.</p>



<p class="wp-block-paragraph">Twelve injectors means twelve to buy, twelve to wire, and twelve output channels on the ECU. Not every standalone has them, and a manifold with secondary injector provision is a specific purchase rather than a generic one.</p>



<p class="wp-block-paragraph">There is also a calibration cost. The handover between primary only and both sets firing has to be blended properly, or you get a step in fuelling at the transition. That is real work and it is work a single stage setup doesn&#8217;t need.</p>



<p class="wp-block-paragraph">Whether it&#8217;s worth it depends entirely on what the car is for. If it lives on a dyno and does quarter miles, fit six big ones and don&#8217;t think about it. If it has to sit in traffic on the way to Scotland and then do something violent when it gets there, the staging is the difference between a car you drive and a car you tolerate.</p>



<hr class="wp-block-separator has-alpha-channel-opacity" />



<p class="wp-block-paragraph"><em>This fuel system is what makes 2.8 bar on E85 possible in the first place. What that boost is actually worth, and how much of it is the fuel rather than the pressure, is covered in <a href="https://blownbytwins.co.uk/?p=1107">What E85 Actually Buys</a>. Full specification is on the <a href="https://blownbytwins.co.uk/toyota-supra-mk4-delta/">Supra project page</a>, and the build itself is in <a href="https://blownbytwins.co.uk/?p=1032">The 3.4 Stroker Build</a>.</em></p>



<p class="wp-block-paragraph">If you&#8217;ve run a staged setup and measured where the handover actually lands in your fuel trims, I&#8217;d be interested. That transition is the part I know least about and it&#8217;s where I&#8217;d expect the problems to live.</p><p>The post <a href="https://blownbytwins.co.uk/cars/mk4-supra/twelve-small-injectors-instead-of-six-big-ones/">Twelve Small Injectors Instead of Six Big Ones</a> first appeared on <a href="https://blownbytwins.co.uk">BlownByTwins</a>.</p><p>The post <a rel="nofollow" href="https://blownbytwins.co.uk/cars/mk4-supra/twelve-small-injectors-instead-of-six-big-ones/">Twelve Small Injectors Instead of Six Big Ones</a> appeared first on <a rel="nofollow" href="https://blownbytwins.co.uk">BlownByTwins</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Staggered Tyres and Traction Control: What the ECU Corrects, and What It Can&#8217;t</title>
		<link>https://blownbytwins.co.uk/cars/mk4-supra/staggered-tyres-traction-control/</link>
		
		<dc:creator><![CDATA[john]]></dc:creator>
		<pubDate>Thu, 10 Sep 2026 09:00:00 +0000</pubDate>
				<category><![CDATA[Engine Management]]></category>
		<category><![CDATA[Mk4 Supra]]></category>
		<category><![CDATA[Tuning]]></category>
		<category><![CDATA[calibration]]></category>
		<category><![CDATA[emtron]]></category>
		<category><![CDATA[traction control]]></category>
		<category><![CDATA[wheel speed]]></category>
		<guid isPermaLink="false">https://blownbytwins.co.uk/?p=1111</guid>

					<description><![CDATA[<p>If you run staggered tyres and a standalone ECU with traction control, there is a field in your configuration that almost certainly matters more than you think it does. It&#8230;</p>
<p>The post <a href="https://blownbytwins.co.uk/cars/mk4-supra/staggered-tyres-traction-control/">Staggered Tyres and Traction Control: What the ECU Corrects, and What It Can’t</a> first appeared on <a href="https://blownbytwins.co.uk">BlownByTwins</a>.</p>
<p>The post <a rel="nofollow" href="https://blownbytwins.co.uk/cars/mk4-supra/staggered-tyres-traction-control/">Staggered Tyres and Traction Control: What the ECU Corrects, and What It Can&#8217;t</a> appeared first on <a rel="nofollow" href="https://blownbytwins.co.uk">BlownByTwins</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="wp-block-paragraph">If you run staggered tyres and a standalone ECU with traction control, there is a field in your configuration that almost certainly matters more than you think it does. It is the tyre size.</p>



<p class="wp-block-paragraph">Not for speedometer calibration. For whether your traction control knows the difference between wheelspin and a rear tyre that is simply a different size to the front one.</p>



<h2 class="wp-block-heading">The problem, in one number</h2>



<p class="wp-block-paragraph">My car runs 265/30/19 at the front and 295/30/19 at the rear. Work the rolling diameters out:</p>



<ul class="wp-block-list">
<li>Front: 482.6 mm rim + (2 &times; 79.5 mm sidewall) = <strong>641.6 mm</strong></li>



<li>Rear: 482.6 mm rim + (2 &times; 88.5 mm sidewall) = <strong>659.6 mm</strong></li>
</ul>



<p class="wp-block-paragraph">The rear is 2.8 percent larger, so for any given road speed it turns about 2.7 percent slower than the front. Put the other way round, the front turns 2.8 percent faster than the rear, which is the figure you will see between the raw channels.</p>



<p class="wp-block-paragraph">A traction control strategy that compares driven wheel speed against undriven wheel speed and calls the difference slip would therefore see a permanent 2.8 percent slip. At a steady 50 mph on a flat road, doing nothing. Every slip target you set would be sitting on top of an offset that has nothing to do with grip.</p>



<h2 class="wp-block-heading">What the ECU does about it</h2>



<p class="wp-block-paragraph"><strong>Status: Verified</strong></p>



<p class="wp-block-paragraph">On the <a href="https://emtron.world/products/kv12" target="_blank" rel="noopener">Emtron</a> you give it two things per axle: the number of teeth on the ABS reluctor, and the tyre size.</p>



<p class="wp-block-paragraph">In my case that is 48 teeth on the Toyota hubs at both ends, and the two tyre sizes above. The ECU converts each tyre size string into a rolling diameter, combines it with the tooth count, and derives a scalar that normalises one axle against the other.</p>



<p class="wp-block-paragraph">The tooth count cancels here because both ends are 48. On a car with different reluctors front and rear it would not, which is exactly why the ECU asks for both rather than just the tyre size.</p>



<p class="wp-block-paragraph">You can watch it work. At a steady cruise on a flat road, in the same log, at the same moment:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1200" height="631" src="https://blownbytwins.co.uk/wp-content/uploads/2026/09/wheel-speed-raw-vs-corrected-slip.png" alt="Bar chart comparing raw wheel speed channels reading 2.8 percent apart against a corrected Drive Slip channel reading zero at steady cruise" class="wp-image-1128" /><figcaption class="wp-element-caption">Same car, same log, same moment. The raw channels show the geometry. The corrected channel shows the truth.</figcaption></figure>



<ul class="wp-block-list">
<li><strong>Raw wheel speed channels: 2.8 percent apart.</strong> Exactly the geometry, uncorrected.</li>



<li><strong>Drive Slip: 0 percent.</strong> Corrected, and reading the truth.</li>
</ul>



<p class="wp-block-paragraph">That pair is worth knowing about, because if you go looking at raw wheel speed channels and find them 2.8 percent apart, nothing is wrong. Those are sensor channels. The correction is applied downstream, inside the slip calculation, and the corrected channel is the one that tells you whether it is working.</p>



<h2 class="wp-block-heading">The failure mode nobody warns you about</h2>



<p class="wp-block-paragraph">The correction is derived from a tyre size you typed in. It has no way of knowing what is actually bolted to the car.</p>



<p class="wp-block-paragraph">This car has been through 18 inch wheels on Yokohama A052, and is now on 19 inch Rays G025 with a staggered Continental SportContact 7 setup. If the configuration still held the old sizes, every wheel speed on the car would be wrong, road speed would be wrong, and the slip calculation would be wrong.</p>



<p class="wp-block-paragraph">And none of it would look broken. The ECU would be doing correct arithmetic on stale inputs, confidently, forever.</p>



<p class="wp-block-paragraph">So: change your wheels or tyres, change the configuration. It belongs on the same checklist as the alignment.</p>



<h2 class="wp-block-heading">What geometry cannot reach</h2>



<p class="wp-block-paragraph"><strong>Status: Working conclusion</strong></p>



<p class="wp-block-paragraph">The scalar is calculated from the free rolling diameter, meaning the tyre&#8217;s size when nothing is pushing on it. What the wheel actually rolls on is the loaded radius, which is smaller, because the sidewall deflects under the weight of the car.</p>



<p class="wp-block-paragraph">That deflection is not the same front to rear. My rear sidewall is 88.5 mm against 79.5 mm at the front, and it carries more load. So the real ratio between the two axles is not quite the ratio the ECU calculated.</p>



<p class="wp-block-paragraph">Worse, it moves. Under hard acceleration weight transfers rearward, the rear sidewall squashes further, the rear rolling radius shrinks, and the rear wheels read faster for the same road speed. The system sees slip that is partly just the tyre changing shape.</p>



<p class="wp-block-paragraph">Which means the residual error is largest exactly when traction control is working hardest, and it errs in the direction of over-reading slip.</p>



<p class="wp-block-paragraph">Add the slower drifts on top: cold pressure against hot, a fresh tyre against a half worn one, a summer session against a winter one. All of them change rolling radius. None of them change the number in the configuration.</p>



<p class="wp-block-paragraph">I have not quantified any of that on this car. It is reasoning from geometry rather than measurement, and it stays a working conclusion until there is a number behind it.</p>



<h2 class="wp-block-heading">The check that takes two minutes</h2>



<p class="wp-block-paragraph">Flat road, steady 50, constant throttle, no load transfer. Log all four wheel speeds and your corrected slip channel.</p>



<p class="wp-block-paragraph">If corrected slip reads zero, your static correction is right. If it reads a consistent offset, either your configured tyre sizes do not match the car, or your tyres have worn far enough to matter.</p>



<p class="wp-block-paragraph">Do it after every tyre change, and once mid-season. It costs nothing and it is the only way to know whether the number your traction control is acting on means anything.</p>



<hr class="wp-block-separator has-alpha-channel-opacity" />



<p class="wp-block-paragraph"><strong>Why this matters more than it sounds.</strong> Everything the traction control does downstream, the slip target, the feedforward torque model, the PID that corrects what the model missed, is built on the assumption that slip is being measured correctly. Get this wrong and every one of those tables is being tuned against a number that has an offset baked into it. The strategy that sits on top of these wheel speeds is covered in <a href="https://blownbytwins.co.uk/?p=1118">Traction Control on 1,114 whp</a>.</p>



<p class="wp-block-paragraph">Full specification and the wheel and tyre setup are on the <a href="https://blownbytwins.co.uk/toyota-supra-mk4-delta/">Supra project page</a>.</p>



<p class="wp-block-paragraph">If you run staggered tyres and have measured your loaded radius rather than assuming the free one, I would like to know how far apart they were. That is the number this article is missing.</p><p>The post <a href="https://blownbytwins.co.uk/cars/mk4-supra/staggered-tyres-traction-control/">Staggered Tyres and Traction Control: What the ECU Corrects, and What It Can’t</a> first appeared on <a href="https://blownbytwins.co.uk">BlownByTwins</a>.</p><p>The post <a rel="nofollow" href="https://blownbytwins.co.uk/cars/mk4-supra/staggered-tyres-traction-control/">Staggered Tyres and Traction Control: What the ECU Corrects, and What It Can&#8217;t</a> appeared first on <a rel="nofollow" href="https://blownbytwins.co.uk">BlownByTwins</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>What E85 Actually Buys: Boost, Timing, and Where the Advantage Vanishes</title>
		<link>https://blownbytwins.co.uk/cars/mk4-supra/what-e85-actually-buys/</link>
		
		<dc:creator><![CDATA[john]]></dc:creator>
		<pubDate>Sun, 06 Sep 2026 09:00:00 +0000</pubDate>
				<category><![CDATA[Engine Management]]></category>
		<category><![CDATA[Mk4 Supra]]></category>
		<category><![CDATA[Tuning]]></category>
		<category><![CDATA[e85]]></category>
		<category><![CDATA[emtron]]></category>
		<category><![CDATA[flex fuel]]></category>
		<category><![CDATA[ignition timing]]></category>
		<guid isPermaLink="false">https://blownbytwins.co.uk/?p=1107</guid>

					<description><![CDATA[<p>Ask what E85 is worth on a big turbo engine and you get one of two answers. Either it is magic, or it is 30% more fuel for 30% more&#8230;</p>
<p>The post <a href="https://blownbytwins.co.uk/cars/mk4-supra/what-e85-actually-buys/">What E85 Actually Buys: Boost, Timing, and Where the Advantage Vanishes</a> first appeared on <a href="https://blownbytwins.co.uk">BlownByTwins</a>.</p>
<p>The post <a rel="nofollow" href="https://blownbytwins.co.uk/cars/mk4-supra/what-e85-actually-buys/">What E85 Actually Buys: Boost, Timing, and Where the Advantage Vanishes</a> appeared first on <a rel="nofollow" href="https://blownbytwins.co.uk">BlownByTwins</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="wp-block-paragraph">Ask what E85 is worth on a big turbo engine and you get one of two answers. Either it is magic, or it is 30% more fuel for 30% more power. Neither is much use if you are trying to decide whether to plumb in a flex sensor.</p>



<p class="wp-block-paragraph">On my car the honest answer turned out to be more interesting than either, and it took two ignition tables and a dyno sheet to see it. The short version: E85 buys boost and it buys ignition timing, and depending on where you look in the rev range you can measure both, one, or neither.</p>



<h2 class="wp-block-heading">Configuration</h2>



<p class="wp-block-paragraph"><strong>Status: Verified</strong></p>



<ul class="wp-block-list">
<li>2JZ-GTE VVTi, 3,353 cc, 9.5:1 static compression</li>



<li><a href="https://kelfordcams.com/dealers/product/t202-d" target="_blank" rel="noopener">Kelford T202-D</a> camshafts, 272&deg;/278&deg; advertised</li>



<li>Pulsar G42-1200, 73 mm compressor, T4 divided 1.15 A/R</li>



<li><a href="https://emtron.world/products/kv12" target="_blank" rel="noopener">Emtron KV12</a>, firmware 2.20.22, flex fuel with an ethanol content sensor</li>



<li>Twelve CP1000 injectors, staged, on a 4 bar 1:1 rising rate regulator. That fuel system is what makes 2.8 bar possible at all, and it is covered separately in <a href="https://blownbytwins.co.uk/?p=1113">Twelve Small Injectors Instead of Six Big Ones</a></li>



<li>ZF 8HP70, 5th gear, 1.285:1</li>



<li>Dynojet, WinPEP 8, uncorrected, 6 March 2026 at <a href="https://www.srdtuning.com/" target="_blank" rel="noopener">SRD Tuning</a></li>



<li>Both runs: same session, same equipment, no atmospheric correction applied to either</li>
</ul>



<h2 class="wp-block-heading">The two runs</h2>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="768" src="https://blownbytwins.co.uk/wp-content/uploads/2026/05/f71afa42-78a8-4285-b8aa-7b6027e47561-1024x768.jpeg" alt="Dynojet power and torque curves for a 3.4 litre 2JZ-GTE VVTi Mk4 Supra, showing 1,113.9 whp on E85 and 914.2 whp on 99 RON pump fuel" class="wp-image-1028" srcset="https://blownbytwins.co.uk/wp-content/uploads/2026/05/f71afa42-78a8-4285-b8aa-7b6027e47561-1024x768.jpeg 1024w, https://blownbytwins.co.uk/wp-content/uploads/2026/05/f71afa42-78a8-4285-b8aa-7b6027e47561-300x225.jpeg 300w, https://blownbytwins.co.uk/wp-content/uploads/2026/05/f71afa42-78a8-4285-b8aa-7b6027e47561-768x576.jpeg 768w, https://blownbytwins.co.uk/wp-content/uploads/2026/05/f71afa42-78a8-4285-b8aa-7b6027e47561-1536x1152.jpeg 1536w, https://blownbytwins.co.uk/wp-content/uploads/2026/05/f71afa42-78a8-4285-b8aa-7b6027e47561.jpeg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Red: E85 at 2.8 bar gauge. Orange: 99 RON at 2.1 bar gauge. Note where each curve stops climbing.</figcaption></figure>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th></th><th>99 RON pump</th><th>E85</th></tr></thead><tbody><tr><td>Boost</td><td>2.1 bar gauge (311 kPa)</td><td>2.8 bar gauge (381 kPa)</td></tr><tr><td>Peak power</td><td>914.2 whp at 7,940 rpm</td><td>1,113.9 whp at 7,220 rpm</td></tr><tr><td>Peak torque</td><td>688.6 lb ft at 5,580 rpm</td><td>881.0 lb ft at 5,980 rpm</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">200 whp apart. The obvious reading is that E85 is worth 200 whp. It isn&#8217;t, and the two runs weren&#8217;t at the same boost, so any straight comparison between them is measuring two things at once.</p>



<h2 class="wp-block-heading">What the ignition tables say</h2>



<p class="wp-block-paragraph">Two main ignition tables, same axes, one for each fuel. Comparing them cell by cell gives a much cleaner answer than the dyno does.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="2560" height="1355" src="https://blownbytwins.co.uk/wp-content/uploads/2026/08/e85_ignition_advance_gained_over_99ron-scaled.png" alt="Chart of ignition advance gained on E85 over 99 RON pump fuel, showing identical timing below 100 kPa and four to five degrees more advance above it" class="wp-image-1110" srcset="https://blownbytwins.co.uk/wp-content/uploads/2026/08/e85_ignition_advance_gained_over_99ron-scaled.png 2560w, https://blownbytwins.co.uk/wp-content/uploads/2026/08/e85_ignition_advance_gained_over_99ron-300x159.png 300w, https://blownbytwins.co.uk/wp-content/uploads/2026/08/e85_ignition_advance_gained_over_99ron-1024x542.png 1024w, https://blownbytwins.co.uk/wp-content/uploads/2026/08/e85_ignition_advance_gained_over_99ron-768x407.png 768w, https://blownbytwins.co.uk/wp-content/uploads/2026/08/e85_ignition_advance_gained_over_99ron-1536x813.png 1536w, https://blownbytwins.co.uk/wp-content/uploads/2026/08/e85_ignition_advance_gained_over_99ron-2048x1084.png 2048w" sizes="auto, (max-width: 2560px) 100vw, 2560px" /><figcaption class="wp-element-caption">The difference between the two tables, not the tables themselves. Identical below 100 kPa, four to five degrees apart above it.</figcaption></figure>



<p class="wp-block-paragraph"><strong>Below 100 kPa, the two tables are identical.</strong> Not similar. The same numbers in every cell.</p>



<p class="wp-block-paragraph">That is deliberate. Off boost the car runs the same timing regardless of what is in the tank, so it idles the same, pulls away the same and behaves the same in traffic on either fuel. A car that drives differently depending on what you last filled it with is a car you have to think about, and this build is meant to be one you don&#8217;t.</p>



<p class="wp-block-paragraph">Above 100 kPa they separate, and they separate by a remarkably consistent amount:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>MAP</th><th>At 6,000 rpm</th><th>At 7,000 rpm</th></tr></thead><tbody><tr><td>200 kPa</td><td>+4.2&deg;</td><td>+4.1&deg;</td></tr><tr><td>300 kPa</td><td>+4.2&deg;</td><td>+5.0&deg;</td></tr><tr><td>380 kPa</td><td>+4.1&deg;</td><td>+5.0&deg;</td></tr><tr><td>400 kPa</td><td>+4.1&deg;</td><td>+5.0&deg;</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Four to five degrees, right across the boosted region, holding all the way to the limiter. That is what E85 actually bought in this calibration, and it is a separate thing from the extra boost.</p>



<h2 class="wp-block-heading">Separating the two effects</h2>



<p class="wp-block-paragraph">To a first approximation, mass flow through an engine scales with manifold pressure. So if you know the pressure ratio between two runs, you know roughly how much of the power difference is just boost.</p>



<p class="wp-block-paragraph">381 kPa against 311 kPa is a pressure ratio of <strong>1.225</strong>. Anything above that is coming from somewhere other than pressure.</p>



<p class="wp-block-paragraph"><strong>At peak torque</strong>, 881.0 against 688.6 lb ft is a ratio of <strong>1.279</strong>. That is roughly four percent more than pressure alone explains. That four percent is the timing.</p>



<p class="wp-block-paragraph"><strong>At peak power</strong>, 1,113.9 against 914.2 whp is a ratio of <strong>1.219</strong>. Slightly <em>below</em> the pressure ratio. The timing advantage is still sitting in the table, four to five degrees of it, but it has stopped turning into power.</p>



<h2 class="wp-block-heading">Why the advantage disappears at the top</h2>



<p class="wp-block-paragraph"><strong>Status: Working conclusion</strong></p>



<p class="wp-block-paragraph">The working explanation is the turbo. At 2.8 bar the G42-1200 is at or near the limit of what it can flow, so the E85 run stops gaining before the engine does. The pump run at 2.1 bar still has compressor headroom, which is why it makes its peak power 720 rpm further up the rev range, at 7,940 against 7,220.</p>



<p class="wp-block-paragraph">That looks backwards until you think about it. The lower boost run revs out further because it hasn&#8217;t run out of compressor yet.</p>



<p class="wp-block-paragraph">I can&#8217;t prove it. Turbo shaft speed isn&#8217;t logged on this car and there is no exhaust manifold pressure sensor, so I can distinguish neither the compressor side nor the turbine side from the data I have. It is a working conclusion, and it stays one until there is a sensor behind it.</p>



<h2 class="wp-block-heading">What this means if you&#8217;re deciding on flex fuel</h2>



<p class="wp-block-paragraph">The useful conclusion isn&#8217;t the 200 whp. It&#8217;s where the 200 whp comes from and where it doesn&#8217;t.</p>



<p class="wp-block-paragraph">If you are already boost limited by your turbo, E85&#8217;s timing advantage will show up as mid range torque and very little else at the top. You will feel it on the road far more than you will see it on a dyno sheet, because the road is where mid range lives.</p>



<p class="wp-block-paragraph">If you have compressor headroom left, E85 lets you use it, and then you get both.</p>



<p class="wp-block-paragraph">And if somebody quotes you a fuel-to-fuel power comparison without telling you the boost on each run, the number means nothing. Two runs at different pressures measure two variables. You cannot attribute the difference to the fuel unless you hold the pressure constant, or do what I have done here and work out how much of it pressure alone would explain.</p>



<h2 class="wp-block-heading">The experiment I haven&#8217;t run</h2>



<p class="wp-block-paragraph">The clean version of this test is both fuels at the same boost. Set 2.1 bar, run pump, run E85, and the entire difference is the timing with nothing else in the way.</p>



<p class="wp-block-paragraph">That&#8217;s a dyno session I haven&#8217;t had, and until I do, the four percent figure above is arithmetic rather than a direct measurement. When it happens it goes on this page and if the number is different I will say so.</p>



<p class="wp-block-paragraph"><em>The 881 lb ft in the table above is not the highest figure from that session. A fourth run reached 901 lb ft and found the limit of the gearbox instead: <a href="https://blownbytwins.co.uk/?p=1093">Where the Stock ZF 8HP70 Gives Up</a>. Engine torque has been capped at 880 lb ft ever since, which is why the E85 figure is where it is.</em></p>



<p class="wp-block-paragraph">Full specification, both dyno sheets and the measurement conditions are on the <a href="https://blownbytwins.co.uk/toyota-supra-mk4-delta/">Supra project page</a>.</p>



<p class="wp-block-paragraph">If you have run the same engine on both fuels at matched boost and have the numbers, I would like to see them. Same boost, same dyno, same session. It is a surprisingly rare test.</p><p>The post <a href="https://blownbytwins.co.uk/cars/mk4-supra/what-e85-actually-buys/">What E85 Actually Buys: Boost, Timing, and Where the Advantage Vanishes</a> first appeared on <a href="https://blownbytwins.co.uk">BlownByTwins</a>.</p><p>The post <a rel="nofollow" href="https://blownbytwins.co.uk/cars/mk4-supra/what-e85-actually-buys/">What E85 Actually Buys: Boost, Timing, and Where the Advantage Vanishes</a> appeared first on <a rel="nofollow" href="https://blownbytwins.co.uk">BlownByTwins</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Where the Stock ZF 8HP70 Gives Up: 901 lb ft, Measured</title>
		<link>https://blownbytwins.co.uk/cars/mk4-supra/where-the-stock-zf-8hp70-gives-up-901-lb-ft-measured/</link>
		
		<dc:creator><![CDATA[john]]></dc:creator>
		<pubDate>Sun, 30 Aug 2026 09:00:00 +0000</pubDate>
				<category><![CDATA[Engine Management]]></category>
		<category><![CDATA[Mk4 Supra]]></category>
		<category><![CDATA[Tuning]]></category>
		<category><![CDATA[8hp70]]></category>
		<category><![CDATA[canformance]]></category>
		<category><![CDATA[emtron]]></category>
		<category><![CDATA[torque model]]></category>
		<guid isPermaLink="false">https://blownbytwins.co.uk/?p=1093</guid>

					<description><![CDATA[<p>The ZF 8HP is the default answer for anyone putting an automatic behind a big power engine, and the question that follows it everywhere is the same: how much will&#8230;</p>
<p>The post <a href="https://blownbytwins.co.uk/cars/mk4-supra/where-the-stock-zf-8hp70-gives-up-901-lb-ft-measured/">Where the Stock ZF 8HP70 Gives Up: 901 lb ft, Measured</a> first appeared on <a href="https://blownbytwins.co.uk">BlownByTwins</a>.</p>
<p>The post <a rel="nofollow" href="https://blownbytwins.co.uk/cars/mk4-supra/where-the-stock-zf-8hp70-gives-up-901-lb-ft-measured/">Where the Stock ZF 8HP70 Gives Up: 901 lb ft, Measured</a> appeared first on <a rel="nofollow" href="https://blownbytwins.co.uk">BlownByTwins</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="wp-block-paragraph">The ZF 8HP is the default answer for anyone putting an automatic behind a big power engine, and the question that follows it everywhere is the same: how much will the stock box hold?</p>



<p class="wp-block-paragraph">The answers you find are all secondhand. Someone knows someone whose car makes 900 and it&#8217;s fine. Someone else grenaded one at 700. Nobody publishes a number with a trace behind it.</p>



<p class="wp-block-paragraph">Here&#8217;s one. On 6 March 2026 my 8HP70 let go at <strong>901 lb ft</strong>, on a dyno, in front of witnesses, with the run on file.</p>



<h2 class="wp-block-heading">Configuration</h2>



<p class="wp-block-paragraph"><strong>Status: Verified</strong></p>



<ul class="wp-block-list">
<li>ZF 8HP70, stock internals, stock torque converter</li>



<li><a href="https://canformance.net/" target="_blank" rel="noopener">CANformance</a> CAN TCU, release v1.1 beta 13</li>



<li>Emtron KV12 engine management, firmware 2.20.22</li>



<li>3.4 litre 2JZ-GTE VVTi, Pulsar G42-1200, OS Giken LSD, 2.93 final drive</li>



<li>Tyres: Continental SportContact 7, 295/30/19 rear</li>



<li>Fuel: E85 at 2.8 bar gauge</li>



<li>Dyno: Dynojet, WinPEP 8, uncorrected, at <a href="https://www.srdtuning.com/" target="_blank" rel="noopener">SRD Tuning</a></li>



<li><strong>Gear: 5th, 1.285:1</strong></li>



<li>Transmission oil temperature: approximately 95&deg;C</li>
</ul>



<h2 class="wp-block-heading">Why 5th and not 6th</h2>



<p class="wp-block-paragraph">6th on an 8HP70 is direct drive, 1:1, and would have been the cleaner gear to measure in. It wasn&#8217;t available.</p>



<p class="wp-block-paragraph">With a 2.93 final drive and a 659.6 mm rolling diameter on the 295/30/19, 8,200 rpm in 6th is roughly 216 mph at the roller. That is past the speed ceiling of the dyno. The same rpm in 5th is about 168 mph, which is comfortably inside it.</p>



<p class="wp-block-paragraph">So the run happened in a reduction gear. The box was not passing engine torque straight through; it was multiplying it by 1.285 on the way to the output shaft. Worth stating plainly, because it changes how the number generalises.</p>



<h2 class="wp-block-heading">What it looked like</h2>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="2560" height="1355" src="https://blownbytwins.co.uk/wp-content/uploads/2026/08/zf_8hp70_clutch_slip_signature_schematic-scaled.png" alt="Schematic showing the clutch slip signature on a dyno trace, with engine speed continuing to rise while measured torque falls away" class="wp-image-1098" srcset="https://blownbytwins.co.uk/wp-content/uploads/2026/08/zf_8hp70_clutch_slip_signature_schematic-scaled.png 2560w, https://blownbytwins.co.uk/wp-content/uploads/2026/08/zf_8hp70_clutch_slip_signature_schematic-300x159.png 300w, https://blownbytwins.co.uk/wp-content/uploads/2026/08/zf_8hp70_clutch_slip_signature_schematic-1024x542.png 1024w, https://blownbytwins.co.uk/wp-content/uploads/2026/08/zf_8hp70_clutch_slip_signature_schematic-768x407.png 768w, https://blownbytwins.co.uk/wp-content/uploads/2026/08/zf_8hp70_clutch_slip_signature_schematic-1536x813.png 1536w, https://blownbytwins.co.uk/wp-content/uploads/2026/08/zf_8hp70_clutch_slip_signature_schematic-2048x1084.png 2048w" sizes="auto, (max-width: 2560px) 100vw, 2560px" /><figcaption class="wp-element-caption">The signature, drawn as a schematic rather than taken from the log. Engine speed rising while measured torque falls means the input side is turning faster than the output side.</figcaption></figure>



<p class="wp-block-paragraph">Revs rose. Torque dropped. Run aborted.</p>



<p class="wp-block-paragraph">That&#8217;s the whole signature, and it&#8217;s worth sitting with because it is not subtle and it is not ambiguous. Engine speed climbing while measured torque falls means the input side is turning faster than the output side. Something between them is not holding. On a dyno in a fixed gear there is only one candidate.</p>



<p class="wp-block-paragraph">SRD called it as clutch slip from the cell. No fault code, no warning, no drama. The trace simply diverges and the run stops being a measurement of the engine.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="768" src="https://blownbytwins.co.uk/wp-content/uploads/2026/05/f71afa42-78a8-4285-b8aa-7b6027e47561-1024x768.jpeg" alt="Dynojet power and torque curves showing four runs, with the blue trace ending early where the gearbox clutches slipped at 901 lb ft" class="wp-image-1028" srcset="https://blownbytwins.co.uk/wp-content/uploads/2026/05/f71afa42-78a8-4285-b8aa-7b6027e47561-1024x768.jpeg 1024w, https://blownbytwins.co.uk/wp-content/uploads/2026/05/f71afa42-78a8-4285-b8aa-7b6027e47561-300x225.jpeg 300w, https://blownbytwins.co.uk/wp-content/uploads/2026/05/f71afa42-78a8-4285-b8aa-7b6027e47561-768x576.jpeg 768w, https://blownbytwins.co.uk/wp-content/uploads/2026/05/f71afa42-78a8-4285-b8aa-7b6027e47561-1536x1152.jpeg 1536w, https://blownbytwins.co.uk/wp-content/uploads/2026/05/f71afa42-78a8-4285-b8aa-7b6027e47561.jpeg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">The blue trace is the run that found the limit: 1,095.89 whp at 6,710 rpm, 901.33 lb ft at 5,700 rpm, and then it stops. Every other run carries on to 8,200 rpm.</figcaption></figure>



<p class="wp-block-paragraph">It is on the sheet as the blue line: 1,095.89 whp at 6,710 rpm, 901.33 lb ft at 5,700 rpm, and then a trace that stops climbing and ends early. Every other run on that sheet carries on to 8,200 rpm.</p>



<h2 class="wp-block-heading">Why the temperature matters</h2>



<p class="wp-block-paragraph">Wet clutch capacity falls as fluid heats. Publish a slip figure from a box at 130&deg;C after ten back to back pulls and you have measured heat soak, not capacity.</p>



<p class="wp-block-paragraph">This was at roughly 95&deg;C, comfortably inside the fluid&#8217;s operating range and nowhere near tMax. Normal hot running, not a cooked gearbox. That is what makes the number worth quoting.</p>



<h2 class="wp-block-heading">The qualification nobody makes</h2>



<p class="wp-block-paragraph"><strong>Status: Working conclusion</strong></p>



<p class="wp-block-paragraph">Clutch capacity is clamp load. Clamp load is line pressure. Line pressure is commanded by the transmission controller.</p>



<p class="wp-block-paragraph">So what I measured is not &#8220;the 8HP70 holds 901 lb ft&#8221;. It is &#8220;this 8HP70 held 901 lb ft of engine torque in 5th, at the line pressure this controller commanded, at this temperature.&#8221; Change the controller and the number can move.</p>



<p class="wp-block-paragraph">That distinction is not academic. It is the reason a straight answer to &#8220;what will an 8HP hold&#8221; doesn&#8217;t exist, and it is why the forum numbers scatter so widely. Different controllers, different pressure strategies, different gears, different results, all reported as though the gearbox were the only variable.</p>



<h2 class="wp-block-heading">Where the limit applies</h2>



<p class="wp-block-paragraph">Because the measurement came from a reduction gear, it does not transfer evenly across the box.</p>



<p class="wp-block-paragraph">Below 5th the ratios multiply harder: 1.67, 2.11, 3.14, 4.71. For the same engine torque the internals see progressively more, so 1st through 4th are the exposed end. The torque model reduces demand there, which means those gears never see the full number. That is handled in calibration rather than hoped for.</p>



<p class="wp-block-paragraph">Above 5th the ratios go the other way: 1.00, 0.84, 0.67. Less multiplication, and in the top two an overdrive. On paper the model would allow more engine torque in 6th, 7th and 8th than it does in 5th, and I have chosen not to take it.</p>



<p class="wp-block-paragraph"><strong>880 lb ft is a global cap, not a per gear one.</strong> The only gear I have a measured failure point for is the one I broke it in, and I am not interested in discovering whether 890 slips in top at motorway speed.</p>



<p class="wp-block-paragraph">A per gear torque map is the correct answer eventually. It needs a measured limit for each gear, and getting those means deliberately slipping the clutches seven more times. Until then, one number everywhere, set by the one gear I have evidence for.</p>



<h2 class="wp-block-heading">What we settled on</h2>



<p class="wp-block-paragraph">Torque limited to <strong>880 lb ft</strong>. The E85 run on the same sheet peaks at 880.98 lb ft and pulls cleanly to 8,200 rpm at 1,113.9 whp.</p>



<p class="wp-block-paragraph">So the headline number on the car is not what the engine can make. It is what the gearbox will accept. <a href="https://blownbytwins.co.uk/?p=1032">The 3.4 stroker</a> is torque limited by the transmission, not by the engine, the turbo or the fuel.</p>



<p class="wp-block-paragraph">A 20 lb ft margin below a known failure point, on a road car that covers long distances, is a sensible trade. I would rather leave torque on the table than rebuild a gearbox on the hard shoulder.</p>



<p class="wp-block-paragraph"><em>The torque cap is not a blunt limiter. It runs through the same torque model that <a href="https://blownbytwins.co.uk/?p=1118">the traction control</a> uses, reaching for throttle area first and ignition retard second. What that fuel and boost combination is actually worth is covered in <a href="https://blownbytwins.co.uk/?p=1107">What E85 Actually Buys</a>.</em></p>



<h2 class="wp-block-heading">What&#8217;s next</h2>



<p class="wp-block-paragraph">The 8HP75 and an Emtron TM16 controller, together, and both for the same reason: the car is currently limited by the weakest link in the driveline and that link is known.</p>



<p class="wp-block-paragraph">The interesting part is that swapping the controller as well as the box separates the two variables. Same engine, same power, same driver, same roads, two different transmission controllers. That comparison does not exist anywhere that I can find, and when it does I will publish both sides of it.</p>



<p class="wp-block-paragraph">Full specification and the dyno sheet are on the <a href="https://blownbytwins.co.uk/toyota-supra-mk4-delta/">Supra project page</a>. The gearbox installation itself is covered in <a href="https://blownbytwins.co.uk/?p=829">The Big Single and 8 Speed</a>.</p>



<p class="wp-block-paragraph">If you have run an 8HP70 past 900 lb ft and it held, or lost one well below it, I would like to know the gear, the controller and the fluid temperature. Those are the three numbers everyone leaves out.</p><p>The post <a href="https://blownbytwins.co.uk/cars/mk4-supra/where-the-stock-zf-8hp70-gives-up-901-lb-ft-measured/">Where the Stock ZF 8HP70 Gives Up: 901 lb ft, Measured</a> first appeared on <a href="https://blownbytwins.co.uk">BlownByTwins</a>.</p><p>The post <a rel="nofollow" href="https://blownbytwins.co.uk/cars/mk4-supra/where-the-stock-zf-8hp70-gives-up-901-lb-ft-measured/">Where the Stock ZF 8HP70 Gives Up: 901 lb ft, Measured</a> appeared first on <a rel="nofollow" href="https://blownbytwins.co.uk">BlownByTwins</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
