Reading a Variable Reluctance Sensor

Hi,

I was planning to read the rpm of my motorcycle with the arduino, I thought that the crank shaft sensor was a hall effect sensor and that I could use the square wave that was produced to calculate the rpm of the engine.

It turns out that the sensor is not a hall effect sensor, but a 2 wire Variable Reluctance sensor. This VR sensor produces a very small voltage, I measured around 250mV with my multimeter, I did read that the voltage increases as the speed of rotation increases, I have no idea what the maximum voltage would be, but I can't be sure that it would be under 5V when the engine is rotating at full speed. This sensor produces an AC signal.

Is there anyway to convert this signal into a square wave that I can use on an interrupt on the arduino?

Find where it goes into the ECU and tap into its conversion circuit. (Not a practical solution.)

Add another sensor, which you purchase with a datasheet and the knowledge for how to use it. (May also not be practical.)

Find the datasheet for this sensor. If you're lucky it will show you a recommended circuit for converting the signal into the square wave you desire.

The ECU does actually convert this signal and then send it to the clocks to display the rpm on the tachometer. This appears to be a voltage between 0 and 12V. I assumed this was a different voltage depending on the rpm, but it is making more sense that it is the VR sensor converted to a square wave.

I was only able to read it with a multi meter, it was reading around 6V, so it could indeed be a square wave.

I guess I need to borrow a scope to see if it is actually a square wave. Assuming it is a 12V square wave signal, what would be the best wave of converting it to a 5V square wave, but keeping the 12V signal unmodified?

you can use a voltage divider

or use a zeener diode

I have done a simulation of the zener circuit, and it looks like it will work.

How do I determine what power rating zener I need, and also what size of resistor to use? I am running any load with this 5V signal, just feeding it to an arduino interrupt pin.

The smaller the resistor the more you disturb the signal, so I'd go for a largish resistor, start with 10k. Big enough to most likely not disturb the signal you tap into; small enough to have a not too high an input impedance for the Arduino. If you find it does still disturb the signal, increase that value. Try 33k or 100k.

With a 10k resistor you have at most 0.7 mA of current (at 7V / 10k - the other 5V is on the zener) running through that circuit, and that's 3.5 mW of heat produced in the zener, and 4.9 mW for the resistor. So a standard 1/4W will do just fine.

I was able to read the square wave signal produced by the ECM, I was not getting a stable RPM reading and it seems I may have damaged the components in the ECM that produces the square wave while trying to measure the frequency with a multimeter, as it is now just producing around 1V instead of the 12v square wave.

The bike still runs, just doesn't display anything at all on the rev counter. So it looks like I'm going to have to read the VR sensor afterall, and then produce a 12V square wave to make the tach work again.

Does anyone have any ideas how to read a VR sensor with an arduino? I presume I will need some circuit to limit the peaks to 5V and the negative voltages to 0V.

According to Wikipedia, there are one-chip solutions.