About Steppers: Voltage, Torque, Current, Pulleys and Power Supply

I’ve found that with a decent non-contact one that has a good spec for the spot size and a laser target, they’re great, and way more convenient than a thermal camera. The same absolutely applies with needing a known-emissivity target, but if I’m monitoring something I’ll double-check them with a thermocouple and then just measure everything as a delta off that. Not super accurate, but if the thermocouple says 60C and it’s 50C on the non-contact, I know to just add 10C and I’ll be roughly there.

To be clear, the awesome value in the thermal cameras is where you’ve got gradients or you’re looking for something unexpectedly hot. That’s where the non-contact ones suck. For most of the use cases I’ve seen people get excited for, a non-contact thermometer or a thermocouple will do the same job with a bit of patience. If you’ve got the money to spend on one, go ham, they’re fun, if a little janky on the cheaper ones. If you’ve got other things on the to-buy list, I agree, they’re not really a great investment for a home user.

1 Like

One of the telling parts of that image is that the heat sink on the TMC2209 is at 59.4C…
Even with it being a relatively poorly performing IR camera, the relative temps are still a valid comparison.
The TMC heat sink is the hottest part of the system.

If someone runs these steppers/drivers at 1.2A, then those drivers might be thermal throttling and at that point you aren’t getting 1.2A to the stepper anyway. The drivers are also likely to go into thermal protection where you miss a bunch of steps. It’s likely be be much worse from a missed step perspective than the default settings.

60 degrees C on the heatsink is miles away from where I’d expect there to be an issue.

The 2209 is specified at Pd=1.4W for 1.0A operation and 6 degC/W junction to case. Even assuming a relatively poor performing gap pad, I’d expect there to be no more than 20 degC/W over that junction, so 60 degC on the heatsink is likely 80-100 degC on the junction, pessimistically. That’s a solid 40 degrees of margin before minimum shutdown temps.

I don’t think you can state that declaratively… The shutdown on the 2209s does not appear to be elegant so anyone running into thermal issues will almost certainly see missed steps. The loss in the stepper vs the driver is going to be somewhat linearly correlated (both are largely proportional to I-squared) so I would assume that setting the current too high isn’t likely to result in a hot stepper and a cold driver, at least not beyond the first few cycles of the driver bouncing off thermal limit.

That’s the reason I bought mine.

1 Like

I think I am wrong here, Looks like Fluid might actually be doing the math for us.

I believe Ryan’s image was taken with Ryan’s very conservative default settings, not at a 1.2A setting.
The image is of the nominal/good case, not the bad / 1.2A case.

If I have that incorrect then yes, I agree they would not be in shutdown.

What’s most odd is that at 1.2A of reported drive, the temps being reported by @Rico_LRS are so much cooler on his steppers that something has to be off.

I’d like to understand that.

His steppers should either be way warmer than they are, or there’s some other factor at play making his setup very different than what we usually see with the default settings.

yes, 0.8A

When they thermal throttle it takes a few seconds or more to kick back in. In that time they just throw away any input given to them, not buffered or anything.

Sure, the default settings of 0.8A, the spec above from the datasheet was 1.0A. I can’t give numbers for 0.8A without measuring it because it will be an unknown balance of linear (switching loss) and squared (conduction loss).

Going to 1.4A in the datasheet doubles that loss, which I’d still say is reasonably achievable in the setup shown by Ryan without guaranteeing thermal throttling. I wouldn’t want to and would agree that it’s proposing as a hypothesis for what’s causing this, but I believe it is reckless to declaratively state that it ARE throttling, which is my issue here.

Yeah, exactly, so if someone is going to see thermal issues, I would expect that it’s going to be catastrophic and a machine that can’t complete a job, not something that just looks like a stepper running cooler than expected.

2 Likes

Point taken, I edited my post above.

2 Likes

There’s definitely something not right with this setup, though, I just can’t figure out a way to easily verify how much current is actually going out to the steppers.

I’ve never thought to try just sticking a DC clamp meter on a stepper line…

Are you saying I have a reason to get another meter…I always wanted a clamp meter.

2 Likes

Yes! First two expensive tools I bought over 25 years ago were a scope and DC clamp meter. DC clamp meter is awesome sauce.

Wanting one IS a reason to get one!

2 Likes

You should get a clamp meter!

I’m not sure it’s as easy as just clamping a meter on, because you have two coils and microstepping. Maybe make a fixture that breaks out both of the + leads so you can pass them through a clamp on meter (or wrap them a couple of turns through).

Ryan- if you don’t already have a test jig, measuring the current draw of VMOT power going IN to the jackpot is useful telemetry as well.

Edit- ugh not that simple either.

2 Likes

Oh, of course. You always need another multimeter. I’d say an AC/DC clamp meter is a good 2nd meter to buy and it’s always worth having two. I’m literally using my clamp meter on my solar inverter circuit right now while monitoring the voltage with my normal multimeter.

Then again, maybe don’t pay too much attention to the guy who has… 8? Well, 8 things that can function that way.

2 Likes

My approach would be to set run and hold current the same, clamp one motor coil and then move the motor in small steps until I see it at a maximum point. At 1.8 degrees and 32mm per rev, that’s 0.16mm per step so moving it at 0.1mm increments should comb through a bunch of valid positions.

Definitely agree about wrapping it a few times through but if you’re going to break it out, I’d just use the DC pass-through measurement on the meter. A decent meter should have enough bandwidth to measure the across the current ramp but a crappy meter should still get there on average, the current ripple isn’t ‘that’ high…

1 Like

An AC clamp meter is basically a split-core CT, so they’re reasonably accurate providing you’re within the operating frequency range and the thing closes cleanly. They’re insensitive to wire position within the jaws and should read accurately down to zero without offset calibration.

A DC clamp meter is using a closed-loop hall effect sensor so it has a few more sources of variability. One is often the position of the wire in the jaws, although this varies by meter. Moving the wire around with a constant current is a good idea to get a feel for the magnitude of this issue. Another issue is DC offset. Often they’ll read an amp or two with no current flowing, so you’ve gotta remove it, use the zero/offset button to zero it out (similar to tare-ing a weighing scale) and then clamp it back on. After taking a measurement it’s worth unclamping it and verifying that it’s still zeroed as it does drift. They’re often much less sensitive on the DC scale than the AC scale so anything below an amp requires a bit of care with observing that the zeroing hasn’t drifted etc. to get a confident reading. Or use the approach of wrapping multiple turns around the jaws to multiply the current sensed. 10 turns means a 1A current will look like 10A to the meter. Doing that it pays to be careful of the jaw position as mentioned above.

Definitely useful tools.

That’s how I’m using mine right now! Simultaneous current and voltage measurement to verify the power measurement from my solar inverter. There’s a discrepancy between my whole-house energy monitoring and the inverter measurement that I’m chasing down.

2 Likes

since I realized that I know too little about steppers and drivers I went to browse the TMC2209 manual and this function really intrigued me, it seems really useful!

1 Like

My impression of it and trying to look at what it’s measuring from an EEE standpoint: It sounds way better than it is, much like the hold function. You really need significant RPM to determine the load from how the voltage and current waveforms work together.

It’s a great idea in theory, in practice it’s like trying to measure something tiny by taking 2 measurements to the nearest wall and subtracting them. Works great in theory, in practice you’ve gotta do a LOT of work to separate the signal from the noise.

Ultimately it gets us back to the same place, it wouldn’t reduce the worst-case load temperatures at all but could significantly reduce the off-load temperatures. In my line of work that’s not necessarily a good thing. You really want something that behaves reliably and predictably if you’re not monitoring those temperatures directly. Having something that gets warm and stays warm predictably is much better than something that’s cold 99% of the time but then on that one huge/slow job overheats your motor mounts and destroys the workpiece.

3 Likes

It turns out you can change the hold amps in gcode but you have to reinitialize the drivers for it to take effect with $Motors/Init (shortcut $MI).

Simple Example:

$/axes/x/motor0/tmc_2209/hold_amps=0.800
$/axes/y/motor0/tmc_2209/hold_amps=0.800
$/axes/y/motor1/tmc_2209/hold_amps=0.800
$Motors/Init

Fun Example (iterates from 0.100 through 0.800 at 0.100 increments with hold in between):

(Store Original Hold Amp Values)
#<x0HoldAmps> = #</axes/x/motor0/tmc_2209/hold_amps>
#<y0HoldAmps> = #</axes/y/motor0/tmc_2209/hold_amps>
#<y1HoldAmps> = #</axes/y/motor1/tmc_2209/hold_amps>

(PRINT, Original Hold Amps: X0=#<x0HoldAmps>, Y0=#<y0HoldAmps>, Y1=#<y1HoldAmps>)

#<holdAmps> = 0.100
#<holdAmpsIncrement> = 0.100
#<maxHoldAmps> = 0.801

o100 while [#<holdAmps> LE #<maxHoldAmps>]
  #</axes/x/motor0/tmc_2209/hold_amps> = #<holdAmps>
  #</axes/y/motor0/tmc_2209/hold_amps> = #<holdAmps>
  #</axes/y/motor1/tmc_2209/hold_amps> = #<holdAmps>
  $Motors/Init
  M0 (PRINT, Hold Amps: #<holdAmps>)
  #<holdAmps> = [#<holdAmps> + #<holdAmpsIncrement>]
  G4 P1
o100 endwhile

(Restore Original Hold Amp Values)
#</axes/x/motor0/tmc_2209/hold_amps> = #<x0HoldAmps>
#</axes/y/motor0/tmc_2209/hold_amps> = #<y0HoldAmps>
#</axes/y/motor1/tmc_2209/hold_amps> = #<y1HoldAmps>
$Motors/Init

Using that second gcode file, and knowing that Ryan is upping the config from 0.500 to 0.700, I can tell you that it is quite a bit harder to force skipped steps at 0.700 compared to 0.500.

I think 0.700 would be a good default based on that. However, I know that I sometimes forget to turn off my machine and I’ll find it the next day with warm steppers. That makes me inclined to maybe update my start/end gcode to set it to 0.800 at the start and return back to 0.500 at the end. If it’s just set that high for the duration of the job, there’s no reason to not just make it match run amps, right? I could also just create some macros.

4 Likes