Hello all,
I have developed a ballbot, which is essentially a robot balancing on a ball using omni wheels.
Here's a fun picture:
https://drive.google.com/file/d/1-ln0lR6SKySvBJpT8dcFg4hfBq3J3Xl9/view
As you can see the robot is completely separated from the physical ground. What is worse is that the rubber on the wheels against the rubber ball build up a lot of static potential and, when touching the robot (as you tend to need to do when teaching a mechanical object to balance) there is a release of ESD.
The fun thing is that the only evidence of the ESD is that the IMU stops responding (yeah this is bad on a balancing robot). This phenomenon is consistent with both SPI and I2C sensors and trust me, I've been through a lot of them, until I narrowed it down to ESD.
You ask... how am I sure this is caused by ESD? Great question, because I noticed (by accident) that when the ball pressure got low, the metal on the bottom of the frame rubbed against the ball and the issue went away. The issue also never happens when the arduino is connected to a computer via USB.
For clarity, the ESD is running up the motors/encoders, which share a common ground to the speed controllers, which somehow is sending that up into the arduino. Actually the encoders are directly connected to the arduino (hmm). From there the sensors share the common arduino ground. God how I wish the arduino had an isolated ground circuit.
So here's what I need help with.
-
Yes, I AM going to implement a physical ground. Dangling a piece of metal ceiling fan chain through the center of the bot to touch the ball and grounding that to the motors will hopefully solve it.
-
I would really like (for reasons of scientific curiosity and as a backup plan) to figure out how to solve this without a physical ground.
Here's what I know:
- My latest IMU is SPI driven and through my logic analyzer I have determined that all signals just stop when the ESD event occurs.
- Curiously though, even the master clock stops, which I wouldn't have expected if only the IMU was effected
- The arduino is functioning and the loop is running after the ESD event. I proved this by hooking up a button and can control the built-in LED after the IMU stops.
So far I have capacitors across the VDD/GND on the SPI devices and 47r resistors on the lines. Which make no difference.
I am thinking of putting in a level shifter such as the TXB0104, but since the one pin that isn't buffered is the ground and i don't need to go up or down in voltage, I'm not exactly sure how this will help.
And, yes. I've spend days reading and searching for a solution on Google.
Thanks for any help or ideas.
Richard