Not (strictly) hardware related, but I do have some experience with driving stepper motors using step and direction from a RPi. This looks like a very cool project, and I hope that I can save you some headache (and money, and time)!
There be dragons here!!!
First, some supporting material:
YouTube - First Video Showing Stepper Running
YouTube - Second Video Showing Position Error Testing
GitHub of Stepper Driver Code using RTLinux
I was doing this project for a friend who works at a university and needed a lab testing machine for tissue samples. He wanted to use Linux as there would be onboard data collection using scientific Python, etc.
Since I make industrial boards for the RPi and do motion for my day job, I thought this would be a slam dunk.
Short story - no.
I knew the project was aggressive (direct driving RPi GPIOs to 40+ kHz, cross-compiling and using Real Time Linux, writing a motion controller from scratch, etc), but ultimately, I had to pivot and use a standalone controller from one of the companies I represent (I communicate with it over Modbus/TCP).
Even using Real Time Linux (don't even try without it), there is still 10-15us of jitter in the step output. After running exhaustive tests, I found that this was contributing to a cumulative position lag that was non-linear. Long story short, if you are driving your outputs at anything over 1 kHz, you are going to have position lag issues that will cause repeatability issues in the material that is being cut. Real Time Linux is good, but it is still an OS, and even in "real time" mode, it is not hard realtime like what you get out of a dedicated uC.
The better thing to do would be to put an intermediary uC in between the Pi and your stepper drivers. Program the motion controller into the uC using interrupts to form your square wave, and then command it from your host controller, the RPi, over serial.
Feel free to ask me questions! Also, feel free to borrow any of the stepper controller code in my Github. It is not complete, but it does work (I just stopped once I found out the direct drive RPi solution was a dead end) enough to show you the math behind driving steppers to execute a trapezoidal move. The code isn't tested, so I am sure there are bugs, but at least it is a starting point.
You have a very cool project on your hands! Good luck, and let me know if I can help.