Issues with Z-Probing in 1.21 and 1.20 on Duet 0.8.5 on CoreXY



  • I've got an issue on one of my CoreXY machines with 1.21 and 1.20 with Z-probing/homing Z. This machine has a heavy Z bed, so I have to run the current up on Z to 1400 in M906. With firmware 1.18.2, the bed will Z home and probe properly. After trying out 1.20 and 1.21, when it goes to Z-probe it illuminates the light on my DC42 IR sensor and then the bed promptly drops to the floor as if the motor current was turned off. On my other machines with Z set to 1000 in M906 this isn't a problem, but I believe since this one machine has a heavy Z bed its showing an issue. I did notice I have M84 S0 in the machine with the heavy Z axis, but don't in the other machines but I haven't experimented to know if that changes the behavior yet. I did read through the Readme files thinking I needed to adjust something for 1.20 and 1.21 with the probe, but didn't see anything.

    I can replicate the issue just by flashing the firmware to 1.20 or 1.21, and the issue does not exist in 1.18.2.

    My current config.g file for 1.18.2 firmware. (In 1.20 and 1.21 I have to change M569 P1 S0; which is my the comment is incorrect in my current config)

    ; CoreXY config file for dc42 Duet firmware
    
    M111 S0;				; Debug off
    M540 P0xBE:0xEF:0xDE:0xAD:0xFE:0xAD; 	; MAC Address
    M550 PSmartrapcore Alu XL 		; Machine name (can be anything you like)
    ;M551 P************;			; Machine password (used for FTP connections)
    ;*** Adjust the IP address and gateway in the following 2 lines to suit your network
    M552 P***.***.***.***;			; IP address (0 = use DHCP)
    M553 P255.255.255.0;			; Netmask
    M554 P***.***.***.***;			; Gateway
    M555 P2;				; Set output to look like Marlin
    M575 P1 B57600 S1;			; Comms parameters for PanelDue
    M912 P0 S-7.8 				; (room_temperature - reported_minimum_temperature from M122) (29.9 - 37.7)
    
    M667 S1;				; set CoreXY mode
    G21;					; Work in millimeters
    G90;					; Send absolute coordinates...
    M83;					; ...but relative extruder moves
    
    ; Axis and motor configuration
    M569 P0 S0;				; (X axis) Drive 0 goes reverse
    M569 P1 S1;				; (Y axis) Drive 1 goes reverse
    M569 P2 S0;				; (Z axis) Drive 2 goes reverse
    M569 P3 S1;				; (Extruder 0) Drive 3 goes forwards
    M569 P4 S1;				; (Extruder 1) Drive 4 goes forwards
    M574 X1 Y1 Z0 S0;			; set endstop configuration (X and Y and endstops only, at low end, active high)
    M92 X80 Y80 Z80;			; Set axis steps/mm
    M92 E589.02:589.02; 			; Set extruder steps/mm
    					; e_steps_per_mm = (motor_steps_per_rev * driver_microstep) * (big_gear_teeth / small_gear_teeth) / (hob_effective_diameter * pi)
    					; (200 * 16) * (45 / 11) / (7.5 * 3.14159) = 555.5954
    M906 X800 Y800 Z1400 E800:800;		; Set motor currents (mA)
    M84 S0;					; Disable motor idle current reduction
    M201 X800 Y800 Z15 E500:500;		; Accelerations (mm/s^2)
    M203 X15000 Y15000 Z500 E6000:6000;	; Maximum speeds (mm/min) (E3600)
    M566 X600 Y600 Z10 E20:20;		; Maximum jerk speeds mm/minute
    M208 X300 Y200 Z330;			; set axis max (adjust to suit your machine)
    M208 X-1.0 Y-23.0 Z-2.0 S1;		; set axis min (adjust to make X=0 and Y=0 the edges of the bed)
    
    ; The following M557 commands are not needed if you are using a bed.g file to perform bed compensation
    ;*** Adjust the XY coordinates in the following M557 commands to suit your build and the position of the Z probe
    ;See bed.g file for bed compensation
    
    ; Thermistors and heaters
    M305 P0 T100000 B4725 C7.06e-8 R4700 H0 L0 ; Put your own H and/or L values here to set the bed thermistor ADC correction
    M305 P1 T100000 B4725 C7.06e-8 R4700 H0 L0 ; Put your own H and/or L values here to set the first nozzle thermistor ADC correction
    ; set model parameters for heaters (Autotune - M303 H0 S100 / M303 H1 S240)
    M307 H0 A155.8 C232.6 D1.0 S1.0 B0 	; Heater 0 model: gain 155.8, time constant 232.6, dead time 1.0, max PWM 1.00, mode: PID
    M307 H1 A436.1 C217.6 D6.0 S1.0 B0	; Heater 1 model: gain 436.1, time constant 217.6, dead time 6.0, max PWM 1.00, mode: PID
    
    ; Fans
    M106 P0 S0.3 I0 F500 H-1 		; Set fan 0 value, PWM signal inversion and frequency. Thermostatic control is turned off
    M106 P1 S1 I0 F500 H1:2 T45 		; Set fan 1 value, PWM signal inversion and frequency. Thermostatic control is turned on
    
    ; Tool definition
    M563 P0 D0 H1				; Define tool 0
    G10 P0 X0 Y0 				; Set tool 0 axis offsets
    G10 P0 R0 S0 				; Set initial tool 0 active and standby temperatures to 0C
    M563 P1 D1 H1				; Define tool 1
    G10 P1 X0 Y0 				; Set tool 1 axis offsets
    G10 P1 R0 S0 				; Set initial tool 1 active and standby temperatures to 0C
    M143 S290 				; Define Maximum hot-end temperature
    
    ; Z probe
    M558 P1 X0 Y0 Z1 H3 F200 T5000		; smart IR Z probe, used for homing Z axis only, dive height 3mm, probe speed 200mm/min, travel speed 5000mm/min
    G31 P500 X33.0 Y0.0 Z1.6 		; set threshold and offsets (1.77)
    
    ;*** If you are using axis compensation, put the figures in the following command
    M556 S78 X0 Y0 Z0			; Axis compensation here
    
    T0					; select first hot end
    M106 P0 S0 				; start with 0 PWM Fan
    
    

  • administrators

    Instead of M84 S0, have you tried using parameter I100 in your M906 command to disable idle current reduction? Or maybe you can use something like I80 to get the benefit of a small current reduction?



  • I can give that a try tonight, but seems odd that its only having this issue with 1.20 and 1.21 and not 1.18.2. Was anything with Z probing behavior changed with 1.20 or 1.21 that would be trying to kick the Z into idle? Or was something changed to ignore M84 or override M84 with M906's default of 30%? Or was some default H1 parameter added in 1.20 and 1.21 that wasn't there in 1.18.2? And if I try M906 X800 Y800 Z1400 E800:800 I100, should I also include H1 100? Just noticed the H1 parameter in the RepRapWiki and wasn't sure when that was added to the M906 command.


  • administrators

    I'm not aware of any intentional change to that behaviour in recent firmwares. However, I didn't implement that particular function of M84 and I haven't studied how it works. So it occurred to me that perhaps M84 S0 now leaves idle current enabled but with zero delay time - in which case M906 I100 would avoid the problem.



  • But why would a Z probe or a Z home cause the Z axis to go idle (in firmware 1.20 and 1.21 and not in 1.18.2) when it triggers and then back away to trigger again. The Z axis bed drops after the first initial trigger where I'm expecting the Z axis to lower and then raise up slowly, but in firmware 1.20 and 1.21 it just drops like a rock after the initial trigger.



  • So, I removed the M84 from the config.g, and added I80 to my M906 line. That seems to have solved the issue, although I noticed the probe isn't doing the second dive like it used to do. Originally, it used to probe the Z axis, then lower it, and probe it again slower before saying Z1.6. Can't remember if it did that with the 1.18.2 firmware or not now to be honest.

    So at this point, I'd suggest making an edit to the RepRap Wiki for G-Codes about M84 not working like it used to with firmware 1.20 or greater. Whether it was an intentional change or a byproduct of a different change, its definitely not doing what it used to in 1.18.2 firmware or older.


  • administrators

    I have removed the reference to disabling idle timeout with S0 from the description of M84 in the GCodes wiki page .


 

Looks like your connection to Duet3D was lost, please wait while we try to reconnect.