Electronic – PCB design considerations for running 48 stepper motors

atmegapcb-designpowerstepper motor

For a while now I'm working on a project where I want to control 48 stepper motors.

A pair of two motors is controlled by an Atmega8. All modules are connected as slaves on an I2C/TWI-bus with an Arduino acting as the master device.

A while ago I already posted a question about power supply issues and got many useful comments regarding ground loops, capacitors and PCB design. The main issue that the Atmega8s are not working properly anymore when I run more than 5 of the motor-control-modules simultaneously.

I've tried to implement most of the suggestions, but still have some questions for possible improvements:

  • Are the large capacitors at the VCC-input as well as next to the motors placed properly?
  • Is the layout of the "power-plane" designed properly?
  • Is the decoupling of the analogue ground any good?

One module with both steppers running takes up roughly 0.5A at the same time. My power supply should be capably of running all modules at the same time. I'm running a star-topography with thick wires between all modules.

Okay, so here is what the whole thing looks like (I2C-bus/resistors not displayed to keep it simple):
system overview

The circuit for each of the modules (0X10 etc.) is looking like this. Some notes about the different sections:

  • The two motors on the bottom right are connected to the ports PB and PD via darlington arrays
  • Connected to PC1/PC2 on the top right are two optical sensors for homing the stepper motors
  • PRG on the bottom is the programming port for the Atmega8

duostepper_RevC_schematic

The PCB design (40 x 60 mm) I plan to order looks like this. This is not implemented, yet!
duostepper_RevC_topbottom

duostepper_RevC_top

duostepper_RevC_bottom

UPDATE 2017-04-15:

I updated the power input section of the schematic with a beefier capacitor, additional 100nF-capacitors and a ferrite bead. I changed the motor-capacitors to 220µF as well.

RevD_new_power_input

In the layout, I implemented it like this:
duostepper_RevD_all
duostepper_RevD_top
duostepper_RevD_bottom

Best Answer

The "thick wires" have less inductance than thin wires. 100:1 ratio is 1500nH/m while 50:1 ratio is 1000nH/m

  • Litz wire has much lower L and comes in many strands and AWG of enamel wire.

With all these stepper surge currents and dead-band half bridges, it will be a CM noise nightmare for any high L or C impedance coupling to stray input cables or tracks.

Recommendations

  • CM chokes on each pair to raise the CM impedance with optional shunt caps or ferrite beads for DM mode suppression. example SMD CM Choke 200mA <1ohm
  • Twisted pair cables, shielded, if bundled.
  • fault sense on open connections
  • Datum (aka Home/End Stop) opto Schmitt inverter sensor feedback on same CM choke twist pair for immunity. depending on cable length and arc noises nearby.
  • low ESR caps to shunt RdsOn/Coss current spikes
  • 0.5~1.5us Dead time depending on loads L/R ratios etc.
  • model your circuit design for EMI control including DCR, R distributed C on cables and cap ESR vs C
  • use accelerated pulse rates for slew control factoring Motor torque and inertial loads to obtain max speed and avoid skips or cogging at all costs.
  • include cogging current sensors in case of unexpected stiction
  • slots are generally efficient EMI antenna and bad if rise times << 50ns nearby

(Disclaimer) This is by no means a complete DFM list of recommendations