Mike, thanks for that. I tried this out over last two evenings here, and it's not really matching up with real world results in any way that makes sense :-P
As an example, I have one joint which is set to a max speed of 35000 and acceleration of 2500. To move it 90° takes 22500 steps, and takes around 10-15 seconds (I can time it exactly, working from memory here after a long night of trying different settings).
When I work the numbers through on paper I get:
1. if ((max * max / accel) > steps) => if ((35000 * 35000 / 2500) > 22500) => if ((490,000) > 22500) => TRUE
2. t = 2 * max/accel => 2 * 14 => 28 seconds of acceleration
3. steps -= (max * max / accel) => 22500 -= (35000 * (35000/2500)) => 22500 -= (35000 * (14)) => 22500 -= 490,000 => -467500 steps remaining (!!)
That's a nonsense result, so at that point I wondered if the greater-than in step 1 should be a less-than. If I plugged that in, I got:
t = sqrt(steps / accel)); => t = sqrt(22500/2500) => t = sqrt(9) => 3 seconds
If it would help to measure exact run times for any specific configurations of step rate/steps/accel I have a sketch that does that and could post results.
FWIW the steps seem very clean and well-timed and take the same time every time.
Thanks again!