Synced extruder stepper issues

Basic Information:

Printer Model: Frankenstein X5SA 330
MCU / Printerboard: Tronxy F407 + SKR Pico
Host / SBC Pi3B
klippy.log - irrelevant

I’ve started building a MMU for my frankenstein printer out of the parts bin, plus a SKR Pico as an IO expander.

I’ve configured the Pico as an extra MCU, configured the drivers in it as per BTT’s reccomendations, leading to this, where I have the extra channels configured as extruder_steppers.

[extruder_stepper mmu1]
extruder: extruder
step_pin: mmu:gpio11
dir_pin: !mmu:gpio10
enable_pin: !mmu:gpio12
microsteps: 16
rotation_distance: 3.93

[tmc2209 extruder_stepper mmu1]
interpolate: true
uart_pin: mmu:gpio9
tx_pin: mmu:gpio8
uart_address: 0
run_current: 0.700
stealthchop_threshold: 500

All four channels are identical, with the correct pins set. They all work as expected, and I’m using the following code to sync them to the main extruder:

[gcode_macro LINK_MMU1]
gcode: 
    SYNC_EXTRUDER_MOTION EXTRUDER=mmu1 MOTION_QUEUE=extruder
    SYNC_EXTRUDER_MOTION EXTRUDER=mmu2 MOTION_QUEUE=
    SYNC_EXTRUDER_MOTION EXTRUDER=mmu3 MOTION_QUEUE=
    SYNC_EXTRUDER_MOTION EXTRUDER=mmu4 MOTION_QUEUE=

…which runs at the beginning of a print to select the right MMU channel.

The fun part is that surprisingly, the MMU extruder runs WAY faster than the toolhead - they have identical steppers, identical dual gear extruders, both drivers are configured to 16 microsteps physically (MS1 and MS2 pulled high)… and yet it seems as if one of the drivers was ignoring the microsteps configuration.

This is how the extruder is configured:

[extruder]
step_pin: PB1
dir_pin: !PF13
enable_pin: !PF14
microsteps: 16
rotation_distance: 3.93
nozzle_diameter: 0.600
filament_diameter: 1.750
heater_pin: PG7
sensor_type: PT1000
pullup_resistor: 1800
sensor_pin: PC3
min_temp: 0
max_temp: 350
min_extrude_temp: 0
max_extrude_only_distance: 300

I’m at a loss! I’ve tried setting microsteps on the extruder_stepper to 1, to no avail.

Does anyone know what might be happening? The extruder_stepper motor is also skipping steps on acceleration, whereas the toolhead one isn’t.

Thanks in advance!"

How can you tell?

Please attach it to your next post. Thank you.

Also because of this:

No worries, attached. I had a look at the log and couldn’t find anything interesting, that’s why I didn’t post it.

klippy.txt (8.0 MB)

The mmu steppers will obviously skip at those speeds and accels, they are running much quicker than the hot end one and that one’s already cutting it close (they’re all pancake nema17). That’s why it seems directly related to the speeding issue to me and not a symptom of another separate issue.

Sidenote, I’ve just seen the mmu MCU runs at 12MHz… interesting. I must’ve messed up the clock source building the firmware.

Adding to this - the stepper turns at exactly twice the speed of the main extruder. I’ve checked, both motors are 1.8 degrees (just in case). The only difference is that the main MCU runs tmc2208s and the slave runs tmc2209s. Will continue to investigate.

Somehow, the TMC2208 does not appear in the log.

Won’t do, they’re dumb drivers on the factory TronXY board without a UART connection.

At this point I’m almost convinced it’s a hardware difference on the main board that I somehow just got around by using the wrong rotation distance. All four axis are behaving the same in the slave board and honestly, I trust that one more.

I’ll try doubling the rotation distance on the slave drivers see what that does. I presume it’ll just work and I’ll live with that discrepancy! Will update shortly.

So, are the jumpers set correspondingly to the setting in the config (16 microsteps)?

You also may check the current (Vref) because of the skipping you mentioned before.

It has no jumpers, they’re hardwired, but yep. It’s set to 16 microsteps and something’s clearly wrong in hardware, I was just digging about the net and everyone seems to configure their extruder rotation_distance to 7.76, whereas mine I set to half that on the factory board, in order to get accurate extrusion. Matches what I got on the MMU though just now.

Thank you for taking the time to look at this - it’s definitely hardware in my case. Not to worry, the TronXY board is going in the parts draw as I’ve got another SKR Pico that’ll go in at some point.

Thanks again!

Without UART/SPI, you need jumpers to set microsteps on stepper drivers. The 16 microsteps setting in Klipper has no effect on the microsteps the driver uses if you use it in standalone.

Since halving your rotation_distance for your slave motor fixed it, this probably means that your slave motor was running at 32 microsteps but Klipper thought it used 16. You should be able to set the rotation_distance of the slave motor to the same as the driving motor, but set the slave microsteps to 32 to match what the driver thinks.

That’s a much cleaner solution :smiley:

Yeah, I wasn’t clear - the extruder driver (and the others) have traces going from MSx to 3V3/GND directly, not through any jumper as you’d find in more DIY-oriented boards. It’s hardwired in the PCB layout and not adjustable unless you bodge the traces.

It has many other issues that I don’t want to address (already had to do surgery on the board to disable stealthchop on the extruder, change the bias resistor for the PT1000 to read properly and other things), hence me just binning it altogether… I’m sure it’ll come in handy for something else in the future.

1 Like