BMW E36 Guide

Revision as of 03:57, 11 November 2017 by Sbarton (talk | contribs) (→‎Fuel Level)

BMW E36 (1990 - 1999)

E36 race car.jpg

RPM

Use the wire connected to the instrument cluster #20, black wire. Also available on the round diagnostic connector at the back of the engine compartment (black wire, Pin #1)

RaceCapture/Pro Timer RPM Configuration

  • Timer Mode: RPM
  • Timer Speed: Medium
  • Pulse Per Revolution: 3

Engine Temperature

In research

Fuel Level

Tap the brown/yellow wire that is in the small connector on the back of the dash closest to the driver's door.

Mapping in RCP

  • 0.2v = 0 (empty)
  • 1.33v = 25 (1/4)
  • 2.2v = 50 (half)
  • 2.95v = 75 (3/4)
  • 3.53v = 100 (full)

You may want to average your fuel readings to compensate for slosh.

(Needs verification)

  • 0 ohms empty
  • ?? ohms 1/4
  • ?? ohms 1/2
  • ?? ohms 3/4
  • 260 ohms full

Oil Pressure

Recommend a dedicated 10 bar / 145 PSI 0.5-4.5v pressure sensor. Pressure Sensor

Road speed (differential speed sensor based)

This calculates gear and speed based on the differential speed sensor.

Assumes:

  • Engine RPM is connected to the first timer input.
  • Differential speed pulse is connected to the 2nd timer input

The differential speed signal is on a black w/ white stripe wire and can be found in the following location:

  • Pin 2 on connector X17 to the back of the gauge cluster
  • Pin 10 on connector X22 on the cruise control module behind the glove box
  • Pin 10 on radio connector
setTickRate(10) --10Hz 

--virtual channels 
--addChannel("name",SR,prec,min,max,"unit") 
speeddiff_id = addChannel("Speed_",10,0,0,160,"MPH") 
gear_id = addChannel("Gear_",5,0,0,5,"gear") 


--global constants 
--edit these to match your car
first = 4.20 
second = 2.49 
third = 1.66 
fourth = 1.24 
fifth = 1.00 
final = 3.46 
tirediameter = 24.7 

--global variables 
rpm = 0 
rpm_diff = 0 
speed = 0 

function updateSpeedDiff() 
   rpm_diff = getTimerRpm(1) 
   speed = rpm_diff*tirediameter*0.002975 
   speed = speed + 0.5 -- round because 0 prec. truncates 
   setChannel(speeddiff_id, speed) 
end 

function updateGear() 
   rpm = getTimerRpm(0) 
   local gearErr = 0.15 
   local gear = 0 
    
   if speed > 2 then 
      ratio = rpm/(rpm_diff*final) 
      if ((first  - ratio)^2) < (gearErr^2) then gear = 1 end 
      if ((second - ratio)^2) < (gearErr^2) then gear = 2 end 
      if ((third  - ratio)^2) < (gearErr^2) then gear = 3 end 
      if ((fourth - ratio)^2) < (gearErr^2) then gear = 4 end 
      if ((fifth  - ratio)^2) < (gearErr^2) then gear = 5 end 
   end 
     setChannel(gear_id, gear) 
end 

function onTick() 
  updateSpeedDiff() 
  updateGear() 
end

External Reference