Welcome to Our Community

Some features disabled for guests. Register Today.

BlackBox X32 PWM Output Not Working (Stuck at 0V)

Discussion in 'Laser Cutters' started by Koshasha, Mar 10, 2025 at 12:47 AM.

  1. Koshasha

    Koshasha New
    Builder

    Joined:
    Feb 1, 2025
    Messages:
    2
    Likes Received:
    0
    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.
     
  2. David the swarfer

    David the swarfer OpenBuilds Team
    Staff Member Moderator Builder Resident Builder

    Joined:
    Aug 6, 2013
    Messages:
    3,544
    Likes Received:
    1,940
    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
     
  3. Peter Van Der Walt

    Peter Van Der Walt OpenBuilds Team
    Staff Member Moderator Builder Resident Builder

    Joined:
    Mar 1, 2017
    Messages:
    15,498
    Likes Received:
    4,421
    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)
     
  4. Koshasha

    Koshasha New
    Builder

    Joined:
    Feb 1, 2025
    Messages:
    2
    Likes Received:
    0
    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
     
  5. Peter Van Der Walt

    Peter Van Der Walt OpenBuilds Team
    Staff Member Moderator Builder Resident Builder

    Joined:
    Mar 1, 2017
    Messages:
    15,498
    Likes Received:
    4,421
    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
     

Share This Page

  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice