Laser won't accept Power lower than 1%

Hello Lazor ppl :smiley:

I have a little problem with my China Laser (its well made but you cant really tell what manufacturer)
Its not just in Lightburn, also LaserGBRL. Problem is, the Laser wont accept power level below 1%, it stays at 1%. Not that much of a problem, but for Framing it is. Since it is a 4x Diode Laser the 1% is already enough to leave marks.
Everything above 1% seem to work fine. I dont have tools to measure the actual laser output, i just measured the power consumption of the Laser. And from 0,01 to 1% it stays the same. From 1% and up it raises.
I compiled my own GRLB Firmware and tried to find a solution inside the config.h but couldnt find any.

Anyone had a similar problem and was able to solve it?


Double check that S-Value Max in the device settings is the same as the $30 variable.

I don’t think you can get below the 1% value. I’ve never seen one of that will allow fractions.

All the pwm generators I’ve ever dealt with use whole numbers for the pwm generator…

Good luck


I wish it was that easy. I assume it is a problem with the driver. Would be much easier if there was any support from the chinese seller but it seems they know less about what they sell than I do :smiley:

You could increase $30 to 10000, and then 1% will be 0.1%

Still depends of course if the laser module will accept the PWM range, but it will test if the GRBL has some kind of floor on the number itself.

I’ve programmed the Atmel 386 and other micros… you can’t enter anything but a whole number in the registers that create the pwm signal … so how can shifting the range change it at the hardware level?

I’d like to understand your statements… I don’t see how you can go any lower than 1/max register value…


I can enter 0.1%, 0.2% and 0,3% and get different intensity from the laser, this correlates with GCode values of S1, S2, S3, since for me $30 is set to 1000.

Consider if somebody had my exact laser, but they had a different GRBL configuration that only recognised discreet power levels in steps no less than 1% of the s-value max.

Mine runs a little lower,

That was one of my first tries.

I think thats it, the PWM Range of the Laser Module. After installing an Power measurement Display just for the Machine I could notice a very light diffrence between 0.01% and 1% of 0,8Watts.
Before that, I used a Watt-meter adapter Plug, it was to inaccurate I assume.

So my initial posting is wrong, it does accept low values. Problem remains the same, it burns :smile:
I know its technically possible to fire the laser at very low power, since my old machine was a Neje. Though I have no idea what board/chip is used there.
I will try to get another driver, for now, I helped myself with that ugly thing.

Thanks for the quick and neat replies.

Theoretically, unless it’s an 8bit system, for the maximum resolution you can set your $30 and S-value Max to 1023, this means that for every 0.1% power in LightBurn you should be getting a different power level signal sent out from the GRBL control board.

Whether in your case the Laser module is receiving this signal correctly - and can use that full range to drive the laser is another question.

Maybe your laser module would work better if it was receiving the PWM signal at a different frequency? I think somewhere in GRBL the frequency can be changed? Mine is 1000Hz by default.

Actually it is a 8bit system I’d say ATMega328p. Did not see any benefit for me to switch to 32bit so far, so I kept it.

Thats what I think, another PWM frequency could do better. I played around while compiling with the cpu_map file. Inside is a line called “Prescaled, 8-bit Fast PWM mode”
Default is 1000Hz and there are some options to go up even to 62.5kHz. The higher I got the worse it worked. So if at all, I have to go down somehow. But theres no option to go below 1000hz.

With the 8bit chips you need set S-Value Max in LightBurn to 255 and for the GRBL parameters on the controller use the LightBurn console to set $30=255.

If you do that, then you should be on the right track again, you should be able to frame as low as 0.4% climbing in roughly 0.4% increments.

It would be very interesting to see the differences made by changing the frequency.

That chip has a 16bit timer also? No sure what the story is with that?

In think that $30 and S Max Value isnt doing much aslong as they are the same value. It will just get interpolated when setting values higher than 255 I guess.

However, I played again with the PWM values while compiling. I wish I would know what I am doing :smiley: But it is the right way. No idea about 16bit 8bit anything. I do it the Elon way, trial and error.
I am on 500Hz now I think and managed to move from 3W minimum to 2.5W minimum. Still burning though…
A nice little extra is that it seems to enhance cutting ability. I did a test cut to check if 100% is still “100%” and instead of 10 passes it was done in 7 or 8…

Dont ask about what I cut, it is horrible 5mm Wood. Cut it very fast and with a lot of passes or it starts burning inside.

What I know is, setting the PWM frequency is done by Timers that can be devided with each other to get the result you want. But I dont understand how it works to be honest.

Excuse me, but I still don’t get it…

Whatever math manipulations you do via the software, you have to put two values in the pwm generator in the micro… both are 8 bit values meaning you only have 256 states/steps resolution.

In the end you cannot have a fraction for one of the registers… that limits the resolution to 1/256…

I can’t under how you could expect higher pwm resolution than 1/256 with 8 bit hardware…

You might move the end posts $30 value, but in the end you are stuck with what the hardware can produce… based on 1/256 resolution. The software has to put values in these registers and the must be integers with a 0 to 255 limit.

If you can do this, which I’m still not convinced, I’d like to see it on a scope… where the pwm is actually 0.1/256 on the output.

I have to be missing something here…

On a completely different note… this is my NEJE 40630 module… notice the pwm limits… :thinking:

I know many think it’s a typo… but is it?


So you may know how to set the working PWM frequency in the cpu_map file?

#define SPINDLE_TCCRB_INIT_MASK (1<<CS22) | (1<<CS20)

that should set it to 500Hz. I would gladly try even lower values

Hi Jack,

I agree that if it’s an 8-bit PWM, then 256 steps of resolution is all you can get. On a scope I know that the pulse length/duty% is not going to be manipulated by LightBurn settings to be smaller than 1/256.

When I was mentioning fractions like 0.4% for 8-bit, (or 0.1% because I didn’t realise earlier in this thread that it was 8-bit since $30=1000 in their settings), I am referring to the software side, and the fraction in this context relates to the 1 to 100% power scale in LightBurn.

For example, if I have 0-255 levels of power available to me at the 8-bit PWM, then I would expect to be able to use power values in LightBurn as low as around 0.39% (since 100/256 = 0.39).

Similarly, if I have 0-1023 levels of power available to me via a 16-bit PWM generator, and if I happened to have S-Value max at 1000 and $30=1000, then I can expect to be able to use power values in LightBurn as low as 0.1%.

That makes sense… thanks… had me going…


Not a solution but as a workaround have you thought of putting laser out of focus (Z axis raise) for the framing?

Hehe that was the final solution of the chinese seller. Works but not very satisfying.

I try (1<<CS22) | (1<<CS21) | (1<<CS20) now in the cpu_map config while compiling.
That makes the laser spot very weak, like 0,1 Watts. Fires from 1,2% and up.

However I will probably order a 32 bit board. Not because of this problem here but I noticed annoying slowdowns while engraving. Maybe it gets solved this way as well.