Firmware 2.03beta2 available



  • David, since RC6 I've been having i2c issues. Or more specifically they've gotten worse so that the the firmware is not usable. RC5 shows timeouts when I do M122. (When I get into this condition where the duet is very slow to respond to move commands etc) I checked out forum posts regarding i2c issues and I am not seeing errors, but I am seeing timeouts in RC5, with RC6 the end stops on the Duex5 stop responding after a few hours. I checked my wiring again, and I have short ferule terminated wires between the ground terminals -- basically using the dual wire ferrule which came with duet/duex5. The boards are mounted with the duet at the top of the enclosure and the duex5 under it with 15mm of spacing, and fans blowing across them. When I get into the i2c timeout condition a pure reboot (pressing stop on the screen) doesn't fix it, I have to power down the board, and restart.



  • @kazolar said in Firmware 2.03beta2 available:

    duex5

    https://forum.duet3d.com/topic/7269/duet-sometimes-really-slow-i2c-error-or/2

    The most common reason for I2C errors is that you don't have a short thick ground wire between the VIN terminal blocks of the Duet and the DueX.



  • I checked that again. I have a beefy wire there, but I can go up a gauge. I also noticed that the ground wire has things running next to it, so I'm suspecting some interference. So my current plan is to move to a different case with the boards side by side instead one on top of the other and a much beefier ground wire. Since pure reboot doesn't solve it, I'm leaning towards some electrical noise built up which clears up on power down.


  • administrators

    We recently had a report from one of one OEMs that the cables from normally-open endstop switches connected to the endstop inputs on the DueX5 appeared to be picking up interference from extruder cables or elsewhere, and this was triggering I2C errors. So my current advice to users experiencing I2C errors is:

    • Make sure there is a short thick ground wire between the VIN- terminals of the Duet and the DueX;
    • Try adding the additional I2C pullup resistors that I already described;
    • Don't connect normally-open endstop switches to the endstop inputs on the DueX (or if you must, use a 1K pullup resistor to +3.3V and preferably also an RC filter).

  • administrators

    @kazolar said in Firmware 2.03beta2 available:

    I checked that again. I have a beefy wire there, but I can go up a gauge. I also noticed that the ground wire has things running next to it, so I'm suspecting some interference. So my current plan is to move to a different case with the boards side by side instead one on top of the other and a much beefier ground wire. Since pure reboot doesn't solve it, I'm leaning towards some electrical noise built up which clears up on power down.

    The beefy ground wire needs to be short as well.

    Mounting the boards back-to-back is a good option, because it makes for easy fan cooling and it allows you to use a short thick ground wire between the two VIN terminal blocks.



  • @dc42 so I'll leave the case be. That's easier obviously. I have very good cooling, CPU reported temperature doesn't go above 27c. I'll replace the ground wire, though it's at least an 18 gauge silicone insulated wire, but I can go to 16? Or 14. Wire is short, basically just long enough to jump between the boards. And will add the resistors as you suggested in the other post. It's rather curious that i2c timeouts (not errors although not sure if it's a difference) don't start until several hours of operation. I was calibrating my extruder offsets and checking my z probe etc so I was running homing routine multiple times and lead screw compensation routine,I am using normally closed end stops, I've had issues with normally open in the past. Hopefully I can resolve this and move to the latest firmware since I am presently stuck on rc5 since i2c is a bit more resilient there.



  • 18 gauge is only around 0.8mm² the wiki says around 2.5mm² is recommended which is around 13-14 gauge

    Dont know if it's a pattern yet but I've read about a few issues with the duex and all those people seem to be running solid core cable.



  • Thanks, will bump up to 14 gauge. I'm using stranded wires crimped in ferrules. I'm guessing, the insufficiently thick ground would the source of my issues. I'm not sure solid core can be crimped, or tightened adequately.



  • Yes completely agree



  • @dc42 I installed a 14 gauge ground wire -- while at it also did the VIN wire. Both are 1/2 the length they were before, couldn't get shorter than this now. I left the 16 gauge(it was 16 not 18 before) going to the PSU, it's coupled in a ferrule together with a very short 14 gauge jumper to duex5. The printer itself with everything on never pulls more than 200w, since my I'm using an AC bed, 16 gauge wire has not been an issue for 24v DC power.

    Now the main question is, how do I test the i2c bus for reliability. Under normal conditions it takes a long time for me to start seeing timeouts, is there a test routine, something that would send a bunch of data on i2c which you would expect to produce some errors if the wiring was at issue (I don't mind running some custom firmware to bang on the i2c bus).

    Thanks again.



  • Will do later today.


  • administrators

    @kazolar said in Firmware 2.03beta2 available:

    @dc42 I installed a 14 gauge ground wire -- while at it also did the VIN wire. Both are 1/2 the length they were before, couldn't get shorter than this now. I left the 16 gauge(it was 16 not 18 before) going to the PSU, it's coupled in a ferrule together with a very short 14 gauge jumper to duex5. The printer itself with everything on never pulls more than 200w, since my I'm using an AC bed, 16 gauge wire has not been an issue for 24v DC power.

    Now the main question is, how do I test the i2c bus for reliability. Under normal conditions it takes a long time for me to start seeing timeouts, is there a test routine, something that would send a bunch of data on i2c which you would expect to produce some errors if the wiring was at issue (I don't mind running some custom firmware to bang on the i2c bus).

    Thanks again.

    You could try sending repeated commands to change the speed of the DueX fans. Each one will require an I2C transaction.

    Here's another possibility: pick one of the DueX servo outputs that corresponds to an unused heater channel, connect the servo control pin of that output to the cathode of a small signal diode, and connect the anode of that diode to one of the DueX endstop inputs. Then use M307 to disable that heater, and M42 to set up 50% PWM on that servo output at a low frequency. Every time the endstop input toggles, the DueX will signal a change to the Duet, and the Duet will do an I2C transaction to find out what changed.



  • Is there a certain resistance that shouldn't be exceeded on the ground connection between the boards? I've got really thick wires running from both boards to the power supply and I measured the resistance to be somewhere around 0.4 Ohms. Since I get the errors extremely rarely, I added an additional, short but significantly thinner wire between the boards, which appeared to halve the resistance. Would this be good enough?


  • administrators

    @edgars-batna, you should be looking for 0.1 ohms or less. Bear in mind that your multimeter may read greater than zero ohms when you short the leads together, in which case subtract that value from the reading you get between the two terminal blocks. My multimeter reads 0.2 ohms between the ground side screws of the two VIN terminal blocks, and also 0.2 ohms if I short the leads together.

    Inductance matters too, which is why the wire must be kept short. The reason is that the stepper motors draw large pulsing currents when they are energised, and this will cause there to be ground noise between the Duet and DueX unless that wire has low resistance and inductance.



  • @dc42 Thanks, it's exactly as you described, so I suppose the value should be good enough now.



  • @dc42 I ran some gcode shifting fan speed for tool 3 (fan on the duex5) repeatedly a few hundred times and no i2c errors or timeouts. Wonder if that means it's solved. I'll try the servo trick. Would adding the resistors hurt any?


  • administrators

    Adding the resistors won't hurt. We're going to reduce the values of the ones on the DuetX in the next manufacturing batch.



  • Just posting here to confirm that 2.03 beta is working fine on my CoreXY with sensorless homing.

    here is my last print (printed in ABS):

    0_1552824161524_behelit.jpg

    it's a sleeping Crimson Behelit. (Berserk fans will know what this is 🙂 )



  • So after updating to 2.03 b2, my COREXY is now mirrored? before it homed with 0,0 towards the left front of the printer, but now it is the right front?

    ; executed by the firmware on start-up
    ;
    ; generated by RepRapFirmware Configuration Tool on Tue Jul 31 2018 15:05:50 GMT+0200 (Centraleuropæisk sommertid)
    
    ; General preferences
    G90                                                                    ; Send absolute coordinates...
    M83                                                                    ; ...but relative extruder moves
    M555 P1                                                                ; Set firmware compatibility to look like RepRapFirmare
    
    M667 S1 X-1.0                                                               ; Select CoreXY mode
    
    ; Network
    M550 PD-bot EVO                                                         ; Set machine name
    M551 Psmorum2765                                                       ; Set password
    M552 S1                                                                ; Enable network
    M587 S"Egsdal" P"smorum2765" I192.168.1.31 J192.168.0.1 K255.255.255.0 ; Configure access point and IP addresses. 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 goes forwards
    M569 P1 S0                                                             ; Drive 1 goes backwards
    M569 P2 S1                                                             ; Drive 2 goes forwards
    M569 P3 S1                                                             ; Drive 3 goes forwards
    M569 P4 S1 C65972                                                           ; Drive 4 goes forwards
    M569 P5 S0                                                             ; Drive 5 goes forwards
    M569 P6 S1                                                             ; Drive 6 goes forwards
    M569 P7 S1                                                             ; Drive 7 goes forwards
    M569 P8 S1                                                             ; Drive 8 goes forwards
    M569 P9 S1 C65972
                                                                ; Drive 9 goes forwards
    
    M584 X4 Y9 Z2:1:0 E6:5                                                     ; Apply custom drive mapping
    M350 X16 Y16 Z16 E16:16 I1 S2                                            ; Configure microstepping with interpolation
    M92 X200 Y200 Z800 E2700:2700                                          ; Set steps per mm
    M566 X1500 Y1500 Z18 E40:1200                                          ; Set maximum instantaneous speed changes (mm/min) jerk
    M203 X8400 Y8400 Z800 E2400:2400                                       ; Set maximum speeds (mm/min)
    M201 X500 Y300 Z250 E150:1000                                           ; Set accelerations (mm/s^2)
    M906 X1000 Y1000 Z1000 E1100:1100 I40                                  ; Set motor currents (mA) and motor idle factor in per cent
    M84 S10                                                               ; Set idle timeout
    
    ; Axis Limits
    M208 X0 Y0 Z0 S1                                                       ; Set axis minima
    M208 X320 Y290 Z500 S0                                                 ; Set axis maxima
    
    
    
    
    ; Define the X and Y coordinates of the leadscrews.
    ; Must come after M584 (Set drive mapping), M667 (Select CoreXY Mode) and M669 (Choosing Kinematics type)
    ; Motor order: Front left (1), front right (2), rear right (3).
    ; Snn Maximum correction in mm to apply to each leadscrew (optional, default 1.0)
    M671 X-50:367.0:367.0 Y177:33:315 S20 P2 F1.25
    
    ; Endstops
    M574 X1 Y1 S3                                                          ; Set endstops controlled by motor load detection
    
    ; Z-Probe
    M307 H5 A-1 C-1 D-1                                                    ;dissable heater 5 for PWM use
    M574 Z1 S2                                                             ; Set endstops controlled by probe
    M558 P9 H5 F500 T5000                                                 ; Set Z probe type to BL touch and the dive height + speeds
    G31 P25 X0 Y88 Z1.81                                                     ; Set Z probe trigger value, offset and trigger height
    M557 X50:280 Y70:260 S40                                               ; Define mesh grid
    
    ; Heaters
    M305 P0  T100000 B4725 C7.06e-8 R4700 H0                                 ; Set thermistor + ADC parameters for heater 0
    M307 H0 B1 A397.7 C1129.5 D15.1	V24.3						; set bed to bit bang 
    M143 H0 S130                                                            ; Set temperature limit for heater 0 to 80C
    M305 P4  T100000 B4725 C7.060000e-8 R4700 X5                               ; Set thermistor + ADC parameters for heater 1
    M143 H4 S360                                                           ; Set temperature limit for heater 1 to 360C
    M305 P7  T100000 B4725 C7.06e-8 R4700  X3                              ; Set thermistor + ADC parameters for heater 2
    M143 H7 S360                                                           ; Set temperature limit for heater 2 to 360C
    
    ; Fans
    M106 P5 S0 B0.0 H4:7 T50 L255 C"Water-pump"
    M106 P6 S0 B0.0 L255 H4:7 T50 C"Radiator fan"
    M106 P4 S0 B0.0 C"Part fan";
    
    ;LEDS
    M106 P7 S0 F100 B0.0 C"LED light"
    
    
    ; Tools
    M563 P0 D1 H4 F4                                                          ; Define tool 0
    G10 P0 X-10 Y0 Z0                                                        ; Set tool 0 axis offsets
    G10 P0 R0 S0   
                                                            ; Set initial tool 0 active and standby temperatures to 0C
    M563 P1 D0 H7 F4                                                          ; Define tool 1
    G10 P1 X10 Y0 Z0                                                       ; Set tool 1 axis offsets
    G10 P1 R0 S0                                                           ; Set initial tool 1 active and standby temperatures to 0C
    
    
    
    
    ; Automatic saving after power loss is not enabled
    
    ; Custom settings are not configured
    
    ; Miscellaneous
    M501                                                                   ; Load saved parameters from non-volatile memory
    

    and home all:

    M400; make sure everything has stopped before we make changes
    M280 P5 S160 ;
    M574 X1 Y1 S3		;		
    M913 X30 Y30 		; XY motors to 30% current	
    M915 X Y H400 S3 R0 F0	; set X and Y to sensitivity , do nothing when stall, unfiltered
    
    
    ; X axis home		
    G91			; use relative positioning
    G1 Z10 F6000 S2    ; lift Z relative to current position
    G1 S1 X-405 F6000 ; move quickly to X axis endstop and stop there (first pass)
    G1 X5 F6000       ; go back a few mm
    G1 S1 X-405 F4000  ; move slowly to X axis endstop once more (second pass)
    
    ; Y axis home
    G1 S1 Y-305 F6000 ; move quickly to Y axis endstop and stop there (first pass)
    G1 Y5 F6000       ; go back a few mm
    G1 S1 Y-305 F4000  ; move slowly to Y axis endstop once more (second pass)
    G90               ; absolute positioning
    M913 X100 Y100; motor currents back to 100%
    
    ; Z-axis
    
    M561                     ; Clear any bed transform
    G1 X160 Y130 F6000
    G30
    G32                      ; Start 3-point probe sequence - Bed.g
    ;M375 P"bareplate.csv"    ; Load heightmap
    ;G1 Z20.0 F6000           ; Move Z to 20
    ;G1 X5 Y5    		 ; Move Head to front left
    M402;
    

    and bed.g

    M561 ; clear any bed transform
    ;G28 Z;
    M561; Clear bed height map 
    ; Probe the bed at 3 points
    
    G30 P0 X20 Y95 Z-9999;
    G30 P1 X20 Y270 Z-9999;
    G30 P2 X260 Y270 Z-9999;
    G30 P3 X260 Y95 Z-9999;
    G30 P4 X145 Y135 Z-9999 S3;
    G1 X20 Y20
    

    Also ruins my auto leveling/3 screw setup
    0_1553355697428_Unavngivet.png



  • @martin1454
    In your config.g remove M667 S1 and replace it with M669 K1. That will sort it!


Locked
 

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