You're going to have extreme difficulty getting a DC motor to increment with precision.
I never doubted that your DC motor has enough power.At 1650 RPM = 27.5 RPS and with 400 PPR then there will be 11000 pulses per second or one every 91 microsecs. That does not leave a lot of time for the Arduino to do other stuff.Am I correct to assume that " geared down twice" means the motor is running at 3300 RPM or 55 RPS.My guess is that something on the motor shaft that produces one or two pulses per rev of the motor would be quite sufficient for speed control. And it would greatly reduce the computation load on the Arduino.And you did not say how far the tool advances for one turn of the motor....R
You're going to have extreme difficulty getting a DC motor to increment with precision. Even with some form of position sensor, the stopping time of the motor will depend upon drive voltage (PWM duty) (ie motor speed) and mechanical load so your control system would need to monitor electrical PWM duty (speed), electrical load (for mechanical load) and position. If the load is high the stopping time will be short and hence the position sensor input might relate closely to where you actually want to stop. With a light load the motor will tend to 'run on' and hence the position sensor input will have to give an 'early' command so the run on can be compensated for.If you want consistent increments then you need an incrementing motor (stepper motor)
Feeds are pretty slow in a mill, this is a position control system, not a speed control system.The target position changes with time, but that's immaterial, I think you need a position control loop,driving a current control loop perhaps - this allows the current control loop to abort the feed operationif the current exceeds a threshold, which will protect the leadscrew system from damage.The position control loop can implement soft limits of course, which a speed control loop couldn't
Suit yourself, it may not work very well though, snatching and jumping in speed with sudden load changes.The main function of the control loop is to compensate for load changes (I'm assuming large forces ineither direction can happen). Position control is eminently suited to do this, simple speed control is not.
I have got some optical switches to try out. How many pulses would you recommend for measuring 1650 rpm?