Scara Setup

  • administrators

    If you delete the homeproximal.g, homedistal.g and homez.g files then it will use homeall.g when you send any homing command. That is what I did on my SCARA printer, because the homing order is critical on that too.

    G1 S2 X moves should move both motors if you use the correct C parameter, so that the distal joint angle (not the arm angle) remains constant. For example, if the arms are in line initially, they should remain in line when you do a G1 S2 move. Is that not happening? I'll check the code when I am back in the office.

    The XY position when you have both arms in line sounds wrong to me. If you had both joint angles at zero and no X or Y offset in the M669 command, you should have Y=0 and X= sum of the arm lengths.

  • The arms are not staying inline when I do a x move. I have tried a number of values for c.

    My M669 has a xy offset. I will remove that when I get back to it and see what it says.

  • After removing XY offset the web interface reports x11 y13 when the arm is rotated to the 0 angle( both arms in line in the middle of the movement range)
    Here is a video of the behavior of a g1 s2 x move after homing. as you can see the distal angle does not remain the same. I believe the C parameter in the video was set to -1 I have tried a variety of values without any change.

    Another video showing homing behavior and crash after using jog button

  • administrators

    I was wrong about G1 S2 moves. These moves are defined as raw motor moves. So it is correct that the distal joint arm angle changes when you do a G1 S2 X move.

    During proximal homing, to avoid the possibility of the distal joint reaching the end of its travel, I suggest you command both motors. For example:

    G91 ; relative movement
    G1 S1 X300 Y-300 F3000 ; home proximal joint

    One possible issue I can see with this is that the distal endstop switch will be active too, so if the distal arm is at the end of its travel against the endstop switch when you start the homing move, then the proximal homing move will not be completed. You could command a small anticlockwise movement of the distal arm first to avoid this possibility.

    In the second video, you pressed the Z-10 button. So it tried to move the arm down into the bed. However, any software axis limits you set with M208 ought to be obeyed.

    The x11 y13 position reported after homing is obviously wrong, so I think this explains the unwanted distal arm movement in your second video. Please share your config.g file. Also, please can you home all axes, check that the homing buttons are all blue at the end, and report the output of M114.

  • After homing all buttons do indeed turn blue. This is the positions of the axis when sitting at the endstops after homing:

    11:18:24 AM
    X:95.221 Y:-58.365 Z:0.000 E0:0.0 E1:0.0 E2:0.0 E3:0.0 E4:0.0 E5:0.0 Count -5695 -2401 0 User 95.2 -58.4 0.0

    The second video was not great At the end when I press the z-10 the arms also moved quickly as well and crashed.


    ; General preferences
    M111 S0 ; S0 Debugging off S1 Debugging on
    M550 scara ; Machine name (can be anything you like)
    M551 Preprap ; Machine password (used for FTP)
    M540 P0xBE:0xEF:0xDE:0xAD:0xFE:0x42 ; MAC Address
    ;*** Adjust the IP address and gateway in the following 2 lines to suit your network
    M552 P192.168.1.118 ; IP address (0 = use DHCP)
    M554 P192.168.1.254 ; Gateway
    M553 P255.255.255.0 ; Netmask
    G21 ; Work in millimetres
    G90 ; Absolute moves
    M83 ; Relative extrusion
    M208 X0 Y0 Z0 S1 ; Min
    M208 X100 Y100 Z150 S0 ; Max

    ; Endstops
    M574 X1 Y1 Z1 S1 ;

    ; Drives - Axis and motor configuration
    M569 P0 S0 ; Drive 0 (X) goes forwards
    M569 P1 S1 ; Drive 1 (Y) goes forwards
    M569 P2 S0 ; Drive 2 (Z) goes forwards
    M569 P3 S0 ; Drive 3 (E0) goes forwards
    M92 X67 Y28.25 ;Steps per degree
    M92 Z400 E550 ; Steps per mm
    M566 X300 Y300 Z15 E75 ; Set maximum instantaneous speed changes (mm/min)
    M203 X2000 Y2000 Z300 E1500 ; Set maximum speeds (mm/min)
    M201 X300 Y300 Z250 E800 ; Set accelerations (mm/s^2)
    M906 X1000 Y1000 Z1000 E1000 I60 ; Set motor currents (mA) and motor idle factor in per cent
    M84 S30 ; Set idle timeout
    M669 K4 P111.4 D100.4 A-85:85 B-85:85 C-1:0:0 S150 T0.1 X0 Y0;

  • Davis is machinePos the coordinates reported in the web interface? Trying to work through the math….

  • administrators

    Hi Bill,

    One problem I have spotted is that the crosstalk factors must currently be specified in motor steps, not amounts of movement. In other words, your proximal to distal crosstalk factor of -1 means that each forward step of the proximal motor needs to be countered by one reverse step of the distal motor. As you are using different steps/mm for your proximal and distal arms, -1 is not correct for your machine. I think the correct value is -67/28.25 instead.

    Thinking about it, it would be more logical to make the crosstalk based on amount of movement instead so as to be independent of the steps/mm. I'll make this change in the next 1.20 beta version.

  • Ok thanks I'll give it a shot

    I think I will try this on my duet Wi-Fi just to make sure it is not just a problem with using the 0.6 board

  • I agree that cross talk based on movement would be better.

    I think there may be a issue with the minRadius calculation (I could be wrong of course). When I input my values into the calculation I come up with a number that I do not believe is correct. Since my scara has limited movement (everything forms a right angled triangle at the limits because it can only rotate 90 degrees from 0) it is very easy to calculate some of the values. For instance the minRadius of my arm I believe is just the hypotenuse of the triangle it forms. I have a value of 150 or so for min radius based on this. When i put my numbers into the code I get a value of 211 or so(I may have done this wrong who know's just trying to pick away at things). My max radius is only 210.8. Let me know what you think about this.

  • administrators

    You are right, the minimum radius calculation is wrong. Thanks for pointing this out. I've just corrected it in the source code and the next 1.20 beta will include the fix. I've also changed the way the crosstalk factors work, to relate the distances moved instead of the motor steps - in degrees for the arms and in mm for Z.

  • So I have switched everything over from the v0.6 to my wifi and I won't say everything works as expected but everything works. So there is definitely something that doesn't work with the v0.6. Jogging buttons on the web interface do not result in crazy movements, but still not the movements I would expect. Are the jog buttons going to arm move angles or coordinates? I still have not been able to get the proper movements I am expecting. Homing coordinates still do not seem right to me. Homing now reports the same numbers as before

    2:38:58 PM
    X:95.221 Y:-58.365 Z:0.000 E0:0.0 E1:0.0 E2:0.0 E3:0.0 E4:0.0 E5:0.0 E6:0.0 E7:0.0 E8:0.0 Count -5695 -2401 0 User 95.2 -58.4 0.0

    I am running all the latest firmware and web control files. When I try to print a test file I get a bunch of errors from DWC, and cannot connect until the file is finished. Is there a way to see what the errors say? They seem to go away before I can copy them.

    I will keep playing with this now that I can get some movements.

    Thanks again

  • administrators

    The error messages that pop up in DWC can be viewed on the GCode Console page. You can also configure how long they remain as popups before they time out.

    The jog buttons should jog the XY coordinates.

    SCARA support is currently working well on at least 2 printers that do not require crosstalk parameters in the M669 command.

    As you are now running on a Duet WiFi, I'll make a pre-release 1.20beta7 release available for you to try when I am back in the office.

  • As my arms only turn 90 degrees i would expect my home position to be something like x -110 (proximal arm length)y -100(distal arm length). Does this make sense to you?

  • administrators

    With zero X and Y origin offset in the M669 command, X0 Y0 is the location of the proximal joint, and +X is the direction that the proximal arm points at angle zero. So if both arms home to 90 degrees clockwise, then X= -distal arm length and Y= -proximal arm length sounds right to me. This is assuming that you don't have any other arm movement commands in homeall.g after the homing move, and that you have corrected the crosstalk factor to allow for the different steps/mm as we discussed previously.

    Please try the following:

    1. With power off, set both arms at 0 degrees. This is the position that the firmware assumes at power on.

    2. Power on. The web interface should report the position as X= sum of arm lengths, Y= 0. Does it? M114 should report the step counts as zero.

    3. Send G91 followed by G1 S2 Y90 to move the distal arm clockwise 90 degrees. Does the web interface report the correct position?

  • With the arms at 0 the printer turns on and reports x = 210.7 y = 0. Lengths of the arms would be 211.8 as defined in config.

    I think this happens on this command

    maxRadius *= 0.995; Which gives the 210.741

    M669 K4 P111.4 D100.4 A-85:85 B-85:85 C-2.37:0:0 S150 T0.1 X0 Y0;

    7:52:36 PM
    X:210.741 Y:0.000 Z:0.000 E0:0.0 E1:0.0 E2:0.0 E3:0.0 E4:0.0 E5:0.0 E6:0.0 E7:0.0 E8:0.0 Count -365 -41 0 User 210.7 -0.0 0.0

    Sending g91 followed by g1 s2 y90 rotates the distal arm clockwise 90 degrees. The web interface reports x = 100.3 y=89.3. I would expect x=111.4 y=100.4 or something close to this?

  • administrators

    I can see what's happened. The original position is outside maxRadius, so the firmware has "corrected" it to be within maxRadius as if it were a position commanded by the user, by assuming the distal arm is rotated clockwise a few degrees (hence the motor step count of -41) and the proximal arm is rotated the same number of degrees clockwise. That's why the reported position doesn't agree exactly with the actual position.

    When you home the printer, what is the reported position now?

  • 11:18:00 AM
    X:95.221 Y:-58.365 Z:0.000 E0:0.0 E1:0.0 E2:0.0 E3:0.0 E4:0.0 E5:0.0 E6:0.0 E7:0.0 E8:0.0 Count -5695 -2401 0 User 95.2 -58.4 0.0

    This is with the printer sitting at the homing switches, same as before.

  • administrators

    Your config says the homing positions are at -85deg for each arm. So by my calculations the position should be:

    X = P * cos(85) + D * cos(85+85) = -89.17mm
    Y = P * sin(85) + D * sin(85+85) = -128.41mm

    Do you agree?

    I think I see what is happening. When the distal homing switch is triggered, the firmware is setting the distal motor position without allowing for the effect that the proximal motor has on the distal joint position. I'll fix this in the next beta.

    As a temporary workaround, try this in your homeall.g file:

    1. G1 S1 X… move to home the proximal joint.

    2. G2 S2 X85 move to put the proximal joint at zero degrees.

    3. Then home the distal joint.

  • There is a point where the crosstalk parameter starts to cause erratic movement. I will wait till I try your new release for further testing.

  • administrators

    OK, I've just built the new version, so I'll test it with a view to releasing it shortly.

Log in to reply