DIYPNP Documentation for 1987-1992 BMW 325 (v2 template)

NOTE: The DIYPNPB55-K Kit has been discontinued as of 8/30/18.

1987-1992 BMW 325 USDM 2.5L M20B25 MT

Test Vehicle Details:

The vehicle used for drawing up these application docs was a USDM 1987 BMW 325is 2.5L M20B25 with a manual transmission.  All factory electronics/ignition system components are in place and the factory wiring harness is in perfect condition.  The only exception to this are upgraded 19 LB high impedance fuel injectors, but for the purposes of this writeup this won’t effect you.  The base map we have provided (below) has been scaled for 14lb injectors.

Other notes:
Article details installing the DIYPNP with the AFM in place, as well as deleting the AFM for better intake airflow.

[ARCHIVED] What to buy:

1- DIYPNPB55-K Kit (DISCONTINUED)  This is the main DIYPNP Kit including the Bosch Motronic style 55-pin connector and all components, case, etc.

1- Tuning Cable  This is the same DB9 serial tuning cable used in other MegaSquirt applications.
1- USB Adapter  This is a DB9 serial to USB adapter.  The adapter is needed when the laptop or PC you are using does not have a built in DB9 serial port.
1- StimPower  This is a power supply that is normally sold to power a stimulator, but another use is it can be plugged directly into the DIYPNP mainboard to power the ECU directly, allowing you to load the base maps and do limited testing on the ECU prior to installing the ECU in your vehicle.  It is particularly nice to be able to flash the firmware and load your configuration on the bench instead of in the vehicle, and allows for less risk of damaging something on the vehicle due to incorrect settings.
1- PNP_IAT-A or PNP_IAT-S AFM/MAF Delete kit. This is a simple kit with an IAT sensor, wire pigtail, crimp pins to poke into the AFM Connector to run the signal back to the ECU, and a steel or aluminum bung (hence the -A and -S in the part numbers).  Perfect for getting rid of a restrictive AFM/MAF with your DIYPNP install.

What tools you’ll need: Soldering Iron, Solder, maybe some desoldering braid in case you make a mistake.  Small Philips screwdriver.  That’s about it.

Startup Maps

Base Configuration .msq files to help you get your car fired up safely and quickly.  Ready to tune.

We’re including these maps prior to showing you how to jumper your DIYPNP up.  There’s a reason for that.  The base ignition settings contained in these maps should be loaded on your DIYPNP before you power your car up (with the key) with the DIYPNP installed.  This is to prevent damage to your ignition system in case the default settings are not correct for your vehicle. Note that you can power up the DIYPNP off the vehicle on a power supply connected to the power jack next to the DB15 connector.

So here’s our recommendation — After you complete basic assembly, Power up your DIYPNP one of two ways.  Either plug a Stimulator Power Supply into the front panel of the box (the easiest way), or, start the Jumper Section below, but only connect the power and ground wires to start with.  That way you can plug the DIYPNP into your factory wiring harness and safely power it from your car.  The third option, if you’ve fully assembled and jumpered your DIYPNP already, is to unplug your coils from their power connectors before plugging the DIYPNP into your factory harness and powering it from there.

Then and only then, you can flash the firmware on your DIYPNP to the MS2/Extra firmware if you haven’t already, and then load the startup map provided to help you get your vehicle started.  We have scaled this down from the 19 LB injectors in our test car to the stock 14 LB injectors in the Engine Constants Req_Fuel calculator, located in the tuning software.

Click Here to Download Startup Maps for this Vehicle

Once the vehicle is started, you will need to use the MS2/Extra manuals to set the base timing and begin to tune the vehicle!  This is critical!  Do not drive an untuned vehicle!

DIYPNP Jumper Configuration

This section will cover the standard, basic jumper configuration required to get the vehicle running using your DIYPNP.

Vehicle information System Information
Market: USDM DIYPNP v1.1
Make: BMW
Model: 325is Code Version:
Year: 1987 MS2/Extra 2.1.1 beta
Engine: M20B25
Tranny: Manual
Edge Pin Connections Pull Ups Ignition Settings
Main Adapter Connection Resistance Voltage Spark Mode Toothed Wheel
IAT 44 ALED Trigger Angle 0
CLT 45 WLED Main/Return
TPS SIG 1K * GND* OPTO+ Oddfire Angle
VR IN + 47 IAC Use Cam Signal
VR IN – 48 High Current Drivers Ignition Input Capture Falling Edge
OPTO IN + Output Enabled To Pin Spark Output Going High (Inverted)
OPTO IN – S1 X 1 Number of Coils Single Coil
VR2 IN + S2 Dwell type Standard Dwell
IAC See note S3 Cranking Dwell 3
TACH OUT 6 S4 Cranking Advance 12
FUEL PUMP 3 Knock Circuit Maximum Dwell 2.5
INJ1 17 Enabled Sensor + Sensor – Maximum Spark Duration 1.0
INJ2 16 Trigger wheel arrangement Single with Missing
12V 37 I/O Circuits Trigger wheel teeth 60
12V Input From Out Pin To Purpose Missing teeth 2
12V Relay 1 Tooth #1 angle 88
VREF Relay 2 27 36 Main Relay Wheel speed Crank Wheel
5V Boost Second trigger active on
SG 10 Input 1 and every rotation of
SG 26 Input 2 Notes
GND 2 IAC Open – Pin 4
IAC Close – Pin 22Uses a 3 wire IAC driver circuit. See DIYPNPB55-K assembly guide for details on the IAC circuit with a V1.1 board. V1.5s have the circuit on the main board.

Connect TPS SIG to ground with a 1k resistor.

*** Leave D6 out of the relay #2 circuit used for the main relay if using a V1.1 board. V1.5s do not need this.

*** Use an 18k Ohm resistor in series with VR+ input.
Can be in jumper wire or proto area.GND14Misc Jumpers GND24 OnOff GND OPTO GND X GND BL/TH X IGN1     IGN2     WLED     ALED

Other Changes/Considerations

This section will cover changes that need to be made to the DIYPNP that go beyond the standard I/O jumpering, such as intake valve butterfly activation, on/off VVT activation, or other customizations to address the specific needs of a vehicle.

12V Switched Input / Main Relay / Fuel Pump Relay

This is the correct method to gain control over both the Main Relay and the Fuel Pump Relay, as well as give the DIYPNP a switched 12V power source.

(In this example we’ll be using Relay Circuit #2 for this purpose.  You could use Relay Circuit #1 with minor changes, or a proto area relay circuit if you wanted.)

  • Jumper from Connector Board Pin 27 to Relay 2 Input.

  • Jumper from Relay 2 Output to Connector Board Pin 36

  • On a V1.1 board, leave out or remove the D6 diode of the #2 relay circuit you are using here.  V1.5 versions do not need this diode removed.

  • Jumper from Connector Board Pin 3 to “Fuel Pump” on the Main Board.

  • Jumper from Connector Board Pin 37 to “12V” on the Main Board.

VR Sensor Input

To maintain a consistent tach signal to the DIYPNP an 18k Ohm resistor is needed in series with the VR+ input. There are two easy ways to accomplish this.

(1) Solder the resistor into the jumper wire from the Connector Board Pin 47 to “VR IN +” on the Main Board.


(2) Jumper into and out of the Proto Area. Please view the Proto Area documentation here. Use the jumper wire and solder between Connector Board Pin 47 and one of the outer holes in either Proto Area. Cross over the center section with the 18k Ohm resistor being sure to stay in the same Proto row. Finally jumper from the opposite outer Proto Area hole to “VR IN +” on the Main Board.

Note– the whole goal here is to make sure the VR Sensor + signal passes –through– this 18K resistor before going to the VR IN + hole on the mainboard.

TPS / Idle Air Control / Acceleration Enrichments

This model does not have a variable TPS, rather an on/off style. As a result the IAC type will need to be set to “PWM Warmup” as well as the standard Accel Enrichments (not Enhanced) used.

Until a variable TPS is added, TPS SIG from the Main Board will need to be jumpered to Ground with a 1k Ohm resistor to prevent the TPS signal from gradually floating higher and possibly accidentally triggering flood clear mode.

The addition of a variable TPS will allow the use of Closed Loop Idle Control as well as Enhanced Acceleration Enrichments as both of these features look to the TPS signal for feedback. If you add a variable TPS, pin 52 connects to pin 1 (brown / blue wire) on the factory TPS wiring, and pin 53 connects to pin 3 (brown / black wire). The brown center wire of the TPS connector is grounded. We are not aware of any off the shelf TPS that matches the connector and pinout, so you will need to do some wire splicing.

3 Wire ISC Valve

These cars have a 3 wire idle speed control valve. We’ve provided a driver for this on the adapter board (V1.1 kits) or on the main board (V1.5). See this page for details on the V1.1, and this page for details on the V1.5.

Sensor Calibration

  • Calibrate your CLT Sensor and IAT Sensor.

    • Again from TunerStudio, click ‘Tools > Calibrate Thermistor Tables’.  Make sure ‘Coolant Temperature Sensor’ is selected at the top.

      • For the CLT, use the following table with a bias resistor setting of 2490 ohms:

        Temperature    F / C Resistance In Ohms
        14 / -10 9500
        68 / 20 2500
        176 / 80 330
    • Enter these values, and click ‘Write to Controller’.

    • Now you’ll do the same for the IAT.  Select ‘Intake Temperature Sensor’ at the top in the drop down box.  (NOTE – If you are removing your MAF/AFM as a part of the DIYPNP installation process, do not recalibrate your IAT Sensor now)

      • For the IAT, use the following table with a bias resistor setting of 2490 ohms:

        Temperature    F / C Resistance In Ohms
        14 / -10 9500
        68 / 20 2500
        176 / 80 330
    • Enter these values, and click ‘Write to Controller’.  Now click Close to Exit.

  • Finally, you should calibrate your O2 Sensor to the ECU.  To do this, click ‘Tools > Calibrate AFR Table’.

    • Choose your O2 Sensor from the list.  Choose Narrowband for the stock O2 Sensor.  Or select your wideband and the proper configuration of said wideband from the drop-down list.

    • Click ‘Write to Controller’.  Once finished writing, click ‘Close’.

Deleting the AFM (optional)

The DIYPNP allows you to disconnect the Air Flow Meter. One thing to note however is when you remove the AFM, the stock IAT sensor comes out with it (the IAT sensor is inside the AFM).  You will therefore need to install a GM style intake air temperature sensor in your intake. This sensor connects to the first and forth pins on the IAT connector, as shown in the photos below. IAT sensors have no polarity, so it does not matter which wire you connect to which pin.

IAT Sensor:

Simply wire a GM Open Element IAT Sensor into your factory wiring harness at the AFM connector.  You can poke wires into the AFM connector, or you can cut and splice.  Wire one lead of the GM Sensor to the first wire at the AFM Connector, and the other lead of the GM Sensor to the fourth wire at the AFM Connector. There are 5 wire slots in the AFM connector, however only 4 have terminals installed.  The two outer terminals will be the ones used.



The wires should then be folded down over the edge of the AFM connector, and the whole assembly firmly and cleanly wrapped in high quality electrical tape sealing it up. 3M makes some good stuff that can handle the temps found in engine bays– read the specs.

The following dyno chart is from after fully tuning the engine with the AFM installed.  We then removed the AFM and added a smooth intake pipe and ran another test.  3 peak HP and 3 peak Ft/Lb torque were gained.  The DIYPNP with AFM is the solid line and the DIYPNP without the AFM is the dotted line.


More Dyno Playtime


Dotted lines are the stock ECU.  Solid lines are the DIYPNP without the AFM.  Peak gains were about 13ft lbs and about 15whp.  Under the curve though?  As much as 23ftlbs and 23whp was gained.

Turbo Time! (new!)

We were in for a surprise when this customer returned.  He has installed a T3 .63 A/R stage 3 turbine and 57 trim T04E compressor and was looking to make ~300 HP @ 15 PSI.  Another tuning session was in order!

The solid lines are the final pull with the turbo and the dotted lines are the final N/A pull from last time.  The purple line represents AFR, the tan line is manifold pressure, green is horsepower, and blue is torque.

We have updated our downloadable file with the new MSQ scaled for 42 LB / Hr fuel injectors.

Read the Manuals, You are Responsible for your own results!

This Application Doc is intended to assist you in your DIYPNP DIY EFI Installation.  We’ve done a fair amount of research, and actually tested on a similar vehicle to help ensure we can provide the most accurate information possible to make your installation go as smoothly as possible. That said, there are certain things you could do incorrectly, or certain things you could change up, that could cause you to run into issues.  Our tech support department will be glad to assist you working through any issues you might have, please contact us and give us that opportunity and we should be able to work things out for you.

Startup Maps included/attached to this Application Doc is intended only to help you get your engine started so that you can properly tune your engine.  The map will be setup properly for a stock vehicle matching the year/make/model/trim in the ‘Test Vehicle Details’ section at the top of this page.  If you have made any changes to your wiring, your ignition system, or other related components, this map may not be ideal for your vehicle.  You will then need to check and confirm the appropriate settings and properly configure your DIYPNP EMS for your altered vehicle.  Some maps offered may be more completely tuned that others, some may be just setup enough to get the car to fire up and idle with a little help from the throttle.  That’s when the tuning begins.

In short– We’ve provided you with the building blocks for an incredible EMS.  You are however responsible for the implementation and your own successes or lack thereof, but rest assured that we’re here for you and we’re going to do everything in our power to make sure your project is a success.

For more information on configuring and tuning your DIYPNP EMS, and for information on adding and tuning custom MS2/Extra features, read up at  In fact, everyone implementing this system should read that manual from front to back if you really want to harness the power of the DIYPNP EMS.


We’d love to hear your feedback on our DIYPNP Application Docs.  Click Here to offer feedback/suggestions!