Hello,
I bought a '93 Honda Civic 1.6 125PS recently. The car had many issues, most of them fixed now. The most problematic was the speedometer issue, where the speedo would not work at all and the CEL code for speedometer was being generated by ECU. At first I thought that the problem lies in the speed sensor, so I bought a cheap replacement for around 10 USD. It turned out that the old VSS was ok and the real problem is inside the gearbox.
The "knob" that stands out from gearbox, on which the VSS is mounted, would not turn at all when the vehicle was moving. As I didn't want to unmount the gearbox and disassemble it (I don't know if that's even possible with this gearbox), I decided to design a VSS of my own using a GPS receiver.
The idea was to catch a GPS or GNSS signal with a GPS module connected to a microcontroller, get the ground velocity and convert it to digital signal resembling the output of an original VSS when the car is moving. The original VSS shorts the 5V pin of the 3-pin connector to GND when the "knob" from gearbox is rotating, so the microcontroller output was alternating betweend GND and high impedance.
The code below converts the kilometers per hour (value obtained from GPS module's $GPVTG frame) to a specific frequency that matches the speedometer km/h scale:
Code:
double frequency = (double)mVelocityAndHeading.mKilometersPerH/1.41; //initial testing showed that 100 impulses per second from VSS showed about 141 km/h on speedo
if (frequency > 0) //prevent divide by 0 situation and values below 0
{
frequency = (10000/frequency); //10000 equals to 10 kHz generated by microcontoller - this value is divided to achieve wanted impulses per second
Clock_2_SetDivider((uint32_t)frequency);
Clock_2_Enable();
}
else Clock_2_Disable(); //set the output of microcontroller to GND - speedo will show 0
Actually, the presented code fragment (and probably the rest of the code) has flaws as it was developed in order to test the concept, but eventually I didn't modify it up to this day, as the solution works. The biggest flaw is that the speedo jumps a little sometimes, as if the MCU couldn't handle all the GPS data in time (I had to change the GPS module output rate from 1 Hz to 10 Hz in order to have smaller speed changes - at 1 Hz in the first gear the speedo needle would jump 20 kilometers per hour at a time under hard acceleration).
Video shows the device. The white wire goes into the engine bay and is connected to the 3-pin VSS connector.
https://www.youtube.com/watch?v=AC2UTF3v-a8&feature=youtu.beCurrently I don't have a video that would show the speedo, as I have another problem with the ECU (actually the device presented solved the VSS CEL code but now the VTEC solenoid pops after reaching 4800 RPMs). The attachment shows how it's mounted (actually it isn't, it hangs on the wires
. The ECU is visible as i'm trying to solve the VTEC solenoid problem at the moment...).
Currently it's a temporary solution. I will probably develop another device in my spare time (GPS antenna mounted on the roof, better GPS module with 20 Hz refresh rate). I can post more information if anybody is interested (more photos, more code, schematic etc.).