<?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>dbw - BlownByTwins</title>
	<atom:link href="https://blownbytwins.co.uk/tag/dbw/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>Wed, 07 Oct 2026 14:13:38 +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>dbw - BlownByTwins</title>
	<link>https://blownbytwins.co.uk</link>
	<width>32</width>
	<height>32</height>
</image> 
	<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 fetchpriority="high" 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="(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 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="(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 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="(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>Throttle Body Effective Flow Area: Building a Correct Area vs Position Table</title>
		<link>https://blownbytwins.co.uk/cars/mk4-supra/throttle-body-effective-area/</link>
		
		<dc:creator><![CDATA[john]]></dc:creator>
		<pubDate>Thu, 27 Aug 2026 09:33:33 +0000</pubDate>
				<category><![CDATA[Engine Management]]></category>
		<category><![CDATA[Mk4 Supra]]></category>
		<category><![CDATA[Tuning]]></category>
		<category><![CDATA[air model]]></category>
		<category><![CDATA[calibration]]></category>
		<category><![CDATA[dbw]]></category>
		<category><![CDATA[emtron]]></category>
		<category><![CDATA[throttle body]]></category>
		<guid isPermaLink="false">https://blownbytwins.co.uk/?p=1074</guid>

					<description><![CDATA[<p>Open any modern standalone ECU that runs a throttle-based air model and you&#8217;ll find a table mapping throttle position to flow area. Open a dozen real calibrations and a good&#8230;</p>
<p>The post <a href="https://blownbytwins.co.uk/cars/mk4-supra/throttle-body-effective-area/">Throttle Body Effective Flow Area: Building a Correct Area vs Position Table</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/throttle-body-effective-area/">Throttle Body Effective Flow Area: Building a Correct Area vs Position Table</a> appeared first on <a rel="nofollow" href="https://blownbytwins.co.uk">BlownByTwins</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="wp-block-paragraph">Open any modern standalone ECU that runs a throttle-based air model and you&#8217;ll find a table mapping throttle position to flow area. Open a dozen real calibrations and a good number of those tables will be a straight line from zero to full scale.</p>



<p class="wp-block-paragraph">A straight line is the one shape the table physically cannot be.</p>



<p class="wp-block-paragraph">This isn&#8217;t a precision quibble. In the operating band where the engine spends most of its life, meaning idle, overrun, light cruise and the first few percent of tip-in, a linear table over-states flow area by a factor of two to four. Every downstream calculation inherits that error: fuel mass, torque estimation, pedal mapping, and on a drive-by-wire car, the inverse map the controller uses to decide where to put the plate.</p>



<p class="wp-block-paragraph">This article covers the geometry of why, the compressible flow equations that turn area into mass, what a throttle mass flow (TMF) model does with the result, and a repeatable method for building a table that&#8217;s correct rather than convenient.</p>



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



<h2 class="wp-block-heading">Part 1: The geometry</h2>



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



<p class="wp-block-paragraph">A butterfly valve is a disc on a shaft in a cylindrical bore. Air gets past it through whatever cross-section the disc doesn&#8217;t block, viewed along the bore axis.</p>



<p class="wp-block-paragraph">Set up coordinates: the bore axis is <strong>z</strong>, the shaft runs along <strong>x</strong>, and the plate rotates about the shaft. Call the plate&#8217;s angle from the bore-normal plane <strong>α</strong>, and the angle it sits at when hard against the closed stop <strong>α₀</strong>.</p>



<p class="wp-block-paragraph">For the plate to seal in a cylindrical bore at angle α₀, it can&#8217;t be a circle. The intersection of a cylinder of radius <em>R</em> with a plane tilted at α₀ is an ellipse with semi-axes <em>R</em> and <em>R/cos α₀</em>. So the plate is elliptical, with the long axis running across the shaft.</p>



<p class="wp-block-paragraph">Project that plate onto the plane normal to the flow at an arbitrary angle α, and you get an ellipse with semi-axes:</p>



<ul class="wp-block-list">
<li><strong>R</strong> along the shaft</li>



<li><strong>R · cos α / cos α₀</strong> across it</li>
</ul>



<p class="wp-block-paragraph">Which gives the blocked area directly:</p>



<pre class="wp-block-code"><code>A_blocked = πR² · (cos α / cos α₀)</code></pre>



<p class="wp-block-paragraph">And therefore:</p>



<pre class="wp-block-code"><code>A_open = πR² · (1 − cos α / cos α₀)</code></pre>



<p class="wp-block-paragraph">Two sanity checks. At α = α₀ the cosine ratio is 1 and open area is zero, because the plate fills the bore. At α = 90° the ratio is zero, open area equals bore area, and the plate is edge-on. Both correct.</p>



<h3 class="wp-block-heading">Why it can&#8217;t be linear</h3>



<p class="wp-block-paragraph">Differentiate the open area with respect to α:</p>



<pre class="wp-block-code"><code>dA/dα = πR² · sin α / cos α₀</code></pre>



<p class="wp-block-paragraph">Near the closed position, sin α is small. The area barely moves. Expand the cosine for small openings and you get area growing with <strong>the square</strong> of the angle, not the first power:</p>



<pre class="wp-block-code"><code>1 − cos α ≈ α² / 2</code></pre>



<p class="wp-block-paragraph">A quadratic. That&#8217;s the whole argument. The throttle plate has to swing through a meaningful angle before it uncovers meaningful area, because at small angles you&#8217;re only exposing the thin crescent at the edge of a tilted ellipse.</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/throttle_body_effective_area_vs_linear_assumption-scaled.png" alt="Chart comparing the true geometric open area of an 82 mm butterfly throttle against a linear table, showing the real curve sitting far below the straight line across the lower range" class="wp-image-1097" srcset="https://blownbytwins.co.uk/wp-content/uploads/2026/08/throttle_body_effective_area_vs_linear_assumption-scaled.png 2560w, https://blownbytwins.co.uk/wp-content/uploads/2026/08/throttle_body_effective_area_vs_linear_assumption-300x159.png 300w, https://blownbytwins.co.uk/wp-content/uploads/2026/08/throttle_body_effective_area_vs_linear_assumption-1024x542.png 1024w, https://blownbytwins.co.uk/wp-content/uploads/2026/08/throttle_body_effective_area_vs_linear_assumption-768x407.png 768w, https://blownbytwins.co.uk/wp-content/uploads/2026/08/throttle_body_effective_area_vs_linear_assumption-1536x813.png 1536w, https://blownbytwins.co.uk/wp-content/uploads/2026/08/throttle_body_effective_area_vs_linear_assumption-2048x1084.png 2048w" sizes="auto, (max-width: 2560px) 100vw, 2560px" /><figcaption class="wp-element-caption">Geometric open area against throttle position for an 82 mm bore, 9° closed angle, 83° open stop. The dashed line is what a linear table assumes.</figcaption></figure>



<p class="wp-block-paragraph">Put numbers on it. Take an 82 mm bore, a closed angle of 9°, an open stop at 83°, and a throttle position axis that runs 0 to 100% of mechanical travel:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>TPS %</th><th>Plate angle</th><th>Open area (mm²)</th><th>% of bore</th><th>Linear table says</th><th>Error</th></tr></thead><tbody><tr><td>2</td><td>10.5°</td><td>20</td><td>0.4%</td><td>106</td><td>5.3×</td></tr><tr><td>6</td><td>13.4°</td><td>81</td><td>1.5%</td><td>317</td><td>3.9×</td></tr><tr><td>10</td><td>16.4°</td><td>151</td><td>2.9%</td><td>528</td><td>3.5×</td></tr><tr><td>20</td><td>23.8°</td><td>389</td><td>7.4%</td><td>1056</td><td>2.7×</td></tr><tr><td>40</td><td>38.6°</td><td>1102</td><td>20.9%</td><td>2112</td><td>1.9×</td></tr><tr><td>60</td><td>53.4°</td><td>2124</td><td>40.2%</td><td>3169</td><td>1.5×</td></tr><tr><td>80</td><td>68.2°</td><td>3320</td><td>62.9%</td><td>4225</td><td>1.3×</td></tr><tr><td>100</td><td>83.0°</td><td>4677</td><td>88.6%</td><td>5281</td><td>1.1×</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><em>(Bore area 5281 mm². Shaft blockage included, see below. Linear column assumes full scale = bore area.)</em></p>



<p class="wp-block-paragraph">The error is worst exactly where it hurts most. A big throttle on a big engine cruises at single-digit TPS. That&#8217;s the region where a linear table is out by a factor of four.</p>



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



<p class="wp-block-paragraph">The shaft blocks area too, but not in the way most people assume. Its projected area is roughly <em>shaft diameter × bore diameter</em>, so call it 8 mm × 82 mm ≈ 656 mm², over 12% of the bore.</p>



<p class="wp-block-paragraph">But at small openings the shaft is hidden behind the plate&#8217;s projection. The plate&#8217;s projected ellipse is nearly as wide as the bore, and the shaft sits along its centreline. Shaft blockage only becomes real once the plate has swung far enough that its projection narrows past the shaft width, which on typical geometry is somewhere past 60 to 70°.</p>



<p class="wp-block-paragraph">So the shaft is irrelevant at idle and dominant at wide-open throttle. If you&#8217;ve ever wondered why a throttle body flows meaningfully less than its nominal bore area suggests at WOT, that&#8217;s most of the answer.</p>



<h3 class="wp-block-heading">What the closed-form misses</h3>



<p class="wp-block-paragraph">The clean equation above is a thin-plate, sharp-edged idealisation. Real hardware has:</p>



<ul class="wp-block-list">
<li><strong>Plate thickness.</strong> A 2 mm plate at 15° presents a real edge to the flow, not a mathematical line.</li>



<li><strong>A seal taper or step in the bore</strong> at the closed position, common on OEM bodies to control leakage and stop the plate binding.</li>



<li><strong>A relieved or chamfered plate edge</strong>, which changes the effective flow path at small angles specifically.</li>



<li><strong>Screw heads</strong> on the plate face where it&#8217;s fastened to the shaft.</li>



<li><strong>Non-concentricity</strong> between the plate&#8217;s rotation axis and the bore centreline on some designs.</li>
</ul>



<p class="wp-block-paragraph">None of these are worth modelling analytically. Integrate the geometry numerically and stop pretending you have a closed form. The code is fifteen lines and it handles the shaft correctly for free.</p>



<pre class="wp-block-code"><code>import numpy as np

def open_area(alpha_deg, alpha0_deg, bore_d, shaft_d, n=2000):
    """
    Geometric open area of a butterfly valve, by numerical integration.

    alpha_deg  : plate angle from the bore-normal plane (deg); ~90 = fully open
    alpha0_deg : plate angle at the closed stop (deg)
    bore_d     : bore diameter (mm)
    shaft_d    : shaft diameter (mm)

    Returns (area_mm2, fraction_of_bore_area)
    """
    R  = bore_d / 2.0
    a  = np.deg2rad(alpha_deg)
    a0 = np.deg2rad(alpha0_deg)

    # projected plate ellipse: semi-axis R along shaft, R*cos(a)/cos(a0) across
    sx = R
    sy = max(R * np.cos(a) / np.cos(a0), 1e-12)

    g = np.linspace(-R, R, n)
    X, Y = np.meshgrid(g, g)

    in_bore  = (X**2 + Y**2) &lt;= R**2
    in_plate = ((X / sx)**2 + (Y / sy)**2) &lt;= 1.0
    in_shaft = np.abs(Y) &lt;= shaft_d / 2.0

    cell = (2 * R / (n - 1))**2
    area = np.count_nonzero(in_bore &amp; ~in_plate &amp; ~in_shaft) * cell
    return area, area / (np.pi * R**2)


def servo_to_angle(tps_pct, alpha0_deg, alpha_max_deg):
    """Linear travel-to-angle map. Verify this on your own hardware."""
    return alpha0_deg + (tps_pct / 100.0) * (alpha_max_deg - alpha0_deg)


for tps in &#091;0, 1, 2, 3, 5, 8, 12, 20, 30, 45, 60, 80, 100]:
    ang = servo_to_angle(tps, 9.0, 83.0)
    a, f = open_area(ang, 9.0, 82.0, 8.0)
    print(f"{tps:5.1f}%  {ang:5.1f}°  {a:8.1f} mm²  {f*100:5.2f}%")</code></pre>



<h3 class="wp-block-heading">Servo position is not plate angle</h3>



<p class="wp-block-paragraph">The table&#8217;s axis is usually servo or throttle position in percent. That is a percentage of <em>mechanical travel</em>, mapped through the sensor calibration. It is not plate angle, and it is not flow area.</p>



<p class="wp-block-paragraph">Two things break here routinely:</p>



<p class="wp-block-paragraph"><strong>The zero point.</strong> TPS 0% is wherever the sensor was zeroed, which is typically the closed stop. But the closed stop is often set slightly <em>below</em> the sealing angle so the plate loads against it, or slightly above so it doesn&#8217;t jam. If your assumed α₀ is a degree out, your area predictions at low TPS are out by a large multiple, because you&#8217;re on the steepest part of a quadratic.</p>



<p class="wp-block-paragraph"><strong>The full-scale point.</strong> Plates rarely reach 90°. Mechanical stops usually land somewhere between 80° and 86°, and the linkage may not be perfectly linear across the range. On a DBW body with a direct gear train it&#8217;s close enough to linear to be usable. Verify rather than assume.</p>



<p class="wp-block-paragraph"><strong>Measure both.</strong> Command the throttle to a known position, remove the intake pipe, and measure the plate angle directly. A digital angle gauge against the plate face is good to a few tenths of a degree, which is plenty. Do it at 0%, 100%, and three or four points in between to confirm linearity. This is twenty minutes of work that determines whether everything downstream is right or wrong.</p>



<h3 class="wp-block-heading">The scaling trap</h3>



<p class="wp-block-paragraph">If a table has been carried over from a different throttle body, check what it was scaled by.</p>



<p class="wp-block-paragraph">Area scales with the <strong>square</strong> of diameter. Going from 68 mm to 82 mm:</p>



<ul class="wp-block-list">
<li>Diameter ratio: 82 / 68 = <strong>1.206</strong></li>



<li>Area ratio: 82² / 68² = <strong>1.454</strong></li>
</ul>



<p class="wp-block-paragraph">Scale by diameter instead of area and every entry is 17% low. That&#8217;s the obvious error.</p>



<p class="wp-block-paragraph">The subtler one: even a correctly area-scaled table has the wrong <em>shape</em>. Closed angle, open stop angle, and shaft-to-bore ratio all differ between bodies, and none of them scale with diameter. The same shaft in a smaller bore blocks a larger fraction of it. A table lifted from another throttle body and multiplied by a constant is wrong in a way no single multiplier can fix.</p>



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



<h2 class="wp-block-heading">Part 2: From area to mass flow</h2>



<p class="wp-block-paragraph">Geometric area isn&#8217;t flow area. Two corrections stand between them.</p>



<h3 class="wp-block-heading">Discharge coefficient</h3>



<p class="wp-block-paragraph">Real flow through an orifice separates at the edge and forms a vena contracta narrower than the geometric opening. The ratio of actual to ideal flow is the discharge coefficient, <strong>Cd</strong>.</p>



<p class="wp-block-paragraph">For a butterfly valve, Cd is a function of plate angle, and to a lesser extent of Reynolds number and pressure ratio. Typical values sit somewhere in the 0.6 to 0.8 range across most of the travel, though published data varies considerably with plate profile and bore geometry. The behaviour at very small openings, where the flow is a thin slot jet past a tilted edge, is the least consistent across sources.</p>



<p class="wp-block-paragraph">If your ECU exposes a separate Cd or flow-correction table against angle, keep the geometric table geometric and put the empirical correction in the Cd table. Two tables, two jobs, and you can reason about each independently. If it only exposes one &#8220;effective area&#8221; table, you&#8217;re folding Cd into it, which works, but means the table is no longer verifiable against geometry, and you lose the ability to sanity-check it with a ruler and a protractor.</p>



<h3 class="wp-block-heading">The compressible flow equation</h3>



<p class="wp-block-paragraph">Air through a restriction is compressible. The standard isentropic nozzle relation:</p>



<pre class="wp-block-code"><code>ṁ = Cd · A · (P_up / √(R_s · T_up)) · Ψ(PR)</code></pre>



<p class="wp-block-paragraph">where <code>PR = P_down / P_up</code>, <code>R_s = 287 J/kg·K</code>, and Ψ depends on whether the flow is choked.</p>



<p class="wp-block-paragraph"><strong>Critical pressure ratio</strong> for air (γ = 1.4):</p>



<pre class="wp-block-code"><code>PR_crit = (2 / (γ+1))^(γ/(γ-1)) = 0.528</code></pre>



<p class="wp-block-paragraph"><strong>Subsonic (PR &gt; 0.528):</strong></p>



<pre class="wp-block-code"><code>Ψ = √( (2γ/(γ-1)) · ( PR^(2/γ) − PR^((γ+1)/γ) ) )</code></pre>



<p class="wp-block-paragraph"><strong>Choked (PR ≤ 0.528):</strong></p>



<pre class="wp-block-code"><code>Ψ = √γ · (2/(γ+1))^((γ+1)/(2(γ-1))) = 0.6847</code></pre>



<p class="wp-block-paragraph">Both expressions agree at PR = 0.528, as they must.</p>



<h3 class="wp-block-heading">The consequence nobody expects: your throttle is choked at idle</h3>



<p class="wp-block-paragraph">Idle manifold pressure on a healthy engine might be 35 kPa absolute, against roughly 101 kPa ambient upstream. That&#8217;s a pressure ratio of 0.35, well below critical.</p>



<p class="wp-block-paragraph"><strong>The throttle is sonic.</strong> Flow is at the speed of sound in the gap between plate and bore.</p>



<p class="wp-block-paragraph">That has a specific and useful consequence: when choked, mass flow depends only on Cd, area, upstream pressure and upstream temperature. <strong>Manifold pressure has no influence whatsoever.</strong> Ψ is pinned at 0.6847 and stays there.</p>



<p class="wp-block-paragraph">Which means at idle, the model reduces to:</p>



<pre class="wp-block-code"><code>ṁ = Cd · A · P_ambient / √(R_s · T_up) · 0.6847</code></pre>



<p class="wp-block-paragraph">Every percent of error in your area table becomes a percent of error in calculated air mass, with nothing to absorb it. There is no MAP feedback, no VE term, no second path. Area <em>is</em> the model.</p>



<p class="wp-block-paragraph">Work out where choking ends: PR = 0.528 against 101 kPa ambient means MAP = 53 kPa. Anything below that is choked, which covers idle, overrun, and most light-load cruise on a large-displacement engine. A big proportion of normal driving sits in the region where the area table is the sole determinant of calculated airflow.</p>



<p class="wp-block-paragraph">This is the single strongest reason to get the table right, and the reason area errors show up as idle and cruise fuelling problems specifically.</p>



<h3 class="wp-block-heading">The boosted case, and why pre-throttle pressure matters</h3>



<p class="wp-block-paragraph">Now put the throttle under boost. Upstream is charge pipe pressure, say 200 kPa absolute; downstream is plenum, say 190 kPa. PR = 0.95. Deeply subsonic, and this is where Ψ gets vicious.</p>



<p class="wp-block-paragraph">Run the numbers:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>PR</th><th>Ψ</th></tr></thead><tbody><tr><td>0.96</td><td>0.276</td></tr><tr><td>0.95</td><td>0.306</td></tr><tr><td>0.94</td><td>0.335</td></tr><tr><td>0.93</td><td>0.361</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">A <strong>1% change in pressure ratio produces roughly a 9% change in mass flow.</strong> The function is nearly vertical up here.</p>



<p class="wp-block-paragraph">Which brings us to the thing that decides whether a throttle model can work in boost at all: <strong>you must know the pressure upstream of the throttle plate.</strong></p>



<p class="wp-block-paragraph">Without a pre-throttle sensor, the ECU has to infer it, usually from a modelled pressure drop across the intercooler and pipework, or from a boost target, or by assuming it equals MAP plus some offset. All of those are estimates, and the sensitivity above means a 2 kPa estimation error at part throttle in boost produces a double-digit percentage error in calculated air mass.</p>



<p class="wp-block-paragraph"><strong>Fit the sensor.</strong> On a naturally aspirated engine you can argue that ambient is close enough. On a boosted engine running a throttle-based air model, a pre-throttle pressure sensor is not an optional refinement. It&#8217;s the difference between a model and a guess.</p>



<p class="wp-block-paragraph"><em>My own car runs both sides: pre-throttle and post-throttle pressure are each measured, not inferred. On a throttle mass flow model those two sensors are not instrumentation, they are part of the model, and the pressure ratio between them is the term the whole calculation hinges on. Full sensing list is on the <a href="https://blownbytwins.co.uk/toyota-supra-mk4-delta/">specification page</a>.</em></p>



<p class="wp-block-paragraph">Note also that the <em>sign</em> of the problem inverts across the throttle range. At small openings the pressure ratio is low, the flow is choked or near-choked, and the model is insensitive to downstream pressure but exquisitely sensitive to area. At large openings in boost the pressure ratio approaches unity, area error matters less, and pressure error dominates. Different regions of the same table fail for different reasons.</p>



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



<h2 class="wp-block-heading">Part 3: What the ECU does with it</h2>



<h3 class="wp-block-heading">The throttle mass flow model</h3>



<p class="wp-block-paragraph">A throttle mass flow model, TMF in Emtron&#8217;s vocabulary, with equivalents under different names across most modern standalone platforms, computes cylinder air mass from the throttle rather than from the manifold.</p>



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



<ol class="wp-block-list">
<li>Throttle position → plate angle (via the servo map)</li>



<li>Plate angle → geometric area (via the area table)</li>



<li>Area × Cd → effective area</li>



<li>Effective area + upstream pressure + upstream temperature + pressure ratio → mass flow through the throttle</li>



<li>Mass flow → cylinder filling → fuel</li>
</ol>



<p class="wp-block-paragraph">Contrast that with speed density, which computes cylinder air mass from manifold pressure, air temperature, engine speed and a volumetric efficiency table. <a href="https://blownbytwins.co.uk/previous-cars/r34gtr/new-ecu-time/">I first wrote about why that distinction mattered in 2023</a>, when choosing an ECU for the R34, long before I understood how much sat underneath it.</p>



<p class="wp-block-paragraph">The two models fail in opposite ways, which is precisely why good ECUs run both:</p>



<p class="wp-block-paragraph"><strong>Speed density</strong> is accurate in steady state because MAP is a direct measurement of what&#8217;s actually in the manifold. It&#8217;s <em>late</em> in transients, because the manifold takes time to fill and the sensor reports the result rather than the intent. Stab the throttle and the MAP sensor tells you what happened a few tens of milliseconds ago.</p>



<p class="wp-block-paragraph"><strong>Throttle mass flow</strong> is immediate, because the plate moves before the manifold responds, so the model sees the demand as it happens. But it&#8217;s an inference stacked on a chain of assumptions: area table, Cd, servo map, upstream pressure. Every one of those is a place to be wrong.</p>



<p class="wp-block-paragraph">So the ECU blends them: TMF-weighted during transients where response matters, SD-weighted in steady state where accuracy matters, with a handover region between.</p>



<h3 class="wp-block-heading">Diagnosing the handover</h3>



<p class="wp-block-paragraph">The handover is where calibration errors become visible, and it&#8217;s diagnostically valuable for exactly that reason. If your two models disagree, the blend region will show a fuelling discontinuity that tracks the blend weighting rather than any physical parameter.</p>



<p class="wp-block-paragraph">Log fuel trim, or measured lambda error, against whatever variable drives the blend. Three patterns:</p>



<p class="wp-block-paragraph"><strong>A step at the handover.</strong> The two models disagree at that operating point. One is wrong; the trim jumps as authority transfers.</p>



<p class="wp-block-paragraph"><strong>A ramp through the handover.</strong> The models disagree by a growing margin across the region. Usually indicates a slope error in one of them, either a VE table with the wrong shape, or an area table with the wrong curvature.</p>



<p class="wp-block-paragraph"><strong>Clean through the handover, but offset either side.</strong> Both models share a common error downstream of the blend, such as injector characterisation, a global trim, or fuel pressure.</p>



<p class="wp-block-paragraph">That third case is where things get interesting, because a common error can <em>hide</em> the first two. Which leads to the diagnostic fork.</p>



<h3 class="wp-block-heading">The fork: when the symptom contradicts the geometry</h3>



<p class="wp-block-paragraph">Here&#8217;s a scenario worth walking through, because it&#8217;s a trap.</p>



<p class="wp-block-paragraph">Suppose you determine your area table over-states area by roughly 3× in the idle band, established from geometry, exactly as above. The model is being told there&#8217;s three times as much air going past the plate as there really is.</p>



<p class="wp-block-paragraph">You&#8217;d expect the engine to run <strong>rich</strong> at idle, and the fuel model to read <strong>high</strong>.</p>



<p class="wp-block-paragraph">Now suppose your logs show the opposite: TMF reading around 9% <em>low</em> at idle, with a positive fuel correction propping it up.</p>



<p class="wp-block-paragraph">Both observations can&#8217;t be direct consequences of the same cause. Something else is in the chain. Three branches, all testable:</p>



<p class="wp-block-paragraph"><strong>Branch 1: a global trim is masking the shape error.</strong> Somewhere there&#8217;s a multiplier, a fuel scaling constant, or a Cd table that was adjusted until mid-range worked. That adjustment is fighting the area error, and the residual at idle is what&#8217;s left after the fight. Test: remove or neutralise the compensating term and see whether idle error grows in the direction the geometry predicts. If it does, the geometry diagnosis stands and the trim was a bandage.</p>



<p class="wp-block-paragraph"><strong>Branch 2: the Cd table is pulling the other way.</strong> If Cd is populated with values that fall sharply at small openings, it may be cancelling much of the geometric over-statement. Test: multiply the area and Cd tables together and plot the product against angle. That product is what the model actually uses. If the product is close to geometrically correct, the individual tables are wrong but the model isn&#8217;t, which means fixing the area table alone will break it.</p>



<p class="wp-block-paragraph"><strong>Branch 3: the axis doesn&#8217;t mean what you think.</strong> The table may be indexed on plate angle rather than percentage travel; or on a normalised area rather than absolute; or the &#8220;servo position&#8221; channel may be the commanded target rather than the measured position, which differ during any transient and can differ statically if there&#8217;s a calibration offset. Test: command a known position, measure the actual plate angle, and confirm which number the table is being indexed on.</p>



<p class="wp-block-paragraph"><strong>Resolve the fork before changing anything.</strong> The failure mode here is correcting the area table on sound geometric grounds, discovering the engine now runs badly, and concluding the geometry was wrong. The geometry isn&#8217;t wrong. Something else in the chain was compensating for it, and you&#8217;ve now removed one half of a matched pair.</p>



<p class="wp-block-paragraph">Which is the general rule: <strong>compensating errors must be corrected together or not at all.</strong> If a wrong area table and a wrong global trim have been co-calibrated to produce acceptable fuelling, fixing either one alone makes the car worse. Identify both, correct both, revalidate.</p>



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



<h2 class="wp-block-heading">Part 4: The dual-use trap</h2>



<p class="wp-block-paragraph">On a drive-by-wire car, the throttle area table is usually consumed in two directions.</p>



<p class="wp-block-paragraph"><strong>Forward</strong>, for the air model: position → area → mass flow → fuel.</p>



<p class="wp-block-paragraph"><strong>Inverse</strong>, for torque-based control: torque demand → required mass flow → required area → <strong>target throttle position</strong>.</p>



<p class="wp-block-paragraph">The same table. Read backwards.</p>



<p class="wp-block-paragraph">That inverse map is not an edge case. It is what every torque-based system on the car leans on. When <a href="https://blownbytwins.co.uk/?p=1118">traction control</a> decides to pull torque and reaches for throttle area as its first actuator, this table is what turns a torque request into a plate position. An area table that is wrong at small openings makes every one of those interventions wrong too.</p>



<p class="wp-block-paragraph">Three consequences.</p>



<h3 class="wp-block-heading">Fixing the fuel model changes the pedal</h3>



<p class="wp-block-paragraph">If the table over-states area at small openings, the inverse map under-commands position for a given torque request, because the controller thinks a tiny opening delivers a lot of air, so it asks for a tiny opening. Correct the table and the same pedal input now produces a larger commanded opening.</p>



<p class="wp-block-paragraph">Which is <em>correct</em>, but it isn&#8217;t <em>the same</em>. Tip-in response, idle control authority, cruise position and any part-throttle torque limiter behaviour all shift. Expect to revalidate driveability alongside fuelling, and don&#8217;t do it on a road.</p>



<h3 class="wp-block-heading">Non-monotonicity breaks the inverse map</h3>



<p class="wp-block-paragraph">A table with hand-entered noise, where area at 5% exceeds area at 6%, is merely inaccurate in the forward direction. It&#8217;s <em>ill-posed</em> in the inverse direction.</p>



<p class="wp-block-paragraph">Inverting a non-monotonic function means that for some torque demands, more than one throttle position satisfies the request. Depending on how the solver is implemented, you get target jumps, hunting, or an oscillation whose frequency is set by the controller rather than by anything physical.</p>



<p class="wp-block-paragraph">Where does hand-entry noise usually live? In the low-percentage cells, because that&#8217;s where people have been poking at values trying to fix an idle problem. Which is exactly where idle control and tip-in operate.</p>



<p class="wp-block-paragraph"><strong>Check monotonicity explicitly.</strong> It takes one line:</p>



<pre class="wp-block-code"><code>assert np.all(np.diff(area_table) &gt; 0), "Area table is non-monotonic"</code></pre>



<p class="wp-block-paragraph">If that fails, no amount of downstream tuning will produce stable control.</p>



<h3 class="wp-block-heading">The table is not a tuning parameter</h3>



<p class="wp-block-paragraph">The strongest reason to build the area table from geometry rather than from fitting: it&#8217;s the only table in the chain that has a <strong>verifiable, physical, single correct answer</strong>.</p>



<p class="wp-block-paragraph">VE is empirical. Cd is empirical. Injector characterisation is empirical. Geometric flow area is a solid modelling problem with one right answer, computable from four measurements, and it does not change as the engine ages.</p>



<p class="wp-block-paragraph">Once it&#8217;s correct, it&#8217;s correct permanently, and every empirical table downstream is being fitted against a fixed truth rather than against another set of assumptions. That&#8217;s what makes the rest of the calibration converge instead of chasing itself.</p>



<p class="wp-block-paragraph">Treating the area table as somewhere to dial in a fuelling problem throws away the one fixed reference point in the entire model.</p>



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



<h2 class="wp-block-heading">Part 5: Method</h2>



<ol class="wp-block-list">
<li><strong>Measure the hardware.</strong> Bore diameter, shaft diameter, plate thickness. Callipers.</li>



<li><strong>Measure the closed angle.</strong> Digital angle gauge against the plate face at the closed stop. This number matters more than any other single measurement, because it sets where you sit on the quadratic.</li>



<li><strong>Measure the open stop.</strong> Same method, throttle commanded to 100%.</li>



<li><strong>Verify the servo map.</strong> Command 20%, 40%, 60%, 80%; measure the angle at each. Confirm the travel-to-angle relationship is linear before assuming it.</li>



<li><strong>Compute the geometric table numerically.</strong> Use the code above, at the resolution your ECU&#8217;s table supports. Populate the low-percentage region densely, because that&#8217;s where the curvature is, and where linear interpolation between widely-spaced breakpoints does the most damage.</li>



<li><strong>Check monotonicity.</strong> Every cell strictly greater than the one before.</li>



<li><strong>Handle Cd deliberately.</strong> Separate table if the ECU allows it. If not, decide consciously what Cd assumption you&#8217;re folding in and write it down.</li>



<li><strong>Identify existing compensating terms before you change anything.</strong> Global fuel multipliers, mass fuel corrections, Cd tables, anything that&#8217;s been trimmed to make the current calibration work. These come out or get re-derived in the same change.</li>



<li><strong>Validate against logs.</strong> With the corrected table, TMF and SD should converge in steady state without a compensating pad. That convergence is your proof, not the smoothness of the fuel trim, which can be smooth for the wrong reasons.</li>



<li><strong>Revalidate driveability</strong>, because you have just changed the inverse map that determines where the plate goes.</li>
</ol>



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



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



<p class="wp-block-paragraph">A butterfly valve&#8217;s open area grows with the square of plate angle near closed, not linearly. In the idle-to-light-cruise band, a linear table over-states area by two to four times.</p>



<p class="wp-block-paragraph">Below roughly 53 kPa manifold pressure, the throttle is choked and manifold pressure has no effect on flow at all. Area and upstream pressure are the entire model. Above that, in boost, the flow function is so steep that a 1% pressure ratio error produces a 9% mass flow error, which is why pressure sensors either side of the plate are mandatory rather than optional on a boosted throttle-model car.</p>



<p class="wp-block-paragraph">The area table is the only table in the air model with a single verifiable correct answer. Build it from geometry, keep the empirical corrections in the tables designed for them, and check it&#8217;s monotonic before wondering why the drive-by-wire target is hunting.</p>



<p class="wp-block-paragraph">And if fixing it makes the engine worse, you&#8217;ve found a compensating error, not a mistake in the maths.</p>



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



<p class="wp-block-paragraph"><em>This is the first of a series on the Emtron KV12 running a 3.4 litre 2JZ. The torque model that sits on top of this table drives the <a href="https://blownbytwins.co.uk/?p=1118">traction control strategy</a>, and it is also what caps engine torque at the <a href="https://blownbytwins.co.uk/?p=1093">measured limit of the gearbox</a>. Full specification and measurement conditions are 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 have built one of these tables from geometry and found the Cd behaviour at very small openings differs from the published ranges, I would like to hear about it. That is the part of this I trust least.</p><p>The post <a href="https://blownbytwins.co.uk/cars/mk4-supra/throttle-body-effective-area/">Throttle Body Effective Flow Area: Building a Correct Area vs Position Table</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/throttle-body-effective-area/">Throttle Body Effective Flow Area: Building a Correct Area vs Position Table</a> appeared first on <a rel="nofollow" href="https://blownbytwins.co.uk">BlownByTwins</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Rajab Racing Intake Manifold</title>
		<link>https://blownbytwins.co.uk/previous-cars/r34gtr/rajab-racing-intake-manifold/</link>
		
		<dc:creator><![CDATA[john]]></dc:creator>
		<pubDate>Tue, 23 Jan 2024 10:01:37 +0000</pubDate>
				<category><![CDATA[R34 GTR]]></category>
		<category><![CDATA[dbw]]></category>
		<category><![CDATA[intake]]></category>
		<category><![CDATA[manifold]]></category>
		<guid isPermaLink="false">https://blownbytwins.co.uk/?p=497</guid>

					<description><![CDATA[<p>So after a little chasing, I was able to get in contact with the guys over at Rajab Racing about putting one of their intake manifolds on the car. Awesome.&#8230;</p>
<p>The post <a href="https://blownbytwins.co.uk/previous-cars/r34gtr/rajab-racing-intake-manifold/">Rajab Racing Intake Manifold</a> first appeared on <a href="https://blownbytwins.co.uk">BlownByTwins</a>.</p>
<p>The post <a rel="nofollow" href="https://blownbytwins.co.uk/previous-cars/r34gtr/rajab-racing-intake-manifold/">Rajab Racing Intake Manifold</a> appeared first on <a rel="nofollow" href="https://blownbytwins.co.uk">BlownByTwins</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="wp-block-paragraph">So after a little chasing, I was able to get in contact with the guys over at Rajab Racing about putting one of their intake manifolds on the car. Awesome. This is the manifold I wanted because it&#8217;s a street car, not a race car. Torque is important! </p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="1024" height="682" src="https://blownbytwins.co.uk/wp-content/uploads/2024/01/38860581301.jpg" alt="" class="wp-image-498" srcset="https://blownbytwins.co.uk/wp-content/uploads/2024/01/38860581301.jpg 1024w, https://blownbytwins.co.uk/wp-content/uploads/2024/01/38860581301-300x200.jpg 300w, https://blownbytwins.co.uk/wp-content/uploads/2024/01/38860581301-768x512.jpg 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph"><br>As beautifully crafted as the Plazmaman and Hypertune manifolds are, they&#8217;re short runner, peak horsepower parts and not what I want for the car. And lets face it, the Rajab Racing ones are also pretty spectacular to look at. Andrew Hawkins at Motive Video did a video on the OEM, Nismo and Hypertune intakes, and the Nismo and Hypertune items were very, very close in the </p>


<div class="wp-block-image">
<figure class="alignleft size-full is-resized"><img loading="lazy" decoding="async" width="1024" height="665" src="https://blownbytwins.co.uk/wp-content/uploads/2024/01/CRS_9752_1024x10241.jpg" alt="" class="wp-image-499" style="width:428px;height:auto" srcset="https://blownbytwins.co.uk/wp-content/uploads/2024/01/CRS_9752_1024x10241.jpg 1024w, https://blownbytwins.co.uk/wp-content/uploads/2024/01/CRS_9752_1024x10241-300x195.jpg 300w, https://blownbytwins.co.uk/wp-content/uploads/2024/01/CRS_9752_1024x10241-768x499.jpg 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">I will going with the Bosch DBW install, to fully bring the car to the modern age. And I&#8217;m not going to lie, cruise control is a massive draw! It&#8217;s a good 6 hours from home to Inverness when we do the Scotland trip, so having a cruise control feature will be perfect for the right leg &#8211; I&#8217;m not getting any younger. And I want to really clean up the engine bay, getting rid of the idle speed control, and having the DBW sort it all out. </p>



<p class="wp-block-paragraph">The additional features that DBW brings are improved tuning strategy, additonal traction control strategy, etc.</p>



<p class="wp-block-paragraph">All in all, the car is looking more and more like something from the modern times. And that&#8217;s exactly what I want.</p><p>The post <a href="https://blownbytwins.co.uk/previous-cars/r34gtr/rajab-racing-intake-manifold/">Rajab Racing Intake Manifold</a> first appeared on <a href="https://blownbytwins.co.uk">BlownByTwins</a>.</p><p>The post <a rel="nofollow" href="https://blownbytwins.co.uk/previous-cars/r34gtr/rajab-racing-intake-manifold/">Rajab Racing Intake Manifold</a> appeared first on <a rel="nofollow" href="https://blownbytwins.co.uk">BlownByTwins</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
