Skip to content

Cooling and fans

The tube is water-cooled and the enclosure is air-cleared, and both matter while the laser fires. ForgeFIRM runs this as one service, the cooling engine, that owns every piece of thermal hardware and answers one question for whichever controller is running: is it safe to fire right now? This page tells you what you can tune, how to turn a gate off, and what the machine does when.

Read the Safety page first

ForgeFIRM is not the manufacturer's firmware. Read Safety before you run a job.

How the engine decides (the fan phases, coolant flow verification, the over-temperature tiers, the airflow gates, the fire watch, and the crash watch) is in The cooling engine. The hardware itself is in Coolant and airflow. The two flow tools on the Diagnostics tab are in Diagnostics.

In GRBL mode the cut fan profile follows your sender's M8/M9, OR'd with the armed window (GRBL mode). In cloud mode the job's own header carries the fan duties (Cloud mode).

Settings

All of these live in the panel's Machine tab, are validated on entry, and can only be changed while the machine is idle. The engine re-reads them at the start of every run, so a change takes effect on your next job. Blank fields use the built-in values, shown as placeholders.

Setting Default Legal range Recommended What it controls
cool_flow_rise 14.4 °C 1 to 40 °C 8 to 16 °C Downstream rise that counts as no-flow. Set this from flow calibrate; above the band the check can never fault.
cool_flow_heater_pct 40 % 0 to 100 % Heater duty during a check. Raising it separates the bands further at the cost of warming the loop more.
cool_flow_check_s 50 s 0 to 300 s 30 to 120 s Length of a check window. 0 turns flow verification off (below, "Turning a gate off").
cool_recheck_s 150 s 0 to 3600 s 60 to 600 s How often checks repeat during a job. 0 turns the mid-job re-check off (below, "Turning a gate off"): a pump that stops mid-job is then undetected until the next job start.
cool_confirm_max_s 480 s 60 to 3600 s How long a suspicion may stay unresolved before it escalates to a fault.
cool_temp_max 33 °C 5 to 60 °C 25 to 38 °C Run ceiling: above it, hold. 60 turns the gate off.
cool_temp_resume 31 °C 5 to 59 °C 20 to 36 °C Resume gate: below it, continue. Always kept below the ceiling.
cool_temp_critical_c 38 °C 6 to 70 °C 36 to 45 °C Critical line: a fault with no resume in the job. Kept above the ceiling while the ceiling is a gate (a ceiling at 60 leaves the line standing alone); 70 turns the gate off.
cool_cooldown_s 15 s 0 to 1800 s Smoke-clear phase at run duty after a job.
cool_cooldown_max_s 300 s 0 to 1800 s Cap on the thermal cooldown phase.
cool_tach_exhaust_min_rpm 6400 rpm 0 to 20000 5800 to 7000 Exhaust fan floor at run duty. 0 turns the gate off.
cool_tach_intake_min_rpm 2290 rpm 0 to 20000 2100 to 2500 Intake fan floor, either intake. 0 turns the gate off.
cool_tach_air_assist_min_rpm 6000 rpm 0 to 30000 5500 to 6600 Air-assist fan floor. 0 turns the gate off.
cool_purge_min_current 300 raw 0 to 1023 150 to 500 Purge-air fan current floor (the fan has no tachometer; about 1 off, about 630 on). 0 turns the gate off.
cool_fan_grace_s 15 s 0 to 120 s 5 to 30 s Spin-up window after the run profile is written, during which no floor counts.

The shipped fan floors are 55 percent of the steady speed each fan reaches at the cut profile on the bench reference (exhaust 11640, intakes 4160, air assist 11050 rpm); the recommended bands are 50 to 60 percent. A machine whose fans read differently sets its own floors.

The other gate settings on the Machine tab

The same tab carries the coolant floor and warm-up gate, the TEC, the lid-IR flame watch, and the head-accelerometer crash watch. Each is a plain number with the same range, band, and off-end rules as the table above. The cooling engine describes what each gate does.

Setting Default Legal range Recommended Off at What it controls
cool_temp_min 5 °C 0 to 40 °C 3 to 8 °C 0 Coolant floor, a fire gate; it clears 1 °C above itself.
cool_temp_start 16 °C 0 to 40 °C 12 to 20 °C 0 Warm-up gate: a session opening under it holds with the loop heater on until the coolant reaches it. Kept above the floor.
cool_tec_present 0 0 or 1 Whether a thermoelectric cooler (a Pro's chiller) is fitted. The line has no readback, so this is the operator's word; leave it 0 on a Basic or a Plus. The setup's TEC check proves the drive and clears it when nothing cools (Commissioning).
cool_temp_offset_c 0 -5 to 5 C Added to both coolant readings after the conversion: the per-machine offset from one room-thermometer reading in the setup's sensors check.
cool_tec_on_c 20 °C 6 to 32 °C 18 to 24 °C never TEC on threshold (upstream coolant reading). Kept above cool_tec_off_c.
cool_tec_off_c 18 °C 5 to 31 °C 16 to 22 °C never TEC off threshold. The TEC runs only while the fans run, and never within a degree of the coolant floor.
cool_fire_q1_alert 275 0 to 1023 250 to 450 0 Flame watch, lowest sorted lid-IR reading: the pause tier.
cool_fire_q1_critical 688 0 to 1023 500 to 1023 0 Flame watch, lowest reading: the fail tier. Kept above the alert.
cool_fire_q2_alert 374 0 to 1023 300 to 500 0 Flame watch, second-lowest sorted reading: the pause tier.
cool_fire_q2_critical 1022 0 to 1023 500 to 1023 0 Flame watch, second-lowest reading: the fail tier. Kept above the alert.
cool_accel_x_alert 132 0 to 255 100 to 170 0 Crash watch, head-accelerometer X high event: the pause tier.
cool_accel_y_alert 112 0 to 255 85 to 145 0 Crash watch, Y high event: the pause tier.
cool_accel_abort 133 0 to 255 100 to 170 0 Crash watch, shared abort: the fail tier.

The crash-watch values are the sensor's register units (about 64 per g); the defaults are the factory's own, about 2 g, far above normal motion. The flame-watch defaults are the factory's thresholds and sit far above a fully lit lid lamp.

Three tunables ride with the readings and are not gates:

Setting Default Legal range What it controls
cool_aa_offset_counts 0 0 to 60 The air-assist fan's shift on both coolant readings, in ADC counts, taken off while the fan runs. The coolant offset diagnostic measures it and Apply writes it (Diagnostics). Zero is the factory behavior, which never corrected the shift.
cool_laser_heat_cw 3.06e-5 0 to 2e-4 The tube's share of a flow-check heater rise, in °C per raw-second of tube current, under the analog power model.
cool_laser_heat_density 2.36e-5 0 to 2e-4 The same share under the density power model (the model every machine runs).

GFCOOL_* environment overrides exist for bench work; they win for the lifetime of the process and are not a normal operating path.

Turning a gate off

The gates are settings, and the far end of a gate setting's range is the off switch: a coolant ceiling of 60 °C never trips, a check window of 0 s runs no flow verification at all, and a fan floor of 0 never trips. There is no other switch, and no list of names to get wrong. The ranges are wide on purpose: the shipped defaults and the recommended bands come from the bench reference, and a machine whose loop or sensors read differently changes the number rather than waiting for new firmware.

A gate that is off is not a gate that is forgotten. The panel flags any value outside its recommended band beside the field and says "this gate is OFF" at the far end; the Status tab shows a standing banner while any gate is off; the engine logs one line per gate setting at every run start, and with the ceiling off it still logs the first reading in a job that would have tripped the default. /status and /cool/status carry the off gates as gates_off. Nothing about it reaches the cloud service.

What no setting can reach: the hardware safety chain, the laser latch, the emission witness, the controller-silence dead-man, and the motion-liveness gate. A machine with every thermal gate off still stops firing the moment its controller goes quiet; what it no longer does is hold a job for a stopped pump or an overheating loop. The banner says so.

Quick reference: what the machine does when

Situation Machine response
Idle Pump on, purge air on, fans at idle, heater off, TEC off.
Job starts (or the laser arms) Cut airflow, flow check requested once the loop is settled.
Flow check over limit, first time SUSPECT: warning, hold, immediate re-check.
Second consecutive over limit FAULT: fire gated, hold stands until you resolve it.
Suspicion unresolved past the budget Escalates to FAULT.
Three cleared suspicions in one job Aggregated "check your coolant" warning.
Upstream coolant above 33 °C OVERTEMP: hold + forced cooling; auto-resume under 31 °C.
Upstream coolant at or over 38 °C during a job CRITICAL: fire blocked, hold, no resume this job (a resume under it is held again within a second; reset the job); the ceiling's hold stands until the loop is under 31 °C.
Coolant under cool_temp_min COLD: fire blocked, hold; released a degree above the floor.
A session opened under cool_temp_start WARMUP: hold with the loop heater on and the fans idle until the gate is reached, then the run starts with a flow check.
A coolant sensor unreadable for two ticks in a row SENSOR: fire blocked, hold, heater off; released the moment both sensors read again. The other coolant gates keep their state meanwhile.
Lid IR over an alert threshold for two ticks FLAME: hold, fire blocked; released once the reading is back under the alert for five ticks.
Lid IR over a critical threshold FIRE: motion stopped, laser locked, hold until the next run session.
Head accelerometer over an alert threshold BUMP: hold, fire blocked; released after five quiet polls.
Head accelerometer over the abort threshold CRASH: motion stopped, laser locked, hold for the rest of the run session.
A fan under its floor inside the spin-up grace Nothing yet: the gate reads grace.
A fan under its floor for three seconds after the grace AIRFLOW: fire blocked, hold, no resume this job (a resume under it is held again within a second; reset the job); fans held at run duty; the next job starts the gates fresh.
Purge-air current absent at run duty AIRFLOW, the same way.
A gate setting at its off end (ceiling 60 °C, check window 0 s) No verdict from that gate; a run-start log line, gates_off in /status, and a standing panel banner.
Job ends 15 s smoke clear at run duty, then reduced airflow until the loop is under the resume gate.
Controller stops reporting Fire blocked at once, stand-down through cooldown.
Silence while armed, or a program still playing Motion stopped and the latch locked by the engine itself.
Verdict file missing or stale The controller treats it as fire-blocked and holds.
Diagnostic running Engine suspends its writes and publishes fire-blocked.
Engine gone while armed Controller writes factory run duties once, holds, stands down.

Expect a legitimate suspicion on the first checks after manually stopping and starting the pump. That is an airlock; the two-step decision absorbs it, and it clears on its own. Troubleshooting tells you what to do about each verdict.