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

rotational axis seem to be acting like linear axis

Scheduled Pinned Locked Moved Unsolved
General Discussion
2
10
473
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.
  • undefined
    Jasperg
    last edited by 5 Jan 2023, 09:11

    Hi all,

    I am trying to understand if I am using rotational axis correctly.
    As I understand it, when moving from point 1 to point 2 (blue line) in the drawing below linear axis calculate the X and Y contribution to that move and scale each to the correct amount. But when if I was moving along red line the distance traveled is less.
    This means moving 2 axis at one time will result in the each individual axis running slower than if I was running each on its own.

    G0 X2 Y2 f80000
    

    will result in each axis moving slower than

    G0 X2 f80000
    

    null (1).png

    But if I use rotational axis they do not impact on each other in the same way. So in the example below if I rotate A 90 or both A and B 90 both they will run at the same speed?
    null (2).png

    But when I set up the axis below, they seem to behave like linear axis, as in moving 2 axis at one time by the same amount results in slower movement for both of them, even though from the reference it looks like A,B,C are all treated as rotational axis

    M584 A0:2:5:7 B1:3:6:8
    M584 C4:9

    I have also tried

    M584 A0:2:5:7 B1:3:6:8
    M584 C4:9 R1

    and

    M584 A0:2:5:7 R1
    M584 B1:3:6:8 R1
    M584 C4:9 R1

    and

    M584 X0:2:5:7 R1
    M584 Y1:3:6:8 R1
    M584 Z4:9 R1

    my complete config file looks like this at the moment

    ; Configuration file for Duet WiFi (firmware version 3.3)
    ; executed by the firmware on start-up
    ;
    ; for feeder 01-01-2023
    ; General preferences
    G90 ; send absolute coordinates...
    M83 ; ...but relative extruder moves
    M550 P"chip-chop" ; set printer name
    ; Network
    M552 S1 ; enable network
    M586 P0 S1 ; enable HTTP
    M586 P1 S0 ; disable FTP
    M586 P2 S0 ; disable Telnet
    ; Drives
    M569 P0 S0 ; physical drive 0 goes backwards
    M569 P1 S0 ; physical drive 1 goes backwards
    M569 P2 S0 ; physical drive 2 goes backwards
    M569 P3 S0 ; physical drive 3 goes backwards
    M569 P4 S0 ; physical drive 4 goes backwards
    M569 P5 S1 ; physical drive 5 goes forwards
    M569 P6 S6 ; physical drive 6 goes forwards
    M569 P7 S1 ; physical drive 7 goes forwards
    M569 P8 S1 ; physical drive 8 goes forwards
    M569 P9 S9 ; physical drive 9 goes forwards
    M584 A0:2:5:7 B1:3:6:8 ; set drive mapping
    M584 C4:9 R1 ;
    M350 C16 A16 B16 I1 ; E6:6:6 ; configure microstepping with interpolation
    M92 C40.00 A40.00 B40.00 ; set steps per mm
    M566 C180.00 A180.00 B180.00 ; set maximum instantaneous speed changes (mm/min)
    M203 C350000.00 A350000.00 B350000.00 ; set maximum speeds (mm/min)
    M201 C34000.00 A34000.00 B34000.00 ; set accelerations (mm/s^2)
    M906 C1800 A1800 B1800 I10 ; set motor currents (mA) and motor idle factor in per cent
    M84 S1 ; Set idle timeout
    ; RepRapFirmware applies the M204 accelerations to the move as a whole, and also applies the limits set by M201 to each axis and extruder
    ; Axis Limits
    M208 C-10000 A-10000 B-10000 S1 ; set axis minima
    M208 C10000 A10000 B10000 S0 ; set axis maxima
    ; Heaters
    M140 H-1 ; disable heated bed (overrides default heater mapping)

    so when running

    G92 A0 B0 C0 ;reset cutter motor position to 0
    G0 C4000 B4000 f80000
    G92 A0 B0 C0
    G0 A4000 C4000 f80000
    G92 A0 B0 C0
    G0 A4000 f80000
    G92 A0 B0 C0

    I was expecting that moving C and B or A and C would result in a move that is the same speed as just moving A, but it dose not

    I think I am missing something? Although I cannot see what!

    Any help is much appreciated!

    undefined 1 Reply Last reply 5 Jan 2023, 10:05 Reply Quote 1
    • undefined
      JoergS5 @Jasperg
      last edited by JoergS5 1 May 2023, 10:07 5 Jan 2023, 10:05

      @Jasperg hello, the speed is not only limited by the axis limits, but also by

      • kinematics limit, depending on what kinematics you use, see LimitSpeedAndAcceleration function in source. If your first example is CoreXY, the diagonal speed is limited e.g.
      • E limit, maybe there is a default which is lower than the speeds you use for ABC. You have defined a E, but no speeds for it, if I looked correctly.
      • BC or AC calculated speed will probably be higher than A alone, so the firmware may slow it down
      undefined 1 Reply Last reply 5 Jan 2023, 11:20 Reply Quote 0
      • undefined
        Jasperg @JoergS5
        last edited by Jasperg 1 May 2023, 11:32 5 Jan 2023, 11:20

        Hi @JoergS5 ,

        Thanks for the advice, but I am not sure it is a speed limit that is causing it... as I am able to get AB to run at the same speed as A alone, but only by scaling up the feed rate when running them both at once, which will be OK as a workaround for what I am doing. But makes it harder to trouble shoot. I will have a look at the kinematics setting you mentioned though, but ideally I would like each axis to be calculated individually.

        Do you know am I correct that in theory that rotation axis do not influence each others speed calculation other than scaling them to finish at the same time?

        undefined 1 Reply Last reply 5 Jan 2023, 13:08 Reply Quote 0
        • undefined
          JoergS5 @Jasperg
          last edited by JoergS5 1 May 2023, 13:09 5 Jan 2023, 13:08

          @Jasperg said in rotational axis seem to be acting like linear axis:

          that in theory that rotation axis do not influence each others

          I know of no other limits than I mentioned.
          Only thing I can think of could be that the step count is so high that the steps cannot be processed all. You can see it with M122 hiccups.

          One point I saw is that M566 is very low. For rotary axes, all units are degrees instead of mm, so 180 degrees per minute only for jerk, i. e. 3 degrees per second.

          undefined 1 Reply Last reply 7 Jan 2023, 07:19 Reply Quote 0
          • undefined
            Jasperg @JoergS5
            last edited by 7 Jan 2023, 07:19

            @JoergS5 do you know what (r)(c) mean in the out put form the Console below?

            if I type M584 into the terminal I get

            Driver assignments: X2:7 Y3:8 Z4:9 (r)(c)V0:5 (r)(c)W1:6, 5 axes visible
            

            while my drive mapping is like this

            M584 V0:5 R1 S1 ; set drive mapping
            M584 W1:6 R1 S1
            M584 X2:7 R1 S1
            M584 Y3:8 R1 S1
            M584 Z4:9 R1 S1

            then I get

            Driver assignments: X2:7 Y3:8 Z4:9 (c)V0:5 (c)W1:6, 5 axes visible
            

            with drive mapping like this

            M584 V0:5 R1 ; set drive mapping
            M584 W1:6 R1
            M584 X2:7 R1
            M584 Y3:8 R1
            M584 Z4:9 R1

            and I get

            Driver assignments: X2:7 Y3:8 Z4:9 (r)V0:5 (r)W1:6, 5 axes visible
            

            with mapping like this

            M584 V0:5 S1
            M584 W1:6 S1
            M584 X2:7 S1
            M584 Y3:8 S1
            M584 Z4:9 S1 ; set drive mapping

            I am still trying anything I can to understand what is going on. I am beginning to think there is a bug in the source code that means rotational axis are not working I assuming the (r) and (c) are something to do with rotational and linear axis, but no matter what I do it dose not seem to effect the speed of axis movement.

            undefined undefined 3 Replies Last reply 7 Jan 2023, 07:34 Reply Quote 0
            • undefined Jasperg marked this topic as a question 7 Jan 2023, 07:28
            • undefined
              Jasperg @Jasperg
              last edited by 7 Jan 2023, 07:34

              I realised I never mentioned what firmwhere or hardwhere I am using

              M115
              FIRMWARE_NAME: RepRapFirmware for Duet 2 WiFi/Ethernet FIRMWARE_VERSION: 3.4.1 ELECTRONICS: Duet WiFi 1.02 or later + DueX5v0.11 FIRMWARE_DATE: 2022-06-01 21:05:38
              1 Reply Last reply Reply Quote 0
              • undefined
                JoergS5 @Jasperg
                last edited by JoergS5 1 Jul 2023, 08:24 7 Jan 2023, 07:55

                @Jasperg said in rotational axis seem to be acting like linear axis:

                know what (r)(c) mean in t

                I didn't know it myself but in this cases I look into the source directly. Searching for 584, I found the method DoDriveMapping in GCodes3.cpp, in the section starting with "Driver assignments", there are the cases:

                if (platform.IsAxisRotational(axis))
                {
                reply.cat("(r)");
                }
                if (platform.IsAxisContinuous(axis))
                {
                reply.cat("(c)");
                }
                if (platform.IsAxisShortcutAllowed(axis))
                {
                reply.cat("(s)");
                }

                The last s is probably not implemented yet. (it is commented out in my 3.5 beta release)

                Please be aware that the drive letter have default behaviour: XYZUVW as linear, ABCD as rotational.

                The continuous means that there is no angle limit, but the axis can rotate freely. It does not mean that the axis rotates continuously, this is another ongoing discussion. Joined with this continuous axis is the shortcut option, this means 0 to 270 degree rotation can be shortcout by rotating 0 to -90 instead. This depends on whether there are hindernesses like wires which inhibit it.
                The C table of a 5 axis CNC machine is a nice example where continuous and shortcut would make sense. (sorry, this was OT a bit...)

                1 Reply Last reply Reply Quote 1
                • undefined
                  JoergS5 @Jasperg
                  last edited by 7 Jan 2023, 08:06

                  @Jasperg to understand the behaviour of the axes better, the thread https://forum.duet3d.com/topic/21880/g1-feedrate may also be helpful, especially what dc42 explained. And the mentioned https://forum.duet3d.com/topic/21816/rotational-axis-abc-limits-behaviour about mixing rotational with linear axes.

                  undefined 1 Reply Last reply 8 Jan 2023, 07:21 Reply Quote 1
                  • undefined
                    Jasperg @JoergS5
                    last edited by 8 Jan 2023, 07:21

                    @JoergS5 Thanks so much for your advice! I'll read over this more, these posts look like they will help me get my head around it better

                    undefined 1 Reply Last reply 8 Jan 2023, 08:43 Reply Quote 0
                    • undefined
                      JoergS5 @Jasperg
                      last edited by 8 Jan 2023, 08:43

                      @Jasperg I hope you'll find the solution for your question. It may be a combination of all the topics mentioned.

                      It helped me a lot the last three years to look into the RRF code to understand it. This is all open source, so it is also changeable by oneself, so there is freedom to implement own ideas. For example, I added some logging to the console here and there (and recompilation) to understand the code better, especially what the different variables mean. Maybe you want to go a similar route like me.

                      1 Reply Last reply Reply Quote 1
                      • undefined Jasperg referenced this topic 17 Aug 2023, 06:56
                      5 out of 10
                      • First post
                        5/10
                        Last post
                      Unless otherwise noted, all forum content is licensed under CC-BY-SA