Stallguard Headaches & Multiple Shorts to Vin
-
Hi had some issues with my D3 mini5 with sensorless homing , it was for a core xy and steppers not as high inductance as yours , but i attached my files to see if its any help.
;Config.g G90 ; send absolute coordinates... M83 ; ...but relative extruder moves M550 P"3030" ; set printer name name.local M669 K1 ; core xy ; Network M552 S1 ; enable network M586 P0 S1 ; enable HTTP M586 P1 S0 ; disable FTP M586 P2 S0 ; disable Telnet ; Drives M569 P0.0 S1 D2 ; physical drive 0 goes forwards M569 P0.1 S1 D2 ; physical drive 1 goes forwards M569 P0.2 S1 ; physical drive 2 goes forwards ( blown needs replacing) M569 P0.3 S0 ; physical drive 3 extruder M569 P0.4 S1 D2 ; physical drive 4 goes forwards D3=stealthchop M569 P0.5 S0 D2 ; physical drive 5 goes backwards M569 P0.6 S1 D2 ; physical drive 6 goes forwards M584 X0.1 Y0.0 Z0.4:0.5:0.6 E0.3 ; set drive mapping FL,FR,RC M350 X16 Y16 I1 ; configure microstepping with interpolation M350 Z16 E16 I1 ; configure microstepping with interpolation M92 X80.00 Y80.00 Z320.00 E562.00 ; set steps per m M566 X800.00 Y800.00 Z5.00 E400 P1 ; set maximum instantaneous speed changes (mm/min) jerk M203 X24000.00 Y24000.00 Z1500.00 E1200 ; set maximum speeds (mm/min) M201 E2000 ; set accelerations (mm/s^2) M201.1 X2200.00 Y2200.00 Z20.00 ; set accelerations (mm/s2) ;Set Currents M906 X1000 Y1000 Z1000 E750 I100 ; set motor currents (mA) and motor idle factor in per cent M84 X Y S20 ; Set idle timeout sec ; Axis Limits M208 S1 X0 Y0 Z0 ; set axis minima "Travel Area" set in tool.g M208 S0 X300 Y300 Z310 ; set axis maxima "Travel area" set in tool.g ; Endstops M574 X1 S3 ; configure sensorless endstop, 1 = low end, 2 = high end. s3 = single motor, S4 multipule motors M574 Y2 S3 ; configure switch-type (e.g. microswitch) endstop for low end on Y via pin io1.in M574 Z2 S4 ; configure sensorless endstop for high end on Z, 1 = low end, 2 = high end.S3= single motor, S4 multipule motors ;ball joints 3PL M671 X10:310:150 Y5:0:290 S25 ; leadscrews at front left,front right, rear Center s= max correction factor must be in same order as M584 ; inductive sensor M558 P8 C"!io3.in" H10 F1500 T20000 R0 A10 S0.03 ; set Z probe type to unmodulated and the dive height + speeds, !=inverted signal ;nozzel offset G31 P500 Z0.0 ; set Z probe trigger value, offset and trigger height bigger the posative number the closer to the bed set in Tool.g G31 P500 X0 Y0 ; set x,y trigger value, offset and trigger height set in tool.g M557 X0:300 Y0:300 S30 ; define mesh grid ; Heaters + temperature sensors ;Bed M308 S0 P"temp0" Y"thermistor" T100000 B3950 A"Bed T °C" ; configure sensor 0 as thermistor on pin bedtemp M950 H0 C"out2" T0 Q10 ; create bed heater output on bedheat and map it to sensor 0 M307 H0 R0.838 K0.331:0.000 D3.08 E1.35 S0.90 B0 ; PDI info for 8mm aluminium bed 700w Heater NTC 100K 3950 M140 H0 ; map heated bed to heater 0 M143 H0 S130 ; set temperature limit for heater 0 to max C ;extruder M308 S1 P"temp1" Y"pt1000" A"Extruder T °C" ; configure sensor 1 as PT1000 M950 H1 C"out1" T1 ; create nozzle heater output M307 H1 R4.449 K0.705:0.000 D6.21 E1.35 S1.00 B0 V23.8 ; PDI M570 H1 P10 T20 ;P = heater fault timer sec ,T= temperature excursion deg C M143 H1 S360 ; set temperature limit for heater 1 to max C ;Chamber M308 S2 P"temp2" Y"thermistor" T100000 B4267 A"Chamber T °C" ; configure sensor 2 as thermistor on pin temp2 ;M950 H2 C"out5" T2 ; create chamber heater output on 1.out0 and map it to sensor 2 M307 H2 B0 S1.00 ; disable bang-bang mode for the chamber heater and set PWM limit M141 H2 ; map chamber to heater 2 M143 H2 S100 ; set temperature limit for heater 2 to 280C ;DHT Sensor on IO4 on Duet 3 Mini 5+ ; drybox M308 S4 P"io4.out+io4.in" Y"dht22" A"Drybox[C]" M308 S5 P"S4.1" Y"dhthumidity" A"Dry box Hum[%]" ;Dry box fan or ssr ;M950 H3 C"out2" T2 ; create chamber heater output on duex.e2heat and map; it to sensor 3 ;M307 H3 B1 S1.00 ; disable bang-bang mode for the chamber heater and set PWM limit ;M141 H3 ; map chamber to heater 3 ;M143 H3 S80 ; set temperature limit for heater 3 to 280C M308 S10 Y"mcu-temp" A"MCU" ; defines sensor 10 as MCU temperature sensor M308 S11 Y"drivers" A"Duet stepper drivers" ; defines sensor 11 as stepper driver temperature sensor ; Fans M950 F0 C"out6" Q250 ; create fan 0 on pin fan0 and set its frequency M106 P0 S0 H-1 C"Part Fan" ; set fan 0 value. Thermostatic control is turned off M950 F1 C"out3" Q250 ; create fan 1 on pin fan1 and set its frequency M106 P1 S1 H1 T35 C"Extruder Fan" ; set fan 1 value. Thermostatic control is turned on ;Filter fan 12 v M950 F2 C"out0" Q250 ; create fan on output, set its frequency M106 P2 S0 H-1 C"Filter Fan" ; set fan value. Thermostatic control is turned on ;ROS M591 P1 C"io6.in" S1 D0 ; filament monitor ;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 T0 ; Custom settings are not defined M98 P"/macros/home_max_Z" M98 P"/sys/tool.g" ; sets z offset echo"tool" ;External Buttons M950 J1 C"!io2.in" ;config input pin switch NO connected to io2 and Gnd M581 P1 T0 C0 ;T0 = emergency stop on trigger; T1 = pause print; T{N} = runs the macro "sys/trigger{N}.g", rising edge S1 falling edge S0 ;M581 P1 T4 c0 ;run a macro trigger4.g M582 T0 ; Check External Trigger ;Global varibles Drybox global preSpoolWeight = 0 global emptySpoolWeight = 0 global totalWeight= 0 global filamentWeight =0 global dryBoxTC = 0 global dryBoxRH = 0 global calWeight =0 global instructions = "No Message" global extruderName = "No extruder"
; homeall.g echo "Home All.g " M98 P"/sys/homey.g" ;P define the parameter and is not part of the name M98 P"/sys/homex.g" ;P define the parameter and is not part of the name M98 P"/macros/ProbePickUp" ; probe pick up; absolute positioning M98 P"/sys/homez.g" ;P define the parameter and is not part of the name M98 P"/macros/3PL" ; 3 point leveling M98 P"/macros/3PL" ; 3 point leveling M98 P"/sys/homez.g" ;P define the parameter and is not part of the name ;Absolute mode M98 P"/macros/ProbeDropOff" ; probe pick up; absolute positioning
; homex.g echo "start" M569 P0.0 ; Check status in console M569 P0.1 ; Check status in console G91 ; relative positioning M569 P0.0 S1 D3 V10 ; set to stealth chop M569 P0.1 S1 D3 V10 ; set to stealth chop M915 P0.0 S10 F0 R1 H350 ; Configure Z-Axis Stall Detection M915 P0.1 S10 F0 R1 H350 ; Configure Z-Axis Stall Detection echo "stall detection setup" M17 X Y ; Check status in console G1 P140 ;pause to allow the drivers to characterise the motor G1 H1 X-0.2 F3000 ; move a little for cal of sensorless homing / not stalled ;G1 H1 Y-0.2 F3000 ; move a little for cal of sensorless homing / not stalle echo "lower motor current" M913 X75 Y75 ; Lower motor current % G4 P150 ; wait 150ms M574 X1 Y2 S3 ; Configure Z-Axis stall detection homing M569 P0.0 ; Check status in console M569 P0.1 ; Check status in console echo "home x" G1 H1 X-350 F6000 G1 H2 X10 Y10 G1 H1 X-350 F6000 ; Home Z-Axis actuators independently M569 P0.0 ; Check status in console M569 P0.1 ; Check status in console G90 ; absolute positioning G1 X150 F6000 ; move to center of bed ;revert back echo "after revert back" M915 P0.0 S60 F0 R1 H550 ; Configure Z-Axis Stall Detection M915 P0.1 S60 F0 R1 H550 ; Configure Z-Axis Stall Detection M913 X100 Y100 ; Reset motor current % M569 P0.0 S1 D2 ; reset motors back to spread cycle, M569 P0.1 S1 D2 ; reset motors back to spread cycle, M569 P0.0 ; Check status in console M569 P0.1 ; Check status in console
-
Quick update - I tried decreasing the speed of homing on the Y axis, and so far, no more short reports. A sharp stall paired with the Y being a high current 1.8 degree motor that is geared down 1:2 leads me to believe I was back-emf spiking the 2209, causing a short detection. This is mentioned as a concern on page 45/end of section 6.5 in the 2209 datasheet as a possible problem. The motor was set to home at F6000, which would make for I believe 17k usteps/s. To me, this seems like more than is expected for a stallguard 4.0 move. Switching it to half that (F3000) has prevented further short notifications. If another short occurs, I'll follow up.
-
Update 2. I was fine for a while, but I just swapped in a large motor and set the Y axis driver to 1900 mAmps - and I think I fried the stepper driver, or part of it - stealthchop doesn't work while spreadcycle does. I had zero issues moving the motor around in stealthchop a few times, and found that I needed a very low sensitivity to avoid false stall reports w/ stallguard. I cannot figure out what I'm doing wrong, but I feel like I'm missing something obvious. This is a different duet 3 mini 5+ from the original board (w/ 2 fried drivers). Any input here is greatly appreciated.
XY motors are now both < 3mH inductance
When I tried a 0.7mH motor on the X, it reported a short notification immediately - motor was fine via my fluke multimeter. I can't explain this either. Ditched that motor for a 2.8mH SanMotion 0.9 stepper that has given me zero issues.
I'm running 3.5 rc2
Here's the homing gcode that I think killed the stepper driver:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Homing G91 ; relative motion M400 M913 Y50 ; CURRENT <<< M201 Y600 ; acceleration M566 Y5 ; jerk M915 P0 S80 F0 H200 R2 ; SENSITIVITY <<< M400 ; G1 H1 Y180 F1600 ; home M18 Y ; y off ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Stealthchop Tuning M569 P0 D2 ; > spreadcycle G4 P400 ; wait M569 P0 D3 V0 ; > stealthchop M400 ; (clear) M913 Y100 ; > full current M201 Y3000 M566 Y5 M17 Y ; y on G4 P400 ; wait to allow driver to initialize parameters ; G1 H2 Y-0.1 F600 ; tiny move G4 P200 ; wait >140ms G1 H2 Y-18 F4000 ; medium velocity move to y-20 The move needs to be >400steps made at a "medium speed", I think RPM > 10 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Restore Settings M400 M913 Y100 ; > full current M201 Y12000 ; accel M566 Y600 ; jerk M915 Y S80 F1 H400 R0 ; set sensitivity and enable reports M400 G4 P200 ; wait G92 Y145 ; set y coordinate
-
@tjhinton above 1400mA or so the drivers need active cooling; is that the case in your setup?
-
@tjhinton I think this may be due to the mix of high inductance, high speed and high current causing back EMF and destroying the stepper driver. See https://docs.duet3d.com/User_manual/Connecting_hardware/Motors_choosing
Inductance section: https://docs.duet3d.com/User_manual/Connecting_hardware/Motors_choosing#inductanceIan
-
This and the previous board were/are active cooled with a noctua fan that's blowing directly across the back and front of the driver side of the motherboard.
The stepper driver has never reported an overtemp, but I agree - it's a lot to be using. Either way, I had the same issue with lower current motors.
My current suspicion is that I'm damaging the 2209's stallguard circuitry or putting it in a state where it cannot be used for a while.
-
I suspected as much, but I've had this issue with very low inductance motors too (still high current, but less than 2A). Here is an example of one such motor:
WO-417-15-08. Inductance is <1mH, and it has an extremely low detent torque, meant for silent operation.
-
@tjhinton is there continuity between the stepper body and ground? Is the negative pole of the printers power supply tied to a mains electricity protective earth?
You mentioned static on the belt as a suspected cause. I will check my steppers to see if there is continuity between the axle and the stepper body. Antistatic belts are probably available if the gates belts aren't already so, although I do note you did check for charge build up.
-
Does look like there is a Gates Carbon/Volt antistatic range. Guess you have to brush a rotary part at some point to to reliably ground the rotating components. Not looked in to it propoperly yet as you can tell!
-
Board is grounded along with the frame, but the culprit stepper hasn't ever been truly connected to ground or strapped to the case. I have tried to see a rise in voltage across the motor shaft and frame(ground), and I cannot. For what it's worth, the air in the room is usually >50% RH.
-
One thing I have found that helps (prevent "short to vin" or "short to ground") is to raise the current of the offending axis slowly before sending any movements. So, for example, I have placed a 200 ms dwell/pause/wait after adjusting it to ~50%, then raising it to 80-100% with another pause after). Still not a explanation/solution, but it works better than anything else I've come up with.