Stepper Vibration/Resonance At Specific Speeds
-
Here are the relevant config parameters
; Drives M569 P0.0 S1 R0 D2 ; Set motor driver settings. ; P (Motor drive number): 0.0 (Mainboard. Driver 0 board label. [XY, A, top left motor]). ; S (Direction of movement): 1 (Forward). ; R (Driver enable polarity): 0 (Active low). ; D (Driver mode): 2 (SpreadCycle). M569 P0.1 S1 R0 D2 ; Set motor driver settings. ; P (Motor drive number): 0.1 (Mainboard. Driver 1 board label. [XY, B, top right motor]). ; S (Direction of movement): 1 (Forward). ; R (Driver enable polarity): 0 (Active low). ; D (Driver mode): 2 (SpreadCycle). M569 P0.2 S0 R0 D2 ; Set motor driver settings. ; P (Motor drive number): 0.2 (Mainboard. Driver 2 board label. [Z0, far right motor]). ; S (Direction of movement): 0 (Backward). ; R (Driver enable polarity): 0 (Active low). ; D (Driver mode): 2 (SpreadCycle). M569 P0.3 S1 R0 D2 ; Set motor driver settings. ; P (Motor drive number): 0.3 (Mainboard. Driver 3 board label. [Z1, close right motor]). ; S (Direction of movement): 1 (Forward). ; R (Driver enable polarity): 0 (Active low). ; D (Driver mode): 2 (SpreadCycle). M569 P0.4 S0 R0 D2 ; Set motor driver settings. ; P (Motor drive number): 0.4 (Mainboard. Driver 4 board label. [Z2, close left motor]). ; S (Direction of movement): 0 (Backward). ; R (Driver enable polarity): 0 (Active low). ; D (Driver mode): 2 (SpreadCycle). M569 P0.5 S1 R0 D2 ; Set motor driver settings. ; P (Motor drive number): 0.5 (Mainboard. Driver 5 board label. [Z3, far left motor]). ; S (Direction of movement): 1 (Forward). ; R (Driver enable polarity): 0 (Active low). ; D (Driver mode): 2 (SpreadCycle). M569 P121.0 S1 R0 D2 ; Set motor driver settings. ; P (Motor drive number): 121.0 (Duet3D 1LC toolboard. Driver 0 board label. E1, Extruder 1). ; S (Direction of movement): 1 (Forward). ; R (Driver enable polarity): 0 (Active low). ; D (Driver mode): 2 (SpreadCycle). M584 X0.0 Y0.1 Z0.2:0.3:0.4:0.5 E121.0 R0 S0 ; Set drive mapping. ; X (X motor): 0.0 (Mainboard. Driver 0 board label). ; Y (Y motor): 0.1 (Mainboard. Driver 1 board label). ; Z (Z motors): 0.2:0.3:0.4:0.5 (Mainboard. Drivers 2, 3, 4, & 5 board labels). ; E (Extruder motor): 121.0 (Toolboard. Driver 0 board label). ; R (Axes created in command are...): 0 (Linear). ; S (Axes created in command are treated in feedrate calculations as...): 0 (Linear). ; P (Number of visible axes): - (Defaults to the number of axes that are configured). M671 X410:410:-60:-60 Y422:-8:-8:422 S20 F1.0 ; Set positions of Z belts (60mm X, 72mm Y offsets in back. 60mm X, 8mm Y offsets in front.) 0 (410,422), 1 (410, -8), 2 (-60, -8), 3 (-60, 422). ; X (X coordinates of Z screws). ; Y (Y coordinates of Z screws). ; S (Maximum correction to apply to each Z screw [mm]). ; F (Fudge factor). M350 X16 Y16 Z16 E16 I1 ; Set microstepping mode and interpolation. ; X (X axis): 16 (1/16 step). ; Y (Y axis): 16 (1/16 step). ; Z (Z axis): 16 (1/16 step). ; E (Extruder): 16 (1/16 step). ; I (Microstepping interpolation mode): 1 (Enable). M92 X80 Y80 Z400 E814 ; Set axis steps per unit (steps/mm). ; X (X axis). ; Y (Y axis). ; Z (Z axis). ; E (Extruder). (800 is default for Bondtech LGX Lite Pro). M566 X480 Y480 Z180 E600 P1 ; Set maximum instantaneous speed change (jerk/square corner velocity). ; X (X axis [mm/min]): 480 (8 mm/sec). ; Y (Y axis [mm/min]): 480 (8 mm/sec). ; Z (Z axis [mm/min]): 180 (3 mm/sec. 12 mm/sec was too high.). ; E (Extruder [mm/min]): 600 (10 mm/sec. 2 mm/sec based on garethky Github recommendation was too low. 133 mm/sec based on DorjeDorf Github recommendation was too high). ; P (Jerk policy): 1 (Jerk is applied between any pair of travel/print moves). M203 S1 X500 Y500 Z40 E60 ; Set maximum feedrate (speed). ; S (Units): 1 (mm/sec. Default is mm/min). ; X (X axis [mm/sec]). (Reference RepRapFirmware EMF Calculator). ; Y (Y axis [mm/sec]).(Reference RepRapFirmware EMF Calculator). ; Z (Z axis [mm/sec]). ; E (Extruder [mm/sec]). (Ultimaker S7 default retract speed is 45). M201 X5000 Y5000 Z350 E5000 ; Set maximum print move accelerations. ; X (X axis [mm/sec^2]). ; Y (Y axis [mm/sec^2]). ; Z (Z axis [mm/sec^2]). ; E (Extruder [mm/sec^2]). M906 X1205.2 Y1205.2 Z890.8 E700 I30 ; Set maximum motor currents (Duet 3 MB6HC is in steps of 26.2mA. Duet 3 1LC toolboard is in steps of 50mA, rounded down). ; X (X drive [mA]). (1,205.2 is ~60% of max rated motor current of 2,000 mA. 1.493.4 was too loud). ; Y (Y drive [mA]). (1,205.2 is ~60% of max rated motor current of 2,000 mA. 1.493.4 was too loud). ; Z (Z drive mA]). (890.8 is ~45% of max rated motor current of 2,000 mA. 1388.6 was a little too loud). ; E (Extruder [mA]). (LDO 36STH20-1004AHG/Bondtech LGX Lite V1. 65% of max rated motor current of 1,000 mA. Bondtech site recommends 450-650mA. Motor tag recommends </= 650mA). ; I (Motor current idle factor [%]). M84 S30 ; Stop idle hold. ; S (Idle time out [sec]).
Output from M569 P0/1 in the console
M569 P0 Drive 0 runs forwards, active low enable, timing fast, mode spreadCycle, ccr 0x08053, toff 3, tblank 1, thigh 200 (46.9 mm/sec), hstart/hend/hdec 5/0/0, pos 8
M122
M122 === Diagnostics === RepRapFirmware for Duet 3 MB6HC version 3.5.2 (2024-06-11 17:13:58) running on Duet 3 MB6HC v1.01 (SBC mode) Board ID: 08DJM-956L2-G43S8-6J9DG-3S46T-KV2LF Used output buffers: 1 of 40 (17 max) === RTOS === Static ram: 155360 Dynamic ram: 90148 of which 4740 recycled Never used RAM 92888, free system stack 204 words Tasks: SBC(2,ready,0.7%,797) HEAT(3,nWait 6,0.0%,323) Move(4,nWait 6,0.0%,335) CanReceiv(6,nWait 1,0.0%,794) CanSender(5,nWait 7,0.0%,334) CanClock(7,delaying,0.0%,348) TMC(4,nWait 6,9.5%,55) MAIN(2,running,89.4%,101) IDLE(0,ready,0.4%,29), total 100.0% Owned mutexes: HTTP(MAIN) === Platform === Last reset 00:05:57 ago, cause: power up Last software reset at 2024-07-29 20:30, reason: User, Gcodes spinning, available RAM 92888, slot 0 Software reset code 0x6003 HFSR 0x00000000 CFSR 0x00000000 ICSR 0x00400000 BFAR 0x00000000 SP 0x00000000 Task SBC Freestk 0 n/a Error status: 0x00 Aux0 errors 0,0,1 MCU temperature: min 30.3, current 45.0, max 45.2 Supply voltage: min 24.0, current 24.0, max 24.1, under voltage events: 0, over voltage events: 0, power good: yes 12V rail voltage: min 12.1, current 12.1, max 12.1, under voltage events: 0 Heap OK, handles allocated/used 99/2, heap memory allocated/used/recyclable 2048/32/0, gc cycles 0 Events: 0 queued, 0 completed Driver 0: standstill, SG min n/a, mspos 8, reads 1065, writes 16 timeouts 0 Driver 1: standstill, SG min n/a, mspos 8, reads 1065, writes 16 timeouts 0 Driver 2: standstill, SG min n/a, mspos 8, reads 1066, writes 16 timeouts 0 Driver 3: standstill, SG min n/a, mspos 8, reads 1066, writes 16 timeouts 0 Driver 4: standstill, SG min n/a, mspos 8, reads 1066, writes 16 timeouts 0 Driver 5: standstill, SG min n/a, mspos 8, reads 1066, writes 16 timeouts 0 Date/time: 2024-07-30 15:06:22 Slowest loop: 1.85ms; fastest: 0.07ms === Storage === Free file entries: 20 SD card 0 not detected, interface speed: 37.5MBytes/sec SD card longest read time 0.0ms, write time 0.0ms, max retries 0 === Move === DMs created 125, segments created 0, maxWait 0ms, bed compensation in use: none, height map offset 0.000, max steps late 0, min interval 0, bad calcs 0, ebfmin 0.00, ebfmax 0.00 no step interrupt scheduled Moves shaped first try 0, on retry 0, too short 0, wrong shape 0, maybepossible 0 === DDARing 0 === Scheduled moves 0, completed 0, hiccups 0, stepErrors 0, LaErrors 0, Underruns [0, 0, 0], CDDA state -1 === DDARing 1 === Scheduled moves 0, completed 0, hiccups 0, stepErrors 0, LaErrors 0, Underruns [0, 0, 0], CDDA state -1 === Heat === Bed heaters 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1, chamber heaters -1 -1 -1 -1, ordering errs 0 Heater 1 is on, I-accum = 0.0 === GCodes === Movement locks held by null, null HTTP* is doing "M122" in state(s) 0 Telnet is idle in state(s) 0 File is idle in state(s) 0 USB is idle in state(s) 0 Aux is assembling a command in state(s) 0 Trigger* is idle in state(s) 0 Queue is idle in state(s) 0 LCD is idle in state(s) 0 SBC is idle in state(s) 0 Daemon is idle in state(s) 0 Aux2 is idle in state(s) 0 Autopause is idle in state(s) 0 File2 is idle in state(s) 0 Queue2 is idle in state(s) 0 Q0 segments left 0, axes/extruders owned 0x80000003 Code queue 0 is empty Q1 segments left 0, axes/extruders owned 0x0000000 Code queue 1 is empty === Filament sensors === check 0 clear 0 Extruder 0: no data received, errs: frame 0 parity 0 ovrun 0 pol 0 ovdue 0 === CAN === Messages queued 3121, received 6979, lost 0, errs 1, boc 0 Longest wait 2ms for reply type 6054, peak Tx sync delay 67, free buffers 50 (min 49), ts 1786/1785/0 Tx timeouts 0,0,0,0,0,0 === SBC interface === Transfer state: 5, failed transfers: 0, checksum errors: 0 RX/TX seq numbers: 12847/12847 SPI underruns 0, overruns 0 State: 5, disconnects: 0, timeouts: 0 total, 0 by SBC, IAP RAM available 0x24cfc Buffer RX/TX: 0/0-0, open files: 0 === Duet Control Server === Duet Control Server version 3.5.2 (2024-06-12 07:12:47, 64-bit) HTTP+Executed: > Executing M122 Code buffer space: 4096 Configured SPI speed: 8000000Hz, TfrRdy pin glitches: 0 Full transfers per second: 0.22, max time between full transfers: 91.0ms, max pin wait times: 41.9ms/4.2ms Codes per second: 0.00 Maximum length of RX/TX data transfers: 4362/264
-
@Charlie said in Stepper Vibration/Resonance At Specific Speeds:
The weird thing is, as I increase the stepper current, the vibration moves to a higher gantry speed (for example, increasing the sepper current moves the resonance from 85 mm/s to 100 mm/s.
That sounds like classic stepper motor mid band resonance (also called mid band instability) to me.
-
@dc42 Thank you for your response! I tend to agree. What are my options to try to fix this? My two other printers (Ultimaker UM2 and Creality S5, both with duet boards) do not have this issue at all, though there are a lot of other factors such as Cartesian architecture and stepper type. I can see evidence of the resonance in my prints, and I use this speed range a lot.
-
Any thoughts?
-
@Charlie I know this I somewhat out there and most likely cargo culting, but you can try reversing one of the phases (and adjusting the motor definition accordingly). In one community I am dallying around that has improved this kind of issue for a notable amount of people.
-
@oliof Thank you for the input! I will do that and report back.
-
@oliof Unfortunately, reversing the phases and changing the motor direction did not change the noise level. The issue persists.
-
@Charlie As your machine is a CoreXY, I'd check that the belt tension is correct first (too tight can be just as bad as too lose). If you have an accelerometer, and are using a sufficiently new version of RepRapFirmware, you could try using Input Shaping to avoid the resonant frequencies.
It's also worth checking where exactly the ringing is coming from, ie it might be the extruder. See my post here about VFAs: https://forum.duet3d.com/post/321097
Ian
-
@droftarts Thank you for your response! I tensioned the belt using the tool and measurements by PF Makes Tension Meter. I also tried increasing and decreasing the belt tension, with no change to the outcome.
Regarding the Input Shaping (IS), I had input shaping tuned and enabled (M593 P"zvddd" F44.0 S0.1 L0.25). Disabling it did not change the resonance. This makes sense given what @dc42 says here about IS affecting the "acceleration profiles" and (I would assume) not the speed profiles where I am observing the resonance.
Im not completely certain what you mean by
@droftarts said in Stepper Vibration/Resonance At Specific Speeds:
It's also worth checking where exactly the ringing is coming from, ie it might be the extruder.
The resonance is present both during printing, and during traveling at this specific range of speeds, regardless of extruder position or printhead location.
It also happens even if the stepper is removed from the machine, indicating that this is not a belt/machine resonance issue.
-
@Charlie if you've narrowed it down to the stepper midband resonance (which I'm inclined to agree with), then your options for tuning are limited.
Your stepper is basically acting as a spring damper with a natural frequency that is excited at that speed range. The stiffness comes from the magnetic interaction in the coil, and the mass is the rotational inertia of the stepper. If you increase the stepper current you may effectively make the stepper stiffer and so push the resonance to a higher frequency, else lower current and additing a mass disk to the stepper my drop the resonance to a lower speed/frequency and potentially damp it out a little.
If that doesn't work then either try mounting the steppers on some anti-vibration mounts, or buy some different steppers.
When I built my first machine, the sides of the steppers were butted up against part of the frame, meaning any vibrations were transmitted straight though causing noise. Pulling them out 1mm removed that transfer path and quietened things down a bit
-
@engikeneer That makes a lot of sense. I raised the current to the max rated current of 2,000mA, which gave the best results. Stepping up from 1,000 to 1,900 gave worse and worse resonance until 2,000mA, but the steppers are a tad warm just from a few travel moves. Im not too worried about the motors getting too hot since they are 180C rated, but the plastic Voron mounts may not handle it well on 24hr+ prints.
On the note of changing steppers, what should I be looking for? Ive been looking at the LDO 42STH48-2504AC. I know the low 1.5 mH inductance should be good for high speed, but what specs should I be looking at to reduce the possibility of resonance?
Thank you for the helpful insight!
-
My delta printer is noisy when homing and calibrating, which I think is because of md-band resonance. However, it is very quiet when actually printing; so I don't worry about the noise. I guess it may be different for a Cartesian or CoreXY printer in which long travel moves may be noisy too.
-
@Charlie the 2504s are a good pick and they like to be driven at spec.