CoreXY neither X nor Y moving



  • Hi guys, for my new CoreXY printer I'm in the process of setup the X and Y axes. Upgraded to the latest and greatest firmware, made the config.

    However nothing is moving for some reason. Nothing is connected to the motors atm

    This is my first CoreXY build. I have succesfully setup 2 standard cartasian printer with Duet though

    FYI: I have only focussed on the XY config so there are probably some issues with the rest of the config. Especially the Z since it's my first time making a printer with three independent Z motors.

    Board: Duet WiFi 1.02 or later
    Firmware: RepRapFirmware for Duet 2 WiFi/Ethernet 3.01-RC4 (2020-03-16b1)
    Duet WiFi Server Version: 1.23

    ---------------Config Start---------------------
    ; Configuration file for Duet WiFi (firmware version 3)
    ; executed by the firmware on start-up
    ;
    ; generated by RepRapFirmware Configuration Tool v2.1.8 on Sun Mar 22 2020 09:23:06 GMT+0100 (Midden-Europese standaardtijd)

    ; General preferences
    G90 ; send absolute coordinates...
    M83 ; ...but relative extruder moves
    M550 P"3DAVII" ; set printer name

    M667 K1 ; select CoreXY mode

    ; Network
    M552 S1 ; Enable network
    M587 S"WAht" P"Hello!" ; Configure access point. You can delete this line once connected
    M586 P0 S1 ; Enable HTTP
    M586 P1 S0 ; Disable FTP
    M586 P2 S0 ; Disable Telnet

    ; Drives
    M569 P0 S1 ; Drive 0 X goes forwards
    M569 P1 S1 ; Drive 1 Y goes forwards
    M569 P2 S1 ; Drive 2 ZFR goes forwards
    M569 P3 S1 ; Drive 3 ZFL goes forwards
    M569 P4 S1 ; Drive 4 ZRC goes forwards
    M569 P5 S1 ; Drive 5 E0 goes forwards
    M569 P6 S1 ; Drive 6 E1 goes forwards
    M584 X0 Y1 Z2:3:4 U4 E5:6 P3 ; set drive mapping, Z sets the motors for Z, U provides the combined Z axis, P tells the printer it has 3 axis
    ; Do not forget we need to configure everything for each motor and the combined Z axis named U
    M350 X16 Y16 Z16:16:16 U16 E16:16 I1 ; configure microstepping with interpolation
    M92 X80.00 Y80.00 Z1280.00:1280.00:1280.00 U1280.00 E420.00:420.00 ; set steps per mm
    M566 X900.00 Y900.00 Z12.00:12.00:12.00 U12.00 E120.00:120.00 ; set maximum instantaneous speed changes (mm/min)
    M203 X6000.00 Y6000.00 Z180.00:180.00:180.00 U180.00 E1200.00:1200.00 ; set maximum speeds (mm/min)
    M201 X500.00 Y500.00 Z20.00:20.00:20.00 U20.0 E250.00:250.00 ; set accelerations (mm/s^2)
    M906 X800 Y800 Z800:800:800 U800 E800:800 I30 ; set motor currents (mA) and motor idle factor in per cent
    ;M667 and M669 have to be in front of this line
    M671 X-15:515:250 Y-10:-10:515 S1.0 ; leadscrews at front right, front left and rear center, s is the max correction TODO
    M84 S30 ; Set idle timeout

    ; Multi Z links
    ; https://duet3d.dozuki.com/Guide/Independent+Z+motors+and+endstop+switches/18
    ; https://duet3d.dozuki.com/Wiki/Bed_levelling_using_multiple_independent_Z_motors#Section_Note_on_M584_from_examples_above

    ; Axis Limits
    M208 X0 Y0 Z0 S1 ; set axis minima
    M208 X500 Y500 Z600 S0 ; set axis maxima

    ; Endstops
    M574 X1 S1 P"xstop" ; configure active-high endstop for low end on X via pin xstop
    M574 Y1 S1 P"ystop" ; configure active-high endstop for low end on Y via pin ystop
    M574 Z1 S1 P"zstop" ; configure active-high endstop for low end on Z via pin zstop

    ; Z-Probe
    M950 S0 C"duex.gp1" ; create servo pin 0 for BLTouch
    M558 P9 C"zprobe.in+zprobe.mod" 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"bedtemp" Y"thermistor" T100000 B3950 ; configure sensor 0 as thermistor on pin bedtemp
    M950 H0 C"bedheat" T0 ; create bed heater output on bedheat and map it to sensor 0
    M143 H0 S120 ; set temperature limit for heater 0 to 120C
    M307 H0 B0 S1.00 ; disable bang-bang mode for the bed heater and set PWM limit
    M140 H0 ; map heated bed to heater 0
    M308 S1 P"duex.e2temp" Y"thermistor" T100000 B4725 C7.06e-8 ; configure sensor 1 as thermistor on pin duex.e2temp
    M950 H1 C"duex.e2heat" T1 ; create nozzle heater output on duex.e2heat and map it to sensor 1
    M143 H1 S280 ; set temperature limit for heater 1 to 280C
    M307 H1 B0 S1.00 ; disable bang-bang mode for heater and set PWM limit
    M308 S2 P"duex.e3temp" Y"thermistor" T100000 B4725 C7.06e-8 ; configure sensor 2 as thermistor on pin duex.e3temp
    M950 H2 C"duex.e3heat" T2 ; create nozzle heater output on duex.e3heat and map it to sensor 2
    M143 H2 S280 ; set temperature limit for heater 2 to 280C
    M307 H2 B0 S1.00 ; disable bang-bang mode for heater and set PWM limit

    ; Fans
    M950 F0 C"fan0" Q500 ; create fan 0 on pin fan0 and set its frequency
    M106 P0 S0 H-1 ; set fan 0 value. Thermostatic control is turned off
    M950 F1 C"fan1" Q500 ; create fan 1 on pin fan1 and set its frequency
    M106 P1 S1 H1:2 T45 ; set fan 1 value. Thermostatic control is turned on

    ; Tools
    M563 P0 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 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 are not defined

    ; Miscellaneous
    M911 S22 R23 P"M913 X0 Y0 G91 M83 G1 Z3 E-5 F1000" ; set voltage thresholds and actions to run on power loss
    T0 ; select first tool
    --------------Config End----------------



  • @Nemesis1782 The first thought that popped into my head is that, by default nothing will move prior to axes being homed. You can disable that feature by sending M564 H0 to allow axes to be moved without them being homed. Use with caution....



  • @deckingman thnx for the reply 🙂 Sorry I forgot to state how I actually tested it. I used the homing scripts to test it. Added the scripts to the intial post.

    I did however use a H1 instead of a H0. Will try a H0 soon and get back to you.

    Update: tried with the H0 and that does not work. It says the axis has not been homed.



  • @deckingman Since it'll not let me edit the initial post:
    --------------Home X--------------------
    ; homex.g
    ; called to home the X axis
    ;
    ; generated by RepRapFirmware Configuration Tool on Sun Jul 29 2018 14:11:09 GMT+0200 (Midden-Europese zomertijd)
    G91 ; relative positioning
    ;G1 Z5 F6000 S2 ; lift Z relative to current position
    G1 H1 X-225 F1800 ; move quickly to X axis endstop and stop there (first pass)
    G1 X5 F6000 ; go back a few mm
    G1 H1 X-225 F360 ; move slowly to X axis endstop once more (second pass)
    ;G1 Z-5 F6000 S2 ; lower Z again
    G90 ; absolute positioning

    -------------------Home Y-----------------------
    ; homey.g
    ; called to home the Y axis
    ;
    ; generated by RepRapFirmware Configuration Tool on Sun Jul 29 2018 14:11:09 GMT+0200 (Midden-Europese zomertijd)
    G91 ; relative positioning
    ;G1 Z5 F6000 S2 ; lift Z relative to current position
    G1 H1 Y-233 F1800 ; move quickly to Y axis endstop and stop there (first pass)
    G1 Y5 F6000 ; go back a few mm
    G1 H1 Y-233 F360 ; move slowly to Y axis endstop once more (second pass)
    ;G1 Z-5 F6000 S2 ; lower Z again
    G90 ; absolute positioning



  • @Nemesis1782 No H1 should work - unless the end stop is already triggered. It looks like you are using normally closed switches so are they connected and closed before you start a move?

    If not, you can test motion by sending M564 H0, then a simple G1 X50 F1800 or some such (without any "H" parameter).



  • @deckingman Indeed the issue seems to be the endstops. Didn't notice that the axes actually got homed...

    So I did what anyone would do and inverted the end stops. Now get a error stating no endstop was detected.

    I even tried removing the endstop and setting it S3 (stall detection)

    The error I get is:
    33517e9f-ab9d-4a17-ac5f-caab25cbaa68-image.png

    O sorry wait. I'm a buffoon! I was changing the S on the M574. Which changes the type of endswitch!

    Ok so the S0 is no longer supported and the endstop config has changed in RRF3. This issue seems to be resolved. Now it says no motor connected to driver0.



  • Ok. So the endstop issue is resol
    ved. I now have the issue that the duet is telling me the motor is not connected. I tested it with a different config and it works as a standard cartesian setup (meaning both X and Y motors can be driven and do work.

    I've stripped the config of anything superfluos to make it simple:

    ----------------Start CoreXY config--------------------------
    G90 ; send absolute coordinates...
    M83 ; ...but relative extruder moves
    M550 P"3DAVII" ; set printer name
    M667 K1 ; select CoreXY mode

    ; Drives
    M569 P0 S1 ; Drive 0 X goes forwards
    M569 P1 S1 ; Drive 1 Y goes forwards
    M584 X0 Y1 ;

    M350 X16 Y16 I1 ; configure microstepping with interpolation
    M92 X80.00 Y80.00 ; set steps per mm
    M566 X900.00 Y900.00 ; set maximum instantaneous speed changes (mm/min)
    M203 X6000.00 Y6000.00; set maximum speeds (mm/min)
    M201 X500.00 Y500.00; set accelerations (mm/s^2)
    M906 X1600 Y1600 I30 ; set motor currents (mA) and motor idle factor in per cent
    ;M667 and M669 have to be in front of this line
    M84 S30 ; Set idle timeout

    ; Axis Limits
    M208 X0 Y0 Z0 S1 ; set axis minima
    M208 X500 Y500 Z600 S0 ; set axis maxima

    ; Endstops
    M574 X1 S1 P"!xstop" ; configure active-high endstop for low end on X via pin !xstop (!signifies inversion)
    M574 Y1 S1 P"!ystop" ; configure active-high endstop for low end on Y via pin !ystop (!signifies inversion)
    M574 Z1 S1 P"!zstop" ; configure active-high endstop for low end on Z via pin !zstop (!signifies inversion)

    -------------Motor/Driver test config---------------
    ; Drives
    M569 P0 S1 ; Drive 0 goes forwards
    M569 P1 S1 ; Drive 1 goes forwards
    M569 P2 S0 ; Drive 2 goes backwards
    M569 P3 S1 ; Drive 3 goes forwards
    M350 X16 Y16 Z16 E16 I1 ; Configure microstepping with interpolation
    M92 X99.95 Y100.95 Z400 E94.34 ; Set steps per mm
    M566 X900 Y450 Z12 E120 ; Set maximum instantaneous speed changes (mm/min)
    M203 X12000 Y9000 Z1500 E1200 ; Set maximum speeds (mm/min)
    M201 X500 Y250 Z10 E250 ; Set accelerations (mm/s^2)
    M906 X700 Y700 Z900 E800 I30 ; Set motor currents (mA) and motor idle factor in per cent
    M84 S30 ; Set idle timeout

    ; Axis Limits
    M208 X0 Y8 Z0 S1 ; Set axis minima
    M208 X210 Y220 Z220 S0 ; Set axis maxima

    ; Endstops
    M574 X1 Y1 Z1 S0 ; Set active low endstops



  • Alright. I have both the X and Y running with home X and home Y.

    HOWEVER, it should NOT work, right? (X motor connected to drive 0, Y to drive 1). Can anyone shed light on this I would assume that it should be: M584 X0 Y1 Z2;

    ------------Working? config-------------

    ; General preferences
    G90 ; send absolute coordinates...
    M83 ; ...but relative extruder moves
    M550 P"3DAVII" ; set printer name

    M667 K1 ; select CoreXY mode

    ; Drives
    M569 P0 S1 ; Drive 0 X goes forwards
    M569 P1 S1 ; Drive 1 Y goes forwards
    M569 P2 S1 ; Drive 1 Y goes forwards
    M584 Z0 Y1 X2;

    M350 X16 Y16 z16 I1 ; configure microstepping with interpolation
    M92 X80.00 Y80.00 Z80.00; set steps per mm
    M566 X900.00 Y900.00 Z900.00 ; set maximum instantaneous speed changes (mm/min)
    M203 X6000.00 Y6000.00 Z6000.00; set maximum speeds (mm/min)
    M201 X500.00 Y500.00 Z500.00; set accelerations (mm/s^2)
    M906 X1600 Y1600 Z1600 I30 ; set motor currents (mA) and motor idle factor in per cent
    ;M667 and M669 have to be in front of this line
    M84 S30 ; Set idle timeout

    ; Axis Limits
    M208 X0 Y0 Z0 S1 ; set axis minima
    M208 X500 Y500 Z600 S0 ; set axis maxima

    ; Endstops
    M574 X1 S1 P"!xstop" ; configure active-high endstop for low end on X via pin !xstop (!signifies inversion)
    M574 Y1 S1 P"!ystop" ; configure active-high endstop for low end on Y via pin !ystop (!signifies inversion)
    M574 Z1 S1 P"!zstop" ; configure active-high endstop for low end on Z via pin !zstop (!signifies inversion)


  • Moderator

    I would suggest that you go through the web configurator and generate a new config set using all the information you've learned thus far then test what works and doesn't work and report back. Don't strip out anything from the config, it'll just complicate things in the long run.


  • Moderator

    @Nemesis1782 note that the order of the stepper drivers on the board is:
    E1, E0, X, Y, Z
    So X is in the middle, not at the end. You have M584 Z0 Y1 X2, so X is on the double header meant for dual Z motors.

    Ian



  • @Phaedrux thnx for the reply. I like the configurator to create a initial config. However there are a number of reasons I want to understand the underlying GCode configuration and tweak in GCode. The most important reason being I'm not able to configure my printer setup with it.

    I will do what you suggested tomorrow and see if that resolves it. That does not change that I'd like to know why the above config behaves in such a unexpected manner.



  • @droftarts Yes that is by design. The reason for that is that I'm going to be using three independently driven Z motors. The Default mapping is just that a default mapping.

    If you check the GCode guide you'll see that this is a example:
    M584 X0 Y1 Z2:3 E4:5:6 ; Driver 0 controls the X motor, 1 controls Y, 2 and 3 control Z motors, 4 5 and 6 control E motors

    I do now realize that I defined 2,3,4 for Z initialy, however in this config have not reinitialized it. As per this note that might be a issue, so 'll be testing that tomorrow:
    VERY IMPORTANT! Assigning a drive using M584 does not remove its old assignment. Therefore, if you assign a drive that defaults to being an extruder drive, you should also assign the extruder drives explicitly as in the above example. Failure to do so may result in unexpected behaviour.



  • @Phaedrux I'm sorry I tried using the configurator and it does not work correctly!

    When choosing RRF3+ I get the following config for the endstops: M574 X1 S0 P"!zstop" ; configure active-low endstop for low end on X via pin !zstop

    This does not work because S0 is no longer supported for RRF3+. It should' vv e been: M574 X1 S1 P"!zstop" ; configure active-low endstop for low end on X via pin !zstop

    Also it sets: M667 S1 ; select CoreXY mode
    Which according to documentation should be (for RRF3): M667 K1 ; select CoreXY mode

    I understand you'd like people to use the tool provided. However atm it provides more issues then it solves atm.



  • I got the motors working correct now.

    I still do have one confusing thing in the config and that has to do with assigning the drivers.
    My physical connections: X is on 0 (Normally used for Z), Y is on 1, Z is on 2 (Normally used for X) [I did this because I will be using 3 and 4 for Z as well and it makes more sense having the Zs in order]

    The working config is: M584 X2 Y1 Z0 E3:4; set drive mapping (With this config I would assume X is on the third driver however it isn't! It is on the first...)

    According to the documentation: M584: Set drive mapping
    Parameters

    Xnnn Driver number(s) for X motor(s)
    Ynnn Driver number(s) for Y motor(s)
    Znnn Driver number(s) for Z motor(s)

    So why doesn't it work when I say: M584 X0 Y1 Z2 E3:4; If I do this it treats the Z motor on driver 2 as the X, can anyone confirm if this is a bug?

    @Phaedrux The Configuration tool generates old type config when selectin RRF3+. Specific issues I had:

    • (generic issue) you select inversion when selecting the endstop for the axis and you select if it is NC or NO in the next menu. This is redundant and confusing.
    • M574 Command sets S0 when selecting a NO endswitch type. This is incompatible/depricated on RRF3
    • M667(669) Command when on RRF3 it should set M669 K1 instead of M667 S1

  • Moderator

    @Nemesis1782 i explained this before, but without the driver numbers. The board has the drivers physically labelled on the PCB as:
    ZA/ZB, Y, X, E0, E1
    Driver numbers associated with these are:
    2, 1, 0, 3, 4
    In older firmware, these were automatically assigned. With RRF3, there are no default assignments, but the physical order of the drivers, and their assigned number, persists.

    See https://duet3d.dozuki.com/Wiki/Choosing_and_connecting_stepper_motors#Section_Stepper_Driver_Numbering

    Ian


  • Moderator

    @chrishamm See above. Please check endstop S parameter assignments when NO selected with RRF3 in the config tool.

    And use of M667/M669.

    Ian



  • @droftarts Ah, then I misunderstood what you said. My apologies. Yes I see the documentation and even though I already this it took you pointing it out for me to comprehend 😛 So thnx for the patience and pointing it out so clearly 🙂

    I just made the assumption that the drives were numberred 0 to 4 in a (for me) logical manner.

    So out of curiosity, why are the steppers numberred this way. There must be a logical reason behind it I'm not seeing.

    I would like to mark the issue resolved since my config is correct (how do I do that?) and it works as expected. My initial test show that 100mm move in either X or Y gets a good result (measured with a precision of 0.1 mm for now)

    @droftarts @Phaedrux thnx for your input and patience 🙂


  • Moderator

    @Nemesis1782 said in CoreXY neither X nor Y moving:

    So out of curiosity, why are the steppers numberred this way. There must be a logical reason behind it I'm not seeing.

    I’m really not sure! The earliest Duets v0.6 used the same order but with only one extruder, but earlier electronics like the Melzi and Sanguinololu didn’t. So I’m not sure where it came from. Maybe @T3P3Tony or @dc42 knows?

    Ian


  • Moderator

    Thinking about it, it may be due to heat dissipation. The assumption is that the the X and Y driver would work hardest, so having the most copper around them makes sense, so put them in the middle.

    Ian



  • @droftarts Ah yeah that would actually make sense. In that case I might actually move the assignments back since my X and Y motors are NEMA23's which will run at 1500mA. Can anyone confirm this is the case?


  • administrators

    @Nemesis1782 said in CoreXY neither X nor Y moving:

    @droftarts Ah yeah that would actually make sense. In that case I might actually move the assignments back since my X and Y motors are NEMA23's which will run at 1500mA. Can anyone confirm this is the case?

    At 1500mA you don't need to worry about stepper motor cooling on a Duet WiFi or Ethernet. So use whichever driver assignment is convenient.

    I don't know the reason why the drivers were laid out in that order on the original Duet, but @T3P3Tony might.



  • @dc42 Thnx for the reply. The Duet is mounted vertically and will be fitted with a low RPM fan. (Is it possible to have the FAN be controlled by Duet and Driver temperatures?)


  • Moderator

    @Nemesis1782 said in CoreXY neither X nor Y moving:

    (Is it possible to have the FAN be controlled by Duet and Driver temperatures?)

    Yes.

    https://duet3d.dozuki.com/Wiki/Mounting_and_cooling_the_board#Section_Cooling

    You can tie the fan speed to the MCU temperature as a proxy for the drivers, you can add a seperate thermistor to a driver chip and use that, you simply set a fixed fan speed in your slicer start gcode and then turn it off again in the end gcode, or you can tie it to the hotend/bed temp to turn on when printing.



  • @Phaedrux Thnx mate, The Start/Stop GCode is actually a good idea. However, the RRF3 example is exactly what I want!

    It would be nice if you could set variable frequencies though, preferably a frequency curve. That way instead of the fans turning on at a high speed intermittently they would ramp up and down as needed and thus much less annoying.



  • @Nemesis1782 said in CoreXY neither X nor Y moving:

    It would be nice if you could set variable frequencies though, preferably a frequency curve. That way instead of the fans turning on at a high speed intermittently they would ramp up and down as needed and thus much less annoying.

    That can be already be done. Instead of setting a fixed temperature you specify a range. For example, you could use something like M106 Pn Snnn T50:80 Hn. This would start the fan turning when the temperature reached 50 deg C, ramping up proportionally to full speed at 80 deg C. You may find that at temperatures close to 50, the fan might make an annoying "buzzing" sound when PWM is at a low value. If this is the case then you can use at "L" parameter to set a minimum speed. i.e you could have say M106 Pn Snnn L125 T50:80 Hn. In this example The fan would be completely off at below 50 deg C. At 50 deg it would start to run at half speed and would stay at half speed until the temperature reached mid way between 50 and 80 (so 65) and from 65 to 80 it would ramp up from half speed to full speed.

    You can also use the "X" parameter to set the maximum speed, the "B" parameter to "blip" the fan. There isn't much that you can't do. https://duet3d.dozuki.com/Wiki/Gcode#Section_M106_Fan_On

    Edit. But you can only do that when there is an actual temperature which can be read. The MCU and driver temperatures are simply digital "flags" set when a certain value is exceeded.


Log in to reply