After collecting additional information, the answer to your question "Can it be done with an Arduino Uno?" is:
Generally, no; in certain cases, yes.
Why is this?
An Arduino Uno runs at 16 MHz, executing most instructions in 62.5ns. Even if you control an output pin with carefully crafted assembly, you cannot get finer resolution.
Your tolerance is 5%, used for the shortest time value of 0.6µs this gives 5% * 0.6µs = 5% * 600ns = 30 ns. This is less than the half of the possible resolution.
As you found out, you can reach the required times with some deviation:
Required time |
# of clocks |
Achieved time |
Deviation circa |
0.6µs |
10 |
0.625µs |
+4% |
0.7µs |
11 |
0.6875µs |
-2% |
1.2µs |
19 |
1.1875µs |
-1% |
But this is quite coincidental, and I suspect the 5% to be hand-waved.
You might get away with hand-crafted assembly. Use nop
and out P, r
instructions, they take one clock each. If you like, you can alternatively use sbi P,b
and cbi P,b
, respectively, which take two clocks.
Additionally you require a power-up delay, but the Uno has no reference to the power-up. If you power the Uno together with the driver, please note that the start-up time of the Uno and its sketch is commonly much longer than 50µs.
This does not even take power rise time into account.
For a correctTM solution you need to invent another approach. Since there are many different ways to solve your task, which depend on more requirements we don't know, you are the one to research and check.