I have an inexpensive DC motor as part of a project I am doing for work; since it is a proprietary device, I cannot give any more information than is provided here. Suffice to say, it is a portable device with a Li-Ion battery pack and a custom PCB I designed with a MAX1758 Li-Ion charger IC and a baseline Microchip MCU (coded in PIC Assembly – yay!) that controls both an electronic lamp ballast and a small brushed DC motor. To help prevent noise/transients from affecting different parts of the circuit, everything gets its own dedicated power supply with some switching DC regulator ICs built into the PCB; unfortunately, that wasn’t enough!
My first problem was that the MCU would reset the second I tried to turn on the lamp ballast, which is a type of device that I deal with on a regular basis at work for driving many different kinds of mercury lamps – it is known for having an enormous inrush current, up to 5 times the steady-state current draw for the first 100ms of operation. This is due to the nature of the ballast, which requires a 300-700+ VAC “strike” in order to arc the gases inside the lamp; internally, this is achieved with a reactive circuit which resonates until a voltage sufficient enough to arc the gases occurs across the lamp cathodes. This inrush current creates a reactive voltage transient that can affect other parts of the circuit, and a quick and easy way to kill that transient is with a diode so that a transient of sufficient voltage to exceed the diode’s reverse breakdown voltage will be shunted through it and dissipated as heat. I had a few 1N4007 diodes on hand, but that’s actually a poor choice since it has a relatively high Vbreakdown – a better choice is the diode species known as a TVS diode. Of course, as mentioned on that Wikipedia page, there are other devices to choose from and the ability to know what to use where is something that can only come from experience. In this case, the 1N4007 helped enough to solve the problem for now, but a redesign will be required to achieve better long-term performance.
The next problem to come up was that the MCU would randomly reset after an indeterminate period of time of lamp/ballast operation. I took out our new oscilloscope and scoped out the voltage across the terminals of the 1.8VDC motor during operation:
Uh-Oh! +31V and -19V transients!?!? Well, that’s the nature of the beast and also the reason your computer fans use brushless DC motors. A quick search online turned up this robot-enthusiast-oriented wiki page that offered up some suggestions; with just the two capacitor method using some spare 0.1uF film caps I had around, the situation was cleaned up and I now faced a much less dire situation:
Problem solved! The three capacitor method even helped a bit more, but I do not have a screen cap for that. I do have some candid before/after pictures, however!