Ok, so that’s it, I pushed the files to github if you want to have a look : https://github.com/Xevel/usb2ax_pro
The PCBs look like this :
And there is a good chance that on your screen it looks much bigger than it really is (32x44mm).
The top PCB, on the right, has 6 3-pin TTL Dynamixel connectors, two pairs of which are connected together.
Each of the 4 Dxl lines has its own level shifter (the MCU runs at 3V3), and protection against ESD and over-current. Like on the USB2AX, shorting DATA to +12V will not harm the MCU or the computer. It is however a different protection that I designed around a JFET, and it should be comfortable protecting from up to +/- 25V while allowing 3Mbps communication the rest of the time. The protection used in the USB2AX had problems going too fast. We’ll see how it works out in the field.
It also has a big screw terminal (rated 16A) and a big MOSFET (DMP4015SK3-13) piloted by the MCU that controls power from the screw terminal. This power goes only to the servos, the MCU itself is powered from USB.
On the Main board are the MCU (an ATSAM3U1CA-AU, 96MHz, 64K FLASH with integrated USB2.0 High-Speed PHY, QFP-100) with its crystal, Micro USB connector, MPU-6050 IMU, 32KB of EEPROM, 3 leds and a button.
There are some gpios broken out on pads on the bottom but they are only intended for debugging (the 7 thin and wide pads on the bottom right of the pic) and might disapear in following versions to make the back of the PCB completely isolated. There is also a SWD + SWO port for programming/debugging.
There is also a voltage divider to measure voltage on the Dxl bus before the MOSFET (so you can monitor voltage before turning the servos on). You could also use that to see when power is lost and react accordingly (this way the robot would not jump when power returns).
Mechanical
The boards are connected by a standard 2x10-pins 1.27mm connector that keeps the PCBs 6mm from each others. The rest of the mechanical connection between the two will be done by 2 or 3 threaded nylon standofs with M3 nylon screws both on top and bottom, and small 3D printed part that will clamp on the USB cable to provide additional strain relief.
To attach the product to anything, you can remove any screw and replace it by a longer one that would also go through the plate you want to attach it to.
The USB cable can be changed at will (the space is big enough to accommodate any type of cable I have seen, even the giant 3m double-shielded micro USB cables, that have connectors 1-2mm bigger in any direction than regular ones) to make it as long or short as needed.
If I go to production with this, I might have a custom cable 30cm long with 90° USB connectors on the PC side, so that plugging it in a RPi would not require an additional 5cm of additional space (I’m sure in the head of a robot it can be important…).
Things to improve
One thing I’m not too happy about is that right now there is no reverse-polarity protection on the power input. The thing is that it cost a lot to do it without sacrificing efficiency (these low Rds_on MOSFETs can cost 1€/pc) and and they take a lot of board space.
The name is not very inspired either.
Lastly, I would have loved to add a second screw terminal and circuitry for hot-swapping power source, but I guess this will have to go on another board. It makes sense to make the hot-swap board as close as possible to the power sources anyway.
In terms of user feedback and interaction, one button and 3 leds might not be enough for everybody.
I added the EEPROM as a way to store motion files and poses, but I do not intend this board to be used as a standalone like the boards made by Robotis (CM-730, OpenCM9.04) or Trossen Robotics (various Arbotix Robocontrollers).
I was more thinking about it as a “start” button tat the host computer could poll.
There, I’m interested in any feedback. The software part should be the really fun part here, if I keep motivated for long enough to achieve all I have in mind. In any case, this board should have enough power to run everything I talked about in this thread.