I am trying to design a circuit to measure the RPM of a small internal combustion engine.

The ignition on the engine is a simple magneto style ignition. These ignitions are switched off by grounding a wire. When not grounded, the wire carries a signal that pulses once per revolution from 0V to up to 270V. The pulse length is typically 5 micro seconds.

Because the engine drives a remote controlled vehicle, it is important to isolate the ignition from the rest of the electronics, to reduce RF noise. Thus, I was thinking about using an optocoupler to take the pulse as input, with a suitable resistor in series to limit the current. On the output side, I am thinking about connecting the source to a pull-down resistor, and the drain to +Vcc of the Arduino.

The idea is to turn the input pulse (the yellow curve in the below image) into a square wave, and that is why I am thinking about a MOSFET-based optocoupler. The source would be connected to an input pin on the Arduino, programmed to work as a pulse counter (I have that part already done). The square wave does not have to have the same width of the pulse. In fact, I would like the square wave to overlap the portion of the pulse above 50V.

So my question is: What is the best optocoupler to use, and what is the best way to apply the 50V threshold?

The yellow pulse is the one that is fed to the optocoupler. Note that here it is inverted

Figure 1: The yellow pulse is the one that is fed to the optocoupler. Note that here it is inverted

  • 1
    \$\begingroup\$ Are you sure that this signal has enough current capacity to drive an optocoupler? Put a 100k resistor to ground and measure again. \$\endgroup\$ – Mattman944 Dec 31 '20 at 13:45
  • 1
    \$\begingroup\$ You could use a small “pulse” transformer to step down the voltage and impedance with isolation then characterize the pulse after that for converting a logic level with a sufficiently high inductance for the 80kHz band region \$\endgroup\$ – Tony Stewart EE75 Dec 31 '20 at 14:41

I suspect that the signal is very weak and can't drive much of a load. If it can drive 100k, something like this should work. I plain NPN optocoupler should work, I don't see an advantage here to a MOSFET Opto.

If the 50 V threshold is important, this won't be accurate. If you are only building a few, you could hand-tune it. If a 50 V threshold is important, you should consider a pulse transformer like Tony recommended.


simulate this circuit – Schematic created using CircuitLab

  • \$\begingroup\$ I ran the engine with a 47k resistor to ground. The scope gave essentially the same reading, so I am confident that it can drive the opto. As far as -50V threshold, the rest of the waveform is between +10V and -10V, so it does not have to be very precise. I will give it a try, but for now I will mark it as the answer. \$\endgroup\$ – user3646557 Dec 31 '20 at 21:25
  • \$\begingroup\$ @user3646557 - if any noise is causing extra pulses, you could reduce the sensitivity by placing a zener in series with R1. 10 or 20V will help. \$\endgroup\$ – Mattman944 Dec 31 '20 at 21:36
  • \$\begingroup\$ I actually built the circuit and it worked. One question, though, what is the purpose of the 22pF capacitor in parallel to the LED in the optocoupler? \$\endgroup\$ – user3646557 Apr 9 at 17:13
  • \$\begingroup\$ R1 and C1 form a filter to reduce false triggering. For pulses it is easier to think of the time constant of the filter. This time constant is 2.2 uS (100k * 22pF). So, in rough terms, a 5 uS pulse will mostly get through, and 2 uS and less will be attenuated. \$\endgroup\$ – Mattman944 Apr 9 at 19:50

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.