BMW Z3 Custom Electronics Module(s)

Work In Progress – Estimated Timeline:

  • Hardware Controllers Finalized: Dec 2011
  • Install Ribbon Cables, other hardware in the car: Dec 2011
  • Use ribbon cable to test the type and range of each signal: Dec 2011-Jan 2012
  • Finalize hardware design: Jan 2012
  • Have Circuit Board Manufactured: Jan-Feb 2012
  • Write Initial Software: Feb-May 2012
  • Test Initial Software: Feb-May 2012
  • Implementation: Jun 2012

**NOTE: I am a big fan of having everything be an option or be able to be customized. Most options with specified timing can have that timing be a user-defined value, and all options defined as “automatic” can be enabled/disabled. A USB-driven PC-based GUI will ultimately complement the modules described below.

All modules can be independently enabled or disabled at any time while they are running. If disabled, the module continues to run and accept inbound communication messages, but it will not take any actions, or send any messages, before being enabled. Any “module” without a controller chip installed must have no effect whatsoever on the signals it reads or commands.

I figured that I would tap into EVERY useful electronic system I could, since it would be easier to install all the cables at once, rather than deciding I should have tapped into something else a few months later, and having to go back. For this reason, many modules below (cruise control, power seat control) will probably never be used or installed.

Piggy-Back Module: Cruise Control (Not intended for initializing or changing CC speed; only used to determine if CC should be disabled where the OEM controller would unsafely allow it)

    Known Constraints/Requirements
  • Add a 5,500 RPM limiter when cruise control is enabled (currently, no limiter – resuming 55MPH speed in 1st gear will just bounce off the limiter at red-line)
    • Or, do I use the speed at, say, 3,500 RPM to determine the current gear 1-5, and cancel the cruise control if the speed is too great for the current gear?
  • Must accept all switches the user can press as input (resume/set, off, accel, decel), to update the module’s state (if the module thinks it’s still controlling CC, it could press accel/decel and then CC would be enabled when the user overrides it)
  • *the following constraints are done in the OEM module, and are not needed at this level:
    • Brake pressed -> OFF
    • Clutch in -> OFF
  • I’ll want to disable CC in 1st since it would be very inefficient, and there’s not much point
  • If the module is disabled, it simulates the OFF switch, to disable CC before the module is disabled.
    Non-OEM Features I’ll add
  • Add a rev limiter to CC
  • Disable CC in first gear
    Tests remaining
  • Try resuming 60MPH cruise speed at 30MPH in neutral, clutch engaged. If it attempts to gain speed, I’ll need some method of determining neutral (declining speed? MPH @ 4000RPM <= MPH @3000RPM?)

Piggy-Back Module: Power Windows

    Known Constraints/Requirements
  • Module is constantly powered, even when the car is off
  • Digital ignition sensing must be verified with an analog reading (since the battery voltage dips while starting, we don’t want false reading of the key being removed – ignition value 1 -> ignition value 0
  • Door switch sensing must be verified over the course of ~1 second (this avoids unnecessary window action in response to a failed attempt to close a door)
  • Any automated action that rolls a window up must be able to be disabled, for safety reasons
  • Any action to partially lower a window will either be stored in program state, or will be handled as first rolling the window completely up, then down by the given amount. (this way, the window position will be as consistent as possible given the available sensors)
  • Upon 3 successive UNLOCK pulses in ~30 seconds, roll all windows completely down, and disable all automatic window raising, except for auto-raising on LOCKING the car; if a physical window-UP switch is used, re-enable all window controls as they were
  • All physical switches should be monitored as inputs – this way the software knows when the current window position is unknown (for example, if you remove the key then open the door, the window should only go down a crack ONCE. If a window switch UP is pressed in-between, it would have to be rolled down a crack twice to be sure. If not, the software knows the window was already lowered partially once, would know the window’s position, and will not need to do it again at that point)
    Non-OEM Features I’ll add
  • Roll both windows up automatically above 100MPH (only if the top is up) to improve aerodynamics
  • Automatically roll the windows up when it gets dark out
  • Automatically roll the windows up when it gets below a given temperature
  • Automatically roll the windows up when it gets below a given temperature (after having opened partially due to reaching a high temperature – this is a separate temperature threshold than the one above)
  • Automatically roll the windows down ~.5 inches when it gets above a given temperature
  • Automatically roll the windows up when the car is locked
  • Automatically roll the windows down when you open the convertible top?
  • Automatically roll the windows up when you close the convertible top?
  • Automatically roll the windows down ~.5 inches when the car is unlocked (all windows), or when a door is opened — this makes it easier to close the door with less force
  • Automatically roll the windows up after closing a door
  • Automatically roll the windows down ~.5 inches when the key is removed from the ignition
  • If the windows were rolled down ~.5 inches, roll them up after 2 minutes if not already done, only for doors that are closed (avoids leaving the passenger window partially open after removing the key if there was no passenger; also avoids leaving windows ajar if the car is unlocked but no one opens a door or uses the ignition)
  • Upon 3 successive UNLOCK pulses in ~30 seconds, roll all windows completely down
  • Option to have a buzzer sound while the windows are being raised by the module, for safety reasons

Custom Module: Interior Lighting + Piggy-Back Module for Headlights/Fog Lights/High Beams

    Known Constraints/Requirements
  • Module is constantly powered, even when the car is off
  • All interior lights should fade on and fade off for comfort
  • Any fading effect must be handled by a slave controller, to avoid timing problems
    Non-OEM Features I’ll add
  • Interior lights should fade on and fade off
  • Add a light to the hood area
  • Add a light to the glove box
  • Add better lighting to the trunk area
  • Trunk light should fade out automatically after some time (as opposed to draining the battery like OEM)
  • Hood and glove box lights also fade out automatically after some time

Other Modules:

  • (Split Power Windows into “Processing” and “Dispatch” Modules)
  • Climate Control
  • Heated Seats
  • Convertible Top
  • Traction Control
  • Engine Monitoring
  • Speed-Sensitive Actions
  • Lighting (Interior)
  • Lighting (Exterior)
  • LCD/Cluster Messaging
  • Garage-Door Opener Module
  • Steering-Wheel Buttons Module