Motor current idle factor not working over canbus?
-
@droftarts thank you, very much appreciated!
-
@mike_b I confirm this is a bug. Created https://github.com/Duet3D/RepRapFirmware/issues/1019.
Possible workaround if you always want to use the same idle current: add command M906 I100 to the config.g file of the board being used as an expansion board. This workaround will stop working when the bug fix is implemented.
-
@dc42 thank you! Adding the command to the config file of the expansion board worked. Did you need any help with testing?
-
Hi @dc42, I realize this is an old thread, but I was wondering if the fix for this bug (commit here) is included in
3.5.3-rc.1
? If it is, I can confirm that the issue persists, as I still can't change the idle current on motors connected to my Mini5+ board, which I'm using as an expansion board. Would you like me to test this on the 3.6 alpha release?" -
@mike_b yes, please test it in 3.6.0-alpha.5.
-
Hi @dc42 running the following setup:
Product Short Name Version Duet 3 Mini 5+ Mini5plus 3.6.0-alpha.5+1 Duet 3 Expansion Mini5plus Mini5plus 3.6.0-alpha.5+1 Duet 3 Expansion TOOL1LC TOOL1LC 3.6.0-alpha.5 Duet Software Framework DSF 3.6.0-alpha.2 Duet Web Control DWC 3.6.0-alpha.2
And unfortunately this does not resolve the bug. I am still unable to set a custom idle current on the expansion board; i.e. the idle current remains at the default value, irrespective of what I set in my
M906
command. Here are some extra bits of info that might be helpful:- first, despite the idle current actually being set to the default initially -- I can tell this because my build plate drops; I have a belt driven z-axis with brakes -- running M906 without any parameters reports the desired idle current:
11/09/2024, 07.42.26 M906 Motor current (mA) - X:1200, Y:1200, Z:1200, E:500, idle factor 75%
- second, the interesting part is that despite the idle factor being set to the default initially, it appears as thought eventually, the motors do enter the desired 75% idle current, I can tell this because the build plate wont crash again. I'm not sure exactly how to verify this, I guess I could use my voltmeter to test current into the motor?
-
@mike_b might it be the case that if the motors are already running at idle current then changing the idle current percentage doesn't update them, but if you then use the motor and then let it go idle then the new idle current percentage is used?
-
@dc42 Great question! Unfortunately, I can’t give a definitive answer at this point without conducting more thorough testing, I’m not entirely sure about the exact sequence of events. Let me get back to you this weekend
-
I have tested this in both 3.5.3 and 3.6.0-beta.1, and both appear to work correctly for me, with the axes on the mainboard-as-expansion-board controlling normal axes.
@mike_b are you controlling normal axes, or extruders, on the Mini 5+ expansion board? If it's extruders, I'll redo the tests with the extra motor configured as such.
Test setup: two Mini5+, running 3.6.0-beta.1. First board is on my normal bedslinger, second board has 1 motor attached to driver 0, and only has M954 A60 in its config.g. Configured motor as U axis, with same parameters as X axis.
Test: Initially M906 I30 and M84 S30 were set. I changed M84 S10, and idle timeout dropped to 10 seconds, on motors connected to both boards following a move of that axis (X and U tested). Changed M906 I100, motors on both boards maintain 100% current. Other M906 I# and M84 S# values tested, with the correct behaviour observed. So appears to be working correctly in 3.6.0-beta.1.
Reverted firmware to 3.5.3 on both boards, and ran tests again. Same result, so it seems to working as expected.Ian
-
Hey @droftarts - I'm controlling normal axes (the z-axis motor specifically) on the Mini 5+ expansion board. Since my z-axis is belt driven, any changes in the idle current are quite noticeable; for example, my print bed drops like a rock :D. Is there anything I can do on my end to help with this debugging? For example, make a video of the behavior? Post my full config? Let me know
-
Hey @dc42, I just realized I left you hanging! Back on Sept 12, I replied with "Let me get back to you this weekend," but I got caught up in moving to a new house and haven't had much time to follow up. Sorry about that!
-
@mike_b said in Motor current idle factor not working over canbus?:
Is there anything I can do on my end to help with this debugging? For example, make a video of the behavior? Post my full config? Let me know
Config.g would be good, then I can replicate your setup. Video if you've got time! Is it multiple motors combined to make Z axis? I didn't test that.
Ian
-
@droftarts ok, sounds good, I'll try to get this for you this weekend. And to answer you question: I am running 4 motors on the z-axis
-
@mike_b I set up a test with 4x Z motors on the Mini 5+ as expansion board, M906 I# and M84 S# seemed to work correctly in RRF 3.6.0-beta.1 and 3.5.3. I connected a stepper motor too, and ran into this bug in 3.5.3 (fixed in 3.6.0-beta.1): https://github.com/Duet3D/RepRapFirmware/issues/1058
I reverted back to 3.5.2, and finally did manage to replicate your bug. The motors on the Mini5+ expansion board did respect any M84 S# time, but always dropped back to 30% idle hold. Interestingly, sending M906 I# also caused the machine axes to be reset (ie unhomed), which didn't seem to happen in 3.5.3 or 3.6.0-beta.1.
When you get the chance, please check the firmware version you have installed. Are you running in SBC mode? If you still experience problems, please post your config.g and any other relevant files.
Ian
-
Hey @droftarts, sorry about for the late reply, the new house and the move and still taking up all my time. Anyway, yeah, I'm still experiencing the same problem. Here is a of my firmware, all 3.5.3. My setup is two Mini 5+ boards and SBC mode. Here is my
config.g
on the expansion board:M906 I90 M954 A40
The issue happens whenever I remove the M906 command from the expansion board config. Below is my
config.g
for the main board. I'm very much new to duet so please do let me know if I'm doing anything dumb:; get variables M98 P"/sys/constants.g" ; General G90 ; absolute coordinates M83 ; relative extruder moves ; Wait a moment for the CAN expansion boards to become available G4 S2 ; Kinematics; Cartesian M669 K0 ; Drivers M569 P0.0 S1 D3 V9 ; x0 M915 P0.0 S10 ; x0, stallguard threshold M569 P0.1 S0 D3 V9 ; x1 M915 P0.1 S10 ; x1, stallguard threshold M569 P0.2 S0 D3 V9 ; y0 M915 P0.2 S10 ; y0, stallguard threshold M569 P0.3 S1 D3 V9 ; y1 M915 P0.3 S10 ; y1, stallguard threshold M569 P40.0 S1 D3 V9 ; z0 M569 P40.1 S1 D3 V9 ; z1 M569 P40.2 S1 D3 V9 ; z2 M569 P40.3 S1 D3 V9 ; z3 M569 P121.0 S1 D3 V2 ; e ; ---- axes M584 X0.0:0.1 Y0.2:0.3 Z40.0:40.1:40.2:40.3 E121.0 ; axis mapping M350 X16 Y16 Z16 E16 I1 ; microstepping with interpolation M906 X1200 Y1200 Z1200 E500 ; axis driver currents M917 X100 Y100 Z100 E70 ; set motor standstill M92 X79.87 Y79.80 Z160.31 E722.76 ; steps per mm M208 X-10:270 Y-15:270 Z0:295 ; minimum and maximum axis limits ; ---- motor idle M84 S600 ; idle timeout, 10min M906 I95 ; idle current, 95% ; ---- accelerations and jerks M203 X15000 Y15000 Z6000 E2000 ; maximum speeds (mm/min) E max: 8.3mm/sec, 20mm^3/sec M201 X6000 Y6000 Z1000 E1000 ; accelerations (mm/s^2) individual axes M204 P6000 T3000 ; accelerations (mm/s^2) total motion, (P)rinting and (T)ravel M566 X1200 Y1200 Z200 E400 P1 ; maximum instantaneous speed changes (mm/min) ; ---- temp Sensors M308 S0 P"0.temp0" Y"thermistor" A"Heated Bed" T10000 B3892 ; bed M308 S1 P"121.temp0" Y"pt1000" A"Nozzle" ; nozzle M308 S2 P"40.temp0" Y"thermistor" A"Filament Dryer" T10000 B3892 ; filament dryer ; Fans ; --- air pump; brushed DC motors should operate nicely with a PWM freq of 50 to 100 M950 F0 C"0.out2" Q250 M106 P0 C"Tool fan" S0 B0.0 H-1 L0 X0.5 ; --- turn on auto when heatbreak is 45C M950 F1 C"121.out2" M106 P1 C"heatbreak fan" S0 B0.1 H1 T45 L0 X1 ; --- BAG enclosure fan 1 M950 F3 C"!0.out3" M106 P3 C"BAG fan 1 (weak)" S0 B0.1 H-1 L0 X1 M950 F4 C"!0.out4" M106 P4 C"BAG fan 2 (strong)" S0 B0.1 H-1 L0 X1 ; Heater, bed M950 H0 C"0.out5" T0 Q500 ; create heater #0 M140 P0 H0 ; configure heated bed #0 M143 H0 P0 T0 C0 S140 A0 ; heater monitor #0 for heater #0 M307 H0 R0.645 K0.227:0.000 D11.51 E1.35 S1.00 B0 ; PID tune ; Heater, extruder M950 H1 C"121.out0" T1 ; create heater #1 M143 H1 P1 T1 C0 S310 A0 ; configure heater monitor #0 for heater #1 M570 H1 P15 T20 ; fault only after 15sec and 20C excursion if global.hotend == "magnum" M307 H1 R2.510 K0.449:0.000 D5.91 E1.35 S1.00 B0 V23.7 elif global.hotend == "mosquito" M307 H1 R3.039 K0.404:0.000 D5.22 E1.35 S1.00 B0 V23.4 else M307 H1 B1 ; Endstops M574 X1 S4 M574 Y1 S4 M574 Z0 ; Tools M563 P0 S"T0" D0 H1 F0 ; create tool #0 M568 P0 R0 S0 ; initial tool #0 active and standby temperatures to 0C if global.nozzle_diameter < 0.6 ; heater feedforward for tool 0 M309 P0 S0.08 if global.nozzle_diameter >= 0.6 M309 P0 S0.3 ; z-probe dock M950 S0 C"out6" Q50 ; servo, assign GPIO port 1 to out9 (Servo header), servo mode M950 J0 C"!0.io0.in" ; sensor ; z brake M569.7 P40.3 C"out1" S100 ; accelerometer; I is the orientation M955 P121.0 I24 ; sensorless homing M915 X Y R0 F0 ; extra sensors M308 S10 Y"mcu-temp" P"0.dummy" A"0.MCU" M308 S11 Y"mcu-temp" P"40.dummy" A"40.MCU" M308 S12 Y"mcu-temp" P"121.dummy" A"121.MCU" ; electronics bag fan M950 F5 C"40.out6" M106 P5 C"electronics fan" B0.1 H11 T45 L0 X0.7
Finally, I know I did mention uploading a video, and I still can, if you think it would be helpful. However, it really wouldn't be too exciting, you'd just see the printer start up, and in the case when the expansion board config file lacks the line
M906 I90
the z stage would drop... I have the cracks in some plastic parts at the bottom of the printer to prove it Anyway, let me know if there is anything else I can do to help! -
@mike_b Okay, from your screenshot you're running in SBC mode:
I'll check with @chrishamm, as it is clearly working in 3.5.3 in standalone mode.
Ian
-
@droftarts yup, running in SBC mode. Is our current running hypothesis that this could be an SBC-related issue? If so, would you like me to test without SBC mode on my end?
-
@mike_b said in Motor current idle factor not working over canbus?:
Is our current running hypothesis that this could be an SBC-related issue? If so, would you like me to test without SBC mode on my end?
Please do, if you're happy to. I'm confident it's working in standalone, just need @chrishamm to check if/why it's happening in SBC mode.
Ian
-
Hey @droftarts, I hope this doesn’t make me sound crazy (though I wouldn’t blame you if it does!), but I just tested it in standalone mode, and the problem is still happening. I was sitting right next to the printer, with my hand under the print plate ready to catch it as soon as the low idle motor kicked in ... thankfully, I managed to catch it in time. I repeated the test several times with the same result. Anyway, I really don’t know what to do next. At this point I'm wondering if it's a hardware issue?
-
@mike_b Can you post your config.g, and the config.g on the Mini 5+-as-expansion? There should be not M906 in the config.g of the expansion board.
Ian