Duet3D Logo Duet3D
    • Tags
    • Documentation
    • Order
    • Register
    • Login

    KINEMATIC ?

    Scheduled Pinned Locked Moved
    General Discussion
    4
    17
    297
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • droftartsundefined
      droftarts administrators @rkutun
      last edited by

      @rkutun post your full config.g, and the response to M122. Post both as text, ideally within the code tags </>.

      Ian

      Bed-slinger - Mini5+ WiFi/1LC | RRP Fisher v1 - D2 WiFi | Polargraph - D2 WiFi | TronXY X5S - 6HC/Roto | CNC router - 6HC | Tractus3D T1250 - D2 Eth

      rkutunundefined 2 Replies Last reply Reply Quote 0
      • rkutunundefined
        rkutun @droftarts
        last edited by

        @droftarts

        m122
        === Diagnostics ===
        RepRapFirmware for Duet 3 MB6HC version 3.5.4 (2024-11-24 10:47:10) running on Duet 3 MB6HC v1.01 (SBC mode)
        Board ID: 08DJM-956L2-G43S8-6JTD0-3SS6K-9A1AH
        Used output buffers: 1 of 40 (17 max)
        === RTOS ===
        Static ram: 155464
        Dynamic ram: 90572 of which 5200 recycled
        Never used RAM 94684, free system stack 174 words
        Tasks: SBC(2,ready,0.9%,821) HEAT(3,nWait 6,0.0%,341) Move(4,nWait 6,0.0%,262) CanReceiv(6,nWait 1,0.0%,796) CanSender(5,nWait 7,0.0%,334) CanClock(7,delaying,0.0%,348) TMC(4,nWait 6,9.1%,53) MAIN(2,running,89.9%,101) IDLE(0,ready,0.0%,29), total 100.0%
        Owned mutexes: HTTP(MAIN)
        === Platform ===
        Last reset 00:21:11 ago, cause: software
        Last software reset at 2025-04-15 13:53, reason: User, Gcodes spinning, available RAM 94828, slot 2
        Software reset code 0x6003 HFSR 0x00000000 CFSR 0x00000000 ICSR 0x0044a000 BFAR 0x00000000 SP 0x00000000 Task SBC Freestk 0 n/a
        Error status: 0x00
        MCU temperature: min 32.8, current 34.9, max 35.0
        Supply voltage: min 24.1, current 24.1, max 24.1, under voltage events: 0, over voltage events: 0, power good: yes
        12V rail voltage: min 12.2, current 12.2, max 12.3, under voltage events: 0
        Heap OK, handles allocated/used 0/0, heap memory allocated/used/recyclable 0/0/0, gc cycles 0
        Events: 1 queued, 1 completed
        Driver 0: standstill, SG min 0, mspos 8, reads 32473, writes 32 timeouts 0
        Driver 1: standstill, SG min 0, mspos 8, reads 32473, writes 32 timeouts 0
        Driver 2: standstill, SG min 0, mspos 8, reads 32473, writes 32 timeouts 0
        Driver 3: standstill, SG min n/a, mspos 8, reads 32484, writes 21 timeouts 0
        Driver 4: standstill, SG min 0, mspos 8, reads 32473, writes 32 timeouts 0
        Driver 5: standstill, SG min n/a, mspos 8, reads 32495, writes 11 timeouts 0
        Date/time: 2025-04-15 14:22:06
        Slowest loop: 52.26ms; fastest: 0.06ms
        === Storage ===
        Free file entries: 20
        SD card 0 not detected, interface speed: 37.5MBytes/sec
        SD card longest read time 0.0ms, write time 0.0ms, max retries 0
        === Move ===
        DMs created 125, segments created 3, maxWait 407473ms, bed compensation in use: none, height map offset 0.000, max steps late 0, min interval 0, bad calcs 0, 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 4, completed 4, hiccups 0, stepErrors 0, LaErrors 0, Underruns [0, 0, 4], 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 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
        File2 is idle in state(s) 0
        Queue2 is idle in state(s) 0
        Q0 segments left 0, axes/extruders owned 0x0000002
        Code queue 0 is empty
        Q1 segments left 0, axes/extruders owned 0x0000000
        Code queue 1 is empty
        === CAN ===
        Messages queued 11467, received 25398, lost 0, errs 1, boc 0
        Longest wait 1ms for reply type 6018, peak Tx sync delay 374, free buffers 50 (min 49), ts 6360/6359/0
        Tx timeouts 0,0,0,0,0,0
        === SBC interface ===
        Transfer state: 5, failed transfers: 0, checksum errors: 0
        RX/TX seq numbers: 49765/49765
        SPI underruns 0, overruns 0
        State: 5, disconnects: 0, timeouts: 0 total, 0 by SBC, IAP RAM available 0x24cfc
        Buffer RX/TX: 0/0-0, open files: 0
        === Duet Control Server ===
        Duet Control Server version 3.5.4 (2024-11-25 17:32:26, 64-bit)
        HTTP+Executed:
        > Executing M122
        Code buffer space: 4096
        Configured SPI speed: 8000000Hz, TfrRdy pin glitches: 0
        Full transfers per second: 28.88, max time between full transfers: 43.9ms, max pin wait times: 29.7ms/4.4ms
        Codes per second: 0.23
        Maximum length of RX/TX data transfers: 4376/896```
        1 Reply Last reply Reply Quote 0
        • rkutunundefined
          rkutun @droftarts
          last edited by rkutun

          @droftarts config.g

          ; Configuration file for RepRapFirmware on Duet 3 Main Board 6HC
          ; executed by the firmware on start-up
          ;
          ; generated by RepRapFirmware Configuration Tool v3.5.8 on Fri Jan 03 2025 16:22:41 GMT+0300 (GMT+03:00)
          
          ; General
          G90 ; absolute coordinates
          M83 ; relative extruder moves
          M550 P"deneme" ; set hostname
          
          ; Wait a moment for the CAN expansion boards to become available
          G4 S2
          
          ; LED Strips
          M950 E0 C"io6.out" T2 ; configure LED strip #0
          
          ; Smart Drivers
          M569 P0.0 S1 D2 ; driver 0.0 goes forwards (X axis)
          M569 P0.1 S0 D2 ; driver 0.1 goes forwards (Y axis)
          M569 P0.2 S1 D2 ; driver 0.2 goes forwards (Y axis)
          M569 P0.4 S0 D2 ; driver 0.4 goes **backwards** (U axis)
          M569 P0.3 S1 D2 ; driver 0.3 goes forwards (Z axis)
          ;M569 P0.4 S1 D2 ; driver 0.4 goes forwards (U axis)
          M569 P1.0 S1 D2 ; driver 1.0 goes forwards (extruder 0)
          M569 P1.1 S1 D2 ; driver 1.1 goes forwards (extruder 1)
          
          ; Motor Idle Current Reduction
          M906 I30 ; set motor current idle factor
          M84 S30 ; set motor current idle timeout
          
          ; Axes
          M584 X0.0 Y0.1:0.2 Z0.3 U0.4; set axis mapping
          M350 U16 I0 ; configure microstepping without interpolation
          M350 X16 Y16 Z16 I1 ; configure microstepping with interpolation
          M906 X800 Y800 Z1000 U800 ; set axis driver currents
          M92 X80 Y80 Z400 U80 ; configure steps per mm
          M208 X0:200 Y0:200 Z0:200 U0:200 ; set minimum and maximum axis limits
          M566 X900 Y900 Z12 U900 ; set maximum instantaneous speed changes (mm/min)
          M203 X6000 Y6000 Z180 U6000 ; set maximum speeds (mm/min)
          M201 X500 Y500 Z20 U500 ; set accelerations (mm/s^2)
          
          ; Extruders
          M584 E1.0:1.1 ; set extruder mapping
          M350 E16:16 I1 ; configure microstepping with interpolation
          M906 E1000:1000 ; set extruder driver currents
          M92 E420:420 ; configure steps per mm
          M566 E120:120 ; set maximum instantaneous speed changes (mm/min)
          M203 E3600:3600 ; set maximum speeds (mm/min)
          M201 E250:250 ; set accelerations (mm/s^2)
          M563 P1 D1 H1 F4              ; Tool 1: E1 extruder, Hotend1, Fan4 (katman fanı)
          G10 P1 X35 Y0 Z0              ; Tool 1 nozzle offset (örnek: X ekseninde 35mm fark var)
          M568 P1 R0 S0                 ; Tool 1 başlangıç sıcaklıkları (standby/active)
          
          
          ; Kinematics
          M669 K1 X1:0:0:0 Y1:-1:0:-1 Z0:0:1:0 U0:0:0:1; Matrix mapping for Axis - X:Y:Z:U
          
          ; Probes
          M558 K0 P9 C"io4.in" H5 F120 T6000 ; configure BLTouch probe via slot #0
          G31 P500 X0 Y0 Z0.7 ; set Z probe trigger value, offset and trigger height
          M950 S0 C"io4.out" ; create servo #0 for BLtouch
          M950 S0 C"io7.out" Q500 ; Ekran parlaklığı analog çıkışı
          
          
          ; Endstops
          M574 X1 P"io0.in" S1 ; configure X axis endstop
          M574 Y1 P"io1.in" S1 ; configure Y axis endstop
          M574 Z2 P"io3.in" S1 ; configure Z axis endstop
          M574 U1 P"io2.in" S1 ; configure U axis endstop
          
          ; Mesh Bed Compensation
          M557 X25:175 Y25:175 S40:40 ; define grid for mesh bed compensation
          
          ; Sensors
          M308 S0 P"1.temp0" Y"thermistor" A"X Nozzle" T100000 B4725 C7.06e-8 ; configure sensor #0
          M308 S1 P"1.temp1" Y"thermistor" A"Y Nozzle" T100000 B4725 C7.06e-8 ; configure sensor #1
          M308 S2 P"temp0" Y"thermistor" A"Chamber" T100000 B4725 C7.06e-8 ; configure sensor #2
          M308 S3 P"temp1" Y"thermistor" A"Bed" T100000 B4725 C7.06e-8 ; configure sensor #3
          
          ; Heaters
          M950 H0 C"1.out0" T0 ; create heater #0
          M143 H0 P0 T0 C0 S140 A0 ; configure heater monitor #0 for heater #0
          M307 H0 R2.43 D5.5 E1.35 K0.56 B0 ; configure model of heater #0
          M950 H1 C"1.out1" T1 ; create heater #1
          M143 H1 P0 T1 C0 S285 A0 ; configure heater monitor #0 for heater #1
          M307 H1 R2.43 D5.5 E1.35 K0.56 B0 ; configure model of heater #1
          
          ; Heated beds
          M140 P0 H0 ; configure heated bed #0
          
          ; Fans
          M950 F0 C"out1" ; create fan #0
          M106 P0 C"Chamber 1" S0 B0.1 H2 T45 ; configure fan #0
          M950 F1 C"out2" ; create fan #1
          M106 P1 C"Chamber 2" S0 B0.1 H2 T45 ; configure fan #1
          M950 F2 C"out3" ; create fan #2
          M106 P2 C"E0 Hotend" S0 L0 X1 B0.1 ; configure fan #2
          M950 F3 C"out4" ; create fan #3
          M106 P3 C"E0 Layer" S0 L0 X1 B0.1 ; configure fan #3
          M950 F4 C"1.out2" ; create fan #4
          M106 P4 C"E1 Hotend" S0 L0 X1 B0.1 ; configure fan #4
          M950 F5 C"1.out4" ; create fan #5
          M106 P5 C"E1 Layer" S0 L0 X1 B0.1 ; configure fan #5
          
          ; Tools
          M563 P0 D0 H1 F0 ; create tool #0
          M568 P0 R0 S0 ; set initial tool #0 active and standby temperatures to 0C
          M950 J0 C"io5.in"           ; io5.in pinini J0 tetikleyici olarak tanımla (inverted = NC buton için)
          M581 T0 P0 S1 R0             ; Trigger 0 → J0'dan gelen HIGH tetiklemesiyle her zaman çalışsın
          M582 T0                      ; Açılışta tetikleyicinin mevcut durumunu kontrol et
          
          M551 P"reprap"
          
          dwuk3dundefined droftartsundefined 2 Replies Last reply Reply Quote 0
          • dwuk3dundefined
            dwuk3d @rkutun
            last edited by dwuk3d

            @rkutun I wonder if having the K1 in your M669 is doing something like overriding the axis parameters.

            I wonder whether something like this might work.

            M669 K0  ; - this would set X and Z to their defaults which is what you want
            
            M669 Y1:-1:0:-1  ;  Then just override the Y
            

            You might need the U parameter too in the 2nd line - but that might not be needed.

            I've just set up a dual Markforged on one of the gantries on my printer - it's currently UV but I could change it to XY and see what your M669 does - I did mine in two lines.

            1 Reply Last reply Reply Quote 1
            • droftartsundefined
              droftarts administrators @rkutun
              last edited by

              @rkutun With the power off, if you move the Y axis in the positive direction, which direction do the X and U axis/tool move? If your machine is like the Muldex diagram in your first post, a positive move of the Y axis should move Tool 0/X axis in the negative direction, and Tool 1/U axis in the negative direction as well. So in M669, positive Y moves should be counteracted on X and U with positive moves, ie

              M669 Y1:1:0:1
              

              However, if your machine layout isn't exactly as the Muldex, the X and U axes may move in different directions. Either try the test with the machine off, or revert the axis mapping to cartesian (M669 K0), move Y+1, and see which way X and U move. Which ever way they move, they want to be set the opposite direction in M669 Y parameter, to counteract the Y movement. If you can't work it out, post a picture of the XYU axes, and label which axis/tool is which.

              Also, in the notes for M669 https://docs.duet3d.com/User_manual/Reference/Gcodes#m669-set-kinematics-type-and-kinematics-parameters, it says:

              ... if you are using a modified matrix, it is best to fully specify the matrix to avoid confusion. If you fully override the matrix, the "K" parameter can be any of the linear K parameters.

              So I would recommend setting the full M669, using K0 to start with (not K1 which is CoreXY):

              M669 K0 X1:0:0:0 Y1:1:0:1 Z0:0:1:0 U0:0:0:1
              

              Ian

              Bed-slinger - Mini5+ WiFi/1LC | RRP Fisher v1 - D2 WiFi | Polargraph - D2 WiFi | TronXY X5S - 6HC/Roto | CNC router - 6HC | Tractus3D T1250 - D2 Eth

              rkutunundefined 1 Reply Last reply Reply Quote 1
              • rkutunundefined
                rkutun @droftarts
                last edited by

                @droftarts Thank you so much for your detailed and insightful explanation.

                Your suggestion to move the Y axis manually with the power off helped me fully understand the kinematics of my machine. I hadn’t realized how important it was to observe the mechanical movement in this way.

                Thanks to your clear explanation, I was able to confirm that both X and U tools move in the negative direction when Y moves positive, just as you described. That instantly made everything click, and I was able to correct the M669 matrix accordingly.

                Brilliant advice — truly appreciated! 😊 😊 😊 👍 👏

                dwuk3dundefined 1 Reply Last reply Reply Quote 1
                • dwuk3dundefined
                  dwuk3d @rkutun
                  last edited by

                  @rkutun Don't forget that you can just put M669 in by itself to see the results of any individual or combinations of M669's.

                  I just tried a few tests and my previous suggestion doesn't seem to apply.

                  Also worth doing some G1 H2's - to make sure each individual (pre Kinematic altered) motor moves in the correct direction. - If it doesn't then you can use the S parameter on M569 to correct any direction issues - which could just be due to wiring.

                  My Dual Markforged seems to be working more or less ok - although I did get some strange behaviour yesterday where some of the axis would occasionally jump back when I moved previous axis - I haven't been able to recreate the issue today.

                  rkutunundefined 1 Reply Last reply Reply Quote 1
                  • rkutunundefined
                    rkutun @dwuk3d
                    last edited by

                    @dwuk3d Thanks a lot for your helpful suggestions and follow-up!

                    Running M669 on its own was a great tip — it helped me clearly see how the kinematics matrix was being interpreted by the firmware.

                    Also, your advice to test each motor individually with G1 H2 was spot on. It made it much easier to confirm motor directions before diving into matrix adjustments. I also used M569 S to correct a direction mismatch I found during testing.

                    Appreciate you sharing your own experience with the Dual Markforged setup — it gave me confidence that I was on the right path.

                    Thanks again for taking the time to explain everything so clearly!

                    droftartsundefined 1 Reply Last reply Reply Quote 0
                    • droftartsundefined
                      droftarts administrators @rkutun
                      last edited by droftarts

                      @rkutun Great, glad you got it sorted out.

                      I notice from your config.g you have only defined one tool so far. You will need to define the second tool too, with the U axis mapped to the X axis, using M563 X parameter. See https://docs.duet3d.com/en/User_manual/Machine_configuration/Configuration_IDEX#configuring-tools

                      Ian

                      Bed-slinger - Mini5+ WiFi/1LC | RRP Fisher v1 - D2 WiFi | Polargraph - D2 WiFi | TronXY X5S - 6HC/Roto | CNC router - 6HC | Tractus3D T1250 - D2 Eth

                      rkutunundefined 1 Reply Last reply Reply Quote 1
                      • rkutunundefined
                        rkutun @droftarts
                        last edited by

                        @droftarts Thank you for the heads-up — you’re absolutely right.

                        I had only defined Tool 0 so far during initial setup and completely forgot to add Tool 1 with the XU mapping. Your reminder pointed me in exactly the right direction. I’ve now added the second tool definition using M563 P1 D1 H1 XU, and everything is working perfectly.

                        Really appreciate you taking the time to check and guide me — thanks again!

                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post
                        Unless otherwise noted, all forum content is licensed under CC-BY-SA