I’m setting up my BlackBox X32 with a LaserTree driver and running into a PWM output issue. I’m using GRBL firmware with LightBurn. When using the dedicated PWM output, I get 0V at all power levels. However, when I connect the laser to the TOOL output, the laser receives a signal and turns on, but I can’t use this because TOOL is an ON/OFF-only output (not PWM-controlled). This confirms that the LaserTree driver is working and receiving signals, but the PWM output from the BlackBox x32 is not sending any signal. Setup Details: • Controller: BlackBox X32 • Laser Driver: LaserTree • Software: LightBurn • Firmware Settings ($$ output): $30=1000 $31=0 $32=1 $33=1000 Wiring: • PWM output → Laser PWM input • GND → Laser GND Troubleshooting I’ve Tried: Checked GRBL settings ($30=1000, $31=0, $32=1, $33=1000). Enabled “Emit S Value with Every G1 Command” in LightBurn. Tested PWM output with a multimeter—always reads 0V, even when sending S values (S100, S500, S1000). Tested TOOL output—laser receives signal but is ON/OFF only (no power modulation). Checked for wiring issues—everything wired correctly. Questions: Is there a known issue with PWM output on the BlackBox X32 when using a laser? Any other troubleshooting steps I should try? Would really appreciate any help or guidance! Thanks in advance.
S values do not stand alone, at least the first one has to be paired with an M3 or M4 'tool on' in GRBL with $32=1 these then take special meaning M3 is tool always on M4 is tool on while moving with power ramping during acceleration, and off when stopped (even without getting an M5 tool off) so, you may have been goiving S command without an M3, or given an M4 in which case it won't come on until it moves with a G1 or G2/3 move
Not quite https://github.com/OpenBuilds/OpenB...097f467e5933861fa2d2ff082edb4c/index.js#L2769 In laser mode without a move even M3Sxxxx wont do anything (static power laser mode needs a move too. You set M3/4 in the header and G0 vs G1/2/3 = on/off) Best idea is to use the Tool On menu in CONTROL to test (it does all the right commands) to eliminate whether commands are correct. Also provide full Grbl Settings backup out of CONTROL for review. None whatsover. Any mishaps while wiring that could have damaged the PWM port? (shorts, reversed polarity, wrong input terminal etc) (if so, better to disclose so we can address that, otherwise we'll keep looking at settings/commands/current wiring/etc)
No mishaps while wiring. Tested wires for continuity as well as confirming signal received and laser fires when connected to TOOL. Another test I performed, I disabled the laser ($32=0) to use a router. Using a multi meter (DC)There is no voltage on the PWM when I increase the spindle using tool on in CONTROL, from 0 to 100. Output below was with laser enabled. Code: [16:58:11] [ $$ ] $0=10.0 ;Step pulse time, microseconds [16:58:11] [ $$ ] $1=255 ;Step idle delay, milliseconds [16:58:11] [ $$ ] $2=0 ;Step pulse invert, mask [16:58:11] [ $$ ] $3=4 ;Step direction invert, mask [16:58:11] [ $$ ] $4=0 ;Invert step enable pin, boolean [16:58:11] [ $$ ] $5=7 ;Invert limit pins, boolean/mask [16:58:11] [ $$ ] $6=1 ;Invert probe pin, boolean [16:58:11] [ $$ ] $8=0 ;Ganged axes direction invert as bitfield [16:58:11] [ $$ ] $9=1 ;PWM Spindle as bitfield where setting bit 0 enables the rest [16:58:11] [ $$ ] $10=511 ;Status report options, mask [16:58:11] [ $$ ] $11=0.010 ;Junction deviation, millimeters [16:58:11] [ $$ ] $12=0.002 ;Arc tolerance, millimeters [16:58:11] [ $$ ] $13=0 ;Report in inches, boolean (CONTROL needs $13=0) [16:58:11] [ $$ ] $14=0 ;Invert control input signals, mask [16:58:11] [ $$ ] $15=0 ;Coolant pins invert, mask [16:58:11] [ $$ ] $16=0 ;Spindle pins invert, mask [16:58:11] [ $$ ] $17=0 ;Control pins pullup disable, mask [16:58:11] [ $$ ] $18=0 ;Limit pins pullup disable, mask [16:58:11] [ $$ ] $19=0 ;Probe pin pullup disable, boolean [16:58:11] [ $$ ] $20=0 ;Soft limits enable, boolean [16:58:11] [ $$ ] $21=1 ;Hard limits enable, boolean [16:58:11] [ $$ ] $22=1 ;Homing cycle enable, boolean (Grbl) / mask (GrblHAL) [16:58:11] [ $$ ] $23=3 ;Homing direction invert, mask [16:58:11] [ $$ ] $24=100.0 ;Homing locate feed rate, mm/min [16:58:11] [ $$ ] $25=1000.0 ;Homing search seek rate, mm/min [16:58:11] [ $$ ] $26=250 ;Homing switch debounce delay, milliseconds [16:58:11] [ $$ ] $27=5.000 ;Homing switch pull-off distance, millimeters [16:58:11] [ $$ ] $28=0.100 ;G73 retract distance, in mm [16:58:11] [ $$ ] $29=5.0 ;Step pulse delay (ms) [16:58:11] [ $$ ] $30=1000.000 ;Maximum spindle speed, RPM [16:58:11] [ $$ ] $31=0.000 ;Minimum spindle speed, RPM [16:58:11] [ $$ ] $32=1 ;Laser-mode enable, boolean [16:58:11] [ $$ ] $33=10000.0 ;Spindle PWM frequency [16:58:11] [ $$ ] $34=0.0 ;Spindle off Value [16:58:11] [ $$ ] $35=0.0 ;Spindle min value [16:58:11] [ $$ ] $36=100.0 ;Spindle max value [16:58:11] [ $$ ] $37=0 ;Stepper deenergize mask [16:58:11] [ $$ ] $39=1 ;Enable printable realtime command characters, boolean [16:58:11] [ $$ ] $40=1 ;Apply soft limits for jog commands, boolean [16:58:11] [ $$ ] $43=1 ;Homing passes [16:58:11] [ $$ ] $44=4 ;Homing cycle 1 [16:58:11] [ $$ ] $45=3 ;Homing cycle 2 [16:58:11] [ $$ ] $46=0 ;Homing cycle 3 [16:58:11] [ $$ ] $62=0 ;Sleep Enable [16:58:11] [ $$ ] $63=2 ;Feed Hold Actions [16:58:11] [ $$ ] $64=0 ;Force Init Alarm [16:58:11] [ $$ ] $65=0 ;Require homing sequence to be executed at startup [16:58:11] [ $$ ] $70=7 ;Network Services [16:58:11] [ $$ ] $73=0 ;Wifi Mode [16:58:11] [ $$ ] $74= ;Wifi network SSID [16:58:11] [ $$ ] $75= ;Wifi network PSK [16:58:11] [ $$ ] $100=354.170 ;X-axis steps per millimeter [16:58:11] [ $$ ] $101=17.778 ;Y-axis steps per millimeter [16:58:11] [ $$ ] $102=320.000 ;Z-axis steps per millimeter [16:58:11] [ $$ ] $110=2000.000 ;X-axis maximum rate, mm/min [16:58:11] [ $$ ] $111=2000.000 ;Y-axis maximum rate, mm/min [16:58:11] [ $$ ] $112=2000.000 ;Z-axis maximum rate, mm/min [16:58:11] [ $$ ] $120=400.000 ;X-axis acceleration, mm/sec^2 [16:58:11] [ $$ ] $121=400.000 ;Y-axis acceleration, mm/sec^2 [16:58:11] [ $$ ] $122=400.000 ;Z-axis acceleration, mm/sec^2 [16:58:11] [ $$ ] $130=620.000 ;X-axis maximum travel, millimeters [16:58:11] [ $$ ] $131=930.000 ;Y-axis maximum travel, millimeters [16:58:11] [ $$ ] $132=100.000 ;Z-axis maximum travel, millimeters [16:58:11] [ $$ ] $300=NaN ;unknown [16:58:11] [ $$ ] $302=192.168.5.1 ;unknown [16:58:11] [ $$ ] $303=192.168.5.1 ;unknown [16:58:11] [ $$ ] $304=255.255.255.0 ;unknown [16:58:11] [ $$ ] $305=23 ;unknown [16:58:11] [ $$ ] $306=80 ;unknown [16:58:11] [ $$ ] $307=81 ;unknown [16:58:11] [ $$ ] $341=0 ;Tool Change Mode [16:58:11] [ $$ ] $342=30.0 ;Tool Change probing distance [16:58:11] [ $$ ] $343=25.0 ;Tool Change Locate Feed rate [16:58:11] [ $$ ] $344=200.0 ;Tool Change Search Seek rate [16:58:11] [ $$ ] $345=200.0 ;Tool Change Probe Pull Off rate [16:58:11] [ $$ ] $346=1 ;Restore position after M6 as boolean [16:58:11] [ $$ ] $370=0 ;Invert I/O Port Inputs (mask) [16:58:11] [ $$ ] $384=0 ;Disable G92 Persistence [16:58:11] [ $$ ] $396=30 ;WebUI timeout in minutes [16:58:11] [ $$ ] $397=0 ;WebUI auto report interval in milliseconds [16:58:11] [ $$ ] $398=35 ;Planner buffer blocks [16:58:12] [ $$ ] $481=0 ;Autoreport interval in ms [16:58:12] [ $$ ] ok
I think default was 1000 or 5000 - try a EEPROM reset (button on toolbar on Grbl Settings tab) to get all settings back to defaults as a test If its not settings related, could still be damaged port (bad laser module that backfeeds say 5v to a 3.3v IO? short? something similar) PS the Serial Log output is not quite the right format (can't run through our compare tools) - next time we need a Grbl settings backup, please use CONTROL > Grbl Settings tab > Backup Settings button to export in parseable format for compare tools, only one setting i could pick up while reading, suspect tools may have picked up more