Marlin icon indicating copy to clipboard operation
Marlin copied to clipboard

[FR] TMC5161 stepper driver support

Open LT1010 opened this issue 4 years ago • 84 comments

I have encountered a problem, I use the latest marlin firmware and 5160 is OK on my motherboard. The configuration is not changed, only the drive is changed to 5161, and the information displayed using M122 is normal, but when I move the XYZ axis, there is only a little movement and then it cannot move. I used M122 to see the information changed. move_before: move_before move_x_asis: move_x_axis

LT1010 avatar Dec 28 '19 03:12 LT1010

Please tell me where the problem is(TMC5160 is OK on my motherboard).

LT1010 avatar Dec 28 '19 03:12 LT1010

Can you add your configuration files, including your pins file if you have modified it.

sjasonsmith avatar Dec 28 '19 03:12 sjasonsmith

I would also like to know if you see the same results every time you run M122, or if the results are somewhat random.

sjasonsmith avatar Dec 28 '19 03:12 sjasonsmith

我还想知道每次运行M122时是否看到相同的结果,或者结果是否有些随机。

Hi,this is my configuration file, the pin file has not been moved configuration.zip. Every time I move any axis, the mstep of the corresponding axis will become 256, and then the motor will not move.

LT1010 avatar Dec 28 '19 03:12 LT1010

This might be related to https://github.com/MarlinFirmware/Marlin/issues/16311.

That issue was closed since the fix belongs to TMCStepper, but there is a workaround described that you could try.

sjasonsmith avatar Dec 28 '19 04:12 sjasonsmith

This might be related to #16311.

That issue was closed since the fix belongs to TMCStepper, but there is a workaround described that you could try.

Hello, is there any other solution besides this, I will try one by one.

LT1010 avatar Dec 28 '19 05:12 LT1010

I used a logic analyzer and here is the result: TMC5160 TMC5161

LT1010 avatar Dec 28 '19 09:12 LT1010

My problem has not been solved, this seems to have nothing to do with TMCStepper, I try to reduce the speed of SW_SPI, and the result of M122 is not random, it only changes after I move the axis, and each time after the change, M122 The results are also fixed. I also want to know if there are other ways to get my 5161 working properly.

LT1010 avatar Dec 30 '19 01:12 LT1010

My problem has not been solved, this seems to have nothing to do with TMCStepper, I try to reduce the speed of SW_SPI, and the result of M122 is not random, it only changes after I move the axis, and each time after the change, M122 The results are also fixed. I also want to know if there are other ways to get my 5161 working properly.

CMP

LT1010 avatar Dec 30 '19 02:12 LT1010

@sjasonsmith does the info from @lijinlin19970813 make any bells ring?

boelle avatar Jan 07 '20 00:01 boelle

@sjasonsmith does the info from @lijinlin19970813 make any bells ring?

@boelle These are SPI-connected drivers. Everything I have been has been for UART-connected drivers. I've never used either of these.

sjasonsmith avatar Jan 07 '20 05:01 sjasonsmith

The behavior you're describing could be due to too little power being used for the speed, acceleration, jerk, and microstep settings.

One possibility is the RSENSE settings specified in the Configuration_adv.h file are wrong. The current settings are 0.11 Ohms. A picture I saw that showed both the 5160 & 5161 pololu driver modules showed 0.075 Ohm resistors on the 5160 and 0.062 Ohm resistors on the 5161. You'll need to physically examine your modules to see what resistors are actually used.

I doubt that this is your problem. If my numbers are accurate you are actually sending more current to the steppers than specified in Configuration_adv.h.

I suggest you try some RIDICULOUSLY conservative settings to see if that is the problem. Try setting microsteps to 4, cut steps per unit by 4, cut acceration max by 10, cut max speed by 10 and decrease jerk by 10. Then manually issue really slow movement commands (G0 X20 F200).

Bob-the-Kuhn avatar Jan 07 '20 10:01 Bob-the-Kuhn

The behavior you're describing could be due to too little power being used for the speed, acceleration, jerk, and microstep settings.

One possibility is the RSENSE settings specified in the Configuration_adv.h file are wrong. The current settings are 0.11 Ohms. A picture I saw that showed both the 5160 & 5161 pololu driver modules showed 0.075 Ohm resistors on the 5160 and 0.062 Ohm resistors on the 5161. You'll need to physically examine your modules to see what resistors are actually used.

I doubt that this is your problem. If my numbers are accurate you are actually sending more current to the steppers than specified in Configuration_adv.h.

I suggest you try some RIDICULOUSLY conservative settings to see if that is the problem. Try setting microsteps to 4, cut steps per unit by 4, cut acceration max by 10, cut max speed by 10 and decrease jerk by 10. Then manually issue really slow movement commands (G0 X20 F200).

I changed the RSENSE to over 0.062, it is still invalid, but I will try what you said to change other parameters to try the effect.

LT1010 avatar Jan 08 '20 01:01 LT1010

Also double the current settings in configuration_adv.h

Bob-the-Kuhn avatar Jan 08 '20 03:01 Bob-the-Kuhn

@lijinlin19970813 did the last suggestion from @Bob-the-Kuhn help?

do we have a bug or does it more look like a config error?

boelle avatar Jan 10 '20 22:01 boelle

It still happens, at least for me. With the latest TMCStepper library (0.6.1 as of posting), I can get up and down movement by jogging manually. Homing seems to work fine too, however, around the first few probes, the Z simply stops moving.

Whatever is happening, the stepper entirely seems to shut off. I can freely move the rod the moment the failure occurs. Unfortunately, I'm using a BTT E3 board, and I don't have enough memory for TMC_DEBUG currently.

XBrav avatar Jan 14 '20 04:01 XBrav

Ok, I stripped down the code enough to get M122 on the machine. It's an E3 DIP, with 2208s in UART on the X, Y, and E0. Z is the 5161.

SENDING:M122
		X	Y	Z	E
Enabled		false	false	false	false
Set current	650	800	1000	700
RMS current	642	795	990	673
MAX current	905	1121	1396	949
Run current	20/31	25/31	19/31	21/31
Hold current	18/31	22/31	17/31	18/31
Global scaler			133/256
CS actual	18/31	22/31	17/31	18/31
PWM scale	21	25	16	21
vsense		1=.18	1=.18		1=.18
stealthChop	true	true	true	true
msteps		16	16	16	16
tstep		max	max	max	max
pwm
threshold
[mm/s]
OT prewarn	false	false	false	false
OT prewarn has
been triggered	false	false	false	false
off time	3	3	3	3
blank time	24	24	24	24
hysteresis
-end		-1	-1	-1	-1
-start		1	1	1	1
Stallguard thrs			0
DRVSTATUS	X	Y	Z	E
stallguard
sg_result			0
fsactive
stst		*	*	*	*
olb
ola
s2gb
s2ga
otpw
ot
157C
150C
143C
120C
s2vsa
s2vsb
Driver registers:
		X	0xC0:12:00:00
		Y	0xC0:16:00:00
		Z	0x80:11:40:00
		E	0xC0:12:00:00
Testing X connection... OK
Testing Y connection... OK
Testing Z connection... OK
Testing E connection... OK`

I then perform a move (up is fine, it's the direction change too that causes the issue), the microsteps changes to 256 and the address changes as well:

G1 Z10
SENDING:G1 Z10
G1 Z0
SENDING:G1 Z0
M122
SENDING:M122
		X	Y	Z	E
Enabled		false	false	false	false
Set current	650	800	1000	700
RMS current	642	795	990	673
MAX current	905	1121	1396	949
Run current	20/31	25/31	19/31	21/31
Hold current	18/31	22/31	17/31	18/31
Global scaler			133/256
CS actual	18/31	22/31	8/31	18/31
PWM scale	21	25	8	21
vsense		1=.18	1=.18		1=.18
stealthChop	true	true	false	true
msteps		16	16	256	16
tstep		max	max	max	max
pwm
threshold
[mm/s]
OT prewarn	false	false	false	false
OT prewarn has
been triggered	false	false	false	false
off time	3	3	0	3
blank time	24	24	36	24
hysteresis
-end		-1	-1	-1	-1
-start		1	1	6	1
Stallguard thrs			0
DRVSTATUS	X	Y	Z	E
stallguard
sg_result			0
fsactive
stst		*	*	*	*
olb
ola
s2gb
s2ga
otpw
ot
157C
150C
143C
120C
s2vsa
s2vsb
Driver registers:
		X	0xC0:12:00:00
		Y	0xC0:16:00:00
		Z	0x80:08:00:00
		E	0xC0:12:00:00
Testing X connection... OK
Testing Y connection... OK
Testing Z connection... OK
Testing E connection... OK

At this point, the stepper no longer responds, and requires a reboot of the firmware to regain control. Depending on the motion, the Z address will change each time the failure occurs. I've seen 0x80:08:40:00 as well as 0x80:0D:40:00.

Marlin.zip

I have attached my config files for reference.

XBrav avatar Jan 14 '20 04:01 XBrav

Hi,

I‘ve got the same problem with my TMC5161 drivers. I tried the decrease of sw spi clock with no succes. If i force the drivers to use chop mode, the Steppers are working. Current Must be in a small Range window to prevent it from stop. If I try to use faster movements the Steppers stop working at Point of Switch to spread Cycle.

RonnyOs avatar Jan 14 '20 20:01 RonnyOs

a lot of updates and fixing has happend in the last week, is the problem still there?

boelle avatar Jan 30 '20 21:01 boelle

@boelle I'll try and set up a test rig tonight. https://github.com/teemuatlut/TMCStepper/blob/master/src/source/TMC_platforms.h has not been modified for the stm32 platform, only for the LPC176x family.

Luckily, I have one E3 DIP machine standing by.

XBrav avatar Jan 30 '20 22:01 XBrav

Just compiled 2.0.3.

Environment: BIGTREETECH E3 DIP 1.0 (STM32F103RC, 256k, NOUSB) Steppers: X: BIGTREETECH TMC2208 V3.0 UART Y: BIGTREETECH TMC2208 V3.0 UART Z: BIGTREETECH TM5161 V1.1 SPI (Configured as TMC5160 with TMC_USE_SW_SPI) E: BIGTREETECH TMC2208 V3.0 UART

All steppers detected. Issuing a home command, Z engages but does not move. X and Y homing continues, but Z is seemingly disengaged. Unable to enable M122 due to lack of memory. But likely previous issues noted above.

Without recompiling the firmware, I replaced the problematic stepper with a BIGTREETECH TMC5160 V1.2. As expected, the stepper engages and moves in both forward and reverse directions without issue.

It appears as though there were further changes to the 5161 series than simply integrating the MOSFETs into the die. Adding to the concerns, the product page notes product changes are currently underway: https://www.trinamic.com/products/integrated-circuits/details/tmc5161/

I will reach out to Trinamic for comment. For the time being, I would recommend users stick with the refined 5160s, as they are operating as expected.

XBrav avatar Jan 31 '20 04:01 XBrav

is it the same with bugfix 2.0.x ?

boelle avatar Jan 31 '20 07:01 boelle

is it the same with bugfix 2.0.x ?

bf2 is only one commit ahead of 2.0.3. Testing with it would be a waste of time.

sjasonsmith avatar Jan 31 '20 07:01 sjasonsmith

I still got the same issue, I posted it on the BTT Github, but nobody responsed to it in the last 5 weeks...

I also cut the CLK-Pin from the 5160 and the 5161. The 5160 are working fine, but the 5161 make a little move and stop after that without any failure. I changed the "RSense" from 0.075 (5160) to 0.060 (5161)

I tried it on the SKR Pro V1.1 and today with a completly new setup on the SKR V1.4 Turbo The 5160 work well and the 5161 are stopping immediatly.

Can someone tell me if it is normal, that the drivers are very loud with 0.9° Steppers? I'm using them in a CoreXY and need around 1.5V to get the Steppers warm up to 40°C . If I use only 1.2V the Steppers are not so noisy, but the Steppers are cold as ice and I'm loosing steps like hell...

einencool avatar Feb 01 '20 14:02 einencool

These drivers are really crappy. I tried everything on a SKR 1.1 Pro, I couldn't get them to work. I don't understand how Bigtreetech makes them work on this video https://www.youtube.com/watch?v=UW_JtHcgcd4, support never answered my questions!

Malaquitte avatar Feb 02 '20 11:02 Malaquitte

I can't seem to get my TMC5160 working, either. Connected one as a test to E0 and M122 does the following:

m122_result

I've snipped the CLK pin, tried with and without connecting CLK to ground, adjusted RSENSE to 0.075 Ohm and nothing seems to work. Here's my current configuration (nightly bugfix build, 02/04/2020): Configuration.zip

Maybe someone has an idea of what I could have missed. I haven't tried limiting the SPI speed and honestly I don't really know how to do that, either.

Werebear93 avatar Feb 04 '20 14:02 Werebear93

Well, for one thing, we don't formally support the 5161. As for the 5160 not working, well I'm not sure how well supported it is now in TMCStepper either. It is all very new, so we may have to wait on @teemuatlut to find some free time to troubleshoot them generally. We have a set of them here, but at the moment my custodial duties are taking up too much time to dive into testing. But perhaps @shitcreek and I will find some time to play around with 5160's later this week.

thinkyhead avatar Feb 04 '20 15:02 thinkyhead

If it's only a matter of weeks, I'm still hopeful. With my knowledge of steppers drivers I can unfortunately not help. Thanks for everything else.

Malaquitte avatar Feb 04 '20 15:02 Malaquitte

@Werebear93 I dont know what physical driver slots are configured on your board, but this looks off to me. Z/Z2 if you are using dual Z motors this would be strange.

  #if AXIS_IS_TMC(Z)
    #define Z_CURRENT       800
    #define Z_CURRENT_HOME  Z_CURRENT
    #define Z_MICROSTEPS     16
    #define Z_RSENSE          0.11
    #define Z_CHAIN_POS      -1
  #endif

  #if AXIS_IS_TMC(Z2)
    #define Z2_CURRENT      800
    #define Z2_CURRENT_HOME Z2_CURRENT
    #define Z2_MICROSTEPS    16
    #define Z2_RSENSE         0.075
    #define Z2_CHAIN_POS     -1
  #endif

Also checking your voltage, are you running a 24v or 12v system?

#define CHOPPER_TIMING CHOPPER_DEFAULT_12V

2kingsrock avatar Feb 04 '20 18:02 2kingsrock

Have exactly the same issue. After disabling SOFTWARE_DRIVER_ENABLE and STEALTHCHOP_X _Y _Z _E, the TMC5161 runs. But no features then... TMC5161 on SKR_1.4_Pro with SPI and recent Marlin Bugfix branch.

RSENSE - Nothing helped... here are the Informations:

// | --------------------------------------------------------------------------|
// | RSENSE [Ω]  | RMS current [A](CS=31) | Sine wave peak current [A] (CS=31) |
// | 0.22        | 1.1                    | 1.5                                |
// | 0.15        | 1.6                    | 2.2                                |
// | 0.12        | 2.0                    | 2.8                                |
// | 0.10        | 2.3                    | 3.3                                |
// | 0.075       | 3.1                    | 4.4                                |
// | 0.066       | 3.5                    | 5.0                                |
// | 0.060       | 3.8                    | 5.4                                | <-- 
// | --------------------------------------------------------------------------|
// Documentation --> 9 Selecting Sense Resistors List - 

https://www.trinamic.com/fileadmin/assets/Products/ICs_Documents/TMC5161-datasheet_Rev1.02.pdf

GeminiServer avatar Feb 10 '20 11:02 GeminiServer