Extruder G1 command not responding to feedrate
-
Hello, I have a problem with the feedrate for an extruder command. If I command G1 E15 F15, it should last 60 seconds but actually lasts 30 seconds (G1 E15 F5 doesn't change the speed, G1 E5 F15 lasts for 10 seconds). I am running 3.4b7 on a Duet 3 mainboard. The extruder stepper motor is 17hs15-1684s-pg27 (1.8°, gearbox 26.851:1). This is a "fake" extruder that I use to mix the feedstock for my printer.
This problem occurs when I define the step/mm to 85924. The calculation is 200 * 26.851 * 16 = 85924. This step/mm allows the feedrate F to be in RPM which is meaningfull in my situation (mixer RPM).
The problem doesn't occur if I use a step/mm of 5370 (200*26.851) and use the command G1 E240 F240 (240/16=15, so this is comparable to a G1 E15 F15 when step/mm = 85924).
Is this a bug or there is something that I don't understand?
See below my config.g
; Configuration file for Duet 3 (firmware version 3) ; executed by the firmware on start-up ; ; generated by RepRapFirmware Configuration Tool v3.2.3 on Fri Jun 25 2021 11:47:43 GMT-0400 (heure d’été de l’Est) ; General preferences G90 ; send absolute coordinates... M83 ; ...but relative extruder moves M550 P"MEAM-HP V01" ; set printer name M665 R119.3 L195 B55 H362.5 ; Set delta radius, diagonal rod length, printable radius and homed height ***Bras ball and socket*** ;M665 R119.25 L215.87 B50 H328 ; Set delta radius, diagonal rod length, printable radius and homed height ***Bras double magnétique, tooling ball*** ;M665 R109.57 L215 B50 H305 ; Set delta radius, diagonal rod length, printable radius and homed height ***Bras Igus, effector v4*** ;M665 R132.07 L215.87 B50 H312 ; Set delta radius, diagonal rod length, printable radius and homed height ***Bras double magnétique*** ;M665 R129.65 L215 B50 H319 ; Set delta radius, diagonal rod length, printable radius and homed height ***Bras Igus, effector v5*** ;M665 R120.45 L190 B50 H323 ; Set delta radius, diagonal rod length, printable radius and homed height ***Bras rotule rouge*** M666 X0 Y0 Z0 ; put your endstop adjustments here, or let auto calibration find them M669 S1 T1 ; Network M540 PBE:EF:DE:AD:FE:ED ; set custom MAC address M552 P192.168.11.17 S1 ; enable network and set IP address M553 P255.255.255.0 ; set netmask M554 P192.168.1.14 ; set gateway M586 P0 S1 ; enable HTTP M586 P1 S0 ; disable FTP M586 P2 S0 ; disable Telnet ; Drives M584 X0 Y1 Z2 E3:4 M584 U3 M584 V3 M569 P0.0 S1 ; physical drive 0.0 goes forwards M569 P0.1 S1 ; physical drive 0.1 goes forwards M569 P0.2 S1 ; physical drive 0.2 goes forwards M569 P121.0 S1 R0 T2.7:2.7:2.7:2.7 ; change enable polarity, active = disable driv M569 P0.3 S1 ; physical drive 0.3 goes forwards M584 X0.0 Y0.1 Z0.2 E121.0:0.3 ; set drive mapping M584 U121.0 ; for piston extruder limit switch M584 V121.0 ; for piston extruder limit switch ;M584 P4 ;show 4 axis M584 P3 ;show 3 axis M350 E1 I0 ; configure microstepping without interpolation M350 X16 Y16 Z16 E16 I1 ; configure microstepping with interpolation M92 X200 Y200 Z200 U3192 V3192 E3192:85924 ; set steps per mm M566 X1200.00 Y1200.00 Z1200.00 U100 V100 E100.00:100.00 ; set maximum instantaneous speed changes (mm/min) M203 X18000.00 Y18000.00 Z18000.00 U6000 V6000 E6000.00:20000.00 ; set maximum speeds (mm/min) M201 X2000.00 Y2000.00 Z2000.00 U200.00 V200.00 E200.00:10.00 ; set accelerations (mm/s^2) M906 X2000 Y2000 Z2000 U800 V800 E800:1680 I30 ; set motor currents (mA) and motor idle factor in per cent M84 S30 ; Set idle timeout ; Axis Limits M208 Z-0.1 S1 ; set minimum Z M208 U7475 ; Endstops M574 X2 S1 P"^io1.in" ; configure active-high endstop for high end on X via pin ^io1.in M574 Y2 S1 P"^io2.in" ; configure active-high endstop for high end on Y via pin ^io2.in M574 Z2 S1 P"^io0.in" ; configure active-high endstop for high end on Z via pin ^io0.in M574 U1 S1 P"^io4.in" ; configure active-high endstop for high end on Z via pin ^io0.in M574 V2 S1 P"^io3.in" ; configure active-high endstop for high end on Z via pin ^io0.in ; Z-Probe M558 P0 H10 F120 T2400 ; disable Z probe but set dive height, probe speed and travel speed M557 R50 S20 ; define mesh grid ; Heaters M308 S0 P"temp1" Y"thermistor" T109900 B4217 H0.0 ; Plateau chauffant___configure sensor 0 as thermistor via CS pin temp1 M950 H0 C"out1" T0 ; create chamber heater output on out1 and map it to sensor 0 M307 H0 B0 R0.598 C398.3 D0.66 S1.00 V23.4 ; enable bang-bang mode for the chamber heater and set PWM limit M141 H0 ; map chamber to heater 0 M143 H0 S100 ; set temperature limit for heater 0 to 100C M308 S1 P"spi.cs0" Y"thermocouple-max31856" ; configure sensor 1 as thermocouple via CS pin spi.cs0 M950 H1 C"out2" T1 ; create nozzle heater output on out2 and map it to sensor 1 M307 H1 B0 R0.466 C354.7 D23.13 S1.00 V23.4 ; disable bang-bang mode for heater and set PWM limit M143 H1 S100 ; set temperature limit for heater 1 to 100C M308 S2 P"spi.cs1" Y"thermocouple-max31856" ; configure sensor 2 as thermocouple via CS pin spi.cs1 M950 H2 C"out3" T2 ; create nozzle heater output on out3 and map it to sensor 2 M307 H2 B0 R2.044 C129.7 D5.81 S1.00 V23.4 ; disable bang-bang mode for heater and set PWM limit M143 H2 S100 ; set temperature limit for heater 2 to 100C M308 S3 P"temp0" Y"thermistor" T109900 B3800 H0.0 ; Extrudeur___configure sensor 3 as thermistor on pin temp0 M950 H3 C"out0" T3 ; create bed heater output on out0 and map it to sensor 3 M307 H3 B0 R1.359 C207.4 D4.75 S1.00 ; enable PID mode for the bed heater and set PWM limit M140 H3 ; map heated bed to heater 3 M143 H3 S100 ; set temperature limit for heater 3 to 100C M308 S4 P"spi.cs2" Y"thermocouple-max31856" ; configure sensor 2 as thermocouple via CS pin spi.cs1 M950 H4 C"out0" T4 ; create nozzle heater output on out2 and map it to sensor 1 ; Fans M950 F0 C"out4" Q500 ; create fan 0 on pin out4 and set its frequency M106 P0 S0 H-1 ; set fan 0 value. Thermostatic control is turned off ; Tools M563 P0 S"Piston" D0 H1:2 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 M563 P1 S"Melangeur" D1 H1:2 ; define tool 1 G10 P1 X0 Y0 Z0 ; set tool 1 axis offsets G10 P1 R0 S0 ; set initial tool 1 active and standby temperatures to 0C ; Custom settings are not defined ;M581 T2 U S1 ;M581 T3 V S1 ;M582 T2 ;M582 T3 M581 T0 U S1 M581 T0 V S1 M582 T0 M582 T0 ; Miscellaneous T0 ; select first tool
Thanks
Olivier -
85924 may simply be more than the firmware can handle. That is a lot of steps.
Since it works with 5370 that would tend to confirm the above.
Frederick
-
@fcwilt I think you are right. What seems strange to me is that the pulse frequency is the same in both cases, which I thought was the limiting factor for the firmware.
-
Do you get hiccups in your M122 report after sending the G1 E command with the high steps?
F5 is 5 mm per minute. That's quite slow.
I wonder if you're running into this limitation.
Maximum Length of Moves
The firmware keeps track of the exact number of microsteps sent to each movement axis using a 32-bit signed integer microstep counter, this limits the maximum absolute move and axis length to (2^31 - 1) microsteps. This does not apply to extruder drives. The firmware multiplies the requested axis position (after adding any offsets) by the steps/mm to get the required microstep position and the microstep counter accumulates across multiple moves, as the axis position increases it increments, as it decreases it decrements. The maximum size of the microstep counter is only an issue for situations where an axis needs to accommodate one or more moves or an overall axis length that would overflow the counter (i.e. an extremely long axis, or an extremely high resolution axis). In typical uses this is not a concern, for example on a standard linear axis using 160 microsteps/mm an axis of over 13km is supported. In cases where the microstep counter is not sufficient (e.g. a very high resolution rotary axis moving for a very long time) G92 can be used to set the origin to a new point on the axis and thus reset the counter.
In a similar manner, if the requested axis position gets very large then accuracy will suffer, because it is held and calculated as a 32-bit float.
-
@phaedrux I don't see any hiccups, see below the M122 response after sending M302 P1 and G1 E15 F15 (step/mm = 85. I think you've found why I run into the problem with step/mm = 85924, I'll stick to 5370 and divide the feed by 16 to get my RPMs.
02/02/2022, 08:55:09 M122 === Diagnostics === RepRapFirmware for Duet 3 MB6HC version 3.4.0beta7 (2021-12-16 12:22:39) running on Duet 3 MB6HC v1.01 or later (standalone mode) Board ID: 08DJM-956BA-NA3TN-6J9FA-3SD6J-9ABAT Used output buffers: 1 of 40 (17 max) === RTOS === Static ram: 150664 Dynamic ram: 93776 of which 0 recycled Never used RAM 106160, free system stack 174 words Tasks: NETWORK(ready,23.2%,253) ETHERNET(notifyWait,0.2%,174) HEAT(notifyWait,0.1%,324) Move(notifyWait,0.0%,276) CanReceiv(notifyWait,0.0%,797) CanSender(notifyWait,0.0%,374) CanClock(delaying,0.0%,339) TMC(notifyWait,6.0%,58) MAIN(running,61.4%,1142) IDLE(ready,9.3%,30), total 100.0% Owned mutexes: === Platform === Last reset 00:02:08 ago, cause: software Last software reset at 2022-02-02 08:52, reason: User, GCodes spinning, available RAM 106276, slot 1 Software reset code 0x0003 HFSR 0x00000000 CFSR 0x00000000 ICSR 0x00400000 BFAR 0x00000000 SP 0x00000000 Task MAIN Freestk 0 n/a Error status: 0x00 Step timer max interval 1012 MCU temperature: min 46.0, current 46.1, max 50.4 Supply voltage: min 0.1, current 23.4, max 23.6, under voltage events: 0, over voltage events: 0, power good: yes 12V rail voltage: min 0.1, current 11.9, max 12.1, under voltage events: 0 Heap OK, handles allocated/used 0/0, heap memory allocated/used/recyclable 0/0/0, gc cycles 0 Events: 0 queued, 0 completed Driver 0: pos 103350, standstill, SG min 0, mspos 8, reads 4712, writes 11 timeouts 0 Driver 1: pos 103350, standstill, SG min 0, mspos 8, reads 4712, writes 11 timeouts 0 Driver 2: pos 103350, standstill, SG min 0, mspos 8, reads 4713, writes 11 timeouts 0 Driver 3: pos 0, standstill, SG min 0, mspos 584, reads 4708, writes 16 timeouts 0 Driver 4: pos 0, standstill, SG min 0, mspos 8, reads 4713, writes 11 timeouts 0 Driver 5: pos 0, standstill, SG min 0, mspos 8, reads 4713, writes 11 timeouts 0 Date/time: 2022-02-02 08:55:08 Slowest loop: 3.89ms; fastest: 0.05ms === Storage === Free file entries: 10 SD card 0 detected, interface speed: 25.0MBytes/sec SD card longest read time 2.4ms, write time 0.0ms, max retries 0 === Move === DMs created 125, segments created 3, maxWait 49338ms, bed compensation in use: none, comp offset 0.000 === MainDDARing === Scheduled moves 1, completed 1, hiccups 0, stepErrors 0, LaErrors 0, Underruns [0, 0, 1], CDDA state -1 === AuxDDARing === Scheduled moves 0, completed 0, hiccups 0, stepErrors 0, LaErrors 0, Underruns [0, 0, 0], CDDA state -1 === Heat === Bed heaters 3 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1, chamber heaters 0 -1 -1 -1, ordering errs 0 Heater 1 is on, I-accum = 0.0 Heater 2 is on, I-accum = 0.0 === GCodes === Segments left: 0 Movement lock held by null HTTP is idle 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 idle 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 Code queue is empty === CAN === Messages queued 1122, received 757, lost 0, boc 0 Longest wait 0ms for reply type 0, peak Tx sync delay 3770, free buffers 49 (min 48), ts 644/473/0 Tx timeouts 0,0,170,9,0,87 last cancelled message type 30 dest 127 === Network === Slowest loop: 5.49ms; fastest: 0.02ms Responder states: HTTP(0) HTTP(0) HTTP(0) HTTP(0) HTTP(0) HTTP(0) FTP(0) Telnet(0), 0 sessions Telnet(0), 0 sessions HTTP sessions: 1 of 8 - Ethernet - State: active Error counts: 0 0 1 0 0 Socket states: 5 5 2 2 2 0 0 0 02/02/2022, 08:53:49 G1 E15 F15 02/02/2022, 08:53:22 M302 p1