Banshee toning on any laser (not just RF)

Here’s a breakdown of making toning work on DC-excited CO2. Practical experiments show it works very well. What we’re going to do is pervert the system’s grayscale mode by lowering the Ruida’s PWM freq so far down relative to its speed that it’s creating a regular pattern of fixed-spatial-period, continuously-variable-duty dashes that represents much more detail that any dithering method. The goal is to get a proper software solution that isn’t a PWM hack- as crazy as this sounds, it’s not actually more data than existing dithering.

Right now it really needs a potentiometer for current control, since the power PWM gets commandeered to do the dithering instead. Ultimately it would not need to work this way.

There is a fundamental speed limit- it’s not the power, it’s the bandwidth of the tube. An RF-CO2 laser can actually modulate its output at 20KHz. A diode can switch very fast too. Practical experiments on this Reci W6 show it’s about 500Hz. I got the best results at 300Hz.

First, we need to determine line interval (LI, same as focal spot size). This machine has a 2.5"FL lens and has a pretty coarse 0.25mm spot, but will still produce amazing image quality. The material must be very flat and well-focused, otherwise the widening spot size will smear this up (like any dithering method)

From there, we need a spatial period of dashing about 1.333x the LI. So we’re at 100mm/sec and using 300Hz, resulting in a 0.333mm spatial period. Smaller results in virtually no unburned area once the spot starts to burn, whereas a notably longer period (>1.875x LI) makes visible dashes. Now, the “power” is being modulated at 300Hz, with a spatial period of 0.333mm. The “Power” is NOT controlling the power anymore while the beam is firing. It is critical to understand this part, it’s the core of the principle and perverting the normal laser control mechanisms.

This is where it’s pretty important to have a current potentiometer on the supply to avoid overburning- I turned the W6 tube from the factory 26mA recommendation to 9mA and got really, really good results. Again, adjusting Max/Min Power can’t actually adjust the power- these are controlling duty on the dash.

Two notable effects. As the duty approaches 100%, the dashes merging are coming up less linear.
And on the Reci W6, the beam is slow to start. Now I have 16% Min Power set IN THE RUIDA CONFIG. So I set “max power” (again, not actually the power) at 70% and “min power” on the layer (in addition to the 16% min powerRuida config) at 20%. Below that, light tones don’t fire long enough at 9mA to start the lasing and make a burn, which would create a dead spot at the low end of the response curve.

Does RF respond better? Well hell yeah. Mine’s about 0.20mm LI, and I’m currently capped at 1500mm/s. The beam can modulate actual output at 4KHz no problem, making a 0.375mm spatial period (1.875x the LI) that was working quite well. Downside, no potentiometer to control beam power, so it does tend to overburn.

This is a 240mm x 175mm example done on the Reci W6 machine turned to 9mA with the enclosed project. 300Hz, 16% min power/100% Max in Machine config.

Here’s the thing- trust me- you can use Enhancement, but DO NOT touch the brightness/contrast/gamma UNLESS the original photo has an actual problem in its b/c/g. When the burn parameters are right, it will very literally render any photo as the photo is. If it’s not right yet, then adjust the current potentiometer and min/max power settings for the process, rather than tweaking the photo. The line interval should always be the beam’s spot size (which can shrink when the power is reduced or speed is increased). I don’t have a comprehensive picture of DC-excited tube bandwidths but about 300Hz is probably going to be the case for these and we want to keep this freq as high as the tube will resolve. The speed needs to be =(LI*n*freq), where 1.333<=n<=2.0.




einstein300hz.lbrn2 (994.8 KB)

Wow, what a picture :slightly_smiling_face:
Understand a lot of what you’re saying(not all) but interesting… :+1:

Another great toning, on a W6 DC-excited tube:

So, the implementation looks like it could be pretty straightforward to implement from existing code. This is just creating dashes of variable width based on a cell’s average grayscale value. We also want to avoid alignment of lines, as it may cause Moire patterns. While it is correct to offset the even and odd lines, this may still give rise to Moire because backlash may not be entirely compensated out, and may be variable.

This could simply start from the output of the grayscale code, which, after scale/rotation/etc resamples at line interval resolution in vertical and horizontal. That’s already slightly higher resolution than the algorithm will ultimately use for horizontal resolution, so it will just blend portions of 2-3 adjacent grayscale pixels and calc a dash length from it. It might be slightly better starting from higher resolution but this is the quick path and should be fine. So this just needs to be reprocessed to dashes.

In addition to the speed, power, and line interval, we need 3 values and two buttons and an eval report of the parameters used.

  1. A spatial period value, best stated in % of LI. This is 1.25x-4x in my experience.
  2. Max and min periods produced. Again I think % of duty is simpler and more meaningful than an absolute length. In “normal” mode, say we give it 70%/5%, then 0x00 (solid black)=70% 0xff (solid white)=5%.
  3. An option to dither a minimum-width dash. This button would replace the “normal” min-width with dithering of a min-width dash, and shifts the shade for min width away from 0xff. That is: The dash scale is 0x00 (solid black)=70%, 0xed =5% (note this part moved). But anything lighter than 0xed is represented by a proportional probability of a 5% dash. eg. 0xf6 is halfway between 0xed and 0xff and comes with a 50% probability of the 5% min-duty dash appearing in that cell.
  4. a small randomization mechanism to vary the PWM’s spatial period slightly so start points will not “sync up” between adjacent lines, which can create Moire-like patterns. It might be 5%-25%.

Note: “dot width compensation” is not needed here. That is already under control by the max duty parameter.

I’ve put considerable thought into the Image Adjust preview. I don’t think it’s worthwhile trying to represent the dashes here with variable-width rectangles, unless it’s somehow easier that way. Rather, just display grayscale image again. But the horizontal scale should be resampled to the new spatial period, meaning we don’t have square pixels anymore. Randomization of the duty cycle doesn’t need to be represented here in the preview at all. The min-width dithering could be represented by dithering a pixel that corresponds to the lightest grayscale value for a min-width dash and, again, randomly decides to make it that value or white. But, in all fairness that feature may not be the highest value for the work.

The eval report would give:

  1. The PWM spatial period and time frequency. This is important for DC-excited tubes, as their output doesn’t switch effectively past about 500Hz. 300Hz seems best results. It’s important to consider both the speed and spatial period to meet the tube’s switching bandwidth. Often this means slowing down the beam and lower the power so it switches effectively. In fact we like to go as fast as the machine can, so once I have say a 0.37mm dash period and want to switch the tube at 300Hz, I’d use that as the starting point and get 111mm/s as a line speed and set that along with the power.
  2. PWM min/max duty lengths (mm or in) and time (microseconds). Not essential, but good to understand.

Side explanation: there’s actually two modes of doing this. One, we have the basic toning solution described above, with LI=dot width.

But also (in this case you’d turn off PWM period randomization) you could use this for one of two “true” offset patterns. That is is, you could change to LI=1/2 the dot size, and limit the max duty to 50% what it might otherwise be (e.g. 35% instead of 70%). So, with dash periods limited to covering less than half the line, and the next offset line will only step up vertically by half a dot width but will not overlap with adjacent lines because dash coverage is under 50% and it’s offset.

The other would be a more “true” offset- the start points need to be an equilateral right triangle, so LI=0.866 the dot size.

But, after thinking over the task, these DON’T need to be in the interface anywhere. The fields initially described give all the control needed to do these two other methods.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.