ESP32 Heater Controller
Table
| Rail | Source | Expected Voltage | Tolerance | Measure At | Initial Current Limit | Pass Criteria |
|---|---|---|---|---|---|---|
| VBUS_RAW | USB-C J1 / bench supply | 5.0 V | +/-5% | J1 VBUS, U4 VIN | 50-100 mA logic-only | Stable 5 V, no overheating |
| 5V_PROTECTED | U4 MP5036 eFuse output | 5.0 V minus small drop | +/-5% | J2-J5 pin 1, U3 VIN | 50-100 mA first, then staged | Tracks VBUS, no eFuse cycling |
| 3V3 | U3 AP63203 buck output | 3.3 V | +/-5% | U1 3V3, J6 pin 2, J7 pin 2 | 50-100 mA first | 3.135-3.465 V, low ripple |
| STUSB_VREG_2V7 | U2 internal regulator | ~2.7 V | Datasheet limit | U2 decoupling cap | Logic-only | Present when U2 powered |
| STUSB_VREG_1V2 | U2 internal regulator | ~1.2 V | Datasheet limit | U2 decoupling cap | Logic-only | Present when U2 powered |
Table
| Signal | Net | Expected State | Measure At | Notes |
|---|---|---|---|---|
| ESP32 enable | ESP_EN | High during run, low when S2 pressed | U1 EN | R3 10k pull-up, C11 reset cap |
| ESP32 boot | ESP_BOOT | High during normal boot, low when S1 pressed | U1 GPIO0 | R4 10k pull-up |
| Heater gate 1 | HEATER1_GATE / HEATER1_PWM | Low at reset and boot | Q1 gate, U1 GPIO10 | Verify no ROM boot pulse turns heater on |
| Heater gate 2 | HEATER2_GATE / HEATER2_PWM | Low at reset and boot | Q2 gate, U1 GPIO11 | Verify no ROM boot pulse turns heater on |
| Heater gate 3 | HEATER3_GATE / HEATER3_PWM | Low at reset and boot | Q3 gate, U1 GPIO12 | Verify no ROM boot pulse turns heater on |
| Heater gate 4 | HEATER4_GATE / HEATER4_PWM | Low at reset and boot | Q4 gate, U1 GPIO13 | Verify no ROM boot pulse turns heater on |
| I2C | I2C_SCL/I2C_SDA | Idle high at 3.3 V | J6 pins 4/3 | R7/R6 4.7k pull-ups |
| PD alert | PD_ALERT | Normally high, low on alert | U1 GPIO38 / U2 ALERT | R8 4.7k pull-up |
Table
| Connector | Type | Pins to Verify | Test Method |
|---|---|---|---|
| J1 | USB-C | VBUS_RAW, GND, CC1/CC2, USB_D_P/N | Continuity, USB enumeration, ESD part orientation |
| J2 | Heater 1 terminal | 5V_PROTECTED, HEATER1_LOW | Dummy load at 25 Ω, PWM test |
| J3 | Heater 2 terminal | 5V_PROTECTED, HEATER2_LOW | Dummy load at 25 Ω, PWM test |
| J4 | Heater 3 terminal | 5V_PROTECTED, HEATER3_LOW | Dummy load at 25 Ω, PWM test |
| J5 | Heater 4 terminal | 5V_PROTECTED, HEATER4_LOW | Dummy load at 25 Ω, PWM test |
| J6 | Qwiic I2C | GND, 3V3, SDA, SCL | I2C scan, OLED/display test |
| J7 | UART/debug | GND, 3V3, TXD0, RXD0 | 3.3 V UART echo/debug |
Table
| Interface | Signals | Connector | Tool |
|---|---|---|---|
| Native USB | USB_D_P, USB_D_N | J1 USB-C | PlatformIO / esptool |
| Boot buttons | ESP_BOOT, ESP_EN | S1, S2 | Manual bootloader entry |
| UART fallback | UART_TXD0, UART_RXD0 | J7 | 3.3 V USB-UART adapter |
Table
| Test | Components | Input | Expected Output | Pass Criteria |
|---|---|---|---|---|
| Safe boot | U1, Q1-Q4 | Power cycle/reset | Heater PWM low | All heater gates remain low |
| NTC readback | RT1-RT6 | Room temperature | Plausible ADC temperatures | All readings within room temp +/- expected tolerance |
| NTC fault open | RT1-RT6 | Simulate open | Fault state | Heaters disabled/latch off |
| NTC fault short | RT1-RT6 | Simulate short to GND | Fault state | Heaters disabled/latch off |
| Encoder | SW1 | Rotate/push | Counts/button state changes | No false stuck state |
| LEDs | D2-D4 | Firmware color test | RGB indicators | Correct active-low behavior |
| Heater channel 1 | Q1/J2 | 25 Ω dummy load | PWM current modulation | 0%, 10%, 50%, 100% work |
| Heater channel 2 | Q2/J3 | 25 Ω dummy load | PWM current modulation | 0%, 10%, 50%, 100% work |
| Heater channel 3 | Q3/J4 | 25 Ω dummy load | PWM current modulation | 0%, 10%, 50%, 100% work |
| Heater channel 4 | Q4/J5 | 25 Ω dummy load | PWM current modulation | 0%, 10%, 50%, 100% work |
| All heaters | Q1-Q4/J2-J5 | Four dummy loads | ~0.8 A heater load | Rails stable, components cool |
| WiFi load | U1 | WiFi active | No brownout | 3V3 stable during RF peaks |
| PD 5 V source | U2/J1 | PD charger after NVM verification | 5 V contract only | VBUS remains 5 V |
Table
| Measurement | Location | Expected Value | Instrument |
|---|---|---|---|
| USB input | VBUS_RAW to GND | 5.0 V | DMM/scope |
| Protected heater rail | 5V_PROTECTED to GND | ~5.0 V | DMM/scope |
| Logic rail | 3V3 to GND | 3.3 V | DMM/scope |
| Heater current per channel | J2-J5 with 25 Ω load | ~200 mA at 100% | DMM/current probe |
| Total heater current | 5V_PROTECTED source | ~800 mA at 4 channels 100% | Current probe/supply |
| MOSFET temperature | Q1-Q4 | Comfortably below package limit | Thermal camera |
| eFuse temperature | U4 | No thermal cycling at normal load | Thermal camera |
| Buck temperature | U3/L1 | Stable under WiFi/display load | Thermal camera |
Table
| Test Section | Result | Notes |
|---|---|---|
| Visual Inspection | [ ] Pass / [ ] Fail | |
| Power Rails | [ ] Pass / [ ] Fail | |
| Critical Signals | [ ] Pass / [ ] Fail | |
| Connectors | [ ] Pass / [ ] Fail | |
| Programming | [ ] Pass / [ ] Fail | |
| Functional Validation | [ ] Pass / [ ] Fail | |
| Thermal Validation | [ ] Pass / [ ] Fail | |
| Fault Tests | [ ] Pass / [ ] Fail |
Prerequisites
1. Visual Inspection
2. Power Rail Verification
3. Critical Signal Verification
4. Connector and Interface Tests
5. Programming and Debug Interface
6. Functional Validation
7. Expected Measurements Reference
8. Destructive-Risk Tests to Run Carefully
Pass/Fail Summary