Circuit review & bench-test guide
AXS-039 — Liquid flow meter carrier PMOD module
Document purpose#
This document explains the axs-039-flow prototype at component level and turns the design evidence into a practical manual-review and bench-test plan. It is based on the generated schematic (generate_design.py), the project README, and public vendor documentation for YF-S201-class hall turbine flow meters.
The board is a design-stage prototype. Repository status is schematic generated, ERC clean, PCB layout not started, not released. There is no fabricated board and no assembled first article. Every voltage, frequency, and K-factor below is a design target or a vendor-typical figure to verify on real hardware, not proof that an assembled module works. YF-S201-class meters are hobby-grade parts with weak, sometimes self-contradictory documentation; figures marked "vendor-typical" are exactly that, not guaranteed limits.
1. What the board does#
The board is a passive PMOD Type 1 (GPIO) carrier for a 3-wire hall-effect turbine flow meter of the YF-S201 class. Water (or blown air, for a first smoke test) spins a magnet-carrying rotor past a hall sensor whose open-collector output pulses once per pole pass. The carrier supplies the meter from the PMOD 3V3 rail, pulls the open-collector line up to 3V3 with R1, and passes the conditioned pulse train through series resistor R2 to PMOD pin 1 (FLOW). The host counts pulses per gate interval and applies the meter's K-factor to obtain flow rate.
There is no level shifter, Schmitt trigger, divider, or 5 V rail on this carrier: the signal is 3.3 V-native because the meter itself is powered at 3.3 V. That makes the choice of meter safety-critical to correctness: the classic YF-S201 is specified for 5–18 V operation, so the design explicitly requires a 3.3 V-capable variant or a unit individually verified at 3.3 V. Never feed 5 V into the PMOD connector.
Functional block diagram#
PMOD host (3.3 V) J1 flow-meter socket J2
pin 6/12 3V3 ────────┬──────────────────> J2.1 VCC (meter red)
│ R1 10k C1 100n
│ pull-up C2 10u
pin 1 FLOW <── R2 100R ──┬───────────────< J2.2 SIGNAL (meter yellow,
FLOW_RAW open-collector, pulses low)
pin 5/11 GND ────────────┴───────────────> J2.3 GND (meter black)
2. Safety and scope boundaries#
- Never connect a 5 V supply to the PMOD connector or to J2 pin 1 while the carrier is plugged into a host. J2 VCC is hard-wired to the PMOD 3V3 rail; injecting 5 V there back-feeds the host FPGA's 3.3 V rail.
- Verify the meter's output is truly open-collector before first plug-in (procedure in section 9.A). Some clones include an internal pull-up to their own VCC; on a 5 V-powered clone that would place 5 V on the signal line. On this carrier the meter runs at 3.3 V, so the hazard is bounded, but any off-board 5 V characterization harness must check this first.
- Keep all electronics dry. The meter body is sealed, but the carrier, the PMOD host, and the cable junction are not. Route hoses so that a leak or drip cannot reach the bench electronics; use a drip loop on the sensor cable and mount the carrier above and away from plumbing.
- Respect the meter's ratings: vendor sheet states allowed pressure ≤1.75 MPa (other vendor pages say 2.0 MPa — the documentation disagrees; assume the lower figure), medium ≤80 °C, and vertical installation with inclination not exceeding 5 degrees.
- Blown-air testing is safe and encouraged before plumbing, but do not use compressed shop air at full line pressure; lung power or a low-pressure aquarium pump is sufficient to spin the rotor. Overspeed adds wear and proves nothing.
- A working pulse count is not a calibration, an accuracy claim, or a potable-water/materials-compliance claim. Do not use this module for billing, dosing, or safety interlocks.
3. Power and signal sequence#
- The host (or bench supply) applies 3.3 V to PMOD pins 6/12. C2 (10 µF) and C1 (100 nF) charge and hold the socket rail stiff against cable inductance and hall switching transients.
- The meter's hall element powers up from J2 pin 1. With no rotation its open-collector output is released, so R1 (10 kΩ) pulls
FLOW_RAW— and through R2,FLOW— up to 3.3 V. FLOW idles high. - When the rotor spins, the hall output sinks
FLOW_RAWlow once per pole pass, giving a roughly square pulse train. The vendor sheet claims 50 ±10 % duty (its own waveform figure says "~40 %" — another internal inconsistency; treat duty as approximate). - R2 (100 Ω) decouples the module from the host pin: it limits current on plug-in mismatch and damps reflections on the FLOW trace.
- The host counts falling (or rising) edges per gate interval:
Q(L/min) = f(Hz) / Kwith K ≈ 7.5 for a YF-S201-class meter (vendor-typical, calibrate per unit).
Why a pull-up and not a divider#
The hall output is open-collector: it can only sink current, never source it. The high level is therefore set entirely by what the pull-up connects to. Pulling up to 3V3 makes the signal 3.3 V-safe by construction, with no divider needed — provided the meter's internal circuit really is open-collector and really works at 3.3 V. Both assumptions must be verified per purchased unit (sections 8 and 9).
4. Interfaces and pin maps#
| PMOD pin (J1) | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Net | FLOW | NC | NC | NC | GND | 3V3 | NC | NC | NC | NC | GND | 3V3 |
| J2 pin | Net | Meter wire (typical) | Role |
|---|---|---|---|
| 1 | 3V3 | red | Meter supply (3.3 V on this carrier) |
| 2 | FLOW_RAW | yellow | Open-collector hall pulse output |
| 3 | GND | black | Return |
Wire colors are the common red/yellow/black pigtail convention; clones vary. Verify against the purchased meter's own documentation and with a DMM before plugging in. #FLG01/#FLG02 in the schematic are ERC power-flag symbols only; they place no physical part.
Two usage contexts#
| Context | Power | Pulse readout |
|---|---|---|
| (a) PMOD host | ULX3S-class ECP5 board, 3.3 V PMOD | HDL gated pulse counter on FLOW (pin 1) |
| (b) Standalone bench | Bench supply 3.3 V to pins 6/12 and GND to 5/11, current-limited to 100 mA | Frequency counter, lab MCU input-capture, or oscilloscope on FLOW |
5. Component-by-component review#
| Ref. | Part / value | Function and why needed | If absent/open | If shorted, wrong, or misassembled |
|---|---|---|---|---|
| J1 | PMOD 12-pin plug, Type 1 GPIO | Host interface: 3V3 power in, GND, FLOW out on pin 1 | No power and no signal path | Mis-keyed insertion swaps power and signal rows; inspect keying before every plug-in |
| J2 | Generic 1×3 pin socket, 2.54 mm (MPN TBD) | Socket for the meter pigtail, pin order VCC/SIGNAL/GND | Meter cannot be connected | Reversed pigtail puts 3.3 V on the hall output and signal on VCC — meter misbehaves and may be damaged; buzz out the pigtail first |
| R1 | 10 kΩ 0603, Yageo RC0603FR-0710KL | Pull-up for the meter's open-collector output; sets the 3.3 V high level and the ~0.33 mA sink current | FLOW floats: counter reads noise or a constant level; no defined logic high | Too small wastes current and stresses the hall sink stage; too large slows rising edges on long cables (RC with cable capacitance) |
| R2 | 100 Ω 0603, Yageo RC0603FR-07100RL | Series protection/damping between FLOW_RAW and the host pin | Host pin is exposed directly to the cable node; less protection against plug-in faults | Open breaks the signal path (idle-high but no pulses reach the host is not this — open R2 floats the host pin); wrong high value forms a divider with host input loading |
| C1 | 100 nF 16 V X7R 0603, Murata GRM188R71C104KA01D | High-frequency decoupling at the meter socket | Hall switching edges couple onto the 3V3 rail; more radiated/conducted noise | Shorted part drags down the 3V3 rail — host current limit should catch it during phase A checks |
| C2 | 10 µF 10 V X5R 0805, Murata GRM21BR61A106KE19L | Bulk reservoir at the socket; feeds the meter through cable inductance during switching | Rail droop at the meter on each hall transition, possible miscounts with long cables | Short drags down 3V3; gross wrong value only changes margin, but verify marking anyway |
| #FLG01, #FLG02 | ERC power flags | Schematic bookkeeping for 3V3/GND | ERC noise only | Not physical parts; nothing to assemble |
External (not on the BOM, but part of the system under test):
| Item | Part | Review point |
|---|---|---|
| Flow meter | YF-S201-class hall turbine, 3.3 V-capable variant required | Part number is still TBD in the README ("pin a 3.3 V-capable meter part number"); this is an open release item. Classic YF-S201 is specified 5–18 V |
6. Datasheet summary and design interpretation#
| Source | Key facts used here | Board-specific interpretation |
|---|---|---|
| YF-S201 vendor sheet (Sea/YIFA, Foshan Shunde Zhongjiang; Adafruit-hosted PDF) | Operating voltage DC 5–18 V; max 15 mA at 5 V; load capacity ≤10 mA; output high >4.5 V and low <0.5 V at 5 V input; duty 50 ±10 %; F(Hz) = 7.5 × Q(L/min) ±3 % (level test); flow-pulse accuracy 1–30 L/min within ±5 %; allowed pressure ≤1.75 MPa; medium ≤80 °C; rise/fall 0.04/0.18 µs; vertical installation, inclination ≤5°; insulation >100 MΩ | The classic part is not specified at 3.3 V — the entire premise of this carrier rests on selecting a 3.3 V-capable variant or verifying a specific unit. The 0.33 mA sink through R1 is far below the 10 mA load capacity. Note the sheet contradicts itself (5 V–24 V "minimum rated" vs 5–18 V operating; 40 % waveform vs 50 % duty table) — typical hobby-grade documentation |
| Components101 YF-S201 page | 450 pulses/litre; ±10 % accuracy; minimum tested working voltage 4.5 V; 1–30 L/min; 2.0 MPa max pressure claim | The commonly quoted ±10 % overall accuracy and 450 pulses/L are vendor-typical, not guaranteed; the pressure figure disagrees with the vendor sheet (1.75 MPa). Calibrate K per unit and assume the lower pressure limit |
| Yageo RC-series thick-film resistors | General-purpose 1 % thick film, 0603 | R1/R2 values are non-critical; 1 % parts are more than adequate |
Honesty note: there is no single authoritative YF-S201 datasheet. The Adafruit-hosted PDF above is a real vendor document, but multiple vendors sell mechanically similar meters under the same name with differing specs. Treat every number as "typical for the class" until measured on the purchased unit.
7. Expected values before bench testing#
| Quantity | Design target / vendor-typical value | What to measure |
|---|---|---|
| Idle FLOW level | 3.3 V (rail, via R1) | DMM on PMOD pin 1, rotor still |
| Active-low pulse level | <0.2 V estimated (hall sinks only ~0.33 mA through R1; vendor states <0.5 V at 5 V/10 mA) | Scope on FLOW during rotation |
| Pulse amplitude after conditioning | ≈3.3 V pk (open-collector + 3V3 pull-up; no divider/Schmitt on this board) | Scope, DC-coupled |
| Duty cycle | ≈50 ±10 % (vendor table; vendor figure says ~40 %) | Scope duty measurement at steady flow |
| Rise/fall time at meter | 0.04 µs / 0.18 µs vendor-typical; slower at FLOW with long cables (R1 × cable C) | Scope, 10× probe |
| K-factor | f ≈ 7.5 × Q(L/min), i.e. ≈450 pulses/L, nominal ±10 % | Bucket calibration, section 9.D |
| Frequency span | ≈7.5 Hz at 1 L/min to ≈225 Hz at 30 L/min | Counter over the working range |
| Blown-air burst | tens to a few hundred Hz, irregular, decaying as the rotor coasts | Counter/scope during section 9.C |
| Module supply current | ≈15 mA class (meter) + negligible passives | Bench supply readout, standalone context |
| Working flow range | 1–30 L/min (below ~1 L/min the rotor stalls or reads grossly nonlinear) | Multi-point calibration |
8. Manual schematic and assembly review checklist#
- Confirm J1 pinout against the PMOD Type 1 spec: FLOW on pin 1, GND on 5/11, 3V3 on 6/12, all others NC. A one-row offset on plug-in shorts power to signal.
- Confirm J2 silkscreen marks pin 1 (VCC) unambiguously and matches the generated netlist order VCC/SIGNAL/GND.
- Buzz the meter pigtail: red→J2.1, yellow→J2.2, black→J2.3, then verify with a DMM against the meter's own documentation — wire colors on clones are not trustworthy.
- Verify R1 = 10 kΩ and R2 = 100 Ω in-circuit before first power (R1 reads between 3V3 and FLOW_RAW; R2 between FLOW_RAW and FLOW).
- Verify C1/C2 present at the socket end of the layout (layout not started; when it exists, decoupling must sit at J2, not at J1).
- Confirm the purchased meter part number is a 3.3 V-capable variant, or schedule the 3.3 V verification of section 9.B before any host use. This is an open README release item.
- Verify meter output is open-collector: with the meter powered on a bench harness and no pull-up connected, the signal wire should float (DMM reads unstable/near 0 V, not VCC). If it reads solid VCC, the clone has an internal pull-up — re-review before use, and never power that clone above 3.3 V while attached to this carrier.
9. Ordered bench-test procedure#
Stop at the first abnormal result. Record board serial, meter part number/serial, equipment IDs, ambient, and operator for every run.
A. Unpowered inspection and resistance tests#
- No meter, no host. Inspect solder joints under magnification; complete the section 8 checklist.
- Measure 3V3-to-GND resistance at J1 in both meter polarities; investigate any hard short before power (C2 charging gives a rising reading — that is normal).
- Measure J1 pin 1 to J2 pin 2: should read ≈100 Ω (R2). Measure J2 pin 2 to 3V3: ≈10 kΩ (R1).
- Buzz the meter pigtail wiring per section 8 and perform the open-collector check on the meter itself.
B. First power, standalone context, no meter then meter attached#
- Bench supply 3.3 V, current limit 100 mA, to J1 pins 6/12 (3V3) and 5/11 (GND). No meter plugged in. Expect a few hundred µA or less; FLOW (pin 1) reads 3.3 V.
- Power off, plug in the meter, power on. Supply current should rise to the meter's quiescent draw (vendor-typical up to ~15 mA class; record the actual value at 3.3 V — this is the first datapoint proving the specific unit runs at 3.3 V).
- FLOW must still idle at 3.3 V with the rotor still. If it idles low or at a mid level, the unit is not behaving as open-collector at 3.3 V — stop and re-review the meter choice.
C. Blown-air pulse test (before any plumbing)#
- Standalone context. Scope on FLOW (pin 1) referenced to GND (pin 5), DC-coupled, 1 V/div, timebase 5 ms/div, falling-edge trigger at ~1.6 V.
- Blow air through the meter body in the arrow direction (lung power or a low-pressure aquarium pump). The rotor spins audibly and the scope shows a burst of pulses: ≈3.3 V high, <0.2 V low, roughly square, tens to a few hundred Hz, decaying as the rotor coasts.
- Check edge quality: clean monotonic edges fast enough for the counter. If edges are slow or ring with the intended cable length, plan an HDL glitch filter/majority vote (there is no hardware Schmitt trigger on this board — noise immunity is the host's job).
- Connect a frequency/event counter (or lab MCU input-capture) in parallel and confirm the counted burst matches a manual count of scope-visible pulses. This validates the whole chain before water is involved.
- Repeat in the PMOD host context: plug into the ULX3S-class host, load the pulse-counter HDL, repeat the blow test, and confirm the gateware count agrees with the bench counter. Confirm FLOW pin constraints use the 3.3 V I/O standard with input hysteresis enabled if available.
D. Water flow and bucket K-factor calibration#
- Plumb the meter vertically (inclination ≤5°), flow arrow with the water direction, electronics above and away from any drip path. Keep the carrier and host dry; add a cable drip loop.
- Sanity check: at a steady mid-range flow, scope duty should be roughly 40–60 % and frequency stable within a few percent.
- Bucket calibration, per flow rate: a. Set a steady flow with a valve. Simultaneously start the pulse counter and divert water into a measured container (use a scale: 1 kg ≈ 1 L, more accurate than jug graduations). b. Collect several litres, stop counter and diversion together, record total pulses N and volume V. K = N / V pulses per litre; also record f and computed Q = f/7.5 for comparison. c. Repeat 3× at each of at least four rates spanning the range, e.g. ≈2, 5, 10, and 20 L/min (stay within 1–30 L/min).
- Expect K ≈ 450 pulses/L nominal, unit-to-unit within roughly ±10 % (vendor-typical, not guaranteed). Expect visible nonlinearity below ~2 L/min and stalling near/below 1 L/min — the rotor is not a precision turbine. Fit K per rate or use a piecewise table rather than one number if the application spans wide rates.
- Record water temperature; viscosity shifts the low-end response.
E. Endurance and integration checks#
- Run 30–60 minutes at a mid flow in the PMOD host context; log counts per second and confirm no dropouts, resets, or drifting supply current.
- Power-cycle the host mid-flow and confirm counting resumes cleanly.
- Wiggle-test the pigtail and PMOD connection while counting; a marginal crimp shows up as burst errors.
- Release-only items (out of bench scope): pressure test to the assumed 1.75 MPa limit, temperature cycling, long-term wear (vendor cites a 300 000-cycle on/off durability test), and materials compliance.
10. Troubleshooting map#
| Symptom | First measurements | Likely areas |
|---|---|---|
| FLOW stuck low, rotor still | J2.2 voltage, meter unplugged retest | Meter not open-collector at 3.3 V, wrong pigtail order, R1 open, solder short FLOW_RAW–GND |
| FLOW stuck high during flow | Audible rotor? J2.2 vs J1.1 | Rotor jammed/stalled (below 1 L/min), meter dead at 3.3 V, R2 open, hall supply pin open |
| Counts but grossly wrong rate | Scope frequency vs counter, duty | Double-counting on ringing edges (add HDL filter), wrong gate interval, wrong K, air in line |
| Erratic bursts at zero flow | Scope FLOW noise floor | Missing C1/C2, long unshielded cable, pull-up too weak, host missing input hysteresis |
| Slow/rounded edges | Rise time at J1.1 vs J2.2 | Cable capacitance × R1; shorten cable or reduce R1 with re-review |
| Supply current far above ~15 mA | Current at 3.3 V, meter unplugged retest | Reversed pigtail, damaged meter, C1/C2 short |
| Works standalone, fails on host | FLOW level on host, pin constraints | Wrong PMOD pin mapping, I/O standard, host pull-down fighting R1 |
| K drifts between runs | Water temp, flow stability, mounting angle | Low-flow nonlinearity, non-vertical mounting, debris in rotor |
11. Bench record template#
| Field | Record |
|---|---|
| Board revision / serial | |
| Meter part number, claimed voltage range, serial | |
| Open-collector verification result | |
| Meter current at 3.3 V (quiescent / spinning) | |
| Idle FLOW level / active-low level | |
| Blown-air burst capture (file path) | |
| Host context: gateware version, pin constraints | |
| Bucket calibration table (rate, N, V, K, ×3 each) | |
| Fitted K and low-flow deviation notes | |
| Water temperature during calibration | |
| Endurance run result | |
| Deviations, photos, raw-file paths | |
| Reviewer / date / disposition |
12. Review conclusion#
The carrier itself is minimal and sound for its purpose: an open-collector pull-up to 3V3 is the correct, divider-free way to make a hall pulse output 3.3 V-safe, and the socket-side decoupling addresses the real cable inductance issue. The principal risks are all at the system boundary: the meter part number is still TBD and the classic YF-S201 is not specified at 3.3 V, so 3.3 V operation of the specific purchased unit is the gating verification; clone pigtail pin order and non-open-collector clones are plausible plug-in hazards; and there is no hardware Schmitt trigger, so edge hygiene and glitch filtering are explicitly the host's responsibility. The vendor documentation is internally inconsistent (voltage range, duty cycle, pressure limit), which is why the bucket calibration in section 9.D — not the nominal F = 7.5 × Q — is the authoritative source of this module's accuracy.