How to check the real current of the stepper motor
-
@phaedrux ; Configuration file for Duet WiFi (firmware version 3.3)
; executed by the firmware on start-up
;
; generated by RepRapFirmware Configuration Tool v3.3.10 on Thu Dec 30 2021 11:07:38 GMT+1300 (New Zealand Daylight Time); General preferences
G90 ; send absolute coordinates...
M83 ; ...but relative extruder moves
M550 P" 3030 V001" ; set printer name
M669 K1 ; core xy
G29 S1 ; Set Units to Millimeters; 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 ; physical drive 0 goes forwardsM569 P0.1 S1
M569 P0.1 S1 ; physical drive 1 goes forwardsM569 P0.1 S1
M569 P0.2 S1 ; physical drive 2 goes forwards
M569 P0.3 S1 ; physical drive 3 goes forwards (spare)
M569 P0.4 S1 D3 V30 ; physical drive 4 goes forwards D3=stealthchop
M569 P0.5 S0 D3 V30 ; physical drive 5 goes backwards
M569 P0.6 S1 D3 V30 ; physical drive 6 goes forwardsM584 X1 Y0 E2 Z0.4:0.5:0.6 ; set drive mapping FL,FR,RC
M350 X16 Y16 I1 ; configure microstepping with interpolation
M350 Z16 E16 I1
M92 X80.00 Y80.00 Z320.00 E260.00 ; set steps per m
M566 X500.00 Y500.00 Z800.00 E100.00 P1 ; set maximum instantaneous speed changes (mm/min)
M203 X8000.00 Y8000.00 Z1000.00 E400.00 ; set maximum speeds (mm/min)
M201 X1000.00 Y1000.00 Z200.00 E250.00 ; set accelerations (mm/s^2)
M906 X800 Y800 Z400 E1200 I30 ; 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 "Travel Area"
M208 X270 Y240 Z405 S0 ; set axis maxima "Travel area"; Endstops
M574 X1 S1 P"!io0.in" ; configure switch-type (e.g. microswitch) endstop for low end on X via pin io0.in
M574 Y2 S1 P"!io1.in" ; configure switch-type (e.g. microswitch) endstop for low end on Y via pin io1.in
;M574 Z2 S2 P"!io4.in" ; != invert signal
M574 Z2 S4 ; configure sensorless endstop for high end on Z, 1 = low end, 2 = high end. S4 multipule motors
M671 X-34.4:296:132.5 Y0:0:296 S25 ; leadscrews at front left,front right, rear Center s= max correction factor must be in same order as M584; Sensorless config
M915 P0.4:0.5:0.6 S5 R0 F0 H200 ; Lower values less sensitive S3, F filter, R =Action; Z-Probe
M558 P8 C"!io3.in" H5 F600 T18000 A30 S0.03 ; set Z probe type to unmodulated and the dive height + speeds
G31 P500 Z0.5 ; set Z probe trigger value, offset and trigger height bigger the posative number the closer to the bed
G31 P500 X26 Y6 ; set x,y trigger value, offset and trigger height
M557 X30:270 Y10:250 S40 ; define mesh grid; Heaters
M308 S0 P"temp0" Y"thermistor" T100000 B4138 A"Bed T°C" ; configure sensor 0 as thermistor on pin bedtemp
M950 H0 C"out0" T0 Q10 ; create bed heater output on bedheat and map it to sensor 0
M307 H0 R0.140 K0.103:0.000 D43.19 E1.35 S0.90 B0 ; PDI info for 8mm aluminium bed 700w Heater
M140 H0 ; map heated bed to heater 0
M143 H0 S120 ; set temperature limit for heater 0 to 120C
M308 S1 P"temp1" Y"thermistor" T100000 B4267 A"Extruder T°C" ; configure sensor 1 as thermistor on pin e0temp (104gt2)
M950 H1 C"out1" T1 ; create nozzle heater output on e0heat and map it to sensor 1
M307 H1 B0 S1.00 ; disable bang-bang mode for heater and set PWM limit
M143 H1 S280 ; set temperature limit for heater 1 to 280C; Fans
M950 F0 C"out4" 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"out3" Q500 ; create fan 1 on pin fan1 and set its frequency
M106 P1 S1 H1 T45 ; set fan 1 value. Thermostatic control is turned on; 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
M98 P/macros/3zhome -
@moth4017 said in How to check the real current of the stepper motor:
Hi , is there a way to check the actual stepper motor current not the reported value of M906
Do you have a multimeter that can measure current? You can connect it in series to one of the stepper coils and then give gcode to move the stepper in very small increments (e.g. equivalents of 1 microstep) until you will get to an angle with maximal current (you can ignore the +/- sign of the meter).
What you will measure will be peak max current. If RRF uses RMS current, divide the peak by 1.41 to find the RMS.
I think that with if you use two current meters you don't need to find the max position and just compute from the two currents.
-
@zapta Hi , i had thourght about this but not sure in the DVM will react quick enough , i do have an old osilascope , may be ill have to fire it up and have a look, was hoping the trinamc drives could report actual current
-
@phaedrux said in How to check the real current of the stepper motor:
sending M906 and M913 by themselves in the console
What do they report?
-
@moth4017 said in How to check the real current of the stepper motor:
M98 P/macros/3zhome
What do you have in that macro?
-
@moth4017 , oscilloscope is tricky for this application because it doesn't measure current and because one of it's wires is grounded.
A simple DVM in amps range should be sufficient because the current is stable when the motor does not move. Have a gcode macro that will move the motor in tiny steps and see when you have the max reading. If you want to get fancy, you can have a bidirectional analog meter like this +/-2A one https://www.aliexpress.com/item/32400650799.html
Edit: just make sure to make all the connections when the printer is off because stepper drivers don't like when motors connect/disconnect under power.
-
@moth4017 , I haven't tried it myself but I believe that running a macro like this one while observing your current meter connected in series to any X or Y stepper coil will allow you to measure the max current.
; Move slowly to identify peak stepper current. ; Assuming XY are already homed. G90 ; absolute positioning G1 X100, Y100 ; starting point G91 ; relative positioning while iterations < 500 echo "Iteration " ^ {iterations} ;G1 X0.001 Y0.001 ; for cartesian printer G1 X0.001 ; for core XY printer G4 P250 ; Wait 250ms G90 ; absolute positioning
-
@phaedrux said in How to check the real current of the stepper motor:
What do they report?
2/20/2022, 2:31:05 PM: Connected to 192.168.0.19
2/20/2022, 2:31:24 PM: M906: Motor current (mA) - X:800, Y:800, Z:600, E:1200, idle factor 30%
2/20/2022, 2:32:40 PM: M913: Motor current % of normal - X:100, Y:100, Z:100, E:100 -
@phaedrux
M400
M569 P0.4:0.5:0.6 V10
G4 P100
M574 Z2 S4
M906 Z300 ; set motor current
G91 ; relative positioning
G1 H2 Z0.2 F3000 ; power up motors to ensure they are not stalled
G4 P100 ; wait 100ms
M400 ; wait for current moves to finishG4 P200
M915 P0.4:0.5:0.6 S0 H10 F0 R0 ; Configure Z-Axis Stall DetectionG4 P200
G91 ; relative positioning
G1 F4000
G1 H1 Z350 ; Home Z-Axis actuators independently
M400 ; make sure everything has stopped before we make changes
M906 Z600 ; Reset motor current
G90 ; absolute positioning
G92 Z301 ; set position
G91 ; relative positoning
M84 ; Motors offthen run
m906
Motor current (mA) - X:800, Y:800, Z:600, E:1200, idle factor 30%
m913
Motor current % of normal - X:100, Y:100, Z:100, E:100 -
@phaedrux
ill give it a try tomorrow. Thanks very much -
@zapta hi was going to do a differentual measurment using 2 channels on the scope with a very small resistor in line e.g 0.01ohms
-
-
@moth4017 said in How to check the real current of the stepper motor:
@zapta hi was going to do a differentual measurment using 2 channels on the scope with a very small resistor in line e.g 0.01ohms
I think that should work, assuming the scope's sensitivity and offset or good enough. You can use x1 probe since bandwidth is not an issue. I got recently an OWON HDS242s for similar applications since it's floats when running on battery. BTW, I just tried here the approach with a Amp meter and very slow movement and it seems to work. I got about 950ma DC max with RRF configured to 1200ma (?).
-
Here is a better macro for measuring current. Simplify connect a current meter in series to one of the stepper coils, turn on the printer, home, run the script, and observe how the current changes slowly between negative and positve max currents.
; Assuming x,y are homed. G1 X100 Y100 ; move to starting point M203 I1 ; allow slow movements G1 X103 F1 ; move both motors slowly, corexy version ; G1 X103 Y103 F1 ; cartesian version
-
@zapta its ok used you first macro
M906 600 measured max 0.5179mA
M906 1000 Measured max 0.6414mAi tried to test the extruder but couldn't get to extrude for some reason
-
@moth4017 said in How to check the real current of the stepper motor:
@zapta its ok used you first macro
M906 600 measured max 0.5179mA
M906 1000 Measured max 0.6414mAi tried to test the extruder but couldn't get to extrude for some reason
values in Amps not mA
-
@moth4017 bear in mind that when the stepper driver is moving slowly, standstill current reduction will kick in.
-
Thanks @dc42. A couple of questions if you don't mind. Having a simple technique to measure actual current would be very useful.
-
The code that @moth4017 used moves 0.001mm every 250ms. Will this kick in the standstill current?
-
What about the code below, will it kick in the standstill current?
G1 X100 Y100 ; move to starting point M203 I1 ; allow slow movements G1 X103 F1 ; move both motors slowly, corexy version
- Any suggestion for a reliable way to measure the actual current using simple means?
-
-
@zapta on the TMC2209, standstill will kick in when the frequency of step pulses is less than approx. 12Hz. So the axis speed below which standstill current reduction kicks in depends on your steps/mm. For example, if you have 100 steps/mm, then 12Hz corresponds to 12/100 mm/sec = 0.12mm/sec = 7.2mm/min.
When measuring motor current you can use M917 to set the standstill current to 100% of the running current for a particular axis. At high currents, on the MB6HC and EXP3HC RRF will impose a maximum standstill current below 100%, but this doesn't apply to the Duet 3 Mini.
-
Thanks @dc42. I updated the macro to disable standstill current reduction and am getting now very consistent current readings, peaking at ~1250ma with 1200ma configuration (good). This is with a Mini 5.
G1 X100 Y100 ; Starting location M203 I1 ; Allow very slow movements M917 X100 Y100 ; Disable standstill current reduction. G1 X103 F1 ; Move slowly. Moves both motors with coreXY
I also ordered this +/-2A meter, may be more visual https://www.aliexpress.com/item/32400650799.html
-
@zapta
M1000 requested measures 0.8379A with you new script