Author Topic: Misfire detection thoughts  (Read 10929 times)

Offline dnb

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 837
  • BHP: 19
Misfire detection thoughts
« on: February 14, 2010, 07:22:34 am »
Posted on the WIKI too, but thought it would reach a bigger audiance if it were posted here too.

Misfire detection

With the advent of the new firmwares (Currently using 1.1.66, but I have worked in this idea on and off since 1.1.4x) there is the possibility of creating a misfire detection algorithm.

I have made a first attempt at this in order to diagnose an intermittant low RPM misfire I seem to have on my test car.
The algorithm I devised uses the "rtestN" columns from the CSV datalogs.

How is this tooth timing data calculated?  And are there any funnies in it relating to missing teeth and sample timings that I might need to account for?  (Something for the developers)

This chart shows the standard deviation of the tooth times divided by RPM plotted against RPM.  We see that there is considerably more deviation when the RPM is low, implying either there could be a low RPM misfire OR the cam is wild and there is simply a lot of "noise" - charge robbing and the like causing weak combustion.  The spread of data at low RPM is to my mind more consistant with an intermittant misfire than simple bad cam behaviour.


Here we see a histogram of the standard deviation of the tooth timings.  Note that the distribution appears to be Weibull (possibly even Rayleigh) with a long tail of long tooth timings, implying that I can consider this tail to contain all the misfires.


This shows a datalog done on a dyno with a section of deliberate misfires.  The MAD_spark line shows my misfire detector being triggered.


Once I know how the tooth timing data is sampled, I will be able to work out some more useful stuff.

But before that happens, does anyone think I'm proceeding along sensible lines?  Or am I barking up the wrong tree again? ;)

Offline Kenny Watson

  • Jr. Member
  • **
  • Posts: 44
  • BHP: 3
Re: Misfire detection thoughts
« Reply #1 on: October 30, 2010, 01:07:49 am »
I think this is fairly sensible, a thread below reminded me to post in this thread.

I think the tolerance in terms of deviation might need to vary based on map - as the motor comes out of vaccuum we should expect things to smooth out almost regardless of rpm. Like you say unloaded the motor can lope quite a bit at idle. That said I suppose we want to detect lean misfires at cruise as well so maybe the % deviation needs a map vs rpm table. 

A thread a few threads down discusses a legacy feature vems had in 1.1.12 called "individual cylinder power" - I don't know what the algorithm here is but I know that Motronic 7+ monitors tooth acceleration as each piston goes past tdc on the opwer stroke. Comparing the tooth rate for maybe 3 or 4 teeth just after tdc after each combustion event for each cylinder probably gives a good relative measure of if a cylinder fired or not?

I guess what I'm saying is maybe some of the code is basically already written in the form of the individual cylinder power, and in fact the time-intensive bit of the code is done, perhaps this could be re-used and the powers be compared to each other on a cycle-by cycle basis.

If one cylinder is a certain % low from the others we flag a misfire?