A couple of notes:
- A stable system response is achievable with only a P controller in all velocity control situations. You alluded to this, but I don’t think a lot of people realize that you never need D for velocity control, so I’ll reiterate the point. This is because D is controlling acceleration, which is effectively a system input (acceleration is proportional to voltage, which is your actual input.)
- You should absolutely use feedforward, but using just a kF term (which adds an output proportional to the setpoint) is not always a good idea if you’re going to vary the speed. Oblarg’s drive characterization paper explains this in depth, but the gist is that you can never fit a line onto your velocity vs. voltage graph just by specifying the slope of a line (kF) unless you also specify the y-intercept (kS), unless your system requires 0 volts to break all the friction in the mechanism.
- Do not “tune” feedforward by hand. Instead, use the frc-characterization simple motor tool. It will find feedforward constants and it will use a LQR to automatically give you a P gain as well.