0
\$\begingroup\$

Circuit:

Circuit

Perfboards

DC power supply bench voltage feeds 3 TMC2208 stepper motor drivers, each driving a NEMA 17 stepper motor, 100uF 35V elecrolytic capacitor in parallel with each. 5V regulator to power a teensy 4.1 board which control the logic for the motor drivers.

The TMC2208 motor drivers came with the factory with the following Vrefs: 1.54V, 1.55V, 1.56V, which through the formula from its datasheet: I_RMS = 325/(110+30)(1/sqrt(2))(1/2.5)*Vref correspond to a current limit that is passed to the motor of I_RMS = 1.01A, 1.02A, 1.03A respectively.

According to datasheets:
TMC2208: rated current 1.2A , Max current 2.0A
NEMA 17 of the model I got: rated current 1.68A, max current 2A

In a basic test, the circuit functioned well, rotating all three motors as programmed, using AccelStepper arduino library and set to some max speed. In this test, the teensy drew around 200mA.

In the operational code, the program on the MCU reacts to readings from a touchscreen that balances a steel ball, and commands stepper motor rotations accordingly.

Issue:
I was stupid enough to now run the operational code with the DC supply workbench set to 5.0A current limit (voltage is 16V, I plan on increasing to 24V). After about 1 sec of operation, one of the TMC2208 got severely damaged. Its GND and MS1 shortened, which of course leads to shut down of the MCU. My assumption is that it had too high of a current pass through this motor driver, that damaged it.
To my understanding, I_RMS above is the RMS current the driver will try to deliver to the motor phases, not necessarily the current that actually passes through the driver itself. So the fact that the drivers came from the factory set to I_RMS values of ~1A has nothing to do with the current that they actually draw themselves. In order to burn the motor driver, which actually occurred, the current passed through it had to be higher than its rated 1.2A, possibly much higher.

Question:
Can / should I limit current I1, I2, I3 in the figure above? If the figure isn't showing, those are the currents to each of the motor drivers. The limit I can set in the supply bench is for I_total. I_MCU is ~200mV so it's not in the focus of the question.

Even if theoretically I limited I_tot to as low as 1.7A, the program may assign stepping commands that require nothing out of 2 of the three motors, but max out of 1 motor, which may still lead to the damaging of its driver. I'm starting to run out of motor drivers to burn. Will setting the total current limit to 1+1+1+0.2 =~ 3.5A be enough, hoping that all 3 of them will draw currents in a close to 1:1:1 ratio? or should I add some mean of current limitation to the individual motor drivers? If so, how? As I described few lines above, they may receive commands from the MCU in an unpredictable x:y:z ratio.

  • I'm following instructions from an online site, where ~10 other people have made this mini project work without additional current limiting circuitry.
\$\endgroup\$

1 Answer 1

1
\$\begingroup\$

From what you describe, the way the driver failed wasn’t simply because your bench supply was set to 5 A. The TMC2208 regulates motor phase current using a chopper, and the Vref sets the I_RMS the driver tries to maintain. With your factory-set Vrefs (around 1.54–1.56 V), you’re looking at about 1.0 A RMS, which translates to about 1.4–1.5 A peak per phase. That’s within spec, so under normal conditions the drivers shouldn’t have pulled more than that.

When something inside the driver goes wrong (say a short on the die or between pins), the bench supply doesn’t care which branch is drawing current. With only a global current limit, one failed driver can sink several amps before the supply reacts, and that’s enough to physically burn it out.

So, you should you limit I1, I2, I3 individually. Relying only on the total supply limit is risky because if one driver fails, it can absorb current and destroy itself (and possibly the MCU).

For the bench supply limit, setting it to about 3.5 A total doesn’t guarantee safety. If one motor happens to stall or if a driver shorts, that single channel could still try to take nearly the entire supply current. That’s why protection at the individual driver level is the key.

What you really want is per-driver protection. Add fast fuses or PTC resettable fuses in series with each driver supply pin. Something in the 1.5–2 A range would usually trip before the chip cooks itself. For an extra decoupling, in addition to the 100 µF electrolytics, add 0.1–1 µF ceramic caps right at the TMC2208 supply pins to tame transients.

\$\endgroup\$
2
  • 1
    \$\begingroup\$ Thank you very much for your answer, I agree that protection is very important. But adding fuses will only protect the driver and disconnect it in case of over current, saving its life but stopping the mechanism from working. My question is how to not have this over current happen in the first place, so that continuous safe operation can be maintained. \$\endgroup\$ Commented Sep 23 at 9:01
  • \$\begingroup\$ You can work on firmware/software: reduce sudden accelerations, limit maximum speed, use a PID control, and manage holding current dynamically. If your motion profile isn’t too aggressive, the driver won’t be forced into large current spikes. Otherwise, you can use an active hardware limiting: instead of passive fuses, use modules or circuits that continuously limit current (for example small buck converters set to constant-current mode). If a motor tries to pull too much, the voltage drops and the current stays safe, without cutting off the whole channel. \$\endgroup\$ Commented Sep 23 at 9:49

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.