Solved 3.5.0rc1: Input shaping causes layer shifts!?
-
@dc42 Yes, I still get that sound with Spreadcycle (edit) and Input shaping enabled (/edit) (noted above in the post about the first test with Spreadcycle) but I indeed forgot to mention that in the summary. It seems in relation to the printing noise more silent though. (On the other hand, the printer is quite noisy with Spreadcycle so that might the cause for the observation)
-
@NeoDue thanks, a bang that isn't related to stealthchop could mean that something is wrong with the step pulse train. However, your M122 reports all show the maximum late steps as 1, so it's not caused by steps being scheduled for times after the move is supposed to finish.
-
@NeoDue Just to confirm, when you get the layer shift at 2.5mm in spreadcycle, do you hear a bang then or is that only at the layer shift at 5.5mm?
I had a look at the gcode and I could not see anything that was out of the ordinary around the 2.5mm layer height. Could you provide some information about your printer and the print? It looks like it may be an idex of some sort? With your test print I think you use both tools, but looking at the gcode it looks like the first layer shift at 2.5mm happens before the second tool is used, is that correct?
-
@NeoDue Also what input shaper settings are you currently using when running this test?
-
@NeoDue I've tried printing your file twice on my E3D toolchanger and didn't get any layer shifts or hear any bangs up to 6mm height, which is where I stopped it. However the adhesion between the top part and the bed wasn't sufficient so that part broke away. I saw it curling up a little before it broke away.
I wasn't using the same config.g settings as you are, so I'll try again with those settings. Please provide your up to date config.g file including the input shaping setting you are using.
-
@gloomyandy Sorry! I forget that you have a lot of communications here and therefore probably do not remember previous discussions
The printer is a Snapmaker J1 (an IDEX printer indeed) where I replaced the original Marlin controller with the Duet. Apart from that, it is mostly as delivered from the factory - exceptions are parts of the hotends and the filament sensors, all not relevant in our case.
The steppers are from a company called Mocotech. You cannot find much about those since they do not seem to sell them separately, but I managed to dig out a datasheet for the y stepper:
Looks pretty standard to me...The print is a battery box that was sliced in Prusaslicer. Black is printed with hotend 1, green with hotend 2. I did not choose this part deliberately, it simply was the first part I printed after activating Input shaping.
I have tested both of the two Input shaping settings noted in my config.pro, both behave identical in terms of the issue. The bang only happens at the 5.5...5.65mm y axis layer shift, but due to the construction of the printer (classic cartesian XY head printer, just a second printhead added), Y has a signifcantly higher mass which ends up in a much higher impulse than such an effect would have if it occurred on the X axis.
-
@dc42 did you use the config.pro from the post https://forum.duet3d.com/post/332000 ?
Both M593 Input shaping commands are included there and one is active. (There are two since the results from the plugin suggest these two produce identical results and I want to choose the one that creates better results in reality).
-
@dc42 said in 3.5.0rc1: Input shaping causes layer shifts!?:
thanks, a bang that isn't related to stealthchop could mean that something is wrong with the step pulse train. However, your M122 reports all show the maximum late steps as 1, so it's not caused by steps being scheduled for times after the move is supposed to finish.
@dc42 thanks for that information. If I translate "step pulse train" correctly, something like this is what I would suspect, judging from what I see. Are there any thinkable cases where such a delayed step might happen without showing up in M122?
I also have an oscilloscope here which is however limited to 10MHz / 1MHz for single shots due to its age (it is an old Tek222). If it helps, I could try to measure something - stepper currents or such, but I am afraid my rusty electronics knowledge needs advice on what might be appropriate or what might be harmful (well, apart from the obvious risk of creating a short circuit... maybe some effects of the capacity of the probe or such ...?
-
@gloomyandy just an update on the M915 T topic: the current rc3 changelog makes it clear: "[Duet 3 MB6HC] [Duet 3 EXP3HC] [Duet 3 EXP1HCL] If you were using the T parameter of the M915 command, this value was incorrectly being written to the stall sensitivity register in previous releases. It is now written to the correct register (COOLCONF)."
This means your initial thought was right after all and the documentation at https://docs.duet3d.com/en/User_manual/Connecting_hardware/Motors_tuning#configuring-coolstep is wrong
-
@NeoDue Yes we had a discussion about this offline @droftarts I think this section (which mentions using M915 T) may need reviewing: https://docs.duet3d.com/en/User_manual/Connecting_hardware/Motors_tuning#stealthchop-tuning
@NeoDue I thinik that this section is now correct: https://docs.duet3d.com/en/User_manual/Connecting_hardware/Motors_tuning#configuring-coolstep
-
undefined NeoDue referenced this topic
-
@gloomyandy Sorry, haven't had a chance to update it yet!
Ian
-
@droftarts May I ask you to move the latest posts regarding M915 in this thread to the thread I just created? https://forum.duet3d.com/topic/34802/how-to-use-m915-t-parameter
That might help others to find that information more easily.
-
All, if you have been getting layer shifts associated with enabling input shaping when using 3.5 beta and RC versions, please try the binaries at https://www.dropbox.com/scl/fo/p0136wx04h8xf6ejwdnn9/h?rlkey=efrfwyb6o5tqid11gustz3uvy&dl=0. I found and fixed a possible cause of these, but as I can't reproduce the problem I don't know whether the issue is fixed or not.
-
@dc42 thanks a lot for your detective work! I will upgrade and test this weekend!
-
@dc42 I think I’m suffering from the same issue. This new version didn’t fix my layer shift issue.
-
@adrian please provide a M122 report taken after the layer shifts occur. Note, if you run M122 more than once, then only the first M122 report after the layer shifts contains the data that I am interested in.
-
This post is deleted! -
code_text ```=== Diagnostics === RepRapFirmware for Duet 3 MB6HC version 3.5.0-rc.3+ (2024-02-01 12:47:37) running on Duet 3 MB6HC v1.02 or later (standalone mode) Board ID: 08DJM-956BA-NA3TJ-6J1F8-3S06Q-1U86S Used output buffers: 7 of 40 (40 max) === RTOS === Static ram: 155208 Dynamic ram: 124836 of which 592 recycled Never used RAM 61708, free system stack 134 words Tasks: NETWORK(1,ready,504.0%,156) ETHERNET(5,nWait 7,0.6%,117) ACCEL(6,nWait 6,0.0%,344) HEAT(3,nWait 6,0.7%,321) Move(4,nWait 6,36.1%,218) CanReceiv(6,nWait 1,0.0%,940) CanSender(5,nWait 7,0.0%,334) CanClock(7,delaying,0.2%,334) TMC(4,nWait 6,186.1%,54) MAIN(1,running,222.1%,103) IDLE(0,ready,1.1%,30), total 950.9% Owned mutexes: LwipCore(NETWORK) === Platform === Last reset 03:22:06 ago, cause: software Last software reset at 2024-02-02 12:11, reason: User, Gcodes spinning, available RAM 65356, slot 2 Software reset code 0x0003 HFSR 0x00000000 CFSR 0x00000000 ICSR 0x00400000 BFAR 0x00000000 SP 0x00000000 Task MAIN Freestk 0 n/a Error status: 0x04 Aux0 errors 0,0,0 MCU temperature: min 31.8, current 34.0, max 34.6 Supply voltage: min 23.9, current 24.1, max 24.2, under voltage events: 0, over voltage events: 0, power good: yes 12V rail voltage: min 11.7, current 12.0, max 12.7, under voltage events: 0 Heap OK, handles allocated/used 99/1, heap memory allocated/used/recyclable 2048/56/32, gc cycles 0 Events: 0 queued, 0 completed Driver 0: ok, SG min 0, mspos 918, reads 13068, writes 19 timeouts 0 Driver 1: standstill, SG min 0, mspos 888, reads 13069, writes 19 timeouts 0 Driver 2: ok, SG min 0, mspos 386, reads 13069, writes 19 timeouts 0 Driver 3: standstill, SG min 0, mspos 952, reads 13065, writes 23 timeouts 0 Driver 4: standstill, SG min 0, mspos 952, reads 13065, writes 23 timeouts 0 Driver 5: standstill, SG min 0, mspos 952, reads 13066, writes 23 timeouts 0 Date/time: 2024-02-02 15:33:55 Slowest loop: 234.18ms; fastest: 0.05ms === Storage === Free file entries: 18 SD card 0 detected, interface speed: 25.0MBytes/sec SD card longest read time 21.9ms, write time 0.0ms, max retries 0 === Move === DMs created 125, segments created 33, maxWait 1632841ms, bed compensation in use: mesh, height map offset 0.000, max steps late 1, min interval -6296, bad calcs 0, ebfmin -1.00, ebfmax 1.00 next step interrupt due in 156 ticks, disabled Moves shaped first try 14497, on retry 14831, too short 42037, wrong shape 89748, maybepossible 5393 === DDARing 0 === Scheduled moves 188118, completed 188083, hiccups 0, stepErrors 0, LaErrors 0, Underruns [0, 0, 0], CDDA state 3 === 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 2 -1 -1 -1, ordering errs 0 Heater 0 is on, I-accum = 0.2 Heater 1 is on, I-accum = 0.3 Heater 2 is on, I-accum = 0.0 === GCodes === Movement locks held by null, null HTTP is idle in state(s) 0 Telnet is idle in state(s) 0 File is doing "G1 F12000" 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, sync state 1 Queue2 is idle in state(s) 0 Q0 segments left 1, axes/extruders owned 0x80000007 Code queue 0 is empty Q1 segments left 0, axes/extruders owned 0x0000000 Code queue 1 is empty === CAN === Messages queued 109136, received 0, lost 0, errs 57612837, boc 0 Longest wait 0ms for reply type 0, peak Tx sync delay 0, free buffers 50 (min 50), ts 60632/0/0 Tx timeouts 0,0,60631,0,0,48503 last cancelled message type 30 dest 127 === Network === Slowest loop: 219.37ms; 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: 3 of 8 = Ethernet = Interface state: active Error counts: 0 0 8 1 0 0 Socket states: 5 2 2 2 2 0 0 0 === WiFi === Interface state: disabled Module is disabled Failed messages: pending 0, notrdy 0, noresp 0 Socket states: 0 0 0 0 0 0 0 0 === Multicast handler === Responder is inactive, messages received 0, responses 0 2/2/2024, 3:33:55 PM M122 === Diagnostics === RepRapFirmware for Duet 3 MB6HC version 3.5.0-rc.3+ (2024-02-01 12:47:37) running on Duet 3 MB6HC v1.02 or later (standalone mode) Board ID: 08DJM-956BA-NA3TJ-6J1F8-3S06Q-1U86S Used output buffers: 7 of 40 (40 max) === RTOS === Static ram: 155208 Dynamic ram: 124836 of which 592 recycled Never used RAM 61708, free system stack 134 words Tasks: NETWORK(1,ready,504.0%,156) ETHERNET(5,nWait 7,0.6%,117) ACCEL(6,nWait 6,0.0%,344) HEAT(3,nWait 6,0.7%,321) Move(4,nWait 6,36.1%,218) CanReceiv(6,nWait 1,0.0%,940) CanSender(5,nWait 7,0.0%,334) CanClock(7,delaying,0.2%,334) TMC(4,nWait 6,186.1%,54) MAIN(1,running,222.1%,103) IDLE(0,ready,1.1%,30), total 950.9% Owned mutexes: LwipCore(NETWORK) === Platform === Last reset 03:22:06 ago, cause: software Last software reset at 2024-02-02 12:11, reason: User, Gcodes spinning, available RAM 65356, slot 2 Software reset code 0x0003 HFSR 0x00000000 CFSR 0x00000000 ICSR 0x00400000 BFAR 0x00000000 SP 0x00000000 Task MAIN Freestk 0 n/a Error status: 0x04 Aux0 errors 0,0,0 MCU temperature: min 31.8, current 34.0, max 34.6 Supply voltage: min 23.9, current 24.1, max 24.2, under voltage events: 0, over voltage events: 0, power good: yes 12V rail voltage: min 11.7, current 12.0, max 12.7, under voltage events: 0 Heap OK, handles allocated/used 99/1, heap memory allocated/used/recyclable 2048/56/32, gc cycles 0 Events: 0 queued, 0 completed Driver 0: ok, SG min 0, mspos 918, reads 13068, writes 19 timeouts 0 Driver 1: standstill, SG min 0, mspos 888, reads 13069, writes 19 timeouts 0 Driver 2: ok, SG min 0, mspos 386, reads 13069, writes 19 timeouts 0 Driver 3: standstill, SG min 0, mspos 952, reads 13065, writes 23 timeouts 0 Driver 4: standstill, SG min 0, mspos 952, reads 13065, writes 23 timeouts 0 Driver 5: standstill, SG min 0, mspos 952, reads 13066, writes 23 timeouts 0 Date/time: 2024-02-02 15:33:55 Slowest loop: 234.18ms; fastest: 0.05ms === Storage === Free file entries: 18 SD card 0 detected, interface speed: 25.0MBytes/sec SD card longest read time 21.9ms, write time 0.0ms, max retries 0 === Move === DMs created 125, segments created 33, maxWait 1632841ms, bed compensation in use: mesh, height map offset 0.000, max steps late 1, min interval -6296, bad calcs 0, ebfmin -1.00, ebfmax 1.00 next step interrupt due in 156 ticks, disabled Moves shaped first try 14497, on retry 14831, too short 42037, wrong shape 89748, maybepossible 5393 === DDARing 0 === Scheduled moves 188118, completed 188083, hiccups 0, stepErrors 0, LaErrors 0, Underruns [0, 0, 0], CDDA state 3 === 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 2 -1 -1 -1, ordering errs 0 Heater 0 is on, I-accum = 0.2 Heater 1 is on, I-accum = 0.3 Heater 2 is on, I-accum = 0.0 === GCodes === Movement locks held by null, null HTTP is idle in state(s) 0 Telnet is idle in state(s) 0 File is doing "G1 F12000" 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, sync state 1 Queue2 is idle in state(s) 0 Q0 segments left 1, axes/extruders owned 0x80000007 Code queue 0 is empty Q1 segments left 0, axes/extruders owned 0x0000000 Code queue 1 is empty === CAN === Messages queued 109136, received 0, lost 0, errs 57612837, boc 0 Longest wait 0ms for reply type 0, peak Tx sync delay 0, free buffers 50 (min 50), ts 60632/0/0 Tx timeouts 0,0,60631,0,0,48503 last cancelled message type 30 dest 127 === Network === Slowest loop: 219.37ms; 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: 3 of 8 = Ethernet = Interface state: active Error counts: 0 0 8 1 0 0 Socket states: 5 2 2 2 2 0 0 0 === WiFi === Interface state: disabled Module is disabled Failed messages: pending 0, notrdy 0, noresp 0 Socket states: 0 0 0 0 0 0 0 0 === Multicast handler === Responder is inactive, messages received 0, responses 0
-
@dc42 Here is my result with rc3+ - sadly no improvement:
- 1st test: Spreadcycle, all other M569 settings unchanged from default, input shaping OFF: part printed flawlessly.
- 2nd test: identical setting as above, only input shaping enabled: three layer shifts within the first 4mm.
M122 result:
M122 === Diagnostics === RepRapFirmware for Duet 3 MB6HC version 3.5.0-rc.3+ (2024-02-01 12:47:37) running on Duet 3 MB6HC v1.02 or later (standalone mode) Board ID: 08DJM-956BA-NA3TN-6JTDL-3SN6L-998UU Used output buffers: 3 of 40 (40 max) === RTOS === Static ram: 155208 Dynamic ram: 124488 of which 208 recycled Never used RAM 62608, free system stack 134 words Tasks: NETWORK(2,nWait 7,16.2%,172) HEAT(3,nWait 6,0.0%,321) Move(4,nWait 6,2.4%,237) CanReceiv(6,nWait 1,0.0%,940) CanSender(5,nWait 7,0.0%,334) CanClock(7,delaying,0.0%,334) TMC(4,nWait 6,10.1%,56) MAIN(1,running,70.4%,103) IDLE(0,ready,0.8%,30), total 100.0% Owned mutexes: WiFi(NETWORK) === Platform === Last reset 00:52:37 ago, cause: software Last software reset at 2024-02-02 23:20, reason: User, Gcodes spinning, available RAM 63280, slot 0 Software reset code 0x0003 HFSR 0x00000000 CFSR 0x00000000 ICSR 0x0044a000 BFAR 0x00000000 SP 0x00000000 Task MAIN Freestk 0 n/a Error status: 0x04 Aux0 errors 0,4,0 MCU temperature: min 44.7, current 47.6, max 47.9 Supply voltage: min 23.6, current 23.8, max 24.1, under voltage events: 0, over voltage events: 0, power good: yes 12V rail voltage: min 12.0, current 12.4, max 12.7, under voltage events: 0 Heap OK, handles allocated/used 99/3, heap memory allocated/used/recyclable 2048/1288/1236, gc cycles 10 Events: 0 queued, 0 completed Driver 0: ok, SG min 0, mspos 280, reads 52173, writes 53 timeouts 0 Driver 1: standstill, SG min 0, mspos 248, reads 52183, writes 43 timeouts 0 Driver 2: standstill, SG min 0, mspos 760, reads 52191, writes 35 timeouts 0 Driver 3: ok, SG min 0, mspos 616, reads 52191, writes 35 timeouts 0 Driver 4: standstill, SG min 0, mspos 966, reads 52203, writes 23 timeouts 0 Driver 5: ok, SG min 0, mspos 150, reads 52196, writes 31 timeouts 0 Date/time: 2024-02-03 00:12:49 Slowest loop: 214.76ms; fastest: 0.06ms === Storage === Free file entries: 18 SD card 0 detected, interface speed: 25.0MBytes/sec SD card longest read time 5.4ms, write time 2.8ms, max retries 0 === Move === DMs created 125, segments created 26, maxWait 115048ms, bed compensation in use: none, height map offset 0.000, max steps late 1, min interval -4859, bad calcs 0, ebfmin -1.00, ebfmax 1.00 next step interrupt due in 205 ticks, disabled Moves shaped first try 21, on retry 714, too short 4374, wrong shape 36091, maybepossible 2710 === DDARing 0 === Scheduled moves 57022, completed 56971, hiccups 0, stepErrors 0, LaErrors 0, Underruns [0, 0, 24], CDDA state 3 === 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 Heater 0 is on, I-accum = 0.2 Heater 1 is on, I-accum = 0.4 === 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) 3 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, sync state 1 Queue2 is idle in state(s) 0 Q0 segments left 5, axes/extruders owned 0x80000007 Code queue 0 is empty Q1 segments left 0, axes/extruders owned 0x0000000 Code queue 1 is empty === Filament sensors === check 27757672 clear 9040809 Extruder 0 sensor: ok Extruder 1 sensor: ok === CAN === Messages queued 28413, received 0, lost 0, errs 14980905, boc 0 Longest wait 0ms for reply type 0, peak Tx sync delay 0, free buffers 50 (min 50), ts 15790/0/0 Tx timeouts 0,0,15789,0,0,12622 last cancelled message type 4514 dest 127 === Network === Slowest loop: 175.13ms; fastest: 0.00ms Responder states: MQTT(0) HTTP(0) HTTP(2) HTTP(0) HTTP(0) HTTP(0) HTTP(0) FTP(0) Telnet(0) Telnet(0) HTTP sessions: 2 of 8 = Ethernet = Interface state: disabled Error counts: 0 0 0 0 0 0 Socket states: 0 0 0 0 0 0 0 0 === WiFi === Interface state: active Module is connected to access point Failed messages: pending 0, notrdy 0, noresp 0 Firmware version 2.1beta6 MAC address 70:04:1d:be:ad:b8 Module reset reason: Power up, Vcc 0.00, flash size 4194304, free heap 221260 WiFi IP address 192.168.178.31 Signal strength -58dBm, channel 2, mode 802.11n, reconnections 0 Clock register 00002002 Socket states: 0 0 0 0 0 0 0 0 === Multicast handler === Responder is inactive, messages received 0, responses 0
Edit: here are also two pictures of the shifted part:
-
For the sake of completeness, here is also the current config.g as it was used for the second print:
; Konfigurationsdatei für Duet WiFi Firmware 3.5.0rc3 ; Stand: 03.02.2023 G4 P2000 ; 2s warten, daß die Duet in Ruhe starten kann - hilft bei einem Reset?? ; Allgemeine Einstellungen ; M451 ; FDM-Drucker M669 K0 S50 ; Kartesischer Drucker, 20ms Mindest-Segmentzeit von Marlin-Sourcen des J1 übernommen M111 S0 ; Debugging aus G21 ; Basiseinheit Millimeter G90 ; Absolute Koordinaten... M83 ; ... außer beim Extruder M555 P1 ; Firmware-Kompatibilität wie RepRapFirmware M200 D1.75 ; Filamentdurchmesser 1,75mm für alle Extruder (nicht notwendig, aber es schadet nicht) ; globale Variablen ; if !exists(global.Druckplattendicke) global Druckplattendicke = 5.00 ; Dicke der Druckplatte if !exists(global.Z_Limit_min) global Z_Limit_min = 200 ; kleinster zulässiger Max-Wert für Z if !exists(global.Z_Limit_max) global Z_Limit_max = 216 ; größter zulässiger Max-Wert für Z ; PanelDue ; ;M575 P1 S1 B115200 ; IO-Port für PanelDue aktivieren M575 P1 S1 B57600 ; testweise auf 57600 Baud reduziert ; Definition der Sensoren - 2x PT100 mit Vorverstärker am Hotend, 1x 100K-NTC (laut Marlin ein Epcos 100k-Thermistor?) am Bett ; M308 S0 P"temp0" Y"thermistor" A"T_Heizbett" T100000 B4092 ; Sensor 0 = Heizbett-Temperatursensor ; Hotend-Temperatursensoren - Anmerkungen: ; 1. die Vorverstärker im Hotend arbeiten nur im Bereich von 120...310°C linear. Daher weichen die Anzeigewerte insbesondere bei Raumtemperatur ca. 10...15° nach unten ab. ; 2. Originalwerte laut der Sensorkurve von Snapmaker in Marlin: B-121.551 C549.644. Damit ist der Ausgabewert aber bei 190°C mindestens 2°C zu niedrig (außen am Heizblock gemessen) ; Daher Anzeigewert um 5°C nach oben korrigiert auf: M308 S1 P"temp1" Y"linear-analog" A"T_Hotend1" F1 B-116.551 C554.644 ; Sensor 1 = PT100 mit Vorverstärker am Hotend 1 (links). GND und 3,3V kommen vom Filamentsensor, Signal an Pin Temp1 legen! M308 S2 P"temp2" Y"linear-analog" A"T_Hotend2" F1 B-116.551 C554.644 ; Sensor 2 = PT100 mit Vorverstärker am Hotend 1 (links). GND und 3,3V kommen vom Filamentsensor, Signal an Pin Temp2 legen! ; M308 S3 P"temp3" Y"thermistor" A"Bauraum" T100000 B4092 ; reserviert für Sensor 3 = Sensor für Bauraumheizung M308 S10 Y"mcu-temp" A"Elektronik" ; Sensor 10 = Prozessortemperatur der Duet für Elektronikraumkühlung - die Stepper haben nur einen dreistufigen Temperatursensor M308 S11 Y"drivers" A"Steppertreiber" ; Sensor 11 = Steppertreibertemperatur der Duet. 0°C=normal, 100°C=Überhitzungswarnung, 130°C=überhitzt. ; Definition der Anschlüsse ; Führendes "!": Pin wird zum Prozessor hin invertiert, die Firmware macht das automatisch) ; 2-Pin-Lüfter am 4-Pin-Anschluß: einfach nur die beiden Pins V_OUTLCx und OUTx benutzen, den Rest frei lassen ; Lüfter mit VIN (24V) betreiben - Jumper entsprechend setzen ; M950 H0 C"out0" T0 ; Heizelement 0 (Heizbett mit Temperatursensor 0) M950 H1 C"out1" T1 ; Heizelement 1 (Extruder-Heizung mit Temperatursensor 1) M950 H2 C"out2" T2 ; Heizelement 2 (Extruder-Heizung mit Temperatursensor 2) ; H3 (out3) freihalten für Bauraumheizung M950 F0 C"out4" Q50 ; Lüfter 1 (Bauteilkühlung Hotend 1) PWM-Frequenz 50 Hz (sonst schwankt die Drehzhl) M950 F1 C"out5" Q50 ; Lüfter 2 (Bauteilkühlung Hotend 2) PWM-Frequenz 50 Hz (sonst schwankt die Drehzahl) M950 F2 C"out7" Q500 ; Lüfter 3 (Hotendkühlung Hotend 1) M950 F3 C"out8" Q500 ; Lüfter 4 (Hotendkühlung Hotend 2) M950 F4 C"out6" Q50 ; Lüfter 5 (Elektronikraumlüfter) PWM-Frequenz 50 Hz (sonst schwankt die Drehzahl) M950 P9 C"out9" Q100 ; LED-Streifen an Ausgang 9 ; Definition der Antriebe ; falls die Timings manuell justiert werden müssen: Parameter T1:1:0.5:6 F6 = 1us min.step pulse, 1us min.step interval, 0,5us DIR setup time, hold time 6us, Toff=6 ; Originale Daten: ; Normal: TMC StealthChop für alle Achsen an, max. Tempo X200 Y200 mm/s, max. Beschleunigung X8000 Y8000 mm/s² ; Silent: TMC StealthChop für alle Achsen an, max. Tempo X105 Y105 mm/s, max. Beschleunigung X3000 Y3000 mm/s² ; Performance (Laut): TMC StealthChop für X und Y aus, max. Tempo X350 Y350 mm/s, max. Beschleunigung M201 X10000 Y10000 mm/s² ; Steppereinstellungen von Snapmaker am TMC2660 - Achtung: Snapmaker ändert im Idle-Zustand einige der Parameter! ; Stealthchop: für alle Stepper eingeschaltet <-- macht bei den Extrudern null Sinn. ; TPWMTHRS: X und Y: 8, Z: 16, E: Defaultwert (welcher auch immer das sein mag...egal, s.o.) ; Timing aus Marlin-Defaults: off-time 4 --> F4, hysteresis_end 1, hysteresis_start 2 --> Y0:5 ; ; Defaultwerte der Duet: ccr 0x08053, toff 3, tblank 1, thigh 200 (46.9 mm/sec), tpwmthrs 200 (46.9 mm/sec), pwmScaleSum 26, pwmScaleAuto 0, pwmOfsAuto 39, pwmGradAuto 0, pos 760 ; ; Werte aus der Duet-Hilfe: ; Cnnnn (firmware 2.0 and later, only applies to TMC2660, TMC22xx, TMC2160 and TMC516x stepper drivers) Lowest 17 bits of the chopper control register value. ; Bnn (firmware 2.02RC1 and later) Blanking time (tbl) in the chopper control register, 0 to 3. See the TMC driver datasheet. ; Hnn (firmware 2.02RC2 and later) thigh parameter for those stepper driver chips that support it, e.g. TMC5160 and TMC2160. ; Send M569 P# (where # is the driver number) with no additional parameters to see how this translates into mm/sec. See also the V parameter. ; Yaa:bb or Yaa:bb:cc (firmware 2.02RC2 and later) Hysteresis start, end and decrement values in the chopper control register. See the TMC driver datasheet for the meaning. ; Vnnn (firmware 2.02RC1 and later) tpwmthrs parameter for those stepper driver chips that support it. This is the interval in clock cycles between 1/256 microsteps below ; which the drivers will switch from stealthChop to to spreadCycle mode. Only applies when the driver is configured in stealthChop mode. ; Typical value are from 100 (high speed) to 4000 (low speed). Send M569 P# (where # is the driver number) with no additional parameters to see how this translates into mm/sec. ; Fnn (firmware 2.02 and later) Off-time in the chopper control register, 1 to 15 ; ; Verhältnisse laut TMC-Datenblatt: TCOOLTHRS ≥ TSTEP ≥ TPWMTHRS ≥ THIGH ; Werte für tpwmthrs: V94 = 100mm/s (XYU) bzw. V310 (Z) (sollte der Einstellung von Snapmaker entsprechen?), V25 = 375mm/s und damit für alle Bewegungen gültig ; ; M569 P0.0 S0 D3 H94 V94 ; Test - Defaultwerte. Ergebnis: Motor etwas lauter und mit weniger Drehmoment ;M569 P0.0 S0 F4 Y0:5 D3 H5 V25 ; Antrieb an DRIVER_0 (X) läuft rückwärts mit StealthChop2, thigh klein (sonst wird CoolStep abgedreht), tpwmhrs auf 375mm/s eingestellt, ;M569.2 P0.0 R{0x14} V{0x00000001} ; ... und tcoolthrs extrem niedrig, so daß CoolStep immer aus und StealthChop voltage PWM mode immer an ist M569 P0.0 S0 D2 ; testweise auf Spreadcycle umgestellt. ;M569 P0.1 S1 F4 Y0:5 D3 H5 V25 ; Antrieb an DRIVER_1 (U) läuft vorwärts mit StealthChop2, thigh klein (sonst wird CoolStep abgedreht), tpwmhrs auf 375mm/s eingestellt ;M569.2 P0.1 R{0x14} V{0x00000001} ; ... und tcoolthrs extrem niedrig, so daß CoolStep immer aus und StealthChop voltage PWM mode immer an ist M569 P0.1 S1 D2 ; testweise auf Spreadcycle umgestellt. M569 P0.2 S1 D2 ; Antrieb an DRIVER_2 (Z) läuft vorwärts mit Spreadcycle ;M569 P0.3 S0 F4 Y0:5 D3 H5 V25 ; Antrieb an DRIVER_3 (Y) läuft rückwärts mit StealthChop2, thigh klein (sonst wird CoolStep abgedreht), tpwmhrs auf 375mm/s eingestellt ;M569.2 P0.3 R{0x14} V{0x00000001} ; ... und tcoolthrs extrem niedrig, so daß CoolStep immer aus und StealthChop voltage PWM mode immer an ist M569 P0.3 S0 D2 ; testweise auf Spreadcycle umgestellt. M569 P0.4 S0 D2 ; Antrieb an DRIVER_2 (E1) läuft rückwärts mit Spreadcycle M569 P0.5 S1 D2 ; Antrieb an DRIVER_3 (E2) läuft vorwärts mit Spreadcycle ; Definition der Achsen und Extruder ; ACHTUNG beim Einstellen der Steprate und der Interpolation: mehr als 480kHz (max. 650kHz bei nur einem Motor in Betrieb) packt die Duet 3 6HC nicht. Das sollte aber dicke reichen... ; M584 X0.0 U0.1 Y0.3 Z0.2 E0.5:0.4 ; Antriebe zu Achsen zuweisen M350 E64:64 Z16 I0 ; Mikrostepping ohne Interpolation für Z (mit der 2mm-Steigung der Schraube entspricht ein Vollschritt exakt 0,01mm) und E M350 X16 U16 Y16 I1 ; Mikrostepping mit Interpolation für X, U, Y entspricht 0,0125mm pro Mikroschritt M92 X80 U80 Y80 Z1600 E138.58:138.58 S16 ; (Mikro-)Schritte pro mm M566 X342 U342 Y342 Z100 E300:300 ; Maximale sofortige Geschwindigkeitsänderungen (mm/min). E-Wert aus Marlin, XYUZ-Werte aus Junction Deviation 0,013 errechnet (vgl. https://blog.kyneticcnc.com/2018/10/computing-junction-deviation-for-marlin.html). Für XYU möglichst klein halten (Input Shaping) M203 X21000 U21000 Y21000 Z600 E4800:4800 ; Maximalgeschwindigkeiten (mm/min) M201 X1000 U1000 Y1000 Z500 E5000:5000 ; Maximalbeschleunigungen je Achse (mm/s²) (Z aus J1-Cura-Profil) - Snapmaker-Daten X,U,Y=10000 sind wegen des Werts in M204 völliger Humbug! (Gesamtbeschleunigung max 1000, daher können die XY-Komponenten nicht höher sein) M204 P900 T900 ; höchste erlaubte Gesamtbeschleunigung für Druck und Bewegung (Originalwert Snapmaker: 1000, da fängt aber der Tisch an zu wackeln...) ; RMS-Motorströme laut Marlin: X1000 U1000 Y1400 Z1000 E800:800. Achtung: RRF benutzt PEAK-Werte, keine RMS-Werte! 95% Ruhrstrom funktioniert damit. ; Umgerechnet auf Peak-Werte: X1414 U1414 Y1980 Z1414 E1131:1131, Ruhestromabsenkung: Faktor 0,95*0,707 = 0,67 M906 X1100 U1100 Y1500 Z1400 E1000:1000 I90 ; Motorströme (mA) und Faktor des Ruhestroms in Prozent ; M906 X1400 U1400 Y1900 Z1400 E1000:1000 I67 ; Motorströme (mA) und Faktor des Ruhestroms in Prozent M84 S30 ; Timeout für Ruhestrom (s) ; M915 X U Y S20 F1 R2 ; Stallguard für X, U und Y TODO Wert festlegen: Snapmaker definiert den Wert als 8 bei einer Bandbreite von 0...255 beim TMC2209; der TMC2160 der Duet hat aber -64...63 ; Beispielwerte für F von X und Y in mm/s: ; F200 --> 100mm in 30s ; F1000 --> 100mm in 6,5s ; F2000 --> 100mm in 3,1s ; F3000 --> 100mm in 2,1s ; Koordinatendefinition ; Nullpunkt = Mittelpunkt des Druckbetts = Zentrum der XY-Korrekturöffnung ; M208 X-175.5 Y-101 Z0 U-151 S1 ; Achsen-Minima M208 X151 Y101 Z209 U175.5 S0 ; Achsen-Maxima - nur grobe Vorgabe für Z, korrekter Wert wird beim Bedleveling ermittelt und in der Datei z_max.g gespeichert ; Definition der I/O-Ports ; Achtung: IO_0 wird vom Flachbandkabel der PanelDue belegt, nicht nutzen! ; ; Endstops M574 X1 S1 P"io1.in" ; X-Endstop: aktiv für Signal auf "High-Level" (NC-Schalter, paßt für die Gabellichtschranke) M574 U2 S1 P"io2.in" ; U-Endstop: aktiv am oberen Ende für Signal auf "High-Level" (NC-Schalter, paßt für die Gabellichtschranke) M574 Y1 S1 P"io3.in" ; Y-Endstop: aktiv für Signal auf "High-Level" (NC-Schalter, paßt für die Gabellichtschranke) M574 Z2 S1 P"io4.in" ; Z-Endstop: aktiv am oberen Ende für Signal auf "High-Level" (NC-Schalter) ; ; Filamentsensoren ; Die Duet unterstützt keine analogen Filamensensoren! Daher müssen die Sensoren des J1 auf digitale Hallsensoren umgebaut oder z.B. ein Arduino als "Übersetzer" verwendet werden ; Werte für Umbau auf Hallsensor mit 2x12 Magneten je Sensor: M591 D0 P7 C"io5.in" L4 R80:200 E12.5 S1 ; Filamentsensor für Extruder 0, Impulssignal, an "io5.in", 4mm/Impuls, Toleranz 50...150%, erste 3 Pulse = 12,5mm verwerfen M591 D1 P7 C"io6.in" L4 R80:200 E12.5 S1 ; Filamentsensor für Extruder 1, Impulssignal, an "io6.in", 4mm/Impuls, Toleranz 50...150%, erste 3 Pulse = 12,5mm verwerfen ; gemessene Werte: TODO - nach einigen Drucken mit M591 D0 bzw. M591 D1 auslesen und anpassen! ; D0: 3.989mm/pulse, min 95%, max 131% over 143.6mm mit PETG ; 3.985mm/pulse, min 96%, max 130% over 143.6mm mit PETG ; 4.224mm/pulse, min 95%, max 128% over 143.6mm mit PETG ; 3.775mm/pulse, min 93%, max 193% over 4031.7mm mit PLA ; 3.763mm/pulse, min 96%, max 164% over 3581.9mm mit PLA ; D1: 3.995mm/pulse, min 95%, max 158% over 1042.7mm mit PLA ; 4.103mm/pulse, min 95%, max 133% over 726.3mm mit PLA ; ; Druckdüsen als Z-Sensoren ; Achtung, diese Werte werden von den drei Kalibriermakros temporär überschrieben! M558 P8 C"^!io7.in" H2 F150 R0.2 T720 K0 B0 ; Z-Sensor Hotend 1=binär ohne Entprellfilter, 2mm Antasthöhe, invertiert (active low)&Pulldownwiderstand aktiv, 300mm/min Meßgeschwindigkeit, 0,5s Recoveryzeit, XY-Bewegung zwischen Messungen 1800mm/min, Heizelemente an G31 K0 P500 X0 Y0 Z{-global.Druckplattendicke-2} ; Z-Sensor Hotend 1: Triggerwert, Offset und Auslösehöhe M558 P8 C"^!io8.in" H2 F150 R0.2 T720 K1 B0 ; Z-Sensor Hotend 2=binär ohne Entprellfilter, 2mm Antasthöhe, invertiert (active low)&Pulldownwiderstand aktiv, 300mm/min Meßgeschwindigkeit, 0,5s Recoveryzeit, XY-Bewegung zwischen Messungen 1800mm/min, Heizelemente an G31 K1 P500 U0 Y0 Z{-global.Druckplattendicke-2} ; Z-Sensor Hotend 2: Triggerwert, Offset und Auslösehöhe ; Hinweis: es darf nur an den Schrauben gemessen werden. Muß in bed.g definiert werden - M557 nicht verwenden! ; Bettleveling ; M671 X0:-114.5:114.5 Y86:-93:-93 S3.0 P0.5 ; Position der Einstellschrauben ; Einstellungen Heizbett (H0) ; auf PID umgestellt, Bang-Bang macht man auch beim Bett nicht mehr, produziert Z-Banding... M140 H0 ; Heizelement 0 initialisieren M307 H0 R0.155 K0.140:0.000 D5.68 E1.35 S1.00 B0 ; Heizelement 0 (Heizbett) Kalibrierungsdaten M143 H0 S110 ; Temperaturlimit für Heizelement 0 (Heizbett) = 110°C - Originalwert von Snapmaker: 200°C ; Einstellungen Heizelemente Hotends (H1 und H2) ; ; M307 H1 R2.186 K0.17:0.11 D5.67 S1.00 V24.0 ; Heizelement 1 (Hotend 1) alte Kalibrierungsdaten aus Marlin umgerechnet M307 H1 R2.461 K0.335:0.144 D6.09 E1.35 S1.00 B0 V23.9 ; Heizelement 1 (Hotend 1) Kalibrierungsdaten, kalibriert mit 250°C und F0.55 M143 H1 S320 ; Temperaturlimit für Heizelement 1 = 320°C - Originalwert von Snapmaker: 400°C M570 H1 P5 T16 ; erlaubte Temperaturabweichung erhöhen, um die bei Raumtemperatur krumme Verstärkerkennlinie abzufangen (sonst Heater Fault) ; M307 H2 R2.186 K0.17:0.11 D5.67 S1.00 V24.0 ; Heizelement 2 (Hotend 2) alte Kalibrierungsdaten aus Marlin umgerechnet M307 H2 R2.476 K0.347:0.131 D5.52 E1.35 S1.00 B0 V23.9 ; ; Heizelement 2 (Hotend 2) Kalibrierungsdaten, kalibriert mit 250°C und F0.55 M143 H2 S320 ; Temperaturlimit für Heizelement 2 = 320°C - Originalwert von Snapmaker: 400°C M570 H2 P5 T16 ; erlaubte Temperaturabweichung erhöhen, um die bei Raumtemperatur krumme Verstärkerkennlinie abzufangen (sonst Heater Fault) M302 P0 S160 R120 ; Limit für Extruderbewegungen: extrudieren nur ab 160°, zurückziehen nur ab 120° ; Einstellungen Lüfter ; M106 P0 S0 H-1 B0.2 L0.17 X1.0 C"Werkzeuglüfter 1" ; Lüfter 0: Startwert 0%, Steuerung via Thermosensor nicht aktiv, Blip-Dauer 0,2s, Geschwindigkeit von 17%-100% M106 P1 S0 H-1 B0.2 L0.17 X1.0 C"Werkzeuglüfter 2" ; Lüfter 1: Startwert 0%, Steuerung via Thermosensor nicht aktiv, Blip-Dauer 0,2s, Geschwindigkeit von 17%-100% M106 P2 S1.0 H1 T45 C"Hotendlüfter 1" ; Lüfter 2: Startwert 100%, Aktiviert, wenn Heizelement 1 > 45°C M106 P3 S1.0 H2 T45 C"Hotendlüfter 2" ; Lüfter 3: Startwert 100%, Aktiviert, wenn Heizelement 2 > 45°C M106 P4 H10:11 T40:60 B0.2 L0.17 X1.0 C"Elektroniklüfter" ; Lüfter 4: Aktiviert, wenn Prozessortemperatur > 40°C, läuft bei 70°C oder wenn Steppertreiber eine Überhitzungswarung ausgibt mit 100%. ; Werkzeuge (Tools) ; M563 S"Hotend 1" P0 D0 H1 F0 ; Werkzeug 0 = Extruder 0 + Heizelement 1 G10 P0 X0 Y0 Z0 ; Achsenoffsets für Werkzeug 0 M568 P0 R0 S0 ; Defaulttemperaturen Werkzeug 0 0°C (=aus) M563 S"Hotend 2" P1 D1 H2 F1 X3 ; Werkzeug 1 = Extruder 1 + Heizelement 2, X auf U gemappt G10 P1 X0 Y0 Z0 ; Achsenoffsets für Werkzeug 1 M568 P1 R0 S0 ; Defaulttemperaturen Werkzeug 1 0°C (=aus) ; M563 S"Duplizieren" P2 D0:1 H1:2 X0:3 ; Werkzeug 2 = beide Extruder, 150mm versetzt ; G10 P2 X75 U-75 Y0 Z0 ; Achsenoffsets für Werkzeug 2 ; M567 P2 E1:1 ; Extrusionsverhältnis für beide Hotends gleich ; M563 S"Spiegeln" P3 D0:1 H1:2 X0:3 ; Werkzeug 3 = Extruder 1 + Heizelement 2, X auf U gemappt und 300mm versetzt. U mit M579 U-1 invertieren, wenn das Tool aktiv ist! Homing anpassen! ; G10 P3 X75 U-75 Y0 Z0 ; Achsenoffsets für Werkzeug 3 ; M567 P3 E1:1 ; Extrusionsverhältnis für beide Hotends gleich ; LEDs ; M42 P9 S0.5 ; LED-Streifen auf 50% ; Geschwindigkeitsverbesserndes Voodoo (Input Shaping, Pressure Advance etc.) ; Empfehlung: erst Input shaping justieren, dann Pressure Advance, dann Retraction! ; ; testweise Input Shaping deaktiviert ; M593 P"zvddd" F58 D0.1 L0.03 ; Input Shaping bei 58Hz, Dämpfungsfaktor 0,1 - TODO testen, ob ei2 oder zvddd besser ist. Dem Sensor nach sind beide ziemlich gleichauf M593 P"ei2" F58 D0.1 L0.03 ; Input Shaping bei 58Hz, Dämpfungsfaktor 0,1 M572 D0:1 S0.05 ; Pressure Advance. Originalwert 0,02 war klar zu niedrig... M309 P0 S0.035 ; Hotend 1 Feedforward-Wert M309 P1 S0.035 ; Hotend 2 Feedforward-Wert ; Retractwerte (M207) siehe Filamente! ; Netzwerk - WLAN-Modul ans Ende setzen wegen Timing-Bug... ; M550 P"Duplimatix" ; Maschinenname M552 I0 S0 ; Ethernetanschluß deaktiviert M586 P0 S1 ; HTTP-Server aktiv M586 P1 S0 ; FTP deaktiviert M586 P2 S0 ; Telnet deaktiviert M552 I1 S1 ; WLAN-Modul aktiv ; Sonstiges ; T0 ; Erstes Werkzeug bei Start ausgewählt M42 P9 S0.25 ; LED-Streifen dimmen M98 P"Korrekturwert_z_max.g" ; korrigiertes Z_Max einlesen M98 P"Korrekturwert_xy_offset_tool1.g" ; XY-Offset Hotend 2 einlesen M207 P0 S1.5 R0 F2400 T2400 ; Default-Retractwerte Hotend 1: 1,5mm und 40mm/s M207 P1 S1.5 R0 F2400 T2400 ; Default-Retractwerte Hotend 2; 1,5mm und 40mm/s M911 S21.5 R23.5 P"M913 X0 U0 Y0 Z1 E0:0 G91 M83 G1 Z1 F1000" ; Bei Spannungsausfall Zustand sichern, dann X, U und Y aus und Z 1mm absenken