SYS.DOCS // V1.0.4

TECHNICAL MANUAL.

// Comprehensive architecture breakdown, schematic references, and firmware logic for the BenchCore hardware platform.

Hardware Topology

The BenchCore system is built around a distributed processing and power regulation architecture. The primary logic is handled by an ESP32 WROOM-32 microcontroller operating on a FreeRTOS dual-core scheduler. Core 0 is strictly dedicated to critical safety loops and I2C/SPI sensor polling, while Core 1 handles MQTT cloud telemetry and WebSocket overhead.

[1] Power Regulation (XL4016)
Primary buck conversion is driven by dual XL4016 ICs, stepping down a 24V/10A primary rail to 1.25V-20V variable outputs. PWM control is completely bypassed in favor of analog feedback manipulation.
[2] Digital Potentiometers (MCP4131)
Voltage regulation is achieved by injecting resistance into the XL4016 feedback loop via SPI-controlled MCP4131 digital potentiometers (10kΩ/100kΩ variants, 128-step resolution).
[3] Telemetry Sensors (INA219)
High-side voltage and current monitoring is executed via I2C using INA219 ICs with a 0.1 ohm shunt resistor, sampled every 100ms.

Safety E-Stop Logic

Safety is enforced at the hardware level. The system utilizes a 10K NTC thermistor mechanically bonded to the primary XL4016 heatsink. If thermal limits (default 55°C) are breached, the hardware cuts power instantly via 5V logic relays, independent of the cloud connection.

// firmware/safety_loop.cpp
if (heatsinkTemp > MAX_SAFE_TEMP) { digitalWrite(RELAY_PIN_1, LOW); // CUT LOAD digitalWrite(RELAY_PIN_2, LOW); // CUT LOAD systemState = STATE_THERMAL_LOCKOUT; mqtt.publish("benchcore/alerts", "ERR_THERMAL_BREACH"); // Require physical button press to clear while(!digitalRead(RST_BTN)) { delay(10); } }

MQTT Data Protocol

Telemetry is packaged into minimal JSON payloads and broadcast to a HiveMQ broker over WebSocket Secure (WSS) on port 8884. The payload size is kept strictly under 128 bytes to prevent heap fragmentation on the ESP32.

// Topic: benchcore/telemetry/P1
{
  "v": 12.4,
  "i": 1.85,
  "w": 22.94,
  "t": 42.1,
  "st": 1 // 1=Online, 0=Cut
}