Making the Tach Work: 58X vs 24X, 3 PPR vs 2 PPR

Unfortunately for me, all the older LS based engines use a 24 tooth reluctor wheel to keep track of the crankshaft speed and position (LS3 uses 58x. Lucky you!). The Porsche engine uses a 58X reluctor, meaning I cannot just plug in the GM sensor into Porsche DME. The other option is to use the tach output signal directly from the ECU. Unless both engines have the same number of cylinders, this will not work without some modifications to the signal. In general this is what the output is for each engine layout:

  • 4 cylinder : 2 PPR (pulses per rotation)
  • 6 cylinder: 3 PPR
  • 8 cylinder : 4 PPR (in case of GM engines, it’s 2 PPR)

I did some research on this and came across a 944 thread where the OP changed out some resistors in the cluster to adjust for the signal difference. I thought that I could possibly use this approach myself, so I took apart the cluster. Things are much more complex in the 986 unit, the entire cluster is just one huge PCB and I really wouldn’t want to mess with it even if I knew what I was doing. The only easy option that’s left is to buy a converter from Summit Racing for about 90 USD, but I’m not made of money, so I wanted to tackle this myself.

I plugged in an Arduino board to the tach wire and sent a 3 PPR pulse signal for which I knew a corresponding RPM just to check if they would match. Indeed, the tach input is 3 PPR.  If you want to find the tach wire, it’s a purple/green, and you can access it at pin 9 on the OBD plug, pin 15 on the white cluster plug, or I believe pin 17 on DME plug #4.
The way to find the pulse length is pretty straightforward. Lets use 7000 RPM for example:

7000 RPM = 7000/60 RPS = 116.7 RPS (rotations per second)
There are three pulses per second at 50% duty cycle, which looks like a square wave. While there are 3 pulses (peaks), there are also 3 valleys, hence the total number of intervals is:
116.7RPS * 6 intervals/rotation = 700 intervals/s
interval = 1s/700intervals/s = 1.428 milliseconds or 1428 microseconds


Just to be clear, the cider box is not mine 🙂

I then took out the cluster and brought it home. You have to hook up all the term 30, term 31 pins on the black plug to positive terminal and term 15 to negative to supply power. The tach signal wire goes to pin 15 of the white plug. I used one Arduino to simulate 2 PPR signal and the second Arduino to modify the signal. Here is the code that I have so far; it seems to work Ok without any noticeable delay. The key is to keep the code as short as possible, or else your intervals will get all screwed up. The micros() function relies no interrupts to keep count, so when you call an ISR, the counter stops. Please let me know if you have a way to improve this or approach it from a different angle.