Wiki Search Terms
Status Report Spindle Speed M5
Controller Board
PiBot FluidNC GRBL Laser CNC Controller V4.7 B but it can be reproduced in any generic ESP32 board
Machine Description
I didn’t connect it to my machine. I checked the PWM spindle output with my oscilloscope.
Input Circuits
Configuration file
board: PiBotV48A
name: Factory_Test
stepping:
engine: I2S_STREAM
idle_ms: 254
pulse_us: 4
dirdelayus: 1
disabledelayus: 0
axes:
sharedstepperdisablepin: NOPIN
x:
stepspermm: 800
maxratemmpermin: 5000
accelerationmmper_sec2: 100
maxtravelmm: 300
soft_limits: false
homing:
cycle: 2
positive_direction: false
mpos_mm: 150
feedmmper_min: 100
seekmmper_min: 200
settle_ms: 500
seek_scaler: 1.1
feed_scaler: 1.1
motor0:
limitnegpin: NO_PIN
limitpospin: NO_PIN
limitallpin: gpio.2:pu:low
hard_limits: false
pulloff_mm: 1
standard_stepper:
step_pin: i2so.2
direction_pin: i2so.1
disable_pin: i2so.0
y:
stepspermm: 800
maxratemmpermin: 5000
accelerationmmper_sec2: 100
maxtravelmm: 300
soft_limits: false
homing:
cycle: 2
positive_direction: true
mpos_mm: 150
feedmmper_min: 100
seekmmper_min: 200
settle_ms: 500
seek_scaler: 1.1
feed_scaler: 1.1
motor0:
limitnegpin: NO_PIN
limitpospin: NO_PIN
limitallpin: gpio.26:pu:low
hard_limits: false
pulloff_mm: 1
standard_stepper:
step_pin: i2so.5
direction_pin: i2so.4
disable_pin: i2so.7
z:
stepspermm: 800
maxratemmpermin: 5000
accelerationmmper_sec2: 100
maxtravelmm: 300
soft_limits: false
homing:
cycle: 1
positive_direction: true
mpos_mm: 150
feedmmper_min: 100
seekmmper_min: 800
settle_ms: 500
seek_scaler: 1.1
feed_scaler: 1.1
motor0:
limitnegpin: NO_PIN
limitpospin: NO_PIN
limitallpin: gpio.33:pu:low
hard_limits: false
pulloff_mm: 1
standard_stepper:
step_pin: i2so.10
direction_pin: i2so.9
disable_pin: i2so.8
i2so:
bck_pin: gpio.22
data_pin: gpio.21
ws_pin: gpio.17
spi:
miso_pin: gpio.19
mosi_pin: gpio.23
sck_pin: gpio.18
probe:
pin: gpio.32:pu:low
toolsetterpin: NOPIN
start:
must_home: false
pwm:
pwm_hz: 50
output_pin: gpio.16
disablewiths0: true
s0withdisable: true
spinup_ms: 0
spindown_ms: 0
tool_num: 0
speed_map: 0=5% 5000=10%
offonalarm: true
uart1:
txd_pin: gpio.27
rxd_pin: gpio.25
rtspin: NOPIN
ctspin: NOPIN
baud: 921600
mode: 8N1
uart_channel1:
reportintervalms: 250
uart_num: 1
control:
estop_pin: gpio.35:low
safetydoorpin: NO_PIN
resetpin: NOPIN
feedholdpin: NO_PIN
cyclestartpin: NO_PIN
macro0pin: NOPIN
macro1pin: NOPIN
macro2pin: NOPIN
macro3pin: NOPIN
faultpin: NOPIN
Startup Messages
[MSG:INFO: FluidNC v3.9.6 https://github.com/bdring/FluidNC]
[MSG:INFO: Compiled with ESP32 SDK:v4.4.7-dirty]
[MSG:INFO: Local filesystem type is spiffs]
[MSG:INFO: Configuration file:config1.yaml]
[MSG:INFO: Machine Factory_Test]
[MSG:INFO: Board PiBotV48A]
[MSG:INFO: UART1 Tx:gpio.27 Rx:gpio.25 RTS:NO_PIN Baud:921600]
[MSG:INFO: uart_channel1 created at report interval: 250]
[MSG:INFO: I2SO BCK:gpio.22 WS:gpio.17 DATA:gpio.21Min Pulse:2us]
[MSG:INFO: SPI SCK:gpio.18 MOSI:gpio.23 MISO:gpio.19]
[MSG:INFO: Stepping:I2S_STREAM Pulse:4us Dsbl Delay:0us Dir Delay:1us Idle Delay:254ms]
[MSG:INFO: Axis count 3]
[MSG:INFO: Axis X (150.000,450.000)]
[MSG:INFO: Motor0]
[MSG:INFO: standard_stepper Step:I2SO.2 Dir:I2SO.1 Disable:I2SO.0]
[MSG:INFO: All Limit gpio.2:low:pu]
[MSG:INFO: Axis Y (-150.000,150.000)]
[MSG:INFO: Motor0]
[MSG:INFO: standard_stepper Step:I2SO.5 Dir:I2SO.4 Disable:I2SO.7]
[MSG:INFO: All Limit gpio.26:low:pu]
[MSG:INFO: Axis Z (-150.000,150.000)]
[MSG:INFO: Motor0]
[MSG:INFO: standard_stepper Step:I2SO.10 Dir:I2SO.9 Disable:I2SO.8]
[MSG:INFO: All Limit gpio.33:low:pu]
[MSG:INFO: estop_pin gpio.35:low]
[MSG:INFO: Kinematic system: Cartesian]
[MSG:INFO: Connecting to STA SSID:##########]
[MSG:INFO: Connecting.]
[MSG:INFO: Connecting..]
[MSG:INFO: Connecting...]
[MSG:INFO: Connected - IP is ##########]
[MSG:INFO: WiFi on]
[MSG:INFO: Start mDNS with hostname:http://fluidnc.local/]
[MSG:INFO: HTTP started on port 80]
[MSG:INFO: Telnet started on port 23]
[MSG:INFO: PWM Spindle Ena:NOPIN Out:gpio.16 Dir:NOPIN Freq:50Hz Period:1048575]
[MSG:INFO: Probe gpio.32:low:pu]Grbl 3.9 [FluidNC v3.9.6 (wifi) '$' for help]
ok
[VER:3.9 FluidNC v3.9.6:]
[OPT:PHS]
[MSG:Machine: Factory_Test]
[MSG:Mode=STA:SSID=HMsrv.24G:Status=Connected:##########:MAC=############]
ok
User Interface Software
Universal Gcode Sender 20250108 but the issue also exists on the fluidnc.local web interface
What happened?
I start the system from fresh. I issue S5000 command on the terminal. Real-time Status Report is:
I then issue M3. Real-time Status Report changes to:
If I then issue M5 the motor will stop but the Real-time Status Report remains the same:
All the sequence follows:
>>> s5000
ok
>>> m3
ok
>>> m5
ok
I went all the way back to v3.1.3 and the issue is still there. Grbl_Esp32 does not have this issue, neither of course GRBL v1.1. They both change the Real-time Status Report to FS0,0 after M5.
GCode File
S5000
M3
M5
Other Information
This issue causes me some difficulty because I use the Real-time Status Report information to control a custom PID controller running on a separate ESP32-S3. At present I have to manually edit every .NC file and add S0 before the M5 command. I can modify Fusion 360 grbl post-processor to do this automatically but I prefer to solve the issue within FluidNC source code instead.
评论 (8)
#2 – bdring 于 2025-04-27
Use auto reporting to get the $g report
#3 – hmantz 于 2025-04-27
> Are you talking about the FS: vslue?
Yes, exactly!
> Feed and speed are both modal values. They stay at the last value set. This is the gcode standard.
With all due respect, I think you may be mistaken. We are not talking about what the operator sets, but what FluidNC reports back. If you check the GRBL v1.1 Wiki Interface section
https://github.com/gnea/grbl/wiki/Grbl-v1.1-Interface#real-time-status-reports
it states clearly that Real-time Status Reports “Contains real-time data of Grbl’s state, position, and other data” and further down that “The second value [of the FS: field] is the current spindle speed in RPM”
> M3 M4 and M5 are also modal. See the $G report for that.
$G also reports that the spindle is running when it is clearly stopped:
>>> s5000
ok
>>> m3
ok
>>> m5
ok
>>> $g
[GC:G0 G54 G17 G21 G90 G94 M5 M9 T0 F0 S5000]
ok
I am not saying that this is a bug as it seems to be intended behaviour, however, it clearly deviates from the GRBL v1.1 standard. It is interesting to note that all GRBL senders I tried state that the spindle is still running after M5.
Is it too difficult to change this? I am willing to help if you point me at the right direction. I had a quick look at the source files on Platformio and was overwhelmed… ![]()
#4 – hmantz 于 2025-04-27
P.S. I would assume that setting “s0withdisable: true” in the PWM: section of the config file would do exactly what I want. However, it seems that this setting doesn’t do anything.
#5 – bdring 于 2025-04-27
@hmantz is correct.
Feed is same. If motion ends or G0 is set. F still keeps it’s last value
#6 – MitchBradley 于 2025-04-27
Possibly fixed by #1484. Needs testing with a lot of different spindle types. s0withdisable must be true.
#7 – hmantz 于 2025-04-27
> Possibly fixed by #1484. Needs testing with a lot of different spindle types. s0withdisable must be true.
It works fine with my setup! ![]()
#8 – hmantz 于 2025-05-07
Fixed by #1484
#1 – bdring 于 2025-04-27
Are you talking about the FS: vslue?
Feed and speed are both modal values. They stay at the last value set. This is the gcode standard.
M3 M4 and M5 are also modal. See the $G report for that.