An interesting problem, this one, and whilst not directly Arduino-related the process I used in determining the problem is very similar when diagnosing misbehaving I2C buses, MOSFETs that don’t switch on when expected or any number of weird code anomalies.
Our cordless vacuum cleaner started playing up. It would fire up for a few seconds, but then switch off. Additionally, the motorised brush head would not revolve at all. As we have two identical such vacuums I thought it would be a minute’s work to switch out components until the misbehaving item was found. As it turned out it was the main body containing all the electronics that was at fault, involving dismantling the unit (no longer under warranty, or else this would have voided it).
As you can just about see from the picture, it’s a nice, neat circuit board and on closer inspection, I located the power output connector for the revolving head motor. This had a very low-value resistor going to ground, exactly 1Ω. This is a typical setup used when detecting current flow – under normal usage the current flow through the motor is in the region of 130mA. In an overload situation (the motor has stalled because it has caught a thread of a carpet, for example) the current rises dramatically to over 500mA. This causes a change in the voltage at the 1Ω resistor from its usual 125mV to two or three times that (depending on how much the motor is still actually moving). This change (rise) is then detected by the onboard µController (see, they get everywhere) and after a few seconds power is cut to the entire vacuum cleaner and a red LED flashes until you switch the unit off. After a few more seconds, the red light stops flashing and you’re good to go again (assuming you’ve now cleared the revolving sweeper head problem).
So why did this unit have a problem in that it would only switch on for a few seconds, the head not go round at all, and then switch off with that flashing red LED?
If you look at the next picture you’ll see scorch marks on the PCB where the resistor was placed. Yes, the wire-wound resistor had been overloaded either so often or so much that the 2W resistor had burnt out, just like an incandescent light bulb. So the µController thought that the motor had stalled (the voltage at the 1Ω resistor would be full VCC as the resistance was now infinite) and switched off the power to protect the wiring and battery.
I’m replacing that failing component with a higher wattage resistor (in fact, I’m putting a couple of resistors in parallel so that the total resistance is as near to 1Ω as I can get it, but with at least twice the power rating). I’m using two instead of a single component just so that I can mount them in the space more easily. And I’ll mount them slightly off the PCB to give them space to breathe.
At least a £100 vacuum cleaner has been salvaged and should give us plenty of use yet – until the next problem, of course! And now I need to completely tidy up my (new) workbench…
New YouTube videos are in production so keep tuned. Meanwhile consider this: what if there were no hypothetical questions?