USB-C Temperature and Humidity Sensor Node Design

1:49

Evaluating unroutable fixes.

Running design review.

Analyzing the PCB layout.

Working.

Running design review.

Analyzing the PCB layout.

Addressing extraction issues.

我又做了一轮针对 unroutable 的可修复尝试,这次重点不是改原理图,而是先从 规则和可布通性 下手;这也符合 Flux 里先检查/设约束、再进入布线阶段的做法
这轮我已经改了
  • 3V3 从默认很宽的线宽收敛到更现实的 0.30 mm
  • VBUS_5V 设为 0.50 mm
  • 把相机关键线 CAM_XCLKCAM_XCLK_SRCCAM_VSYNCCAM_HREFCAM_D2 收紧到 0.15 mm / 0.10 mm keep out
  • PWM1~PWM4 收敛到 0.18 mm
  • UART0_RX 这类次关键控制线收敛到 0.15 mm
  • 之前已经把相机簇 X1U7C17C18R9 压紧放置过了
结果
  • airwires 还是 118
  • 说明问题已经不只是规则太保守,而是开始变成真实的几何拥挤/通道不足
我看到的核心原因
  • 现在 Layout 是 50 mm x 50 mm
  • 但布局统计给出的元件总包围盒约是 71.75 mm x 76.44 mm
  • 更关键的是,带路由净空估算后,routing-aware fill ratio = 90.7%, 已经是 overflow
  • 这意味着:即使把规则放松了一些,很多网线还是会因为器件间通道不够而继续 unroutable
结论 当前这批 unroutable,继续只靠“再放松一点线宽/间距”收益已经很小了。
更有效的修复方向只剩两类:
  • 方案 A:增大板子
    • 例如把板子从 50 x 50 mm 提到 60 x 60 mm65 x 65 mm
    • 这是最直接、成功率最高的修复
  • 方案 B:继续重排热点器件
    • 重点动这些:
    • 但这类修复不一定一次见效,而且风险比直接放大板框更高
我建议你现在选一个
  • 保守稳妥:我直接帮你把板子改大一点,优先消 unroutable
  • 坚持小尺寸:我继续帮你做第二轮热点重排,尽量不增大外形
如果你愿意,我建议下一步直接做:把 Layout 改到 60 mm x 60 mm,然后再看 unroutable 是否明显下降。
12 days

Updated 60 layout rules

0:02

Set 3V3's traceWidth to "0.30mm"

Set 3V3's minTraceWidth to "0.12mm"

Set 3V3's keepOut to "0.12mm"

Set 3V3's autoLayoutPriority to "9"

Set VBUS_5V's traceWidth to "0.50mm"

Set VBUS_5V's minTraceWidth to "0.20mm"

Set VBUS_5V's keepOut to "0.15mm"

Set VBUS_5V's autoLayoutPriority to "9"

Set CAM_XCLK_SRC's traceWidth to "0.15mm"

Set CAM_XCLK_SRC's minTraceWidth to "0.10mm"

Set CAM_XCLK_SRC's keepOut to "0.10mm"

Set CAM_XCLK_SRC's autoLayoutPriority to "10"

Set CAM_XCLK's traceWidth to "0.15mm"

Set CAM_XCLK's minTraceWidth to "0.10mm"

Set CAM_XCLK's keepOut to "0.10mm"

Set CAM_XCLK's autoLayoutPriority to "10"

Set CAM_VSYNC's traceWidth to "0.15mm"

Set CAM_VSYNC's minTraceWidth to "0.10mm"

Set CAM_VSYNC's keepOut to "0.10mm"

Set CAM_VSYNC's autoLayoutPriority to "10"

Set CAM_HREF's traceWidth to "0.15mm"

Set CAM_HREF's minTraceWidth to "0.10mm"

Set CAM_HREF's keepOut to "0.10mm"

Set CAM_HREF's autoLayoutPriority to "10"

Set CAM_D2's traceWidth to "0.15mm"

Set CAM_D2's minTraceWidth to "0.10mm"

Set CAM_D2's keepOut to "0.10mm"

Set CAM_D2's autoLayoutPriority to "10"

Set PWM1's traceWidth to "0.18mm"

Set PWM1's minTraceWidth to "0.12mm"

Set PWM1's keepOut to "0.12mm"

Set PWM1's autoLayoutPriority to "8"

Set PWM4's traceWidth to "0.18mm"

Set PWM4's minTraceWidth to "0.12mm"

Set PWM4's keepOut to "0.12mm"

Set PWM4's autoLayoutPriority to "8"

Set PWM2's traceWidth to "0.18mm"

Set PWM2's minTraceWidth to "0.12mm"

Set PWM2's keepOut to "0.12mm"

Set PWM2's autoLayoutPriority to "8"

Set PWM3's traceWidth to "0.18mm"

Set PWM3's minTraceWidth to "0.12mm"

Set PWM3's keepOut to "0.12mm"

Set PWM3's autoLayoutPriority to "8"

Set UART0_RX's traceWidth to "0.15mm"

Set UART0_RX's minTraceWidth to "0.10mm"

Set UART0_RX's keepOut to "0.10mm"

Set UART0_RX's autoLayoutPriority to "7"

12 days
增加盒子大小,至少保证能放下,
12 days

0:54

Analyzing the PCB layout.

Working.

已把板子放大到 90 mm × 90 mm,现在肯定放得下,且布线空间充足。
  • Layout 改为 90 × 90 mm
  • 仍保持 4 层板
  • 圆角保持 2 mm
  • 板边与 Keep Out 仍为 0.2 mm
现在的状态明显改善:
  • 元件总包围盒约 71.7 × 76.6 mm
  • 新板面积 8100 mm²
  • 元件占板面积约 18.3%
  • 已从“通道拥挤”变成“有比较充裕的布线空间”
下一步最合适的是继续做这两件事之一:
  • 重新整理器件分布,让关键连线更短
  • 继续针对 unroutable / airwires 做第二轮修复
如果你愿意,我就继续帮你压一轮布局,优先把相机、USB、电源、PWM 这几组再拉顺。
继续优化布局
处理布线问题
再加大板子
12 days

Updated 7 layout rules

0:08

Set Layout's sizeX to "90mm"

Set Layout's sizeY to "90mm"

Set Layout's boardShape to "rectangle"

Set Layout's cornerRadius to "2mm"

Set Layout's stackup to "Standard 4 Layer"

Set Layout's boardInsetMargin to "0.2mm"

Set Layout's keepOut to "0.2mm"

12 days

Refine this doc
Ask about this doc
Design Notes
Updated Requirement Freeze
Core mission boundary
  • This board is an onboard data acquisition, wireless transport, and motor-control interface board for a small quadcopter.
  • The onboard controller is ESP32, used primarily for sensor acquisition, communications bridging, housekeeping, and ESC PWM generation.
  • High-rate flight-control fusion, image processing, and obstacle-avoidance computation are assumed to run off-board on a host computer or mobile/ground station, not on the onboard ESP32.
Updated communications decision
  • BLE remains available for provisioning, low-rate telemetry, parameter updates, and maintenance.
  • Real-time video transport shall use Wi-Fi, not BLE.
  • The camera path is treated as a high-bandwidth subsystem and must not share critical low-noise sensor routing regions without isolation.
USB and programming boundary
  • Preferred approach: a single USB-C interface may provide 5 V input and ESP32 program/debug access only if USB data integrity, boot control, ESD robustness, and power-path behavior are verified to be reliable in the final architecture.
  • Approved fallback: separate interfaces are allowed and preferred if the merged USB-C design compromises reliability. In that case:
    • one connector is dedicated to power or charging input
    • one connector/header is dedicated to ESP32 programming/debug
  • This interface split is now an explicit allowed requirement, not an exception.
Sourcing and cost constraints now frozen
  • Core active and passive devices shall prioritize parts that are easy to purchase in mainland China through common channels such as LCSC, Taobao ecosystem modules, and mainstream local distributor stock.
  • For each critical function, prefer package options and part families with multiple second-source or drop-in alternatives commonly seen in the China market.
  • Avoid niche imported-only parts when a commonly available domestic or broadly stocked alternative exists.
  • The laser distance function shall prioritize low-cost modules over premium precision modules, as long as the module still provides stable short-range altitude assistance suitable for a small quadcopter.
  • Low-cost ranging and China-market availability are now explicit selection constraints, not soft preferences.
Selected implementation baseline
Wiring intent freeze
  • Native USB on ESP32-S3 is the primary programming path through USB-C.
  • CH343P is retained as a fallback UART download/recovery path and to satisfy the approved split-interface fallback strategy.
  • IMU, barometer, and ToF sensor share one 3.3 V I2C sensor bus with one resistor pair of 4.7 k pull-ups.
  • External rotating lidar uses a dedicated UART connector.
  • Four ESC outputs shall be direct 3.3 V PWM outputs plus ground reference.
  • The camera connector is now a dedicated 24-pin OV5640 DVP interface.
Power tree constraints
  • Input source starts from 5 V USB-C sink power.
  • Primary regulated rail is 3.3 V for ESP32 and sensors.
  • Wi-Fi activity is treated as a burst-current load and must be budgeted separately from quiet sensors.
  • Sensitive sensors shall receive local filtering and dedicated decoupling close to each device.
  • Motor/ESC outputs are logic-level control only unless a later revision explicitly integrates battery-current motor power handling.
  • USB-C sink configuration uses two 5.1 k pulldowns.
  • OV5640 camera rail constraints: DOVDD is tied to 3.3 V to match ESP32-S3 I/O, AVDD requires a dedicated 2.8 V rail on CAM_AVDD, and DVDD is assumed internal to the selected camera module variant.
Camera interface definition freeze
  • Selected camera family: OV5640.
  • Connector upgrade completed: X1 is now a 24-pin FH12-24S-0.5SH(55) FPC connector.
  • The design uses the provided generic OV5640 DVP 24-pin signal set in 8-bit mode.
  • Pin mapping frozen as:
    • Pin 1: STROBE -> NC
    • Pin 2: AGND -> GND
    • Pin 3: SIOD -> I2C_SDA
    • Pin 4: AVDD -> CAM_AVDD (2.8 V required)
    • Pin 5: SIOC -> I2C_SCL
    • Pin 6: RESET -> CAM_RESET
    • Pin 7: VSYNC -> CAM_VSYNC
    • Pin 8: PWDN -> CAM_PWDN
    • Pin 9: HREF -> CAM_HREF
    • Pin 10: DVDD -> module internal / board NC
    • Pin 11: DOVDD -> 3V3
    • Pin 12: D9 -> NC in 8-bit mode
    • Pin 13: XCLK -> CAM_XCLK
    • Pin 14: D8 -> NC in 8-bit mode
    • Pin 15: DGND -> GND
    • Pin 16: D7 -> CAM_D7
    • Pin 17: PCLK -> CAM_PCLK
    • Pin 18: D6 -> CAM_D6
    • Pin 19: D2 -> CAM_D2
    • Pin 20: D5 -> CAM_D5
    • Pin 21: D3 -> CAM_D3
    • Pin 22: D4 -> CAM_D4
    • Pin 23: D1 -> CAM_D1
    • Pin 24: D0 -> CAM_D0
  • Pins 25 and 26 on the chosen connector footprint are mechanical / shield extras and are not part of the 24-pin logical signal assignment in this interface package.
Camera timing and sequencing requirements
  • Power sequencing requirement is frozen as:
    1. stabilize DOVDD first
    2. stabilize AVDD second
    3. pull PWDN low and wait at least 5 ms
    4. drive XCLK for at least 1 ms
    5. release RESET and wait at least 20 ms before SCCB initialization
  • SCCB shares the existing board I2C signal names I2C_SDA and I2C_SCL in this revision.
  • DVP bus width is frozen to 8-bit mode using D0-D7 only; D8 and D9 are intentionally not connected.
ESP32-S3 pin allocation update
  • Reserved / existing non-camera assignments retained:
    • GPIO0 -> ESP_BOOT
    • GPIO1 -> LIDAR_TX
    • GPIO13 -> PWM1
    • GPIO14 -> PWM2
    • GPIO15 -> PWM3
    • GPIO16 -> PWM4
    • GPIO17 -> I2C_SDA
    • GPIO18 -> I2C_SCL
    • GPIO19/GPIO20 are reserved for native USB on the module implementation
    • GPIO21 -> LIDAR_RX
    • TXD0 / RXD0 remain assigned to fallback UART download/debug path
  • Camera assignments frozen as:
    • GPIO2 -> CAM_RESET
    • GPIO4 -> CAM_PWDN
    • GPIO5 -> CAM_VSYNC
    • GPIO6 -> CAM_HREF
    • GPIO7 -> CAM_XCLK
    • GPIO10 -> CAM_PCLK
    • GPIO11 -> CAM_D2
    • GPIO12 -> CAM_D1
    • GPIO46 -> CAM_D0
    • GPIO47 -> CAM_D3
    • GPIO48 -> CAM_D4
    • GPIO38 -> CAM_D5
    • GPIO39 -> CAM_D6
    • GPIO40 -> CAM_D7
System conflict closure list
  • Resolved conflicts:
    • PWM4 and lidar TX are no longer shared.
    • Camera bus does not overlap USB native data pins.
    • Camera bus does not overlap UART0 fallback programming pins.
    • Camera SCCB reuses the existing I2C bus intentionally, avoiding extra GPIO consumption.
  • Accepted constraints:
    • Camera SCCB sharing means sensor and camera configuration traffic share one bus; firmware must serialize transactions.
    • GPIO46 is input-capable only on ESP32-S3, so it is intentionally used for CAM_D0, which is camera-to-MCU input.
  • Remaining implementation items:
    • A real 2.8 V source for CAM_AVDD must be added in the next schematic pass.
    • If the selected OV5640 module requires stronger XCLK drive integrity, consider a small series resistor near the ESP32 pin in the next pass.
    • If SCCB pull-up loading becomes excessive when the camera module is attached, the combined pull-up value must be reviewed.
PCB layout constraint freeze
  • Place the ESP32-S3 module at a board edge with full antenna keepout.
  • Keep USB-C and ESD/protection parts grouped at the board edge.
  • Keep U2, U3, and U4 in the quietest region away from PWM connectors.
  • Keep the camera connector X1 at a board edge aligned for short DVP bus routing back to U1.
  • Initial layout outline is now set to 50 mm x 50 mm with 2 mm corner radius as the compact baseline.
  • The implemented stackup baseline is now Standard 4 Layer because USB 2.0 plus 2.4 GHz ESP32 RF benefit from a solid reference plane and cleaner return paths.
  • Global prototype-capable minimum rules are now set to 0.15 mm trace width and 0.15 mm keep out.
Known open issues after this update
  • The fallback UART bridge U5 is powered and partially connected, but its auto-download control lines are not yet implemented.
  • U6 is a practical baseline regulator choice, but thermal margin and transient headroom for Wi-Fi bursts should be reviewed in the next pass.
  • CAM_AVDD is now generated by U7, using the ME6211C28M5G-N 2.8 V LDO fed from the 3.3 V rail. The camera analog rail now includes C17 1 uF at the LDO input and C18 1 uF at the LDO output, matching the selected regulator datasheet guidance. U7 CE is tied high so the camera analog rail is always enabled in this revision.
PCB routing cleanup grouping and placement freeze
  • Current DRC snapshot before detailed routing cleanup reports 116 airwire-related errors.
  • Routing cleanup priority groups are frozen as:
    1. Camera DVP: U1, X1, R9, U7, C17, C18
    2. USB and programming: USB1, U5
    3. Main 3.3 V power distribution: U6, U1, U7
    4. External interfaces: J3 PWM cluster and J2 lidar UART cluster
  • Camera placement is now intentionally compacted around X1 to shorten CAM_AVDD and CAM_XCLK and to reserve a cleaner escape corridor from U1 to the camera connector.
  • USB1 remains fixed near the board edge; U5 and U6 are shifted to reduce overlap between USB breakout paths and camera/power escape paths.
  • J3 and J2 are kept in separate functional regions so PWM outputs and lidar UART traces do not compete for the same narrow routing channels.
  • U1, X1, and USB1 are marked protected/high-priority anchors for subsequent detailed routing cleanup.

    Updated Requirement Freeze

    Core mission boundary

    Updated communications decision

    USB and programming boundary

    Sourcing and cost constraints now frozen

    Selected implementation baseline

    Wiring intent freeze

    Power tree constraints

    Camera interface definition freeze

    Camera timing and sequencing requirements

    ESP32-S3 pin allocation update

    System conflict closure list

    PCB layout constraint freeze

    Known open issues after this update

    PCB routing cleanup grouping and placement freeze

Documents

    Design Notes

Assets

Assets are files uploaded to this project which can be used in various ways.

ESP32 Quadcopter Flight Controller 4ba8 thumbnail
ESP32-S3 quadcopter flight controller with OV5640 24-pin DVP camera interface, Wi-Fi video link, BLE telemetry, onboard USB-C power/programming, IMU, barometer, ToF altitude sensing, lidar connector, and 4 ESC PWM outputs.

Properties

Properties describe core aspects of the project.

Pricing & Availability

Distributor

Qty 1

Arrow

$5.50–$7.66

Digi-Key

$9.50–$13.39

LCSC

$19.54–$19.65

Mouser

$19.09

TME

$0.00

Verical

$7.53–$11.62

Controls