Hi Darren, it's been a long time since I worked on the code for my Coil Winding machine. So if I ask stupid questions, it's definitely me!
Are you actually getting 6 microseconds, or did you mean milliseconds? 6 uS is very quick, 6mS is more typical of a
VB timer control.
I remember distinctly attempting to use the timer control, which for me was a total bust. Ultimately, to control speed, I went with iterative loops which did nothing except burn CPU time between output writes to the port. The BIG problem with that is there is no simple way, when moved to another PC, to obtain exactly the same speeds, it was a matter of trial and error. Further, the operating system would hang when in the loops. My program was never designed for advanced motion control, so I did not need to interpret G-code or do anything beyond electronic gearing, which it did very nicely, thus I did not have to really push the envelope in the code development phase.
I remember one of the hardest parts of my code was in creating a smooth and gentle ramping, as the ultra-fine copper wire would break if I simply turned the motors on with a sudden pulse stream.
I'm using Flashcut as a CNC control, and while Window's-based, they use a chip in what they call a signal generator, and feed the signal generator a serial stream of data. This avoids all of the horrible timing issues inherent in Window's software.
I would recomend that you have distinct functions which can be called, with each call producing one step of the motor. Thus you can insert that call into a loop, with whatever needed delay as a part of the loop.
Sorry I couldn't be more helpful; I don't think there is any kind of magic wand one can use to avoid Windows timing problems.