← AXS-039

Circuit review & bench-test guide

AXS-039 — Liquid flow meter carrier PMOD module

Design-stage — board not yet fabricated

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#

3. Power and signal sequence#

  1. 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.
  2. 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.
  3. When the rotor spins, the hall output sinks FLOW_RAW low 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).
  4. R2 (100 Ω) decouples the module from the host pin: it limits current on plug-in mismatch and damps reflections on the FLOW trace.
  5. The host counts falling (or rising) edges per gate interval: Q(L/min) = f(Hz) / K with 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)123456789101112
NetFLOWNCNCNCGND3V3NCNCNCNCGND3V3
J2 pinNetMeter wire (typical)Role
13V3redMeter supply (3.3 V on this carrier)
2FLOW_RAWyellowOpen-collector hall pulse output
3GNDblackReturn

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#

ContextPowerPulse readout
(a) PMOD hostULX3S-class ECP5 board, 3.3 V PMODHDL gated pulse counter on FLOW (pin 1)
(b) Standalone benchBench supply 3.3 V to pins 6/12 and GND to 5/11, current-limited to 100 mAFrequency counter, lab MCU input-capture, or oscilloscope on FLOW

5. Component-by-component review#

Ref.Part / valueFunction and why neededIf absent/openIf shorted, wrong, or misassembled
J1PMOD 12-pin plug, Type 1 GPIOHost interface: 3V3 power in, GND, FLOW out on pin 1No power and no signal pathMis-keyed insertion swaps power and signal rows; inspect keying before every plug-in
J2Generic 1×3 pin socket, 2.54 mm (MPN TBD)Socket for the meter pigtail, pin order VCC/SIGNAL/GNDMeter cannot be connectedReversed pigtail puts 3.3 V on the hall output and signal on VCC — meter misbehaves and may be damaged; buzz out the pigtail first
R110 kΩ 0603, Yageo RC0603FR-0710KLPull-up for the meter's open-collector output; sets the 3.3 V high level and the ~0.33 mA sink currentFLOW floats: counter reads noise or a constant level; no defined logic highToo small wastes current and stresses the hall sink stage; too large slows rising edges on long cables (RC with cable capacitance)
R2100 Ω 0603, Yageo RC0603FR-07100RLSeries protection/damping between FLOW_RAW and the host pinHost pin is exposed directly to the cable node; less protection against plug-in faultsOpen 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
C1100 nF 16 V X7R 0603, Murata GRM188R71C104KA01DHigh-frequency decoupling at the meter socketHall switching edges couple onto the 3V3 rail; more radiated/conducted noiseShorted part drags down the 3V3 rail — host current limit should catch it during phase A checks
C210 µF 10 V X5R 0805, Murata GRM21BR61A106KE19LBulk reservoir at the socket; feeds the meter through cable inductance during switchingRail droop at the meter on each hall transition, possible miscounts with long cablesShort drags down 3V3; gross wrong value only changes margin, but verify marking anyway
#FLG01, #FLG02ERC power flagsSchematic bookkeeping for 3V3/GNDERC noise onlyNot physical parts; nothing to assemble

External (not on the BOM, but part of the system under test):

ItemPartReview point
Flow meterYF-S201-class hall turbine, 3.3 V-capable variant requiredPart 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#

SourceKey facts used hereBoard-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 page450 pulses/litre; ±10 % accuracy; minimum tested working voltage 4.5 V; 1–30 L/min; 2.0 MPa max pressure claimThe 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 resistorsGeneral-purpose 1 % thick film, 0603R1/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#

QuantityDesign target / vendor-typical valueWhat to measure
Idle FLOW level3.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 meter0.04 µs / 0.18 µs vendor-typical; slower at FLOW with long cables (R1 × cable C)Scope, 10× probe
K-factorf ≈ 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/minCounter over the working range
Blown-air bursttens to a few hundred Hz, irregular, decaying as the rotor coastsCounter/scope during section 9.C
Module supply current≈15 mA class (meter) + negligible passivesBench supply readout, standalone context
Working flow range1–30 L/min (below ~1 L/min the rotor stalls or reads grossly nonlinear)Multi-point calibration

8. Manual schematic and assembly review checklist#

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#

  1. No meter, no host. Inspect solder joints under magnification; complete the section 8 checklist.
  2. 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).
  3. Measure J1 pin 1 to J2 pin 2: should read ≈100 Ω (R2). Measure J2 pin 2 to 3V3: ≈10 kΩ (R1).
  4. 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#

  1. 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.
  2. 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).
  3. 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)#

  1. 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.
  2. 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.
  3. 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).
  4. 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.
  5. 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#

  1. 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.
  2. Sanity check: at a steady mid-range flow, scope duty should be roughly 40–60 % and frequency stable within a few percent.
  3. 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).
  4. 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.
  5. Record water temperature; viscosity shifts the low-end response.

E. Endurance and integration checks#

  1. 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.
  2. Power-cycle the host mid-flow and confirm counting resumes cleanly.
  3. Wiggle-test the pigtail and PMOD connection while counting; a marginal crimp shows up as burst errors.
  4. 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#

SymptomFirst measurementsLikely areas
FLOW stuck low, rotor stillJ2.2 voltage, meter unplugged retestMeter not open-collector at 3.3 V, wrong pigtail order, R1 open, solder short FLOW_RAW–GND
FLOW stuck high during flowAudible rotor? J2.2 vs J1.1Rotor jammed/stalled (below 1 L/min), meter dead at 3.3 V, R2 open, hall supply pin open
Counts but grossly wrong rateScope frequency vs counter, dutyDouble-counting on ringing edges (add HDL filter), wrong gate interval, wrong K, air in line
Erratic bursts at zero flowScope FLOW noise floorMissing C1/C2, long unshielded cable, pull-up too weak, host missing input hysteresis
Slow/rounded edgesRise time at J1.1 vs J2.2Cable capacitance × R1; shorten cable or reduce R1 with re-review
Supply current far above ~15 mACurrent at 3.3 V, meter unplugged retestReversed pigtail, damaged meter, C1/C2 short
Works standalone, fails on hostFLOW level on host, pin constraintsWrong PMOD pin mapping, I/O standard, host pull-down fighting R1
K drifts between runsWater temp, flow stability, mounting angleLow-flow nonlinearity, non-vertical mounting, debris in rotor

11. Bench record template#

FieldRecord
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.