Might be just an issue associated with the cheapo tachs. Your logic is sound. I'm not sure what is up. I bought 2 on Amazon that were junk at low rpms jumping all over the place but ok at higher speeds. At first I thought it was a sensor issue. But nothing I did fixed it. No problems I could see with a scope on the sensor signal. So I added more sensors and bang - it worked - rock solid - albeit reading 4x as high as it should with no way to correct. I returned them as they were useless to me.
Edit - tried them on various motor types. Made no difference. They just don't like low rpms.
FWIW, I have the same problem with a cheap optical digital laser tach.
That's an issue with cheapo tachs. My ELS threads anything from really coarse (more like spirals) threads to extremely fine threads with 1 PPR. RPM is averaged though; over a few seconds. Multiple pulses per rev will usually also average.
In fact you can usually set up a scope to not erase on each trigger. If you set it up to see the trigger edge and then the same edge after one revolution you'd be amazed at how much the second pulse varies from the first even with an AC driven belt drive system. I suspect the bumps on the belt and pulleys contribute to that.
Then go to a lathe like my South bend with a V belt from motor to half shaft and then the flat belt to the spindle and it's amazing that I can cut threads at all. But over time the overall average is stable.
I also added a feature to my ELS to investigate this sort of thing. There's now a 't' command that returns the last 16 values while the spindle was turning.
For the Gingery Lathe which has COTS zinc multi step pulleys. The values are the number of 50uS ticks between spindle index pulses. Yet the 282 RPM display is stable.
SpinRate 4252,
RPMAverage Table:,
4245, 4266, 4235, 4278, 4236, 4265, 4247, 4247, 4263, 4238, 4268, 4238, 4260, 4251, 4251, 4243, 282, 75,
Here's one from the South Bend lathe after it stopped.
SpinRate 0,
RPMAverage Table:,
1198, 1194, 1199, 1194, 1195, 1197, 1194, 1197, 1199, 1192, 1198, 1197, 1192, 1198, 1198, 1194, 1003, 10000,
It's better but there's still a 92..99 variance or 350uS. So 1199 is 1000.834 RPM while 1192 is 1006.71 RPM.
The way the hardware works there is no way there could be 350uS latency where the software somehow disables interrupts for that long and is late detecting the edge. So what we're really seeing is a general drift based on pulley diameters and belt shape that appears to be cyclic.