So, Jane and I built the electronics for 30 of them, then I took them home and plugged one in for a test drive. It connected to the USB port, beautifully, then I go to turn up the juice. As soon as there is power going to the motor and it’s getting ready to turn, the USB connection is lost and resets/re-enumerates (Windows makes an unhappy dink-dunk…dunk-dink noise). Try another board, and the same thing happens. The first one built worked just fine (on Jane’s PS2), exact same design and components. What’s going on?
Long story short, scoping on the USB 3V regulator pin reveals a steady 3V when nothing’s happening, but an unstable mess when power is being switched to the motor. Small, almost negligible power dips on Vcc are translating to huge, yawning valleys of undervoltage on the regulator output. This on-chip regulator sucks. Beefing up the storage cap on Vusb does nothing, but another 10uF or so across the power rails seems to solve the problem. The USB specs recommend a power supply bypass cap of no more than 10uF, which is already present in the design, so increasing it further is not my first choice for a solution. Then I had a moment of smartness… I was using the front USB ports on my computer, since they were easily accessible, then I remembered those long, puny little ribbon cables that connect the front ports to the motherboard.
A quick look with the side cover off confirmed that pulling half an amp through one of those puny wires was asking for trouble. Combine that with the new longer, skinnier USB cables, and said trouble answers. Plugging into the rear ports made things much more reliable, as did adding a bit more capacitance across the power rails (reliable rear AND front port operation). But now I have to wonder, just how crappy does USB port wiring in the field come? The last thing I need is a pile of angry returns when people start plugging these things into their eMachines Celerytron craputers, with USB ports wired up using wet cat whiskers and good intentions by China’s most optimistic child labor, and wondering why their vibe doesn’t work…
So, final solution is to add the extra capacitance across Vcc, along with a big dire warning about crappy front ports. Yesterday I also made an enclosure-milling template, basically an aluminum bracket with cutouts in the appropriate spots. Sliding an enclosure into the left or right side exposes only the plastic that needs to be removed for the USB port or vibe connector, respectively. (Yeah, I’m supposed to have made a CNC milling machine for this by now, but haven’t gotten around to finishing it yet…) Now with all this hacking around for suboptimal ports, I need to throw together a long-term automated test script too.