CoreXY intermittant 45 deg. layer shift on larger prints



  • I have a scratch built CoreXY that I use a Duet 2 Maestro on. For two weeks this worked perfectly. Then I started to get intermittent 45 degree layer shifts toward the "back right" stepper, which I will call the "Y" stepper since that is the port it is connected to. When this happens and I cancel the print, the X axes homes, the Y axis always stops short of home. The cancel.g file says it should have homed both X and Y. I think that these two symptoms are related to whatever the problem is. A small model that does not have any long distance travels will print just fine.
    I use Simplify3D as my slicer.
    My geometry is 155mmx200mm/180mm (yes, a small printer)
    I am using NEMA17 37oz.in(26Ncm) 12V 0.4Amp 1.8deg steppers

    These are the things that I have checked and changed, to no avail.
    I have checked the wiring and connector crimps and solder connections.
    Checked limit switches for correct signal and operation
    made sure that the mechanics do not bind by loosening the stepper pulleys and moving the carriage, it is smooth.
    checked my belts for equal tension and tested all of my idlers.
    Slowed acceleration from 1000mm/s to 200mm/s
    reduced jerk from 15 mm/s to 5mm/s
    increased stepper current from 800ma to 1000ma, and down to 500ma (this is too low)
    slowed print speeds down to between 24 and 40mm/s
    even tried the silly stepper "smoothers" (yeah, but I'm getting desperate)
    Since the layer shift is always 45 deg. to the "Y" stepper, this means that the "X" stepper had to have stopped or that belt jammed for the slide to go that path. I have a new stepper on order in case I actually have a bad one, which seems really unlikely, but...
    I wrote a gcode to exercise the steppers in a variety of motions and speeds, which works flawlessly, unfortunately.

    This is my config.g file:

    ; Configuration file for Duet Maestro (firmware version 3)
    ; executed by the firmware on start-up
    ;
    ; generated by RepRapFirmware Configuration Tool v3.1.1 on Thu Jun 04 2020 20:04:14 GMT-0600 (Mountain Daylight Time)
    
    ; General preferences
    G90                                                    ; send absolute coordinates...
    M83                                                    ; ...but relative extruder moves
    M550 P"MiniCoreXY"                                     ; set printer name
    M669 K1                                                ; select CoreXY mode
    M918 P1 E-4 F2000000                                   ; configure direct-connect display
    
    ; Network
    M551 P"Kevy!!"                                         ; set password
    M552 P0.0.0.0 S1                                       ; enable network and acquire dynamic address via DHCP
    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 S1                                             ; physical drive 1 goes forwards
    M569 P2 S0                                             ; physical drive 2 goes backwards
    M569 P3 S0                                             ; physical drive 3 goes backwards
    M584 X0 Y1 Z2 E3                                       ; set drive mapping
    M350 X16 Y16 Z16 E16 I1                                ; configure microstepping with interpolation
    M92 X80.00 Y80.00 Z400.00 E420.00                      ; set steps per mm
    M566 X300.00 Y300.00 Z12.00 E120.00                    ; set maximum instantaneous speed changes (mm/min)
    M203 X6000.00 Y6000.00 Z180.00 E1200.00                ; set maximum speeds (mm/min)
    M201 X200.00 Y200.00 Z20.00 E250.00                    ; set accelerations (mm/s^2)
    M906 X1000 Y1000 Z800 E800 I50                         ; set motor currents (mA) and motor idle factor in per cent
    M84 S30                                                ; Set idle timeout
    
    ; Axis Limits
    M208 X0 Y0 Z0 S1                                       ; set axis minima
    M208 X155 Y200 Z180 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
    M558 P0 H5 F120 T6000                                  ; disable Z probe but set dive height, probe speed and travel speed
    M557 X15:155 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
    M307 H0 B1 S1.00                                       ; enable bang-bang mode for the bed heater and set PWM limit
    M140 H0                                                ; map heated bed to heater 0
    M143 H0 S100                                           ; set temperature limit for heater 0 to 100C
    M307 H0 B1 A103.3 C481.9 D3.0 V11.7 P0.8			   ; bed tuned values
    
    M308 S1 P"e0temp" Y"thermistor" T100000 B4725 C7.06e-8 ; configure sensor 1 as thermistor on pin e0temp
    M950 H1 C"e0heat" T1                                   ; create nozzle heater output on e0heat and map it to sensor 1
    M307 H1 B0 S1.00 A911.9 C295.5 D4.2 V11.9              ; disable bang-bang mode for heater  and set PWM limit and PID tune values
    
    ; 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 S0 H-1                                         ; set fan 1 value. Thermostatic control is turned off
    
    ; 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
    
    ; Custom settings are not defined
    

    This is the result of an M122 command shortly after the layer shift and before I canceled the print:

    M122
    === Diagnostics ===
    RepRapFirmware for Duet 2 Maestro version 3.1.1 running on Duet Maestro 1.0
    Board ID: 08DAM-9F9GA-J24TD-6J1DJ-3SS6K-KR1AV
    Used output buffers: 3 of 24 (18 max)
    === RTOS ===
    Static ram: 21924
    Dynamic ram: 95296 of which 52 recycled
    Exception stack ram used: 408
    Never used ram: 13392
    Tasks: NETWORK(ready,408) HEAT(blocked,1316) MAIN(running,1992) IDLE(ready,84)
    Owned mutexes:
    === Platform ===
    Last reset 01:43:26 ago, cause: power up
    Last software reset at 2020-06-17 22:06, reason: User, spinning module GCodes, available RAM 13604 bytes (slot 0)
    Software reset code 0x0003 HFSR 0x00000000 CFSR 0x00000000 ICSR 0x0400f000 BFAR 0xe000ed38 SP 0xffffffff Task MAIN
    Error status: 0
    MCU temperature: min 24.4, current 41.9, max 42.7
    Supply voltage: min 0.0, current 11.8, max 12.1, under voltage events: 0, over voltage events: 0, power good: yes
    Driver 0: ok, read errors 0, write errors 0, ifcount 13, reads 51469, timeouts 0
    Driver 1: ok, read errors 0, write errors 0, ifcount 13, reads 51469, timeouts 0
    Driver 2: standstill, read errors 0, write errors 0, ifcount 13, reads 51469, timeouts 0
    Driver 3: standstill, read errors 0, write errors 0, ifcount 9, reads 51472, timeouts 1
    Driver 4: standstill, read errors 0, write errors 0, ifcount 6, reads 51476, timeouts 0
    Driver 5: ok, read errors 0, write errors 0, ifcount 0, reads 0, timeouts 51481
    Driver 6: ok, read errors 0, write errors 0, ifcount 0, reads 0, timeouts 51481
    Date/time: 2020-06-18 20:22:07
    Slowest loop: 115.22ms; fastest: 0.12ms
    I2C nak errors 0, send timeouts 0, receive timeouts 0, finishTimeouts 0, resets 0
    === Storage ===
    Free file entries: 9
    SD card 0 detected, interface speed: 15.0MBytes/sec
    SD card longest read time 2.6ms, write time 1.0ms, max retries 0
    === Move ===
    Hiccups: 0(0), FreeDm: 166, MinFreeDm: 139, MaxWait: 263594ms
    Bed compensation in use: none, comp offset 0.000
    === MainDDARing ===
    Scheduled moves: 41353, completed moves: 41333, StepErrors: 0, LaErrors: 0, Underruns: 0, 0  CDDA state: 3
    === AuxDDARing ===
    Scheduled moves: 0, completed moves: 0, StepErrors: 0, LaErrors: 0, Underruns: 0, 0  CDDA state: -1
    === Heat ===
    Bed heaters = 0 -1, chamberHeaters = -1 -1
    Heater 0 is on, I-accum = 0.0
    Heater 1 is on, I-accum = 0.4
    === GCodes ===
    Segments left: 1
    Movement lock held by null
    HTTP is idle in state(s) 0
    Telnet is idle in state(s) 0
    File is doing "G1 X69.976 Y22.159 E1.5796" 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
    Daemon is idle in state(s) 0
    Autopause is idle in state(s) 0
    Code queue is empty.
    === Network ===
    Slowest loop: 31.96ms; fastest: 0.02ms
    Responder states: HTTP(0) HTTP(0) HTTP(0) HTTP(0) FTP(0) Telnet(0), 0 sessions
    HTTP sessions: 2 of 8
    Interface state active, link 100Mbps full duplex
    

    I am completely out of ideas. I feel that I have eliminated mechanical and wiring errors and am left with either a faulty board in some fashion or a mistake in my config.g file.

    Does anyone have any other ideas?

    DLC



  • @dlc60 said in CoreXY intermittant 45 deg. layer shift on larger prints:

    the Y axis always stops short of home. The cancel.g file says it should have homed both X and Y...

    By 'homing', do you mean actual homing with end switches and such, or that you just tell the head to go to a certain (x, y) and the y position doesn't seem right?


  • Moderator

    @dlc60 said in CoreXY intermittant 45 deg. layer shift on larger prints:

    0.4Amp

    Are they really 0.4a? That seems incredibly low even for a very small printer. Do you have a link on the motor specs? Target 60-85% of the motor rated max current.

    Do you have the Maestro actively cooled?

    the Y axis always stops short of home.

    This could be due to missed steps. If it's actually running a homing command here, you can change your homing macro to increase the distance the axis moves towards the endstop and see if that fixes it after it's done some layer shifts.



  • @dlc60 said in CoreXY intermittant 45 deg. layer shift on larger prints:

    Does anyone have any other ideas?

    Try to turn off StealthChop for the X and Y drive.
    You can do that by adding a D2 option to the M569 code.

    M569 P0 S0 D2
    M569 P1 S1 D2

    It's a common issue with the maestro.
    In my case that had solved the problem reliably.



  • Have you seen my thread? I had the same sort of thing happen yesterday. I think I solved it now with upping motor currents to 75% of motor rating.



  • @dlc60 said in CoreXY intermittant 45 deg. layer shift on larger prints:

    Then I started to get intermittent 45 degree layer shifts toward the "back right" stepper, which I will call the "Y" stepper since that is the port it is connected to. When this happens and I cancel the print, the X axes homes, the Y axis always stops short of home. The cancel.g file says it should have homed both X and Y.

    Since you mentioned the Y axis stops short trying to home, what's your homey.g file look like? Are you sure your homey file homes the y axis through a length greater than your actual machine maximum?

    Do your steppers have cables coming out of them or are they connectors with cables plugged in? If you have connectors, its possible one of those is loose or not making good contact?



  • @zapta said in CoreXY intermittant 45 deg. layer shift on larger prints:

    @dlc60 said in CoreXY intermittant 45 deg. layer shift on larger prints:

    the Y axis always stops short of home. The cancel.g file says it should have homed both X and Y...

    By 'homing', do you mean actual homing with end switches and such, or that you just tell the head to go to a certain (x, y) and the y position doesn't seem right?

    I mean "go until you activate the end stop switch". What is weird is that it simply doesn't get all the way home, but stops.

    DLC



  • @Phaedrux said in CoreXY intermittant 45 deg. layer shift on larger prints:

    @dlc60 said in CoreXY intermittant 45 deg. layer shift on larger prints:

    0.4Amp

    Are they really 0.4a? That seems incredibly low even for a very small printer. Do you have a link on the motor specs? Target 60-85% of the motor rated max current.

    Do you have the Maestro actively cooled?

    the Y axis always stops short of home.

    This could be due to missed steps. If it's actually running a homing command here, you can change your homing macro to increase the distance the axis moves towards the endstop and see if that fixes it after it's done some layer shifts.

    The advert title was totally whack. This is the stepper:
    17HD48002H-22B Nema 17 Stepper Motor 1.7 A, 0.59 Nm and I am driving them at 1.0Amp. There should be plenty of muscle there. However, I tried driving them at 1.3Amp and they got hot pretty quickly. Quicker than I would think a 1.7Amp spec should.

    DLC



  • @pandaym said in CoreXY intermittant 45 deg. layer shift on larger prints:

    Have you seen my thread? I had the same sort of thing happen yesterday. I think I solved it now with upping motor currents to 75% of motor rating.

    That might work, I tried that though and shut it down because the steppers got very hot by the time it was 1/3 through the print. It didn't seem like a good idea.

    DLC


  • Moderator

    Unless it was over 80c the steppers probably didn't mind.



  • @PDBeal said in CoreXY intermittant 45 deg. layer shift on larger prints:

    @dlc60 said in CoreXY intermittant 45 deg. layer shift on larger prints:

    Then I started to get intermittent 45 degree layer shifts toward the "back right" stepper, which I will call the "Y" stepper since that is the port it is connected to. When this happens and I cancel the print, the X axes homes, the Y axis always stops short of home. The cancel.g file says it should have homed both X and Y.

    Since you mentioned the Y axis stops short trying to home, what's your homey.g file look like? Are you sure your homey file homes the y axis through a length greater than your actual machine maximum?

    Do your steppers have cables coming out of them or are they connectors with cables plugged in? If you have connectors, its possible one of those is loose or not making good contact?

    The wires go directly into the stepper. Hmm, I didn't look before at homey, homex. That would tend to support the thought of missing steps.

    DLC



  • @Phaedrux said in CoreXY intermittant 45 deg. layer shift on larger prints:

    Unless it was over 80c the steppers probably didn't mind.

    It was more like 50, by my calibrated finger tips... Heat like that might shorten the life span of the motor by a bit. Still, if nothing else works, I will try that again when I can keep an eye on the system all the time, just in case.

    DLC



  • @DIY-O-Sphere said in CoreXY intermittant 45 deg. layer shift on larger prints:

    @dlc60 said in CoreXY intermittant 45 deg. layer shift on larger prints:

    Does anyone have any other ideas?

    Try to turn off StealthChop for the X and Y drive.
    You can do that by adding a D2 option to the M569 code.

    M569 P0 S0 D2
    M569 P1 S1 D2

    It's a common issue with the maestro.
    In my case that had solved the problem reliably.

    Sadly, this had no effect at all.

    DLC



  • I was actually able to be right there when the problem happened this time. The hot end was striking plastic, like the Z had not dropped to the next level.
    This is a completely different kind of problem. I wonder why it always shifts the same direction? Maybe that belt is looser or that stepper is just a little weaker...
    This is why my exercise program showed no issue, it drops the Z about 5mm and then jams the X/Y directions around. I need to add a Z movement section to the test.

    DLC



  • Much strangeness.
    I swapped X and Y steppers and saw the shift move to the other diagonal, which implies that it could be related to the stepper motor. I also found that my Z platform was not flat anymore, one side was off by 2mm, so I re-trimmed the screws and re-leveled the bed and started another test. On the second layer of the next test, when I wasn't looking, I heard a loud "bzzzt" kind of grindy, buzzy sound and the layer shifted a huge amount straight towards X0, no diagonal at all. The Z had already moved and about half of the layer had already been printed when this happened. While the motors were all powered I tried moving the X/Y carriage, and I could move the (now) Y motor, but not the X. It looks like I may have found my problem. I should not have been able to move that stepper pulley with a court order, but it moved when I turned it with my fingers, that shouldn't be. Since my shift moved when I swapped the steppers, that means that bind was not in either belt circuit, it is in the motor. I have a new one from the seller coming, I just don't know when. Or, hmm, move my Z motor to Y and get another stepper from the junk box for Z, it does not have to match the other two.

    This story just keeps changing...

    DLC



  • @dlc60 50C is stone cold for the surface temperature of the motor. They can easily run 60-80C for the surface, without noticeably changing the lifespan (80C keeps the windings below 120C, probably, which is their full industrial-lifetime rating in low-temperature motors, typically). I tend to run a surface temp of around 60C under normal, fast-ish printing. During my print run making face shields, I upped my motor current to 80-90% of spec, so I could run faster. Surface temp was then about 70C. If the motors eventually die, tough luck, but they are designed for this.
    I have a personal philosophy about tools: they are meant to be used. i don't abuse them, but I use them in a way that gets work done, and if it wears them out, they are doing what they should.


Log in to reply