mirror of
https://github.com/openglow-org/forgefirm.git
synced 2026-09-27 08:41:13 -07:00
docs: the moved documents live on the documentation site
INSTALL.md, SERIAL.md, docs/COOLING.md, docs/LIGHTBURN.md, docs/MOTION.md, docs/SAFETY.md, docs/UPDATE-SYSTEM.md, docs/VIDEO.md and their images are pages on https://docs.forgefirm.org/ now. Every reference in the README, BRINGUP, the kas config, the cold-build workflow, forgetest, and the bench scripts points to the site page. The README carries the beta banner. docs/ keeps BRINGUP.md and CAMPAIGN-LOG.md. No catalog consequence: the deleted files are documents, and the code changes are comment and help-text repoints only.
This commit is contained in:
@@ -40,7 +40,7 @@ page's takeover does that; from a host, stop them first.
|
||||
| `flow_characterize.py` | Coolant flow characterization using the factory temperature curve (board or host; forgectrl and controller stopped): baseline → flow → no-flow → recovery, printing the ΔT bands and their separation. Takes the heater duty as an argument (`flow_characterize.py 30`); aborts if downstream passes 45 °C. |
|
||||
| `flow_matrix.py` | **The flow-detection design matrix** (board or host; forgectrl and controller stopped; with `flow_sampler.py` from `/usr/share/forgetest/bench/`): duty × duration × flow/no-flow, every run from a common cooled baseline, interleaved repeats. One heating trace yields the metric at every candidate duration, so cost and precision come from the same 60 runs. Prints a cost table, a precision table (mean±sd, worst-case margin, d′) and a ranked shortlist. `flow_matrix.py [duties] [repeats]` (or env `FM_DUTIES`, `FM_REPEATS`, `FM_RESULTS`); results/log in the bench data directory, resumable. |
|
||||
| `flow_sustained.py` | Long-run test of the real re-check cadence via M8 (board or host; controller running): counts verdicts/false faults against the configured `cool_flow_rise` and tracks whether the loop accumulates heat. `flow_sustained.py [minutes]`. |
|
||||
| `temp_calibrate.py` (`supply-*` modes) | The power supply's sensor (`pic/pwr_temp`, raw) against a thermometer on its heatsink: `supply-watch`, `supply-point <C>`, `supply-fit`; the fit is printed beside `UAPI.md`'s unverified guess. Three points during a long cut settle it. |
|
||||
| `temp_calibrate.py` (`supply-*` modes) | The power supply's sensor (`pic/pwr_temp`, raw) against a thermometer on its heatsink: `supply-watch`, `supply-point <C>`, `supply-fit`; the fit is printed beside the documented unverified guess ([sensors](https://docs.forgefirm.org/technical/machine/sensors/)). Three points during a long cut settle it. |
|
||||
| `critical_tier_drill.py` | The coolant critical tier on a rising temperature (board or host): sets the ceiling, the resume gate and the critical line a few tenths above the live upstream reading and lets the engine's own flow-check heater warm the loop through them inside one `M8` session, expecting `OVERTEMP` at the ceiling and then `CRITICAL` (fire blocked, hold, no resume) with the fault ending at `M9`; restores the settings and cycles a session so the engine re-reads them. Results as JSON in the bench data directory. |
|
||||
| `aa_offset_check.py` | Coolant offset correction under the run airflow (board; controller running; dark, no press): M8 brings the fans to the run profile while the raw coolant counts, `/status` and the engine's readings are averaged before, during and after; with `cool_aa_offset_counts` at the machine's value the readings hold still while the raw counts step, at zero they drop by about a degree. `aa_offset_check.py [dwell_s]`. |
|
||||
| `offset_probe.py` | Coolant-sensor offset probe (board; forgectrl idle; dark, no press): switches one actuator at a time (exhaust at 100/50/25 %, intakes, air assist, purge, heater, pump, TEC, lid lamp, then all run fans) with both thermistors sampled at 25 Hz and scores the common-mode step at every edge and the level toggling inside every dwell; `offset_probe.py ladder` runs the air-assist duty ladder alone. Every value is restored on exit. JSON record in the bench data directory. |
|
||||
|
||||
@@ -14,7 +14,7 @@ board(cmd) run a shell command on the machine and return its stdout
|
||||
(local: sh -c; host: ssh, or the client named by GF_SSH,
|
||||
e.g. GF_SSH='wsl -d <distro> -- ssh').
|
||||
degc(raw) the factory B-equation coolant conversion
|
||||
(kernel-module-glowforge/UAPI.md).
|
||||
(docs.forgefirm.org, the sensors page).
|
||||
data_path(f) where a tool keeps its data files: FORGETEST_BENCH_DATA
|
||||
when set (the bench page passes <data>/bench/), else next
|
||||
to the tool.
|
||||
|
||||
@@ -12,7 +12,7 @@ full download with the GF1 header (magic at [1:4], total header length at
|
||||
[4:8], then 8-byte key/value records). Header settings (STfr, XSmm) override
|
||||
the --rate/--mode defaults when present.
|
||||
|
||||
Byte layout (kernel-module-glowforge/UAPI.md, hardware-verified):
|
||||
Byte layout (docs.forgefirm.org, the step engine page; hardware-verified):
|
||||
bit7 set -> laser power byte (low 7 bits = power, no steps this tick)
|
||||
bit0 X_STEP, bit1 X_DIR (set = -X)
|
||||
bit2 Y_STEP, bit3 Y_DIR (set = +Y)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"""Coolant temperature spot-check helper (runs on the board or from a
|
||||
host; gfbench: GF_HOST).
|
||||
|
||||
The raw->Celsius conversion in UAPI.md is the factory B-equation (10k
|
||||
The documented raw->Celsius conversion (docs.forgefirm.org, sensors) is the factory B-equation (10k
|
||||
B3380 NTC in a 10k divider behind a 1.3x gain stage, 10-bit ADC). This
|
||||
tool collects reference points - a measured real temperature paired with
|
||||
the machine's raw ADC readings - and fits a per-machine line to
|
||||
@@ -17,7 +17,7 @@ Usage:
|
||||
temp_calibrate.py supply-watch [seconds] the same for the power supply
|
||||
temp_calibrate.py supply-point <C> [note] sensor (pic/pwr_temp, raw):
|
||||
temp_calibrate.py supply-fit thermometer on the heatsink vs
|
||||
the raw count; UAPI.md's guess
|
||||
the raw count; the documented guess
|
||||
raw * 0.08715 - 21 is shown
|
||||
beside it. Points go to
|
||||
supply_calibration.json.
|
||||
@@ -40,7 +40,7 @@ SUPPLY_STORE = data_path('supply_calibration.json')
|
||||
|
||||
|
||||
def supply_guess_c(raw):
|
||||
"""UAPI.md's unverified guess for pic/pwr_temp."""
|
||||
"""The documented unverified guess for pic/pwr_temp."""
|
||||
return raw * 0.08715 - 21
|
||||
|
||||
|
||||
@@ -55,7 +55,7 @@ def supply_raw(samples=5, delay=1.0):
|
||||
|
||||
|
||||
def uapi_c(raw):
|
||||
"""The UAPI.md factory conversion (B-equation NTC behind divider + gain)."""
|
||||
"""The documented factory conversion (B-equation NTC behind divider + gain)."""
|
||||
return degc(raw)
|
||||
|
||||
|
||||
@@ -149,7 +149,7 @@ def supply_main(mode):
|
||||
if slope is None:
|
||||
print('points share one raw value; no fit')
|
||||
return 1
|
||||
print('fit: degC = %.5f * raw + %.2f (UAPI.md guess: 0.08715 * raw - 21)' % (slope, offset))
|
||||
print('fit: degC = %.5f * raw + %.2f (documented guess: 0.08715 * raw - 21)' % (slope, offset))
|
||||
worst = max(abs(p['measured_c'] - supply_guess_c(p['raw'])) for p in pts)
|
||||
print('the guess is off by at most %.1f C at these points' % worst)
|
||||
return 0
|
||||
|
||||
Reference in New Issue
Block a user