The input is an analog signal generated by a reluctor ring that produces an infinite number of frequencies between 0Hz and 60Hz for stationary up to 90MPH. The display is an analog meter that has an infinite number of positions between 0MPH and 90MPH detected by eyeball and marked in 5MPH increments. I figure the frequency by dividing the pulse per mile by the time it takes to travel one mile in seconds. The results are whole numbers for every 9 MPH, the rest have decimal places. I’m focusing on two decimal places because that is what my bench signal generator puts out. The working model that I hooked up to my truck is very close to the trucks original speedometer, so I know it works well enough without the two decimal places. I’m just looking for ways to improve it. At 10mph the control signal is 5.56Hz and the pwm value is 85, but I have 5Hz, or 6Hz. Here are a few values: 9mph@5.00Hz, 10mph@5.56Hz, 11mph@6.11Hz, 12mph@6.67Hz, 13mph@7.22Hz. One decimal place would help.
Here is a picture of the 2000ppm signal and the 40 tooth reluctor signal, and a picture of the 128kppm. The Reluctor signal goes through a schmitt trigger to produce a nice square wave, It gets converted through a ratio adaptor to adjust for tire size and differential. The 128k signal looks like a modified square wave.
Here is a link to a video I made of the modified speedo next to a stock speedo.



