Issues with dwell timing and 1xd boards
-
@kj3d Please post your full config.g file, and send M115 in the console and post the response. Ensure that you are using the same version of the firmware that is on the mainboard, on the two 1XD boards. An M122 output may also be useful to determine the issue, so please send M122 after the motor movement, and post the response to that too.
Ian
-
Thanks for looking.
; General preferences
M575 P1 S1 B57600 ; enable support for PanelDue
G90 ; send absolute coordinates...
M83 ; ...but relative extruder moves; Wait a moment for the CAN expansion boards to start
G4 S2; Network
M552 P0.0.0.0 S1 ; enable network and acquire dynamic address via DHCP
M586 P0 S1 ; enable HTTP
M586 P1 S0 ; disable FTP
M586 P2 S0 ; disable Telnet; Drives
M569 P24.0 S1 ; X
M569 P31.0 S1 ; Y(first Y)
M569 P32.0 S0 ; (second Y)
M569 P23.0 S0 ; Z
M569 P21.0 S1 ; First Extruder
M569 P22.0 S1 ; Second Extruder
M569 P10.0 S0 ; U(V lift 1)
M569 P11.0 S0 ; V (V lift 2)
M569 P12.0 S0 ; W (V lift 3)
M569 P13.0 S0 ; A (V lift 4)M569.1 P10.0 T2 C2048 R100 I0 D0
M569.1 P11.0 T2 C2048 R100 I0 D0
M569.1 P12.0 T2 C2048 R100 I0 D0
M569.1 P13.0 T2 C2048 R100 I0 D0
M569.1 P24.0 T2 C1000 R200 I0 D0 A0.0 V0M569.7 P10.0 C"out1"
M569.7 P11.0 C"out1"
M569.7 P12.0 C"out1"
M569.7 P13.0 C"out1"M564 H0
M584 X24.0 Y31.0:32.0 Z23.0 E21.0:22.0 U10.0:11.0:12.0:13.0 ; set drive mapping
M350 X16 Y16 Z32 E16:16 U16 I1 ; configure microstepping with interpolation
M92 X160 Y519.64 Z13072 E684.00:684.00 U640 ; set steps per mm
M566 X200.00 Y100.00 Z400 E684.00:684.00 U600 ; set maximum instantaneous speed changes (mm/min)
M203 X20000.00 Y200000.00 Z800 E7200.00:7200.00 U1000 ; set maximum speeds (mm/min)0
M201 X200.00 Y1000.00 Z500 E3000:3000.00 U500 ; set accelerations (mm/s^2)
M906 Z1000 I30 ; set motor currents (mA) and motor idle factor in per cent
M906 X2000 I60
;M906 Y5000 I60
M906 E1300 I10
M906 U5000 I10M84 S60
; Axis Limits
M208 X0 Y0 Z0 U0 S1 ; set axis minima
M208 X1050 Y1200 Z200 U1150 S0 ; set axis maxima; Endstops
M574 X0 S1 P"24.io0.in"
M574 Y0 S1 P"31.io0.in+32.io0.in"
M574 Z2 S1 P"23.io0.in"
M574 U0 S1 P"10.io0.in+11.io0.in+12.io0.in+13.io0.in"; Z-Probe
M950 S0 C"21.io0.out" ; create servo pin 0 for BLTouch
M558 P9 C"21.io0.in" H5 F120 T6000 ; set Z probe type to bltouch and the dive height + speeds
G31 P500 X0 Y0 Z2.5 ; set Z probe trigger value, offset and trigger height
M557 X15:215 Y15:195 S20 ; define mesh grid
M950 S0 C"21.io0.out" ; create servo pin 0 for BLTouch
M558 P9 C"21.io0.in" H5 F120 T6000 ; set Z probe type to bltouch and the dive height + speeds
G31 P500 X0 Y0 Z2.5 ; set Z probe trigger value, offset and trigger height
M557 X15:215 Y15:195 S20 ; define mesh grid; Heaters
M308 S0 P"temp0" Y"thermistor" T100000 B4138 ; configure sensor 0 as thermistor on pin temp0
M950 H0 C"out1" T0 ; create bed heater output on out1 and map it to sensor 0
M307 H0 B1 S1.00 ; enable bang-bang mode for the bed heater and set PWM limit
M140 H0 ; map heated bed to heater 0
M143 H0 S120 ; set temperature limit for heater 0 to 120C
M308 S1 P"21.temp0" Y"thermistor" T500000 B4723 C1.196220e-7 ; configure sensor 1 as thermistor on pin 121.temp0
M950 H1 C"21.out0" T1 ; create nozzle heater output on 21.out0 and map it to sensor 1
M307 H1 R2.802 K0.427:0.000 D9.65 E1.35 S1.00 B0 V24.1
M143 H1 S350 ; set temperature limit for heater 1 to 350C
M308 S2 P"22.temp0" Y"thermistor" T500000 B4723 C1.196220e-7 ; configure sensor 2 as thermistor on pin 22.temp0
M950 H2 C"22.out0" T2 ; create nozzle heater output on 22.out0 and map it to sensor 2
M307 H2 R2.864 K0.486:0.000 D8.37 E1.35 S1.00 B0 V24.2
M143 H2 S350 ; set temperature limit for heater 2 to 350C; Fans
M950 F0 C"21.out2" Q500 ; create fan 0 on pin 121.out1 and set its frequency
M106 P0 S1 H1 T35 ; set fan 0 value. Thermostatic control is turned on
M950 F1 C"22.out2" Q500 ; create fan 1 on pin 122.out1 and set its frequency
M106 P1 S1 H2 T35 ; set fan 1 value. Thermostatic control is turned onM950 F3 C"23.out0" Q500 ; create fan 3 on pin 23.out0 and set its frequency
M950 F4 C"24.out0" Q500 ; create fan 4 on pin 24.out0 and set its frequency
M950 F5 C"31.out0" Q500 ; create fan 5 on pin 31.out0 and set its frequency
M950 F6 C"32.out0" Q500 ; create fan 6 on pin 32.out0 and set its frequency
M950 F8 C"10.out0" Q500 ; create fan 10 on pin 10.out0 and set its frequency (V Lift)
M950 F9 C"11.out0" Q500 ; create fan 11 on pin 11.out0 and set its frequency
M950 F10 C"12.out0" Q500 ; create fan 12 on pin 12.out0 and set its frequency
M950 F11 C"13.out0" Q500 ; create fan 13 on pin 13.out0 and set its frequencyM106 P3 S255
M106 P4 S255M106 P8 S255
M106 P9 S255
M106 P10 S255
M106 P11 S255;MCU Fan
M950 F7 C"!out4+out4.tach" A"MCU" Q500
M308 S3 Y"mcu-temp" P"0.dummy" A"MB MCU"
M106 P7 H7 T33:45 L0.3;MCU Temp Z
M308 S4 Y"mcu-temp" P"23.dummy" A"Z";MCU Temp X Canbus
M308 S5 Y"mcu-temp" P"24.dummy" A"X";MCU Temp Y1 fan Canbus 31
M308 S8 Y"mcu-temp" P"31.dummy" A"Y1"
M106 P5 H5 T20:50 L0.3;MCU Fan Canbus 32
M308 S9 Y"mcu-temp" P"32.dummy" A"Y2"
M106 P6 H6 T20:50 L0.3;MCU Temp V Canbus
M308 S10 Y"mcu-temp" P"10.dummy" A"V10"
M308 S11 Y"mcu-temp" P"11.dummy" A"V11"
M308 S12 Y"mcu-temp" P"12.dummy" A"V12"
M308 S13 Y"mcu-temp" P"13.dummy" A"V13"; Tools
M563 P0 S"Main" D0 H1 F0 ; define tool 0
G10 P0 X0 Y0 Z0 ; set tool 0 axis offsets
G10 P0 R0 S0 ; set initial tool 0 active and standby temperatures to 0C
M563 P1 S"Support" D1 H2 F0 ; define tool 1
G10 P1 X0 Y0 Z0 ; set tool 1 axis offsets
G10 P1 R0 S0 ; set initial tool 1 active and standby temperatures to 0C; Custom settings T0 Autoload and unload
M950 J1 C"^!21.io2.in" ; define logical input for filament auto load
M581 P1 T2 S0 R0 ;define trigger for filament auto load triggers trigger2.g
M950 J2 C"^!21.io3.in" ; define logical input for filament unload
M581 P2 T3 S0 R0 ; define trigger for filament auto load triggers trigger3.g; Custom settings T1 Autoload and unload
M950 J3 C"^!22.io2.in" ; define logical input for filament auto load
M581 P3 T4 S0 R0 ;define trigger for filament auto load triggers trigger4.g
M950 J4 C"^!22.io3.in" ; define logical input for filament unload
M581 P4 T5 S0 R0 ; define trigger for filament auto load triggers trigger5.g -
M115
FIRMWARE_NAME: RepRapFirmware for Duet 3 MB6HC FIRMWARE_VERSION: 3.5.0-rc.1 ELECTRONICS: Duet 3 MB6HC v1.01 FIRMWARE_DATE: 2023-08-31 16:19:24
M115 B31
Duet EXP1XD firmware version 3.5.0-rc.1 (2023-08-31 16:26:49)M115 B32
Duet EXP1XD firmware version 3.5.0-rc.1 (2023-08-31 16:26:49) -
M122
=== Diagnostics ===
RepRapFirmware for Duet 3 MB6HC version 3.5.0-rc.1 (2023-08-31 16:19:24) running on Duet 3 MB6HC v1.01 (standalone mode)
Board ID: 08DJM-956BA-NA3TJ-6JKDG-3SS6M-TUBAV
Used output buffers: 3 of 40 (22 max)
=== RTOS ===
Static ram: 154852
Dynamic ram: 122464 of which 0 recycled
Never used RAM 65676, free system stack 148 words
Tasks: NETWORK(1,ready,38.4%,155) ETHERNET(5,nWait,0.1%,319) HEAT(3,nWait,0.0%,325) Move(4,nWait,0.0%,216) CanReceiv(6,nWait,0.2%,794) CanSender(5,nWait,0.0%,330) CanClock(7,delaying,0.0%,349) TMC(4,nWait,8.3%,59) MAIN(1,running,52.9%,444) IDLE(0,ready,0.0%,30), total 100.0%
Owned mutexes:
=== Platform ===
Last reset 00:10:41 ago, cause: power up
Last software reset at 2023-12-04 17:11, reason: User, Gcodes spinning, available RAM 65652, slot 2
Software reset code 0x0003 HFSR 0x00000000 CFSR 0x00000000 ICSR 0x0044a000 BFAR 0x00000000 SP 0x00000000 Task MAIN Freestk 0 n/a
Error status: 0x00
Aux0 errors 0,0,0
MCU temperature: min 18.5, current 29.4, max 29.4
Supply voltage: min 24.1, current 24.1, max 24.3, under voltage events: 0, over voltage events: 0, power good: yes
12V rail voltage: min 12.0, current 12.0, max 12.1, under voltage events: 0
Heap OK, handles allocated/used 99/0, heap memory allocated/used/recyclable 2048/4/4, gc cycles 0
Events: 0 queued, 0 completed
Driver 0: standstill, SG min n/a, mspos 8, reads 13165, writes 11 timeouts 0
Driver 1: standstill, SG min n/a, mspos 8, reads 13166, writes 11 timeouts 0
Driver 2: standstill, SG min n/a, mspos 8, reads 13166, writes 11 timeouts 0
Driver 3: standstill, SG min n/a, mspos 8, reads 13166, writes 11 timeouts 0
Driver 4: standstill, SG min n/a, mspos 8, reads 13166, writes 11 timeouts 0
Driver 5: standstill, SG min n/a, mspos 8, reads 13166, writes 11 timeouts 0
Date/time: 2023-12-04 17:30:53
Slowest loop: 13.67ms; fastest: 0.08ms
=== Storage ===
Free file entries: 20
SD card 0 detected, interface speed: 25.0MBytes/sec
SD card longest read time 2.9ms, write time 0.0ms, max retries 0
=== Move ===
DMs created 125, segments created 6, maxWait 545988ms, bed compensation in use: none, height map offset 0.000, ebfmin 0.00, ebfmax 0.00
no step interrupt scheduled
Moves shaped first try 0, on retry 0, too short 0, wrong shape 0, maybepossible 0
=== DDARing 0 ===
Scheduled moves 17, completed 17, hiccups 0, stepErrors 0, LaErrors 0, Underruns [0, 0, 1], CDDA state -1
=== DDARing 1 ===
Scheduled moves 0, completed 0, hiccups 0, stepErrors 0, LaErrors 0, Underruns [0, 0, 0], CDDA state -1
=== Heat ===
Bed heaters 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1, chamber heaters -1 -1 -1 -1, ordering errs 0
=== GCodes ===
Movement locks held by null, null
HTTP is idle 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
File2 is idle in state(s) 0
Queue2 is idle in state(s) 0
Q0 segments left 0, axes/extruders owned 0x0000001
Code queue 0 is empty
Q1 segments left 0, axes/extruders owned 0x0000000
Code queue 1 is empty
=== CAN ===
Messages queued 5953, received 107668, lost 0, boc 0
Longest wait 13ms for reply type 6018, peak Tx sync delay 101, free buffers 50 (min 48), ts 3209/3208/0
Tx timeouts 0,0,0,0,0,0
=== Network ===
Slowest loop: 13.02ms; fastest: 0.03ms
Responder states: MQTT(0) HTTP(0) HTTP(0) HTTP(0) HTTP(0) HTTP(0) HTTP(0) FTP(0) Telnet(0) Telnet(0)
HTTP sessions: 1 of 8
= Ethernet =
Interface state: active
Error counts: 0 0 0 1 0 0
Socket states: 5 2 2 2 2 0 0 0
=== Multicast handler ===
Responder is inactive, messages received 0, responses 0 -
M122 B31
Diagnostics for board 31:
Duet EXP1XD firmware version 3.5.0-rc.1 (2023-08-31 16:26:49)
Bootloader ID: SAMC21 bootloader version 2.3 (2021-01-26b1)
All averaging filters OK
Never used RAM 5136, free system stack 71 words
Tasks: Move(3,nWait,0.0%,87) HEAT(2,nWait,0.1%,125) CanAsync(5,nWait,0.0%,55) CanRecv(3,nWait,0.2%,76) CanClock(5,nWait,0.0%,67) MAIN(1,running,80.3%,421) IDLE(0,ready,0.0%,40) AIN(2,nWait,19.4%,112), total 100.0%
Last reset 00:11:44 ago, cause: power up
Last software reset data not available
Driver 0: pos -789853, 519.6 steps/mm, steps req 0 done 2998277
Moves scheduled 10, completed 10, in progress 0, hiccups 233422, segs 15, step errors 0, maxPrep 673, maxOverdue 12203598, maxInc 2443085, mcErrs 0, gcmErrs 0, ebfmin 0.00 max 0.00
Peak sync jitter 1/6, peak Rx sync delay 462, resyncs 0/0, no timer interrupt scheduled
VIN voltage: min 17.6, current 24.3, max 24.7
MCU temperature: min 18.2C, current 21.5C, max 21.7C
Last sensors broadcast 0x00000100 found 1 35 ticks ago, 0 ordering errs, loop time 0
CAN messages queued 11294, send timeouts 0, received 31655, lost 0, free buffers 18, min 17, error reg 0
dup 0, oos 0/0/0/0, bm 0, wbm 0, rxMotionDelay 359, adv 35880/36912 -
M122 B32
Diagnostics for board 32:
Duet EXP1XD firmware version 3.5.0-rc.1 (2023-08-31 16:26:49)
Bootloader ID: SAMC21 bootloader version 2.3 (2021-01-26b1)
All averaging filters OK
Never used RAM 5160, free system stack 73 words
Tasks: Move(3,nWait,0.0%,83) HEAT(2,nWait,0.1%,131) CanAsync(5,nWait,0.0%,55) CanRecv(3,nWait,0.2%,76) CanClock(5,nWait,0.0%,67) MAIN(1,running,80.3%,421) IDLE(0,ready,0.0%,40) AIN(2,nWait,19.4%,112), total 100.0%
Last reset 00:12:30 ago, cause: power up
Last software reset data not available
Driver 0: pos -789853, 519.6 steps/mm, steps req 0 done 2998360
Moves scheduled 10, completed 10, in progress 0, hiccups 233461, segs 15, step errors 0, maxPrep 679, maxOverdue 12203782, maxInc 2442506, mcErrs 0, gcmErrs 0, ebfmin 0.00 max 0.00
Peak sync jitter 0/5, peak Rx sync delay 360, resyncs 0/0, no timer interrupt scheduled
VIN voltage: min 17.5, current 24.3, max 24.6
MCU temperature: min 15.4C, current 17.0C, max 17.3C
Last sensors broadcast 0x00000200 found 1 102 ticks ago, 0 ordering errs, loop time 0
CAN messages queued 12030, send timeouts 0, received 33729, lost 0, free buffers 18, min 17, error reg 0
dup 0, oos 0/0/0/0, bm 0, wbm 0, rxMotionDelay 438, adv 36171/37181 -
-
@kj3d said in Issues with dwell timing and 1xd boards:
In order to configure the servos a simple macro was setup
Can you post the macro as well, please?
Ian
-
Thanks, please see below the macro used for testing Y axis. (number of cycles at line 3 varied between 4 and 100 - dwell issue is present in every cycle)
-
@kj3d thanks for the details.
First, please update all boards to the firmware at https://www.dropbox.com/scl/fo/gaxzegafmnmagaefo9mgc/h?rlkey=hk4wpttdje76oews8zkuh86q3&dl=0 and test again. Caution, this is not an official release so use it with care.
If the problem persists, then in order to identify the cause we need to see whether the uneven delay on the second motor is caused by the servo drive, the 1XD, or the firmware. So please try each of the following individually and let me know the result:
-
In your M584 command change Y31.0:32.0 to Y32.0:31.0 and reboot. Does the problem stay with the same motor, or does it move to the other one?
-
If the problem stays with the same motor, swap the CAN addresses of the boards, e.g. use M952 to change board 31 to address 99, then change board 32 to be 31, then change board 99 to be 32. Then reboot and test again. Does the problem stay with the same motor?
-
If for both of the above the problem stays with the same motor, swap the connections between the servo drives and the 1XD boards. Does the problem move with the servo drive, or move to the other drive (i.e. stay with the 1XD board)?
-
-
Thank you for your reply and an insight into the latest firmware. The good news is that the firmware has not caused any obvious issues (we are always very wary / cautious)
However the dwell timing issue is still present. I have been through the three points you listed and it has not cured the issue.
The most significant "controlling" factor seems to be the direction called in the M569 call. after dwell the motor with S1 starts earlier than the motor with S0.
M569 P31.0 S1 ; Y (first Y)
M569 P32.0 S0 ; Y (second Y)The Clearpath servos give us the option to reverse motor direction in the firmware of the servo (we can then run both Y M569 lines as S1 or S0 - that gets round the issue on an operational level but does require a service engineer to configure a motor dependent on if its on the left or right side of the gantry. We would prefer not to do that (it increases the risk of an error during replacement of a servo - should it be needed. It seems much simpler to take a stock motor and simply fit it rather than having to use left hand or right hand direction motors)
We are fairly certain that the issue is Firmware related rather than a fault on the 1XD boards.
How is the dwell period controlled for timing from the hardware?