rockwallaby:
To simply rely on some timer checking, say in the main loop, I say you run the risk of not getting sensor data input and or doing the calculations needed at the required time, especially if the program gets caught up being busy somewhere else at that point in time. It needs careful attention that that this section of code will run and I think using an interrupt just makes this process an independent process and therefor inherently more reliable and accurate data.
You don't need to run the scheduled functions on an interrupt. In fact if you did, you would run the risk that this interrupt interfered with the pulse counting.
All you need to do is schedule the code to read the pulse count and calculate the speed. The calculation is not time-critical and there is no need to carry it out in real time as long as it happens at about the desired frequency. The calculation is completely independent of the arrival of additional pulses, and of course you would code it to do the calculation based on when it actually ran, not when it was scheduled to be run.