I really wanted to come up with a design that used the strengths of the PSoC platform, it is often too temping to just use what you know, but I figure the point here is to show some of the things it can do better than other systems. There is plenty of existing code for controlling steppers from a micro controller using timers and interrupts, but I suspected that by using the programmable digital hardware I could offload much of that work, and make it operate more smoothly.
A coordinated move means that each axis does it's move in the same time so that the trajectory does not change, it looks more smooth and makes the path predictable. To do this you know that each axis has a maximum speed and a distance it has to move, so your limit is whichever axis will take the longest then you decide the move speeds of all other axes by slowing them down to also happen in that time. At that point a normal MCU would start a timer driven loop of some sort, then count out the time to switch each pin on and off.
Here is what I have right now, the first PWM controls the speed of the entire move. The counters are set to divide the frequency so that once their periods and compare values are set, the trajectory set, and the MCU doesn't have to do any more work on that. The speed of the PWM will determine the speed of the whole move. This makes it easier to do a coordinated ramp up as well (a method to allow the machine a little time to accelerate) because if the frequency ramps up to the full speed, levels out, then ramps down, it will be divided up into the speed of the respective moves automatically.
Motor 4 is driven by an unrelated PWM because that is the gripper, it doesn't need to move with the other axes and it will likely be an RC servo for this iteration, meaning I can set the pulse width of that module and the hand will stay in the same position until I change it.
I'm working on the code still, but this seems to accomplish my goal. The MCU sets each move in motion by setting the period and compare value on each counter, and setting the frequency on the PWM source, then just lets it fly until it gets the interrupt signaling that it has finished. The direction pins aren't shown here, it was getting very cluttered, but those would also just be set once (high or low) at the start of a move). There will also be a limit switch pin (or several) attached to an interrupt. I'm glad I had this contest to push me to really explore the PSoC platform, not that I'm done yet of course.
I'm still working on building the arm itself of course. Posts on that with pictures of the build, and including the software I'm writing will follow. By the way here's a picture of the wrist with the bearing integrated, just because it's a cool feeling when your 3D prints and off the shelf parts click together perfectly. The end of the arm will grip this bearing and the hand bolts on to the gear.