Whenever one needs to meet certain criteria, it must be measurable and then specified up front. Here; low (?) Vibration , low (3) RPM, unknown (?) torque and unknown inertial load(?)
Stepper torque in a 200 step/Rev Stepper motor is specified with a holding torque when rated electrical power is applied.
When microstep interpolation is enabled, the full torque is not available at the intermediate pole positions and is inversely related to the number of microsteps/Rev.
Your controller permits 400 steps to 25k steps /rev so the pulse rate must be increased to achieve the same RPM. ( 1.2 kHz to 75kHz )
If the load torque is insignificant compared to the mass of the rotor, I might start with a step rate in 10kHz range like 9.6KHz with 1600 step/rev.
With a decent CNC bridge and GBRL code software, one can control the acceleration and velocity (RPM) precisely with built in constants for controlling the servo behavior via an Arduino USB serial port. Or use the uStepper controller you have with suitable software.(?)
If your case has any significant friction or inertial mass with a need changing speed rapidly, I would opt to use toothed belt & gear reduction as a method to reduce vibration from half-steps while also increasing torque rather than the loss of torque with ustep.
The other way to reduce vibration is adding inertial mass of a flywheel such as in a turntable.