You are probably facing accumulated error and the limitations to how frequently the Clock Timer can actually fire. 20ms is probably as fast as you can get, given the time to run the code in the timer event and the overhead to start it up each cycle.
You can compensate for that, however, by calculating your X values not on how many Clock Timer cycles have fired, but instead on the elapsed Clock1.SysemTime value between when the start gun fired and the current Clock Timer cycle's calculation of Clock1.SystemTime.
That would give you as smooth a movement as your eye could see, if you don't push the Clock too hard.