This page is dedicated to Low-Z injector tuning, at BMW M30B34 turbo engine.

Injectors are the stock ones for this engine: Bosch part no. 0 280 150 200, maybe 270-300 cc/min @3/3.5bars (different sources say different values). R=~3 Ohms.

My previous calculation was for required fuel:

Req_fuel = 6.49 * (D / N / I) = 6.49 * (3450 / 6/ 300 cc/min) = 12.44 ms = 0x7C

Which seems to be on the high side. (So the injectors are not 'so' big for this displacement).

But engine was flooded with those values, finally I ended up with a Req_fuel of 5ms, and still I've got VE values of 20-30 (decimal) near idle. Idle is ~1ms pw.

I guess something is wrong with injector settings. I worked with the following settings:




2006.01.22 Installed powerflyback, and everything changed a lot!

I had to raise VE table to 3-4x values, which are close to previous calculations. I guess it's because of much more quick injector closing time. After that, we were able to tune the car in an hour. Thanks, powerflyback! :)

The bad news is, after that we've killed some (10A) fuses (powering the injectors). Changed it two times, but had no chance to find reasons there (-8 degrees C, some snow, hard wind and dark). Finally we felt burned smell from the GenBoard... Fortunately the car almost brought us home before (no point to tow on the front).

New details: Flyback burned onboard:


D100 should have been removed when installing GenBoard/Manual/PowerFlyback. Thanx for the report, and sorry for the inconvenience.

GenBoard/Manual/PowerFlyback add-on looks fine however. Every fuse-kill (and finally, board-kill) happened at relatively high RPM with high loads. Injector settings were similar to the pic above.

Luckily, when D100 shorts it only kills fuse (injector fuse), other components should be safe.


I guess a PowerFlyback? couldn't be a bad choice here.

If you're interested [here's] a datalog with starting, badly oscillating idle, and cruising home with unmapped car, etc.

For analysis I suggest my actual favorite: [MegaLogViewer] the first program which knows everything I wanted, not buggy (just a bit slow -java)

-OK, i feel totally lost. What happens if I change my divider to 2? A: with divider = 1, every trigger event results in a injector pulse, but if you wire up the injectors in pairs, you get all injectors opening twice per full engine cycle, which makes idle harder to tune and other negative effects. In that case, configuring divider = 2, injectors will only fire every second trigger event, and get the injectors to fire only once (per injector) for every full engine cycle (720 degrees on 4-stroke). //Emil

If (injpwm14 + multfact(VBatt) * injpwm6 ) > 100% (at certain - low enough - VBatt) than it is railed at 100% (since that is the limit of the duty)