mirror of
https://github.com/openglow-org/forgefirm.git
synced 2026-09-27 16:51:12 -07:00
Prove the density-only model; record the rasters and the decision
The stream harness keeps the analog rendering as the host-test conservatism reference (rule 13's mask, the duty ladders) and drops the M101 switch sessions; rule 18 stays as the derived-floor proof, now satisfied from boot by the precompute. The lifecycle harness's state-files scenario asserts the derived floor is in $$ before any arm. The catalog's laser.power-model-switch goes and laser.power-floor reads the one floor key with no M-code needed. The mswitch drill goes; the m4corner drill becomes a single density pass; the dpatch drill returns to density only. The CAMPAIGN-LOG records the first rasters (254 and 508 DPI grayscale wedges: tonality held to ~14 pulse slots per pixel, no dither artifact, one benign stale-verdict suppression under CPU starvation) and the decision that ends the analog mode - the strike transient fires a spot at every beam-on, and the finish comparison found no advantage. BRINGUP, LIGHTBURN, MOTION and SAFETY describe the density-only present.
This commit is contained in:
+13
-30
@@ -147,38 +147,21 @@ restart the controller with the head re-parked.)
|
||||
- **Console tab**: raw grbl — `?` status, `$$` settings, `$X` unlock,
|
||||
`$J=G91X10F1200` jog.
|
||||
|
||||
## Power models
|
||||
## Power
|
||||
|
||||
The controller has two ways to turn a layer's power into light, and a job
|
||||
can pick either.
|
||||
The controller drives the tube the way the factory does: every pulse
|
||||
fires at full power, and the power setting decides how many ticks of
|
||||
each 710 us period fire. Every power level marks, low levels included,
|
||||
because no pulse is ever too weak to strike. The response is not linear:
|
||||
on this machine 80 % gives about half the light of 100 %, 60 % about a
|
||||
third, 30 % about a fourteenth - so pick engrave power by test card, and
|
||||
prefer setting darkness with speed. Grayscale images fade cleanly into
|
||||
the shadows (a low level becomes sparse full-power pulses), and 254 to
|
||||
508 DPI rasters hold their tonal steps.
|
||||
|
||||
- **Density** (the default): every pulse is full power, and the power
|
||||
setting decides how many ticks of each 710 us period fire. This is what
|
||||
the factory does. Every power level marks, low levels included, because
|
||||
no pulse is ever too weak to strike; the trade is that the response is
|
||||
not linear: on this machine 80 % gives about half the light of 100 %, 60 %
|
||||
about a third, 30 % about a fourteenth.
|
||||
- **Analog**: the beam runs continuously and the power setting sets the PWM
|
||||
duty. Close to linear above 30 %, with a floor at the duty the tube lases
|
||||
at (16 %), below which nothing marks. The finish on acrylic is the same
|
||||
as density's.
|
||||
|
||||
The default model is set on the control panel (GRBL tab, "Laser power
|
||||
model"). A job selects its own with a line in its G-code, with the laser
|
||||
off:
|
||||
|
||||
M5 ; beam off (the switch is refused while the spindle is on)
|
||||
M101 P0 ; analog for this program (M101 P1 = density)
|
||||
M3 ...
|
||||
|
||||
Put it in the job's start G-code (Edit -> Device Settings -> GCode -> Start
|
||||
G-Code in LightBurn) or between sections of a job. It reverts to the panel
|
||||
default when the program ends (`M2`) or on Stop, so a job never leaves the
|
||||
machine in a model you did not pick; `M101 P0 Q1` typed in the Console
|
||||
sticks until the next `M101` or a controller restart. The console reports
|
||||
every switch and every arm with the model and its floor, and `$35` (the
|
||||
power floor) is set by the controller from the selected model: do not type
|
||||
it, it is overwritten at the next job.
|
||||
`$35`, the power floor, is set by the controller from the machine config
|
||||
(the control panel's GRBL tab, "Laser dose"): do not type it, it is
|
||||
overwritten at every job.
|
||||
|
||||
## Air assist / fans
|
||||
|
||||
|
||||
Reference in New Issue
Block a user