Friday, October 16, 2009

Repairing Roomba charging circuit

Sometime ago, a colleague told me that she bought a Roomba 405 but the battery seems dead, unable to charge. Being the curious me and how I like to fix things, I made a deal that if I could fix it, I can use it to clean my house for 1 month :-)
So, this post is a sharing and also a kind of documentation for myself on how I got the Roomba working again.

Initial diagnosis....

So, the next day she brought the Roomba to me in office and I took it home.

First step, I tried to charge it by connecting the AC-DC adapter to the robot. According to the user manual, it seems charging. The amber LED is blinking slowly. A few hours later, I detached the power and try to see if it moves by pressing the "Clean" button. Nope, it is dead as a log. So, next step, I took my multimeter, removed the battery and measured the battery terminal voltage. Huh, it reads approx 0.6V? Now, I gotta monitor the voltages while charging to figure out what's wrong. I attached 2 thin wires to the terminals, replaced the battery into Roomba and attached the charging adapter again. It still reads O.6V! So, then I could say that it is somehow not charging properly.

Next, I gotta verify that the battery is still working by manually charging it. The label on the battery shows 14.4V NiCd battery with 1800mAH. A NiCd battery with 14.4V rated voltage means that it is 12 x 1.2V NiCd cells. So, the fully charged voltage should be 12 x 1.45V = 17.4V.

Since the Roomba's DC adapter outputs 0.75A at 22V and NiCd batteries are relatively easily to charge, I can just make a very simple charging by directly connecting the adapter's 22V output to the battery via a 5ohm resistor as a current limiting resistor. To be safe, I also will keep an eye on the charging voltage and current to ensure they are within reasonable safety limits. Once I applied power, I can see that the battery voltage steady goes up. This should mean that battery seems to be still chargeable. The charging current is approx. 700 mA; seems the the DC adapter has internal current limiter which is a good news. Since the battery capacity is 1800 mAH, it should take approx 2-3 hours to fully charge it, but I have to be careful not to overcharge and damage the internal chemistry.

After about 30 mins and the battery voltage got up to 16V, impatient to wait till fully charged, I poped the battery back into the Roomba and press the "Clean" button. The time the little robot roars to life! It goes around the room while cleaning the floor for about 10 mins before it stops with a blinking red LED and a 4 tone melody that indicates low battery. Alright, now I can confirm that the battery is OK, but Roomba is just not charging it.

Why did it broke?
To fix it, I had to find out why there is no charging voltage applied to the batteries although the LED indicates it is charging. I did a search on google and eventually I came to this forum: http://www.robotreviews.com/chat/viewtopic.php?t=3909&highlight=mosfet#p20787
I also found a reverse-engineered schematic at http://mysite.verizon.net/gsplews/misc-pix/charging_n_control_schema.GIF
The problem described seem very similar, so I disassembled the roomba. I probed the MOSFET, U2 and it seems really dead. There are no voltage at the drain although the voltage at source and gate seems normal.

To replace the STN3PF06 P-channel power MOSFET, I found that RS-Online sells them for RM2.58 each and minimum order quantity is 10 but I don't need 10. Even if I replace all MOSFETs in the charging circuit, I'll only need 4. Also, it seems to be a fairly common issue that will probably reoccur if the batteries are fully depleted, causing the initial charge current to be too high that it killed the MOSFET.

Solution...
Alternatively, I dug around my toolbox and found that I still have a few LM317. Then, I got an idea that if I could bypass the original charging circuit to provide constant current to the battery positive terminal, the Roomba will still be able to indicate charging status but the actual charging current is supplied from the LM317-based constant current charger as shown below on my literally back-of-envelop design.



Prototyping
First, I did a prototype on breadboard to the circuit to verify that it works. From the LM317 datasheet, the resistor value should be:
R = Vref / Iout = 1.25 V / 180 mA = 6.94 ohms.

However, I used the two 12ohm resistor parallel was used because those are the resistors in my toolbox that gives the closes value. The output current is still 1.25V / 6 ohms = 208.3 mA which is slightly more than 0.1C charging rate for the 1800 mAH battery. So, I added the additional 1Kohm resistor and LED to the output to siphon off about 15 to 18 mA current depending on the battery's charging voltage. After successfully charging the battery which this constant current regulator (which takes approx. 10 hours), I decided to go ahead and put it in the Roomba.

Building the circuit
I cut a small piece of stripboard and arranged the components as tightly as possible. Then I took out my old solder gun and solder them together. This is what I got... no too bad considering my soldering skills are long expired since my college days :-p


Robot surgery...
Below is a few pictures I took as I was disassembling the Roomba.


Battery, brushes and dust container removed


Top cover removed

From the picture above, you can see the battery connector is at the top right. However, due to limited space, I decided to place the circuit on the top left side.

Next, I have to connect the circuit to the original wiring. I had to temporary remove the battery and power connector solder on the wire as shown below.



Yellow is the regulator output, red connects to the positive supply and black connects to ground.


Next, I fastened the board on the Roomba using the screw hole on the LM317 to a screw hole just beside the battery compartment. The weird silver coloured strip is actually a few pieces of kitchen aluminium foil folded together to be the regulator's heatsink. This is because from earlier experiment and also from the datasheet, the power dissipation has exceed the limit of using it without heatsink. According to the datasheet, the power dissipation when is battery voltage low should be approximately:
PD= (Vout - Vin) Iout = (22 V- 15 V) 0.208 A = 1.46 W

Maximum allowable temperature rise, TR(MAX):where TJ(MAX) is max junction temperature from datasheet and TA(MAX) max ambient temperature :
TR(MAX) = TJ(MAX) - TA(MAX) = 125 - 32 = 93°C

Thermal Resistance:
θJA = (TR(MAX) / PD) = 93 / 1.46 = 63.6 °C/W

For the TO220 package, the junction to ambient thermal resistance without heatsink is 50 °C/W. So, I needed a heatsink to reduce the thermal resistance.
Since we have only exceed the thermal resistance not much, a simple heatsink should work.

Also from thermometer, without heatsink, the temperature can go dangerously above 80°C. With the heatsink added, temperature stabilizes at around 50 - 60°C throughout the charging.

Finally, below is the picture of the repair Roomba before the housing is assembled again.




I have done a few rounds of change and clean cycle. So far, it seems good. It takes approx. 8 - 12 hours to charge until the top LED turns green.

I have just return the Roomba to the owner a few days ago and I am starting to miss it because now I have to clean the floors manually again :-(

This whole experience made to so tempted to buy a Roomba myself :-D

7 comments:

val said...

How much would you charge to make a charging circuit for my broken roomba that I could install. My problem is identical to this!!

YewMing said...

Hi val, I won't be able to make this for you unless you are in Malaysia, but it will cost a dollar or 2 of component and someone with basic soldering skills to make one.

Unknown said...

Hi fusion! I'm super glad this article is still up... and thank you for describing your process! It's hard to find information on older models.
I have a question though. My roomba is in the exact same situation as the one you described...
When you used the default charger to manually charge the battery, how did oyu connect the 5ohm resistor (in series with the positive?)

And lastly, the new circuit you designed to replace the U2 and U4 mosfets, how does it integrate properly with the motherboard (hard to tell from the envelope diagram).

Thanks!

YewMing said...

hi ryan,

i've almost forgotten most of the details until i read the article again!

anyway, for the manual direct changing, yes... i've connected the 5ohm resistor in series with the positive as a current-limiter.

for the 2nd question, the new circuit basically bypasses all the motherboard's circuit, it takes 22V Vin directly and output directly to the battery positive terminal. it depends on the diode to prevent reverse current.

thanks!

Unknown said...

hi again val,
sorry to bug you again!

I just got the parts so now I've managed to disassemble the robot...

From your pictures of the circuit you designed, you've connected the yellow wire (regulator output) to the red wire on pin J7 (which in turn connects right to the battery.

Only problem is, it looks like you've connected your red wire to J15 which is from the wall charger jack. If I wanted to use the home base rather than the direct wall connection, should I instead splice into the wire on plug J25? (The red one of course) Since it looks like the home base +V and the wall plug +V are separated by diodes... so I have to pick one or the other? Thanks again!

YewMing said...

hi ryan

yes, you can splice the +V from home base J25 and it should be the same.
Alternatively if you can locate diode D30 or D32, you might be able to use both home base and direct input if you solder the regulator input to the cathode side of either one of the diodes. However, as I don't have a roomba with me anymore, I'm not sure if the point is easily accessible.

D said...

Thanks for this, even so many years later! The U2/U4 burnout problem continues to plague owners of the early Roomba models (mine is a Discovery 4210 from 2004). I made a similar constant-current charging circuit from my extensive junkbox of parts, but with a TO-220 PNP transistor TIP32. I'm currently using it as an external charger powered from the Roomba charger supply, and found that ordinary crimp lugs will slot right into the battery terminals. My circuit is self-regulating, reverting to low current trickle charging after the battery reaches 17.25V. I can't upload the circuit here, but here are some details: TIP32 emitter connected to 4.7 ohm 2 watt resistor to +22.5V, base connected through green LED (2.0V) to +22.5V, and collector goes to battery +. Also from TIP32 base is 270 ohm resistor to collector of a 2N2222 NPN transistor. Base of 2N222 goes to voltage divider 10k/39k ohms between +22.5 and - terminal (connected to battery -) to make 18V, emitter goes to battery + terminal to sense charging state. When battery is not charged, current is 0.33A, when charged LED goes out and current is much lower. Hope this is of interest all these years later.