Unsolved Noisy motors when idle
pyt last edited by pyt
My motors are fairly noisy when idle. The noise stops when I do
M18. It's not noisy at all when moving.
The machine is a delta printer running on 24V. Only the axis steppers (no extruder) and endstops are plugged in at the moment.
I have tried this (from https://duet3d.dozuki.com/Wiki/Reducing_Stand-Still_Noise) :
M569 Fx P0 M569 Fx P1 M569 Fx P2
xranges from 1 to 15. F1 to F12 sounds like a loud noisy fan, F12 being the least noisy. Higher F-values produce a high-pitched sound.
I've also tried
M906 I0hoping that it will shut off the motor when idle but that didn't help. The I-value doesn't seem to have much effect on volume.
M569 C65968 P0gives an error probably because I am on RFF >= 2.02; is there a F-value equivalent?
Config attached below. Geometry setup is still a work-in-progress.
Movement is extremely slow because of initial setup, but that shouldn't cause loud idle noise right?
Is it supposed to be so noisy when idle? It's unusable as-is because the noise is loud enough to be a distraction.
; Configuration file for Duet WiFi (firmware version 1.21) ; executed by the firmware on start-up ; ; generated by RepRapFirmware Configuration Tool on Tue Jan 01 2019 23:33:12 GMT-0800 (Pacific Standard Time) ; General preferences G90 ; Send absolute coordinates... M83 ; ...but relative extruder moves M555 PNaN ; Set firmware compatibility to look like ;*** The homed height is deliberately set too high in the following - you will adjust it during calibration. M665 R105.6 L360.24 B85 H250 ; Set delta radius, diagonal rod length, printable radius and homed height M666 X0 Y0 Z0 ; Put your endstop adjustments here, or let auto calibration find them ; Network M550 Pfoo ; Set machine name M551 Pxxx ; Set password M552 S1 ; Enable network ;*** Access point is configured manually via M587 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 S1 ; Drive 1 goes forwards M569 P2 S1 ; Drive 2 goes forwards M569 P3 S1 ; Drive 3 goes forwards M350 X16 Y16 Z16 E16 I1 ; Configure microstepping with interpolation M92 X160 Y160 Z160 E90.525 ; Set steps per mm M566 X1200 Y1200 Z1200 E1200 ; Set maximum instantaneous speed changes (mm/min) M203 X18000 Y18000 Z18000 E1200 ; Set maximum speeds (mm/min) M201 X1000 Y1000 Z1000 E1000 ; Set accelerations (mm/s^2) M906 X1000 Y1000 Z1000 E800 I30 ; Set motor currents (mA) and motor idle factor in per cent M84 S30 ; Set idle timeout ; Axis Limits M208 Z0 S1 ; Set minimum Z ; Endstops M574 X2 Y2 Z2 S1 ; Set active high endstops ; Z-Probe M558 P5 R0.5 H5 F120 T6000 ; Set Z probe type to effector and the dive height + speeds G31 P500 X0 Y0 Z2.5 ; Set Z probe trigger value, offset and trigger height M557 R85 S20 ; Define mesh grid ; Heaters M140 H-1 ; Disable heated bed M305 P1 T100000 B4388 C7.060000e-8 R4700 ; Set thermistor + ADC parameters for heater 1 M143 H1 S240 ; Set temperature limit for heater 1 to 240C ; 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 T45 ; Set fan 1 value, PWM signal inversion and frequency. Thermostatic control is turned on M106 P2 S1 I0 F500 H1 T45 ; Set fan 2 value, PWM signal inversion and frequency. Thermostatic control is turned on ; Tools M563 P0 D0 H1 ; 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 ; Automatic saving after power loss is not enabled ; Custom settings are not configured ; Miscellaneous M501 ; Load saved parameters from non-volatile memory
The motors go to idle current after the idle timeout, which defaults to 30 seconds. So you should notice a distinct drop in motor noise after this time. You can reduce the idle timeout, it's the S parameter of the M84 command.
The idle noise varies with the microstep position. So when tuning the driver settings, I find it best to send M18 to disable all motors, then send G91 G1 S2 X0.1 to enable the X driver and move the motor by a small amount. Sending G1 S2 X0.1 moves the motor on to a new position. I look for the noisiest position, then adjust the M569 settings to quieten it. Then I jog the motor a few times using that same G1 S2 command to check the noise at other positions.
When you have found the ideal settings for the X motor, the same settings should work well on the other motors, if they are all the same type and mounted in the same way.
On my delta I find that M569 P0 F12 Y3:3:0 or Y3:3:1 produces just a slight hiss from the motors.
The setting M569 C65968 P0 is invalid as noted on the wiki page. so RRF 2.02 doesn't allow it.
pyt last edited by pyt
It looks like there are several parameters that affect idle noise: TOFF, HSTRT, HEND, HDEC, RNDTF, CHM, TBL. I made a macro that goes through all possible permutations. Something like:
G91 ; relative positioning M906 I100 ; disable idle-current reduction M117 P"F1 Y0:0:0" ; Print message M569 P2 F1 Y0:0:0 ; Set register G1 S2 Z-0.1 ; Move Z a little bit G4 P1000 ; Wait 1000ms G1 S2 Z-0.1 ; Move Z a little bit G4 P1000 ; Wait 1000ms G1 S2 Z-0.1 ; Move Z a little bit G4 P1000 ; Wait 1000ms M117 P"F1 Y0:0:0 END" ; Print message M117 P"F1 Y0:0:1" ; Print message M569 P2 F1 Y0:0:1 ; Set register G1 S2 Z-0.1 ; Move Z a little bit G4 P1000 ; Wait 1000ms G1 S2 Z-0.1 ; Move Z a little bit G4 P1000 ; Wait 1000ms G1 S2 Z-0.1 ; Move Z a little bit G4 P1000 ; Wait 1000ms M117 P"F1 Y0:0:1 END" ; Print message M117 P"F1 Y0:0:2" ; Print message M569 P2 F1 Y0:0:2 ; Set register G1 S2 Z-0.1 ; Move Z a little bit G4 P1000 ; Wait 1000ms G1 S2 Z-0.1 ; Move Z a little bit G4 P1000 ; Wait 1000ms G1 S2 Z-0.1 ; Move Z a little bit G4 P1000 ; Wait 1000ms M117 P"F1 Y0:0:2 END" ; Print message M117 P"F1 Y0:0:3" ; Print message M569 P2 F1 Y0:0:3 ; Set register G1 S2 Z-0.1 ; Move Z a little bit G4 P1000 ; Wait 1000ms G1 S2 Z-0.1 ; Move Z a little bit G4 P1000 ; Wait 1000ms G1 S2 Z-0.1 ; Move Z a little bit G4 P1000 ; Wait 1000ms M117 P"F1 Y0:0:3 END" ; Print message and so on...
First I will find the best TOFF, then the best HSTRT/HEND/HDEC value, then the best RNDTF/CHM/TBL. Moving on to the next stage if the previous doesn't work.
It would look like this:
M569 P0 F12 Y3:3:0 D1 B2 ; X, TOFF 12, HSTRT 3, HEND 3, HDEC 16, CHM rndtf, TBL 36in the worst case scenario.
This is assuming that the following stage is dependent on the previous stage (i.e. HSTRT/HEND/HDEC is dependent on TOFF and I don't have to find TOFF again). Does this make sense?
When I read the TMC2660 datasheet, it sounded like the RNDTF bit doesn't affect stealthChop mode, because it's only discussed in the section about constant off-time mode. So if you want to try setting it in stealthChop mode, you will have to calculate the value of the whole chopper control register that you want, and set it using the C parameter of M569.
The TMC2660 doesn't support chopSync or stealthChop. It does support coolStep, which reduces motor noise at low and medium speeds. It's disabled by default, because (like stealthChop) it increases the likelihood of skipped steps if the nozzle hits a blob or overhang.