I'm no VB expert but 50,000 times per second = 50kHz = 0.02mS = 20uS as in microseconds, not 20mS. Can you really get 20uS resolution with an ordinary VB-timer?1. Why did you choose CreateWaitableTimer approach for timing control? It appears that its nanosecond resolution is an overkill for this since this function needs to be called 50,000 times a second at most for a regular microstepper controller. So, we only need 20 ms resolution which is attainable with regular VB timer.