Hi there,
I am using two Nema23 motors for one driven axis and I have some sort of backlash when changing the direction.
I’ve triple checked the mechanics and even changed a lot of parts to no avail. After a lot of testing, it seems that the motor/motor controller is the problem. The board and the firmware are probably not the cause of the error as I’ve flashed Marlin on another board (SKR 1.4 Turbo) and the error was the same as with RRF and the SKR Pro 1.2 board in SBC mode. Mechanical problems are also less likely because the problem is right at the motor side.
The problem occurs when changing directions. I have to drive the motor via software about 48 steps (80steps/mm on selected axis with 64 microstepping and interpolation (Marlin setup), rotated through software 0.6mm --> 80*0,6=48steps/mm) where the motor doesn’t turn. Right at the next time I hit 0.1mm movement the motor begins to turn.
This only happens when the system is under tension. If I decouple the axis from the load the error is gone. I did a rough calculation on how big the forces are to overcome the friction and it was about 2Nm. I drive the axis with 2xNema23 with each 1,9Nm directly coupled to the axis (to isolate other possible errors) which should be sufficient in theory.
I have tried upping the motor current from 2,8A up to 4A (for a short period of time) and different microstepping values to no avail.
Could this be a driver problem (maybe timing)?
Here are my specs:
-
Board: SKR Pro 1.2 running in SBC mode
-
Firmware: RepRapFirmware for STM32F4 based Boards (biquskrpro_1.1) version 3.3.0_11 (2021-11-04 23:02:01) running on STM32F4 (SBC mode)
-
Driver: 2xTMC5160 for Nema23, rest is TMC2209
-
Settings in board.txt:
//TMC Smart Drivers
stepper.numSmartDrivers = 6;
//TMC5160 specific settings
stepper.num5160Drivers = 3;
stepper.spiChannel = 2;
//SPI in slot 0-2, UART in slot 3-7
stepper.TmcUartPins = {A.15, B.8, B.9, D.4, D.1, D.6, F.11, G.10, NoPin, NoPin, NoPin}
//Sensorless homing settings
stepper.TmcDiagPins = {NoPin, NoPin, NoPin, E.15, E.10, NoPin, NoPin, NoPin, NoPin, NoPin, NoPin}
-
Motors used: https://www.omc-stepperonline.com/de/nema-23-57mm-schrittmotor/nema-23-bipolar-1-8deg-1-9nm-269oz-in-2-8a-3-2v-57x57x76mm-4-drahte-546923207.html
-
Jumper setup:
-
Driver modifications: Bend the CLK pin, connected CLK to GND as discussed in various forums:
-
Relevant info about driver setup:
M569 P0 S1 D3 V100 H30 ; Y1 physical drive 0 goes forwards
M569 P2 S1 D3 V100 H30 ; Y2 physical drive 2 goes forwards
M584 X4 Y0:2 Z3 E5 ; set drive mapping
M350 X16 Z16 Y16 E16 I1 ; configure microstepping with interpolation
M92 X81.34 Z81.34 Y25 E416 ; set steps per mm
M566 X700.00 Z700.00 Y500 E1000 ; set maximum instantaneous speed changes (mm/min)
M203 X15000.00 Z15000.00 Y1000 E20000 ; set maximum speeds (mm/min)
M201 X1000.00 Z1000.00 Y500.00 E5000 ; set accelerations (mm/s^2)
M906 X1000 Z1000 Y2800 E1000 I30 ; set motor currents (mA) and motor idle factor in percent
M84 X Y E0 S3000 ; Set idle timeout
m122
=== Diagnostics ===
RepRapFirmware for STM32F4 based Boards (biquskrpro_1.1) version 3.3.0_11 (2021-11-04 23:02:01) running on STM32F4 (SBC mode)
Used output buffers: 1 of 40 (10 max)
=== RTOS ===
Static ram: 18240
Dynamic ram: 63724 of which 40 recycled
Never used RAM 48040, free system stack 179 words
Tasks: SBC(ready,8.0%,338) HEAT(delaying,0.0%,316) Move(notifyWait,0.0%,333) TMC(delaying,3.5%,147) MAIN(running,84.7%,621) IDLE(ready,3.7%,30), total 100.0%
Owned mutexes: HTTP(MAIN)
=== Platform ===
Last reset 00:00:16 ago, cause: [software]
Last software reset at 2021-12-07 16:11, reason: User, none spinning, available RAM 48040, slot 1
Software reset code 0x0013 HFSR 0x00000000 CFSR 0x00000000 ICSR 0x00400000 BFAR 0xe000ed38 SP 0x00000000 Task SBC Freestk 0 n/a
Error status: 0x00
Step timer max interval 0
MCU temperature: min 47.7, current 48.4, max 48.4
Supply voltage: min 24.0, current 24.0, max 24.0, under voltage events: 0, over voltage events: 0, power good: yes
Heap OK, handles allocated/used 99/2, heap memory allocated/used/recyclable 2048/32/0, gc cycles 0
Driver 0: position 0, 5160 standstill, reads 15680, writes 17, SG min/max not available
Driver 1: position 0, no-driver-detected
Driver 2: position 0, 5160 standstill, reads 15680, writes 17, SG min/max not available
Driver 3: position 0, 2209 standstill, reads 1702, writes 13, error r/w 0/1, ifcnt 27, timeout 0, SG min/max not available
Driver 4: position 0, 2209 standstill, reads 1701, writes 13, error r/w 0/1, ifcnt 27, timeout 0, SG min/max not available
Driver 5: position 0, 2209 standstill, reads 1701, writes 13, error r/w 0/1, ifcnt 27, timeout 0, SG min/max not available
Driver 6: position 0
Driver 7: position 0
Driver 8: position 0
Driver 9: position 0
Driver 10: position 0
Date/time: 2021-12-07 16:12:09
Slowest loop: 1.19ms; fastest: 0.05ms
=== Move ===
DMs created 83, maxWait 0ms, bed compensation in use: none, comp offset 0.000
=== DDARing ===
Scheduled moves 0, completed moves 0, hiccups 0, stepErrors 0, LaErrors 0, Underruns [0, 0, 0], CDDA state -1
=== Heat ===
Bed heaters = 1, chamberHeaters = 2
Heater 0 is on, I-accum = 0.0
=== GCodes ===
Segments left: 0
Movement lock held by null
HTTP* is doing "M122" in state(s) 0
Telnet is idle in state(s) 0
File is idle in state(s) 0
USB is idle in state(s) 0
Aux is idle in state(s) 0
Trigger* is idle in state(s) 0
Queue is idle in state(s) 0
LCD is idle in state(s) 0
SBC is idle in state(s) 0
Daemon is idle in state(s) 0
Aux2 is idle in state(s) 0
Autopause is idle in state(s) 0
Code queue is empty.
=== SBC interface ===
State: 4, failed transfers: 0, checksum errors: 0
Last transfer: 2ms ago
RX/TX seq numbers: 489/489
SPI underruns 0, overruns 0
CRC errors header 0, data 0
Disconnects: 0, timeouts: 0, IAP RAM available 0x0c644
Buffer RX/TX: 0/0-0
=== Duet Control Server ===
Duet Control Server v3.3.0
Code buffer space: 4096
Configured SPI speed: 8000000Hz
Full transfers per second: 33.85, max wait times: 13.0ms/0.0ms
Codes per second: 3.65
Maximum length of RX/TX data transfers: 2565/904