Fan and power path
Select the switch topology around the actual blower voltage and current. Handle startup surge, gate drive, clamping and loss of power as one control path.
PCBA PARTNER · ENGINEERING & APPLICATIONS
Combine fan switching, low-cost panel input, display rendering and differential-pressure diagnostics. Use measurements in context to support filter maintenance and a clear operating interface.
Select the switch topology around the actual blower voltage and current. Handle startup surge, gate drive, clamping and loss of power as one control path.
A resistor ladder can encode plus, minus and simultaneous-key states through one ADC. Account for tolerance, debounce and ambiguous combinations.
Differential pressure adds a useful diagnostic signal. A filter-maintenance indicator requires a measured relationship between pressure, fan setting and the air path.
Separate panel/UI requests from fan permission. The main controller can decode four requested levels while checking the power path and thermal conditions before applying a qualified duty or voltage setting. Four UI levels do not imply 25/50/75/100% duty.
Review PMOS pin order, logic-level gate drive, gate clamps, ESD current paths and connector polarity. These details matter when a motor load and user-facing interface share the same low-cost controller.
The example three-key panel uses 10 kΩ / 10 kΩ / 22 kΩ resistors and an ADC ladder. Nominal 12-bit readings are approximately 4095 with no key, 2048 for plus, 2815 for minus and 1668 for both. Define acceptance windows from tolerances and the actual ADC reference.
A 128 × 32 monochrome display needs a 512-byte framebuffer. Keep rendering separate from transport; display unknown suction information as an unknown value. Check the complete module supply and pull-up network, rather than treating the controller IC name as the module specification.
The C-format pressure example uses address 0x58 and five bytes beginning at register 0x04. Decode the pressure word as signed 24-bit data and use the exact transfer function for the selected protocol revision. The older 0x6D format must follow its own register map.
For the documented V3.1 example: pressure in Pa = signed_raw / 2^21 × (PMAX − PMIN). The ±500 Pa profile has a 1,000 Pa span. Preserve signed arithmetic and rounding, reject out-of-range frames, and clear the previous result on a failed acquisition.
Build a baseline with a defined filter, fan setting and duct geometry. Compare later measurements under equivalent conditions. Pressure is not airflow or dust-capture efficiency; a percentage indicator needs an independently established relationship and an explicit operating range.
Track transport validity, frame freshness, calibration and airflow interpretation separately. A successful I2C transaction proves neither a new sensor sample nor a calibrated suction value. Use coherent debug snapshots when reading 64-bit results from a 32-bit MCU.
Treat read completion and physical freshness as separate timestamps. Begin a new acquisition by invalidating the old result; reject late completion, expired data and duplicate completion. Use wrap-safe elapsed time and an independent timeout so a recent host read cannot make an old sensor conversion look fresh.
Applications include desktop nail-dust collectors, local extraction tools and replaceable-filter appliances. Reuse the panel decoder, diagnostic snapshots, display renderer and acquisition/error paths; adapt the sensor range and maintenance model to the air path.
For 1,000 units, compare the pressure sensor, display module, blower, filters and assembly process together. An engineering adapter can help evaluate sensors without becoming a permanent extra board in every production unit.
Editable KiCad files, firmware, algorithms, BOM tables, interfaces and technical revision documents. The complete archive stores identical bytes once; historical ZIPs are expanded into .zip.contents folders. Its included restore.py reconstructs the technical file paths.
351 files · 7.8 MiB
SHA-256 d1e74b7861a5bcb05190ea1c8104a8fa7d5d9fa9ba29f9973a9cbe3b4cc1f04817498 files · 81.9 MiB
SHA-256 8d01eb775a94d93ab9ea4d80a05982b2ab701ad290f4e09ba2a1a2311a529d37