I have a system that drives 300m of 24V LED strips. The strips are in 25 sections, each controlled by a MOSFET attached to an 328P.

enter image description here

When PWMing the strips (f=500-1000hz depending on the pin), the micros were becoming unresponsive. Suspecting it was a power rail noise problem, I connected the micros to a separate 12V power supply (all grounds are connected) and added a bunch of 100V 2200uF caps to the 24V supplies (as seen in the photo), some 470uF caps to the 12V rail, and some 100uF caps to the 5V rail of each board. This has seemed to help a lot.

However, every now and then, a micro still hangs. How can I further reduce the noise, and avoid a micro hanging?

Extra info: AC coupled probe of the 12V line AC coupled probe of the 12V line

AC coupled probe of the 5V line on the controller boards AC coupled probe of the 5V line on the controller boards

AC coupled probe of the 24V line AC coupled probe of the 24V line

Controller board Controller board

Closer view of the boards Closer view of the boards. The light gray cable is the 12V line.

  • 5
    \$\begingroup\$ Filter, filter, if that doesn't work, filter more and add filters. \$\endgroup\$
    – PlasmaHH
    Commented Dec 5, 2017 at 16:50
  • 1
    \$\begingroup\$ Some shielding and better wire routing could help too... \$\endgroup\$
    – Eugene Sh.
    Commented Dec 5, 2017 at 16:53
  • 1
    \$\begingroup\$ There is very little decoupling on the boards. Also beware of ground loops, if one of the fat wires comes loose, high currents could flow somewhere else, in thin traces... \$\endgroup\$
    – bobflux
    Commented Dec 5, 2017 at 17:00
  • \$\begingroup\$ Ferrites on microcontroller power pins will help. \$\endgroup\$
    – awjlogan
    Commented Dec 5, 2017 at 17:02
  • 1
    \$\begingroup\$ I see two potential issues. Your grounding system looks a little weak. A big bus bar close to the boards with short wires would help. Also you do not appear to have any gate resistors on those mosfets. \$\endgroup\$
    – Trevor_G
    Commented Dec 5, 2017 at 17:07

2 Answers 2


I'd suggest you have a couple of problems with your design, particularly since you've mixed high and low current circuits on the same PCB.
You can add capacitive and inductive filters to your hearts content but you'll be chasing your tail for quite some time.

  1. Quite high levels of noise on the ground are acceptable if you have extreme isolation (PSRR) on the MCU supply lines. In your case you've used an LM7805 to supply the '328 VCC and this is inadvisable in a noisy environment. Consider using a shunt regulator such as the TL431 from the 12 V supply to increase the impedance to that supply.
    The TL431 is good to about 100 mA so should be enough for your '328.

  2. Your serial connection between processors is another potentially noisy connection. It's usually advisable when connecting multiple MCU board in an environment like this to optically isolate these lines.
    I'd assume you are feeding the same serial data connection to all boards (a single serial line from your source PC/MCU), so you could arrange the inputs to be multiple opto diode inputs in series driven by a single output from your source.


Draw a detailed diagram of your Ground and your Power wiring. Include resistances. And assign each piece of wiring an inductance: 10nanoHenries per 10mm of length. Thus a meter of wire also has 1 micro Henry inductance.

Then identify the major high current paths. Then identity the major high-rate-of-change-of-current paths (assume those FETS switch on in 10 nanoseconds.).

Compute the I*R drop in the wiring.

Compute the inductive kick (V = L * dI/dT) in each wire.

And now, since you have identified the high rate-of-change-of-current paths, examine their distance (both outgoing and return paths) from the MCU.

Assume the MCU PCB has 4" by 4" loops (0.1 meter loops). Use this formula to compute the induced voltages:

Vinduce = 2e-7 * Area/Distance * dI/dT

Example 0.1meter * 0.1meter area, with distance of 0.1meter, and di/dT of of 10 amps/ 10 nanoseconds (1Billion ams/second or 1e+9 dI/dT).

Vinduce = 2e-7 * 0.1 * 0.1 / 0.1 * 1e+9

Vinduce = 2e-7 * 0.1 * 1e+9 = 2e(-7-1+9) = 2e(-8+9) = 2e+1 = 20 volts

that was an example. Pick your own distances and estimated dI/dT.

Anything over 0.1 volt, given the estimates, should be altered (move the wiring) to determine the effects.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.