Honda VSS Analysis

The newer Honda electronic VSS units have some potted electronics that appear to use some sort of Hall effect or magnetic sensor to generate a 0-12V square wave.  To characterize the electronic VSS, I set up a JDM P30 ECU on a bench with a well regulated bench 12V supply.  I wired an electronic VSS to power and ground and connected the VSS signal to the ECU via an ammeter and also put a voltmeter and a scope across VSS and ground.

I learned that, when the VSS signal is at about 12V, there is virtually no current in the VSS circuit.  When the VSS signal is near 0V, approximately 2mA of current flows from the ECU to the VSS unit.  When I spun the VSS with an electric drill, I got a nice 0-12V square wave on the scope.

The old fashioned VSS uses a small magnetically operated switch that opens and shorts as the speedometer magnet spins past it.  One side of the magnetic switch is grounded while the other side is run to the OBD1 ECU.  OBD0 ECUs are designed to look for this grounding switch as opposed to OBD1 ECUs look for a 0-12V square wave.

It looked to me like a pull up resistor of the right size wired between the OBD0 VSS signal and a 12V source should supply the OBD1 ECU with a similar signal as the electronic VSS. 

Before I had characterized the electronic VSS, I tried large and subsequently smaller pull up resistors to see if the ECU would throw VSS codes.  Larger resistances resulted on more frequent VSS codes being thrown while driving, usually while downshifting.

To calculate the required pull up resistance from our characterization of the electronic tach, we use Ohm’s law, V=IR or R=V/I.  R=12/0.002=6000 ohms.  I setup an old instrument cluster from an '88 CRX with a 6K pull up resistor, and we got a nearly identical set of measurements:

So far the 6K Ohm pull up resistor is working well, not throwing VSS codes.


Here's the original report I did:

Once we decided to pass the smog ref with our B16A swap into our ’88 CRX DX, we put in an OBD0-OBD1 conversion harness and a P30 ECU. After we got the car running and started driving it, it started throwing code 17, which is a VSS error code. The wiring was ok and the VSS magnetic switch was working fine. After doing a little research on the internet, we learned about the difference between OBD0 and OBD1 VSSs.

Some people call the OBD1 VSS an “electronic” VSS, mounted on the transmission where the speedometer cable goes into the transmission on older cars.. It has three terminals, one for IG1 power (+12V), one for ground, and one for the sensor output to the ECU. We tested a unit we bought at the boneyard for $20, and learned that it is, in fact some kind of electronic module. It must be powered to work, and draws less current than our DMM could detect. The sensor signal would be at +12V or 0V depending on the position of the speedometer gear position.

The OBD0 VSS is a magnetic switch that closes whenever the speedometer magnets spin close to it. One side of the switch is grounded and the other goes to the OBD0 ECU.

We suspected that the P30 OBD1 ECU was expecting a signal that pulsed from 0V to +12V and that all we were doing was providing either ground or an open circuit. We decided that a pull-up resistor between +12V and the sensor signal might cause the OBD1 ECU to think it was seeing an electronic VSS. The question was, “What size resistor would we need?” We could not find any information on the internet about the input characteristics of the P30 ECU, so we could not calculate the optimum resistor value.

We decided to hook a pair of wires into the CRX instrument cluster in order to start with very large resistors, and test each value to see if we could gradually reduce the resistance till we found the largest value that would work. The reason for this is that large resistors allow less current through, reducing the chance we would burn out the VSS input to our ECU. We decided to start with a 680K ohm resistor, which, from Ohm’s Law we know will limit the current to about 17 micro amps, which would be extremely unlikely to hurt the ECU. We planned to work our way down from there.

It turned out that it was very easy to hook the wires into the CRX instrument cluster. Screws are used to connect the cluster printed circuit. The VSS sensor signal is the bottom right screw of the 4 speedometer screws when viewed from the back. The IG2 (+12V) signal was available on the bottom screw of the fuel gauge. We crimped screw lugs onto one end of each wire and used clip leads to test our resistors.

When we ran our first test with the 680K Ohm resistor, it worked great. So we went back to the garage, and soldered a short wire to each side of the resistor. Covered it with a piece of shrink tubing, crimped screw lugs onto the ends and screwed the resistor to the back of the instrument cluster. We put it all back together and it works fine.  (Late update: use a 6K ohm resistor as described above.) Check out the pictures.

Testing the resistor.

Making the resistor work.

The finished product. The VSS screw on the left is connected to the trace that goes to the VSS input to the ECU.  The VSS in the speedometer is a magnetic switch that grounds the VSS signal to the screw to the left when it is closed.  We put 12V on the other end of the pullup resistor by attaching it to the 12V screw for the fuel gauge. Make sure you don't overtighten that screw or you will ruin your fuel gauge.

Of course, if you do the same, you do so at your own risk. Without knowing the input characteristics, we are only guessing that the up to 17 micro amps the pull-up resistor can provide won’t hurt the ECU.