You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I am trying out grblHAL on an STM32F4Discovery board with a BigTreeTech TMC2209 v1.3 driver board. I noticed a significant discrepancy in the current measurements I was getting from running motors when I used it in pure STEP/DIR mode with no UART control and setting current via potentiometer, versus using UART control and setting the current digitally using $140. The UART control mode was reading something like half of the current of the STEP/DIR mode.
After some investigating I discovered that changing the potentiometer still affects the current even when using $14x to configure the current. In other words, I actually played with the potentiometer while the motor was running and could see the current changing.
Looking at the source code, I can see in tmc2209.c in TMC2209_Init:
// Use default settings (from OTP) for these:// driver->gconf.reg.I_scale_analog = 1;// driver->gconf.reg.internal_Rsense = 0;// driver->gconf.reg.en_spreadcycle = 0;// driver->gconf.reg.multistep_filt = 1;
I admit it is not ultra clear in the datasheet, but it appears that when I_SCALE_ANALOG is left at 1, then the value on the TMC2209 VREF pin still modulates the actual output current, whereas if you set it to zero it uses an internal reference. After doing some digging it seems like Marlin explicitly sets this setting to 0 as does the Arduino TMC2209 library ( https://github.com/janelia-arduino/TMC2209 ).
I changed my TMC2209_Init setup to set I_SCALE_ANALOG to 0 in TMC2209_Init and it then made my readings insensitive to changing the VREF potentiometer, and gave me values about what I expect.
I do have some concerns that the straightforward fix could drastically change the current values people with existing machines will get after a firmware update. If they set their current limits based off of motor datasheets, I would guess they would mostly be OK, but if it they set this value empirically based on how hot the motors got or something it could be a nasty surprise.
The text was updated successfully, but these errors were encountered:
For reference it appears another workaround might be to set VREF to 2.5V via the potentiometer, which if I am reading the datasheet right should result in 100% of the value set via $14x to be used.
I am trying out grblHAL on an STM32F4Discovery board with a BigTreeTech TMC2209 v1.3 driver board. I noticed a significant discrepancy in the current measurements I was getting from running motors when I used it in pure STEP/DIR mode with no UART control and setting current via potentiometer, versus using UART control and setting the current digitally using $140. The UART control mode was reading something like half of the current of the STEP/DIR mode.
After some investigating I discovered that changing the potentiometer still affects the current even when using $14x to configure the current. In other words, I actually played with the potentiometer while the motor was running and could see the current changing.
Looking at the source code, I can see in
tmc2209.c
inTMC2209_Init
:I admit it is not ultra clear in the datasheet, but it appears that when
I_SCALE_ANALOG
is left at 1, then the value on the TMC2209 VREF pin still modulates the actual output current, whereas if you set it to zero it uses an internal reference. After doing some digging it seems like Marlin explicitly sets this setting to 0 as does the Arduino TMC2209 library ( https://github.com/janelia-arduino/TMC2209 ).I changed my
TMC2209_Init
setup to setI_SCALE_ANALOG
to 0 inTMC2209_Init
and it then made my readings insensitive to changing the VREF potentiometer, and gave me values about what I expect.I do have some concerns that the straightforward fix could drastically change the current values people with existing machines will get after a firmware update. If they set their current limits based off of motor datasheets, I would guess they would mostly be OK, but if it they set this value empirically based on how hot the motors got or something it could be a nasty surprise.
The text was updated successfully, but these errors were encountered: