Fixing a dead Roomba 500/570 (No Lights)
I've had my Roomba 570 for almost two months. In that time, the little guy has been automatically vacuuming the house automatically everyday. A couple of weeks ago, I found him dead (no lights), in the morning, half way through a cleaning cycle. After picking him up he came back to life and then worked fine until two days ago.
Two days ago, I found my Roomba dead again, half way through a cleaning cycle. He did not respond to any button presses and none of the indicator lights would come on. Resetting him did not work, nor did removing and replacing his battery. I opened him up and gave him a thorough clean (inside and out) with my standard vacuum. He worked again for 15 minutes and then died whilst emitting a a slow and unrecognisable musical sequence. This happened several more times during the day. The Roomba would die, only to come back to life after he was disassembled and cleaned. The Roomba would run, sometimes for an hour but often for only 10-15 minutes at a time before dying. One of the last times before he died, he moved eratically and again, played a musical sequence in an almost slow motion and drunken fashion.
Eventually it seemed like my Robotic Vacuum was dead for good. No matter what I did, he would not respond to any button presses nor would he activate any indicator lights. The only thing I could think of that could cause this to happen would be a blown component or bad solder joint.
I disassembled him all the way down to his main circuit board. I carefully went over his entire circuit board, looking for bad solder joints or blown components. I took special care to examine the FETs that drive the motors as well as the voltage regulators. The FETs looked undamaged and the regulators appeared to work because many of digital components chips were getting a 4.2V-5V supply (regulated down the battery's 14.4V supply). Nothing, it seemed, would bring back my Roomba.
At 2am this morning, I pondered and wondered. What could possibly cause the Roomba to play music really slowly before it died? It was unlikely that a blown component or failed regulation circuit would cause that kind of failure.
I came up with a theory. The crystal oscillator used as a clock generator for the Roomba's microcontroller (an ARM ARM7TDMI) relies on a piezoelectric crystal which can fail from heat, physical shock or simply poor construction.
If the crystal oscillator on the Roomba main circuit board failed in such a way as to cause it to oscillate slower than its rated frequency then the Roomba's microcontroller (an ARM ARM7TDMI) would slow down accordingly. The Roomba's monitoring routines would notice some kind of problem (perhaps because of ms timings with other chips or interrupts) and try to play some said warning tones. The slower clock rate would cause those tones to be played with a lower fequency and longer duration.
I opened up the Roomba yet again and examined the offending 8Mhz crystal connected to the ARM processor. The solder joints looked fine and the component looked undamaged. Connecting the battery was still not activating the Roomba. I then applied physical pressure to the crystal, connected the battery and was greeted with a hello musical sequence from the Roomba! With some experimentation (fiddling with the crystal) I was able to get the Roomba to start playing music really slowly (almost on demand). I was pretty sure I had found the cause of my Roomba's early death.
The cause was hard to find but the fix was simple. I replaced the crystal on the board with a new 8Mhz crystal from jaycar. My Roomba now runs like a champ! The crystal is slower than the maximum 32MHz that the processor can take so it would probably be possible to overclock the Roomba (!) though I imagine many of the routines are dependent on the crystal being 8MHz.
From reading the iRobot forums, there are appears to be several other people who have had similar symptoms and at least one other person who has identical symptoms. I'm left to wonder if iRobot has unknowingly used a bad run of crystals...
Here are the pictures:
The top of the Roomba with its faceplate removed. The face plate can be removed carefully prying it off, starting from the edge closest to the dustbin. There are clips on the outer circumference as well as the inner circumference. The faceplate clips are quite tight so it will need careful but forceful tugs.
The Roomba's bottom cover needs to be removed. Start by removing the side brush and unscrewing the four large screws. Once the bottom cover is removed, the 10 small screws on the bumper bar should also be removed.
The Roomba with the bottom cover and battery removed.
The Robot with its top cover removed. The crystal is under the control panel which can be removed by unscrewing another four screws. Unscrewing the left and right wheels on the bottom of the roomba will make it easier to work with the Roomba. Make sure you work on a bench and not the carpet as static discharges may damage or destroy components
The robot with the top cover and control panel removed. The crystal is the small metallic, cylindrical component to the right of the "iRobot" logo on the bottom right quadrant of the circuit board.
A close up of the revision number and date as printed on the board.
A close up of the offending component. The component was glued to the circuit board during manufacturing. The ARM processor is in the same area but on the opposite side of the board.
Another view of the faulty crystal showing its legs and where it is soldered to the main board. The underside of the crystal has "8.000" engraved -- indicating that the crystal is an 8Mhz crystal.
The replacement crystal. The packaging is different (rectangular but that doesn't matter).
The new crystal soldered to the board. I applied some hot glue (not pictured) to make sure the crystal won't move around and short out other components.
I side shot of the new crystal. "8.000" means 8.000Mhz or 8MHz :-).