Thanks Liam
I would also like to recommend the Pololu range of Simple Motor Controllers. (No affiliation)
They have a variety of settings that can be set with their application via USB or directly in code. The settings I find particularly useful:
Acceleration and deceleration rates
Maximum limiting current
Temperature control
And especially the ability to automatically stop the motor if no command is received within a configurable time period. This is invaluable if your application crashes for what ever reason and you don’t want the robot wondering off out of control.