BMW E36 Guide
BMW E36 (1990 - 1999)
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
TPS
Pin 2 (Black/Brown wire) of the Throttle Position Sensor is the voltage reference. Connect this wire to an analog input on your RaceCapture system.
Typical voltage values. You may need to measure this on your engine:
- 0.62 volts at 0% throttle
- 4.64 volts at 100%
Configure a linear mapping in the analog input where the first bin is 0.62 volts / 0 scaled value; 2nd bin is 4.64 volts / 100 scaled value. Repeat the 2nd bin values for bins 3, 4 and 5.
Engine Temperature
In research
Should be similar to E30
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
OBDII
You can get a few channels from the OBDII port of the E36 using the ASL Legacy OBDII Cable, but it is fairly slow to update. Useful channels are RPM, EngineTemp, and TPS. See the Enabling OBD-II Guide. It is also possible to read and clear OBDII codes via Lua Script.
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