Circuit review & bench-test guide
AXS-021 — Ultrasonic ranger carrier PMOD module
Document purpose#
This document explains the axs-021-ultrasonic PMOD carrier at component level and turns the design evidence into a practical manual-review and bench-test plan. It is based on generate_design.py, README.md, and the ERC report in reports/.
This board has never been fabricated. Repository status is schematic generated, ERC clean (0 errors / 0 warnings), netlist reviewed; PCB layout not started; not released. There is no PCB, no BOM export, no DRC record, and no first-article bench result. Every number below is a target to verify against real hardware, not a proven result.
1. What the board does#
The board is a passive PMOD carrier for a 3.3 V HC-SR04-form-factor ultrasonic ranger, intended to be the Adafruit RCWL-1601 (product 4007). The transducer module plugs upright into a 1x4 socket; the carrier adds the Digilent PMOD Type 1 (GPIO) interface, a TRIG pull-down, a series resistor on the module-driven ECHO line, and local decoupling. There is no active silicon on the carrier itself.
The FPGA host drives TRIG high for at least 10 µs; the module emits an 8-cycle 40 kHz burst and raises ECHO for a time proportional to the round trip: distance_cm = echo_high_us / 58.
Functional block diagram#
PMOD host (3.3 V) Carrier Plug-in module
┌──────────────┐ ┌───────────────────────┐ ┌────────────────┐
│ J1 pin 1 TRIG├───────>│ TRIG ──┬──────────────├───────>│ Trig │
│ │ │ R2 10k │ │ │
│ │ │ └── GND │ │ RCWL-1601 │
│ J1 pin 2 ECHO│<───────│ ECHO ──R1 100Ω── ECHO_RAW <────│ Echo │
│ │ │ │ │ (40 kHz Tx/Rx │
│ 3V3 (6, 12) ├───────>│ 3V3 ──┬──┬────────────├───────>│ Vcc pair) │
│ GND (5, 11) ├────────│ GND C1 C2 ├────────│ Gnd │
└──────────────┘ │ 100n 10µ │ J2 └────────────────┘
└───────────────────────┘ 1x4 socket
2. Safety and scope boundaries#
- Voltages are limited to 3.3 V, so electrical hazard is low, but a 5 V-only classic HC-SR04 module must never be fitted: the carrier provides a 3.3 V rail only, and an externally powered 5 V module would drive a 5 V ECHO into a 3.3 V host pin. See sections 6 and 9.F.
- The carrier has no level shifter, clamp diode, or TVS on ECHO. R1 (100 Ω) limits current but does not clamp voltage — do not rely on it as 5 V protection. This is a deliberate, documented limitation of the design (
generate_design.pyschematic comments), not a hidden safety feature. - Standalone bench work must use a current-limited 3.3 V supply (≤100 mA limit is ample; the module draws ~2.2 mA typical).
- The 40 kHz burst is inaudible and at these power levels harmless, but do not point the transducer directly into an ear at close range for long sessions as a matter of practice.
- ERC-clean is a schematic check only. It proves nothing about a board that does not yet exist; layout, DRC, fabrication, and assembly quality are all unverified.
3. Signal and power sequence#
- 3V3 and GND arrive from the PMOD host (pins 6/12 and 5/11) or the bench supply. C2 charges; C1 provides high-frequency decoupling at the socket.
- With the host pin unconfigured (high-Z at FPGA configuration time), R2 holds TRIG at GND so the module cannot false-trigger.
- The module (RCWL-1601) powers up and idles with ECHO low.
- The host drives TRIG high for ≥10 µs, then low.
- The module emits an 8-cycle 40 kHz transmit burst (~200 µs of drive); C2 buffers this brief current peak so the 3.3 V rail does not sag at the end of the PMOD cable.
- ECHO goes high when the burst is sent and returns low when the reflection is received (or after an internal timeout, typically tens of ms, if nothing echoes back). The host times the high interval through R1.
- Wait ≥60 ms before the next trigger so a late echo from the previous burst cannot corrupt the next measurement.
4. Interfaces#
| Reference | Pins/signals | Intended use |
|---|---|---|
| J1 | 12-pin PMOD plug (2x6 right-angle male, Digilent spec 1.2) | Host connection: pin 1 TRIG (host out), pin 2 ECHO (host in), 3/4/7/8/9/10 NC, 5/11 GND, 6/12 3V3 |
| J2 | 1x4 socket, 2.54 mm vertical | Ranger socket in HC-SR04 pin order: 1 VCC(3V3), 2 Trig, 3 Echo(ECHO_RAW), 4 GND |
PMOD pin map (Type 1 GPIO):
| PMOD pin | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Net | TRIG | ECHO | NC | NC | GND | 3V3 | NC | NC | NC | NC | GND | 3V3 |
There are no test points defined yet (no layout exists); bench probing is at J1/J2 pins and passives.
5. Component-by-component review#
5.1 Connectors#
| Ref. | Part | Function and why needed | If absent/open | If shorted, wrong, or misassembled |
|---|---|---|---|---|
| J1 | Generic 2x6 right-angle 2.54 mm male header (MPN TBD) | PMOD plug; carries 3V3/GND and TRIG/ECHO to the host | No power, no signals | Odd/even numbering mistake in layout swaps rows and can put 3V3 on a signal pin — verify against Digilent PMOD spec 1.2 before fab |
| J2 | Generic 1x4 socket 2.54 mm vertical (MPN TBD) | Holds the plug-in ranger in HC-SR04 pin order VCC/Trig/Echo/GND | No sensor; TRIG drives an open pin harmlessly (R2 keeps it defined) | Reversed pin order applies GND to module VCC and 3.3 V to module GND — most modules have no reverse protection; verify the socket-to-net map on the first article before ever inserting a module |
5.2 Line conditioning#
| Ref. | Value / part | Purpose | If absent/open | If shorted or wrong value |
|---|---|---|---|---|
| R1 | 100 Ω, Yageo RC0603FR-07100RL, 1% 0603 | Series protection between the module-driven ECHO_RAW and the host ECHO pin; limits fault current and damps the line on the plug/cable stub | Host never sees ECHO — measurements always time out | Short removes the (already modest) protection; a large value (e.g. 100 kΩ by reel mix-up) forms an RC with pin capacitance and slows edges — at 100 Ω the added delay (~ns) is negligible against 58 µs/cm |
| R2 | 10 kΩ, Yageo RC0603FR-0710KL, 1% 0603 | TRIG pull-down so an unconfigured or tri-stated host pin cannot false-trigger a burst | TRIG floats before FPGA configuration; spurious bursts and phantom ECHO activity possible | Short holds TRIG at GND permanently — the host can never trigger (drive fights 0 Ω); a too-small value loads the host driver |
5.3 Decoupling#
| Ref. | Value / part | Purpose | If absent/open | If shorted or wrong value |
|---|---|---|---|---|
| C1 | 100 nF 16 V X7R, Murata GRM188R71C104KA01D, 0603 | High-frequency decoupling at the ranger socket | More rail noise coupling into the module's analog receive path; degraded max range/repeatability | Short is a 3V3-to-GND short — host PMOD supply or bench limit trips; wrong (larger) value is generally benign |
| C2 | 10 µF 10 V X5R, Murata GRM21BR61A106KE19L, 0805 | Bulk reservoir for the ~200 µs transmit-burst current peak at the end of the PMOD cable | Rail droop during the burst; symptoms are shortened max range, occasional module resets, or missed echoes that worsen with longer cables | Short is a rail short (as C1); a much smaller value reintroduces droop |
#FLG01/#FLG02 are ERC power-flag symbols only — they place no physical part.
5.4 The plug-in module (in scope)#
| Ref. | Part | Function | If absent | If a 5 V-only HC-SR04 is fitted instead |
|---|---|---|---|---|
| (plug-in at J2) | Adafruit RCWL-1601 (product 4007) | The actual ultrasonic transceiver: 40 kHz transducer pair, drive and receive electronics, HC-SR04-compatible Trig/Echo protocol, 3.0–5.5 V supply | Carrier is inert; ECHO stays low, all measurements time out | At 3.3 V it will typically fail to range (5 V-only electronics under-voltage). If someone powers it at 5 V externally while Trig/Echo remain on the carrier, its 5 V ECHO reaches the host through only 100 Ω — see 9.F |
6. Datasheet summary and design interpretation#
| Device | Key manufacturer facts | Board-specific interpretation |
|---|---|---|
| RCWL-1601 | 3.0–5.5 V supply, ~2.2 mA typical, 40 kHz, range 2–450 cm (10–250 cm recommended), ±2 % / ±0.5 cm accuracy, 1 mm resolution, ±15–20° beam, ~50 ms measurement cycle, HC-SR04 software compatible, logic levels track the supply | The 3.3 V-capable supply and supply-tracking logic levels are exactly why this module (and not a classic HC-SR04) is specified. At 3.3 V, ECHO high is ~3.3 V — safe for the host. The ~50 ms cycle motivates the ≥60 ms repetition rule |
| HC-SR04 protocol (reference) | ≥10 µs TRIG high starts a cycle; module sends an 8-cycle 40 kHz burst; ECHO high time = round-trip time; distance_cm = echo_us/58 (≈ inch = echo_us/148); recommended ≥60 ms between measurements | The carrier's TRIG pull-down and ECHO series resistor are shaped around this protocol; the FPGA timing core divides by 58 in fabric |
| Murata GRM188R71C104KA01D / GRM21BR61A106KE19L | 100 nF X7R 16 V 0603; 10 µF X5R 10 V 0805. X5R/X7R lose effective capacitance with DC bias — a 10 µF X5R at 3.3 V still retains most of its value in 0805 | Adequate margin at 3.3 V. Do not substitute a 10 µF in 0402/0603, where DC-bias derating is much worse |
| Yageo RC0603 series | General-purpose thick film, 1 %, 100 mW | Values are non-critical to ±5 %; 1 % chosen for BOM consistency |
Official references: Adafruit RCWL-1601 product page (4007), Adafruit ultrasonic sonar distance sensors guide, classic HC-SR04 datasheet (SparkFun mirror, protocol reference), Murata GRM188R71C104KA01D, Murata GRM21BR61A106KE19L, Yageo RC thick-film series. Check the current revision before procurement; the RCWL-1601 itself has no formal manufacturer datasheet — Adafruit's product page and guide are the practical documentation.
7. Expected values before bench testing#
All values are design targets for a board that does not yet exist.
| Quantity | Target | How to measure |
|---|---|---|
| 3V3-to-GND resistance, unpowered, no module | High (>100 kΩ after cap charge; meter-dependent) | DMM at J1 pin 6 to pin 5, both polarities |
| TRIG-to-GND resistance | ~10 kΩ (R2) | DMM at J1 pin 1 |
| ECHO (J1 pin 2) to J2 pin 3 | ~100 Ω (R1) | DMM |
| Idle supply current, module fitted | ~2–3 mA | Bench supply readout |
| TRIG pulse (host-generated) | ≥10 µs high, 0→3.3 V, clean edges | Scope at J2 pin 2 |
| Transmit burst | 8 cycles at 40 kHz ≈ 200 µs, right after TRIG falls | Scope on module transducer pins or rail ripple; a second receiving module also works |
| ECHO width at 10 cm | ≈ 580 µs | Scope at J1 pin 2 |
| ECHO width at 50 cm | ≈ 2 900 µs (2.9 ms) | Scope |
| ECHO width at 1 m | ≈ 5 800 µs (5.8 ms) | Scope |
| Minimum range | ~2–3 cm blind zone (10 cm recommended floor) | Target on ruler |
| Maximum range | up to ~450 cm claimed; ~250 cm reliably, target-dependent | Large flat target, echo ≈ 26 ms at 4.5 m |
| No-target behavior | ECHO high then internal timeout (tens of ms, module-dependent — record it) | Point at open space |
| Repetition interval | ≥60 ms between triggers | Host timing core |
| Rail droop during burst | Minimal with C2 fitted; record actual | Scope, AC-coupled, at J2 pin 1 |
| ECHO high level at 3.3 V supply | ≈3.3 V, never 5 V | Scope, DC-coupled |
8. Manual schematic and assembly review checklist#
- Verify J1 odd/even pin numbering against the Digilent PMOD spec on the first layout: 3V3 must land on PMOD 6/12 and GND on 5/11. A row swap here is the most dangerous plausible layout error.
- Verify J2 net order on the physical board matches HC-SR04 order: pin 1 = 3V3, 2 = TRIG, 3 = ECHO_RAW, 4 = GND. Buzz it out before any module is ever inserted.
- Confirm R1 = 100 Ω sits in the ECHO path and R2 = 10 kΩ from TRIG to GND — not swapped (a 10 kΩ in series with ECHO still works; a 100 Ω TRIG pull-down would load the host driver with 33 mA-class demands and is wrong).
- Confirm C1/C2 placement close to J2 in the eventual layout.
- Confirm silkscreen marks module orientation (VCC end) unambiguously.
- Confirm the schematic comment "5 V-only HC-SR04 modules must not be fitted" is carried onto the board silkscreen or at least the README that ships with the board.
9. Ordered bench-test procedure#
Stop at the first abnormal result. Record board serial, module identity (exact marking/vendor), equipment, and ambient conditions.
A. Unpowered inspection and resistance tests (no module fitted)#
- Visual inspection under magnification: solder quality on J1/J2, R1, R2, C1, C2; no bridges.
- DMM: 3V3-to-GND high resistance both polarities; TRIG-to-GND ≈ 10 kΩ; J1 pin 2 to J2 pin 3 ≈ 100 Ω; J2 pin 1 to J1 pin 6 ≈ 0 Ω; J2 pin 4 to J1 pin 5 ≈ 0 Ω.
- Buzz every J2 pin to its intended net. Do not skip this — a reversed socket destroys the first module inserted.
B. Candidate-module qualification (BEFORE it ever touches the carrier)#
This is the mandatory 5 V-module screening test. Many "HC-SR04" modules are 5 V-only with a 5 V ECHO output; a genuine RCWL-1601 is 3.3 V-capable. Markings are not reliable — test electrically.
- Power the bare candidate module from a current-limited 3.3 V bench supply only (50 mA limit). Confirm it draws a plausible ~2–3 mA.
- Drive Trig with a 3.3 V 10 µs pulse (signal generator or a known-good 3.3 V dev board) and scope Echo.
- Pass criteria: the module ranges (Echo width tracks a target moved by hand) AND Echo high level is ≈3.3 V. A module that does not range at 3.3 V, or ranges only when supplied 5 V, is 5 V-only — reject it for this carrier.
- Never pre-qualify by powering the module at 5 V while its Echo is connected to anything 3.3 V.
C. Standalone carrier bring-up (bench supply, no host)#
- With a qualified module fitted, connect a current-limited 3.3 V supply (100 mA limit) to J1 pin 6 (3V3) and pin 5 (GND). Confirm ~2–3 mA idle.
- Scope TRIG at J2 pin 2: it must sit at 0 V (R2) with nothing driving.
- Inject a 10 µs 3.3 V pulse into J1 pin 1 from a generator. Scope ECHO at J1 pin 2: a pulse appears whose width tracks target distance.
- Verify the width math at measured distances: tape a target at 10 cm, 50 cm, and 1 m and confirm ≈580 µs / 2.9 ms / 5.8 ms within a few percent (temperature affects the speed of sound ~0.17 %/°C).
- Scope the 3V3 rail AC-coupled during a burst; record droop.
D. Hosted bring-up (PMOD host providing 3.3 V)#
- Plug the carrier into the FPGA PMOD port with the host unconfigured. Confirm no bursts occur (R2 holds TRIG low) — listen with a scope on ECHO for several seconds.
- Load the trigger/echo timer core. Trigger single measurements first, then continuous at ≥60 ms intervals.
- Cross-check fabric-computed distance against a ruler at 10/50/100 cm.
- Sweep the repetition interval down below 60 ms deliberately and observe when readings become unstable (late echoes aliasing); document the safe floor, then return to ≥60 ms.
- Test minimum range (expect a ~2–3 cm blind zone, unreliable below ~10 cm) and maximum range against a large flat target.
- Test angular response: ±15–20° off-axis targets should still return.
E. Robustness checks#
- Hot-plug behavior: insert/remove the module with carrier power on and confirm nothing latches or is damaged (low energy, but record it).
- Long PMOD cable (if used): repeat D.3 and check rail droop and edge quality.
F. 5 V-module fault-mode awareness test (analysis + optional destructive test)#
What happens if a 5 V-only module is inserted anyway:
- Powered only from the carrier's 3.3 V rail: the module typically fails to range (no burst, or ECHO never rises). Annoying but harmless.
- Powered at 5 V externally with Trig/Echo on the carrier: its ECHO drives ~5 V into the host pin through only R1 (100 Ω). The carrier has no level shifter, no clamp, no TVS —
generate_design.pyconfirms R1 is the only element in the path. Roughly (5 − 3.3 − V_diode)/100 Ω ≈ 10 mA is forced into the host I/O protection diode per pulse — above the continuous injection rating of many FPGA pins. This can degrade or destroy the host pin over time. Never do this. If mixed-voltage experiments are wanted, that is a different (future) carrier with a real level shifter.
10. Troubleshooting map#
| Symptom | First measurements | Likely areas |
|---|---|---|
| No ECHO ever, module fitted | 3V3 at J2 pin 1; TRIG pulse present at J2 pin 2 | J2 solder/pin-order, R2 short, host pin map, dead module |
| ECHO always times out at max | ECHO_RAW at module pin vs J1 pin 2 | R1 open, J2 pin 3 open, target too soft/angled |
| Ranges at 5 V bench test but not on carrier | Module supply-voltage capability | 5 V-only module — reject (section 9.B) |
| Readings jump erratically | repetition interval; rail ripple during burst | interval <60 ms, C2 missing/open, long cable droop |
| Distance consistently scaled wrong | raw echo width vs ruler | ÷58 math in fabric, clock frequency assumption |
| Spurious bursts before FPGA config | TRIG level at J2 pin 2 unpowered-host | R2 open, host pull-ups fighting R2 |
| Supply trips at power-on | 3V3-to-GND resistance | C1/C2 short, J2 reversed with module in |
11. Bench record template#
| Field | Record |
|---|---|
| Board revision / serial | |
| Plug-in module identity, vendor, markings | |
| Module 3.3 V qualification result (9.B): current, ranges?, ECHO level | |
| Supply / generator / scope IDs and calibration | |
| Ambient temperature (speed-of-sound correction) | |
| Resistance and continuity results (9.A) | |
| Standalone results: echo widths at 10/50/100 cm | |
| Hosted results: fabric distance vs ruler | |
| Min/max range achieved; timeout duration observed | |
| Rail droop during burst | |
| Deviations, photos, raw-file paths | |
| Reviewer / date / disposition |
12. Review conclusion#
The carrier is deliberately minimal and its schematic is coherent for the lesson it teaches: R2 makes the unconfigured-host state safe, R1 adds modest fault isolation on the one module-driven line, and C1/C2 address the transmit-burst current at the end of a PMOD cable. The design's single sharp edge is module selection: it is only safe with a genuinely 3.3 V-capable ranger (RCWL-1601), because the carrier intentionally has no level protection beyond 100 Ω of series resistance. The principal open risks are that no PCB exists yet (layout, J1 row order, and J2 pin order are all unbuilt and unverified), the plug-in qualification procedure must actually be followed for every candidate module, and every timing figure in section 7 is protocol-derived rather than measured.