BMW E36 Guide: Difference between revisions

No edit summary
 
(30 intermediate revisions by 2 users not shown)
Line 1: Line 1:
=BMW E36 (1990 - 1999)=
=BMW E36 (1990 - 1999)=
[[Image:e36_race_car.jpg|500px]]


==RPM==
==RPM==
Line 8: Line 9:
* Pulse Per Revolution: 3
* Pulse Per Revolution: 3


==Engine Temperature Sensor==
==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''
''In research''
Should be similar to [[BMW_E30_Guide#Engine_Temperature|E30]]


==Fuel Level==
==Fuel Level==
''In reserach''
* [http://www.bimmerforums.com/forum/showthread.php?1718687-Stock-fuel-level-sender-output-V-wiring-Integration-to-AIM-MXL Forum discussion]
*[https://www.facebook.com/groups/1041375552601984/permalink/1041384422601097/ Facebook Discussion]
 
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)
[[file:BMW_E36_fuel_level_curve.png]]
 
==Brakes==
*Tap the Blue/Red wire coming out of the brake light switch on the back of the brake pedal.  Wire this to a digital  GPIO input of RaceCapture.  Note: Must use a 10k Ohm resistor between the GPIO input and brake light wire.   
 
*Can be helpful to know when the driver actually applies the brakes for data analysis of the driver.  This gives you a simple yes/no of whether the driver is on the brakes.  Lets you know exactly when they applied the brakes.  Use this in conjunction with TPS to see how much time they are 'coasting', or how long it takes them to transition from throttle to brakes and vice versa.


==Oil Pressure==
==Oil Pressure==
Recommend a dedicated 10 bar / 145 PSI 0.5-4.5v pressure sensor. [https://www.autosportlabs.com/product/10-bar-145-psi-fluid-pressure-sensor/ Pressure Sensor]
Recommend a dedicated 10 bar / 145 PSI 0.5-4.5v pressure sensor. [https://www.autosportlabs.com/product/10-bar-145-psi-fluid-pressure-sensor/ Pressure Sensor]
==OBDII==
You can get a few channels from the OBDII port of the E36 using the [https://www.autosportlabs.com/product/obdii-legacy-adapter/ ASL Legacy OBDII Cable], but it is fairly slow to update.  Useful channels are RPM, EngineTemp, and TPS.  See the [[RaceCapturePro2_OBD2|Enabling OBD-II Guide]].  It is also possible to [[RaceCapturePro_Lua_Scripting_Examples#Display_OBDII_Codes_as_a_channel_and_allow_driver_to_reset_the_OBDII_Codes_with_a_button|read and clear OBDII trouble/diagnostic codes via Lua Script]].
Available Sensors:
*RPM
*EngineTemp
*TPS
*IAT (needs to be converted to F)
*WheelSpeed (needs to be converted to MPH)
*MAF
*EngineLoad
*FuelFlowRate
*Timing
==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
<pre>
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
</pre>
=External Reference=
* [http://www.scribd.com/doc/247124381/1998-BMW-E36-Electrical-Wiring-Diagram#scribd BMW E36 Wiring Diagram]
* [http://wedophones.com/Manuals/BMW/1996%20BMW%20318is-c%20-%20320i%20-%20325i-c%20-%20328i-c%20%20Electrical%20Troubleshooting%20Manual.pdf Wiring Troubleshooting Manual]

Latest revision as of 23:12, 29 June 2020

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

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)

BMW E36 fuel level curve.png

Brakes

  • Tap the Blue/Red wire coming out of the brake light switch on the back of the brake pedal. Wire this to a digital GPIO input of RaceCapture. Note: Must use a 10k Ohm resistor between the GPIO input and brake light wire.
  • Can be helpful to know when the driver actually applies the brakes for data analysis of the driver. This gives you a simple yes/no of whether the driver is on the brakes. Lets you know exactly when they applied the brakes. Use this in conjunction with TPS to see how much time they are 'coasting', or how long it takes them to transition from throttle to brakes and vice versa.

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 trouble/diagnostic codes via Lua Script.

Available Sensors:

  • RPM
  • EngineTemp
  • TPS
  • IAT (needs to be converted to F)
  • WheelSpeed (needs to be converted to MPH)
  • MAF
  • EngineLoad
  • FuelFlowRate
  • Timing

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