← AXS-030

Circuit review & bench-test guide

AXS-030 — Piezo contact mic PMOD module

Design-stage — board not yet fabricated

Document purpose#

This document explains the axs-030-piezo prototype at component level and turns the design evidence into a practical manual-review and bench-test plan. It is based on the implemented schematic generator (generate_design.py), the module README, the sensor-line conventions in ../README.md, and the verified Pmod-spec notes in ../../pmod-common/PMOD-SPEC-NOTES.md.

This board is a schematic-complete prototype only. It has not been laid out, fabricated, assembled, or bench-verified. Repository status: schematic generated, ERC clean (0 errors / 0 warnings), netlist reviewed; PCB layout not started. Every numeric value below is a design target, not a measurement. Active-part figures were verified against the fetched TI ADS7042 datasheet (SBAS608C) and Nexperia BAT54S datasheet (1 July 2022); see Section 6.

1. What the board does#

An external piezo disc (contact microphone, attached at J2) is referenced to a resistive mid-rail so both polarities of its swing digitize, clamped to the rails by a BAT54S Schottky pair against the tens of volts a struck disc can generate open-circuit, and sampled single-ended by a TI ADS7042 12-bit, up-to-1-MSPS SAR ADC. The module is a PMOD Type 2 (SPI) plug, read-only: the ADS7042 has no registers and no data input, so MOSI is not connected. Every ~CS-framed burst returns one sample; the fabric lesson is a free-running sampler FSM, FIFO, and envelope/knock detection.

Functional block diagram#

PMOD host (AruviX ECP5 rev-A or any 3.3 V Digilent-compatible socket)
   |
   J1 (PMOD Type 2 plug, read-only SPI)
   |  pin 1 ~CS  (host out, R5 10k pull-up to 3V3)
   |  pin 3 MISO (module out) <-- R4 100R <-- ADC_SDO
   |  pin 4 SCK  (host out)
   |
   |         3V3                       3V3
   |          |                         |
   |         R2 1M                   AVDD/DVDD (C1 100n, C2 1u)
   |          |                         |
   | VMID ----+----- R1 1M ----- PIEZO -+--> U1 ADS7042 AINP
   |          |                   |         U1 AINM --> GND
   |         R3 1M            D1 BAT54S
   |          |               common pin 3 = PIEZO
   |         GND              A1(pin1)->GND, K2(pin2)->3V3
   |
   J2 pin 1 PIEZO (disc signal), pin 2 GND (disc brass)

2. Safety and scope boundaries#

3. Signal and power sequence#

  1. The host applies 3.3 V (J1 pins 6/12) and GND (pins 5/11). C1 (100 nF) and C2 (1 uF) decouple AVDD/DVDD; the datasheet requires at least 200 nF at AVDD because AVDD is also the ADC reference.
  2. R2/R3 (1 MOhm each) establish VMID at 3.3/2 = 1.65 V, burning only 1.65 uA. R1 (1 MOhm) references the piezo node (PIEZO) to VMID, so the disc's AC swing rides on a mid-scale DC level and both polarities land inside the ADC's 0-AVDD range.
  3. D1 (BAT54S series pair, common pin to PIEZO) clamps the node roughly one Schottky drop below GND and above 3V3 during strikes.
  4. R5 (10 kOhm) pulls ~CS to 3V3 so the ADC stays deselected, its SDO released, until the host actively drives ~CS - important while the FPGA is unconfigured and its pins float.
  5. On the first ~CS falling edge after power-up the ADS7042 runs its offset calibration; the datasheet requires at least 16 SCLKs in that first frame (SDO stays low during it) or the calibration register is not updated.
  6. Each subsequent ~CS-framed burst returns one sample: two leading zeros, then D11..D0 MSB-first on SCLK falling edges, SDO low after the 14th SCLK, 3-state on ~CS rising. The 16-clock frame named in the schematic notes satisfies the 14-clock minimum with two idle clocks.
  7. SDO reaches the host through R4 (100 Ohm), the sensor-line series rule on every module-driven pin.

Why the bias and clamp are both needed#

Without R1-R3 the disc's charge has no DC reference: the node drifts to whatever leakage dictates, half of every waveform clips at the rails or is lost below 0, and the quiescent code is meaningless. Without D1 a single hard strike drives the node tens of volts past the rails; the ADC's internal ESD diodes would take the full surge, current-limited only by the disc's own source impedance, an abuse the datasheet does not license. The 1 MOhm bias also matters acoustically: with a typical disc capacitance in the tens of nF, the roughly 1.5 MOhm Thevenin load (R1 in series with R2||R3) sets a low-frequency corner of a few hertz (disc-dependent - unverified estimate; measure with the actual disc), so knock transients pass undistorted.

4. Interfaces and pin map#

Bench contexts: either a PMOD host (AruviX ECP5 rev-A or any 3.3 V Digilent-compatible PMOD socket) running a sampler FSM, or a bench 3.3 V current-limited supply plus DMM/oscilloscope/logic analyzer, with any SPI master (or manual ~CS/SCK from a generator) driving the read-only frame.

J1 pinNetDirectionRole
1~CShost to moduleConversion/frame strobe, active low (R5 pull-up)
2NC-Type 2 MOSI slot; the ADS7042 has no data input
3MISOmodule to hostSample data (SDO via R4)
4SCKhost to moduleSPI clock, up to 16 MHz
5, 11GND-Ground
6, 123V3-3.3 V supply (also the ADC reference via AVDD)
7-10NC-Unused
J2 pinNetRole
1PIEZODisc signal (hot) wire
2GNDDisc brass/return

There are no test points in the schematic. Probe at J2 pin 1 (the PIEZO node), the R2/R3 junction (VMID), and the J1 pins until layout adds them.

5. Component-by-component review#

Ref.Part / datasheet summaryFunction and why neededIf absent/openIf shorted, wrong, or misassembled
J112-pin right-angle PMOD plugSole power/signal interfaceNo functionMis-keyed insertion puts supply on signal pins; R4/R5 and host series resistors limit but do not excuse it
J21x2 pin header, 2.54 mm (disc MPN TBD)Attaches the external 20-35 mm piezo discNo sensor; ADC reads a flat mid-scaleSwapped wires still work electrically (disc is floating) but invert polarity; a shorted header just mutes the input
U1TI ADS7042IDCUR, 12-bit 1 MSPS SAR ADC, VSSOP-8Digitizes the biased piezo node; AVDD doubles as the referenceNo data; MISO stays releasedSwapped/rotated package miswires supply pins; poor AVDD decoupling directly corrupts the reference and therefore every code
D1Nexperia BAT54S, series Schottky pair, SOT-23Clamps PIEZO to about one V_F outside each rail during strikesStrike energy hits the ADC's internal ESD diodes instead - abuse the datasheet does not licenseWrong orientation (rotated part) forward-biases the node into a rail: signal shorted, quiescent bias wrong. A1 (pin 1) must go to GND, K2 (pin 2) to 3V3, common (pin 3) to PIEZO
R11 MOhm 0603 (Yageo RC0603FR-071ML)References the charge-source disc to VMID without loading its AC swingNode floats; DC level undefined, codes driftMuch lower value loads the disc (weak signal, higher LF corner); short ties the disc DC-hard to VMID, still passing AC but defeating the divider isolation
R21 MOhm 0603Mid-rail divider, upper legVMID falls to 0: signal biases at GND, negative swings clip and only D1 protectsShort puts VMID at 3.3 V: mirror-image failure
R31 MOhm 0603Mid-rail divider, lower legVMID rises to 3.3 VShort puts VMID at 0
R4100 Ohm 0603Series protection on the ADC-driven MISO lineMiswiring/contention couples full current into SDOWrongly large value slows edges against the host setup at 16 MHz SCLK; short only removes margin
R510 kOhm 0603~CS idle pull-up: ADC deselected and SDO released while host pins float~CS floats during FPGA configuration - spurious conversions, possible bus conflicts, and a corrupted power-up offset calibrationShort to 3V3 would jam ~CS high (never selected); wrong low value fights host drive
C1100 nF 16 V X7R 0603High-frequency AVDD/DVDD decouplingReference bounce during bit decisions: noisy codesShorted part is a rail short
C21 uF 10 V X7R 0603Bulk decoupling; satisfies the datasheet's 200 nF minimum at AVDD (reference) with marginReference droop during conversion bursts: gain/code errorsShorted part is a rail short
#FLG01/#FLG02ERC power flagsSchematic-only artifacts marking 3V3/GND as drivenNo physical effectNot applicable

ADS7042 key datasheet parameters (verified from TI SBAS608C)#

ParameterValueBench relevance
Resolution / architecture12-bit SAR, no missing codesCodes 0-4095, straight binary
AVDD (= reference) / DVDD1.65 to 3.6 V each (abs max 3.9 V)3.3 V rail in range; rail noise is reference noise
Full-scale input0 to AVDD; 1 LSB = AVDD/4096 = 806 uV at 3.3 VConverts code deltas to volts
AINP/AINM absolute range-0.1 to AVDD + 0.1 V recommended; AINM tied to GND here (single-ended)The clamp keeps strikes near this window
Max SCLK / throughput16 MHz; 1 MSPS max (f_S = f_SCLK/16 at minimum framing)16-clock frames at 8 MHz SCLK give 500 kSPS
Frame format~CS falling starts conversion; SDO: 2 leading zeros then D11..D0 MSB-first on SCLK falling edges; SDO low after SCLK 14; 3-state on ~CS risingDefines the analyzer decode and the HDL FSM
Acquisition timeat least 200 ns of ~CS-high between framesBack-to-back framing constraint
Offset calibrationPower-up: first ~CS frame needs at least 16 SCLKs (SDO held low, no data). During operation: a 32-SCLK frame recalibrates (data valid in first 14 clocks)First frame after power returns no sample - by design
INL / DNL (AVDD = 3 V)+/-1 LSB max / +0.5, -0.99 LSBLinearity targets for a slow-ramp test
Offset error+/-12 LSB uncalibrated; +/-3 LSB max calibrated (3 V)Why the power-up calibration frame matters
SNR / THD (3 V, 2 kHz)70 dB typ / -80 dB typStreaming-quality sanity bound
Supply current~1 mA-class at full rate (234 uW at 1 MSPS/1.8 V, 690 uW at 3 V per datasheet features)Expect roughly a milliamp at speed, less when idle

BAT54S key datasheet parameters (verified from Nexperia, 1 July 2022)#

ParameterValueBench relevance
ConfigurationSeries double diode: pin 1 = A1, pin 2 = K2, pin 3 = K1+A2 (common)Pin 3 to PIEZO gives one diode to each rail
V_F max240 mV at 0.1 mA; 320 mV at 1 mA; 400 mV at 10 mA; 500 mV at 30 mA; 800 mV at 100 mAClamp level is rail -/+ these values at the strike current
Reverse voltage / leakage30 V max; I_R 2 uA max at 25 V (25 C)Leakage is well under the 1 MOhm bias currents at 3.3 V reverse
Forward current200 mA continuous; 600 mA non-repetitive (<10 ms)Bounds survivable strike energy
Capacitance10 pF max at 1 VNegligible against disc capacitance

6. Datasheet summary and design interpretation#

DeviceKey manufacturer facts used hereBoard-specific interpretation
ADS7042Verified from the fetched ADS7042 datasheet PDF (SBAS608C): frame format, calibration frames, AVDD-as-reference with 200 nF minimum decoupling, electrical table aboveThe design honors every interface fact: read-only framing, pull-up on ~CS, 100 nF + 1 uF at the AVDD/DVDD pins, AINM grounded for single-ended use
BAT54SVerified from the fetched Nexperia BAT54S datasheet PDF: series-pair pinout and the V_F/I_R/rating table aboveGenerator wiring (pin 1 to GND, pin 2 to 3V3, pin 3 to PIEZO) matches the series-pair pinout for a rails clamp. Note: the generator's embedded datasheet URL (BAT54_SER.pdf) now 404s; the link above is the current official document
Piezo discGeneric 20-35 mm brass disc, MPN TBDSource capacitance (tens of nF class) and strike voltage are disc-dependent and unverified; measure the chosen disc before trusting the LF-corner estimate

7. Expected values before bench testing#

Example clock plan: SCLK = 8 MHz, 16-clock frames, ~500 kSPS free-running.

QuantityDesign target / calculated valueWhat to measure
3V3 rail3.30 V nominalDMM
VMID (R2/R3 junction)1.65 V nominal; +/-1% resistors bound it to about 1.617-1.683 V worst-case ratioDMM (10 MOhm-class input; note the 500 kOhm source impedance loads a 10 MOhm meter by about -2.4%, ~40 mV low - correct for it)
PIEZO node DC (disc connected or not)Equal to VMID within a few mV (no DC path except R1; ADC input leakage is pA-class)DMM at J2 pin 1, same loading caveat via 1.5 MOhm
Divider bleed current1.65 uA through R2/R3Not separately measurable; part of idle current
Quiescent ADC code~2048 (mid-scale) +/- about 40 codes for divider tolerance, +/-3 LSB ADC offset (calibrated)Streamed capture histogram
1 LSB806 uV at AVDD = 3.30 VConverts observed code noise
Idle module currenttens of uA to sub-mA (divider + ADC idle)Bench supply / series DMM
Streaming module current~1 mA-class at high rateBench supply
Frame waveform2 leading zeros then 12 data bits, MSB-first, changing on SCLK falling edges; SDO low after clock 14; released after ~CS risesLogic analyzer
First frame after power-upSDO low throughout (offset calibration, needs 16+ SCLKs)Logic analyzer
Clamp levels (mA-class strike current)About -0.32 V and +3.62 V (rail -/+ V_F at 1 mA); up to about -0.5/+3.8 V at 30 mAScope on PIEZO during controlled strikes
Knock waveformDecaying oscillatory burst around code 2048: disc resonance typically in the single-digit kHz (disc-dependent, unverified), decaying over tens of msStreamed capture plot

8. Manual schematic and assembly review checklist#

9. Ordered bench-test procedure#

Stop at the first abnormal result. Record captures with board serial, equipment IDs, disc identity, and operator.

A. Unpowered inspection and resistance tests#

  1. Complete the Section 8 checklist under magnification.
  2. Measure 3V3-to-GND in both polarities; investigate hard shorts.
  3. Measure J2 pin 1 to GND and to 3V3 in both meter polarities: expect megohm-class readings one way and a Schottky junction (about 0.2-0.4 V on diode test) the other way through each half of D1. This is the clamp-orientation check with no power applied: diode-test from GND (red on GND probe polarity conducting toward the node) and from the node to 3V3 must both show one forward drop; the reverse directions must read open.
  4. Measure J1 pin 1 to 3V3: about 10 kOhm (R5). J1 pin 3 to U1 SDO: about 100 Ohm (R4).

B. Bias midpoint verification (bench supply, no disc, no host)#

  1. Feed 3.3 V, current-limited to about 20 mA, into J1 pins 6/12 vs 5/11.
  2. Compute the expectation from the measured resistors: VMID = 3.3 x R3/(R2+R3) with the values recorded in step A; nominal 1.65 V.
  3. Measure VMID at the R2/R3 junction and the PIEZO node DC at J2 pin 1. Both must agree with the computed midpoint after correcting for meter loading (a 10 MOhm DMM reads the PIEZO node about 2.4% low through the 1.5 MOhm source impedance). A high-impedance buffer or 10 GOhm meter removes the correction.
  4. A PIEZO node stuck near 0 V or 3.3 V with a correct VMID indicts D1 orientation or a bridge, not the divider.

C. ADC bring-up and frame capture#

  1. Attach the PMOD host (or SPI master). Hold ~CS high, confirm MISO is released (R4/R5 make it read high-impedance, not driven).
  2. Issue the power-up calibration frame first: ~CS low with at least 16 SCLKs (the design FSM should always begin with one 32-clock or 16-clock dummy frame). SDO stays low throughout - do not log it as a sample.
  3. Run continuous 16-clock frames at moderate SCLK (1-8 MHz). Logic analyzer: verify 2 leading zeros, 12 data bits MSB-first launched on SCLK falling edges, SDO low after clock 14, 3-state after ~CS rises, and at least 200 ns of ~CS-high between frames.
  4. Confirm the quiescent code sits near 2048 with only a few LSB of noise and matches the Section B midpoint via code x 806 uV.
  5. Optionally raise SCLK toward 16 MHz / 1 MSPS and confirm the data stays clean (R4 slew, layout permitting).

D. Knock waveform capture via streaming#

  1. Connect the piezo disc to J2 and tape or clamp it to a surface (a contact mic must be mechanically coupled to something).
  2. Stream continuously into the FIFO at a rate comfortably above the disc's resonance - 100 kSPS or more is ample for single-digit-kHz bursts.
  3. Confirm the resting stream stays near mid-scale (2048-class codes).
  4. Knock the surface lightly. Expect a decaying oscillatory burst centered on the quiescent code: an initial swing whose polarity depends on disc wiring, ringing at the disc/surface resonance, decaying over tens of milliseconds back to mid-scale. Save raw captures.
  5. Verify envelope/trigger fabric logic (rectify + leaky integrator) fires on knocks and stays quiet at rest; record thresholds.
  6. Tap harder in controlled steps and watch for flat-topping at codes 0 and 4095: clipping at the clamp is expected for hard knocks and is the protection working, not a fault.

E. Clamp abuse test (bounded, bench supply only - unfabricated caveat)#

This test intentionally provokes the protection path. Run it on a current-limited bench supply, not on a host board, and accept that it is a prototype-risk experiment: no bench result yet exists showing the clamp network's real strike behavior, and piezo discs can deliver tens of volts open-circuit.

  1. Scope the PIEZO node (10x probe) while striking the coupled surface progressively harder. The node must clamp near -V_F and 3.3 V + V_F (about -0.3 to -0.5 V and +3.6 to +3.8 V depending on strike current per the BAT54S V_F table). Excursions far beyond that mean D1 is not doing its job - stop.
  2. Watch the 3.3 V rail during positive strikes: D1 pumps charge into the rail, and with only ~1.1 uF on board a large strike can lift a weakly loaded rail. Record any lift; if it is material, note a design action (bleed load or larger rail capacitance) before host use.
  3. Confirm normal streaming resumes immediately after each strike and the quiescent code returns to mid-scale (a shifted rest code after abuse suggests a damaged divider resistor or ADC input).
  4. Do not exceed hand-strike energy. Hammer blows, drop tests, and sustained overdrive are outside this prototype's evidence base; the 600 mA / <10 ms non-repetitive diode limit is real.

10. Troubleshooting map#

SymptomFirst measurementsLikely areas
MISO never toggles~CS/SCK at U1 pins, 3V3 at AVDD/DVDDHost SPI, J1 soldering, U1 orientation/solder, R4 open
First frame always zeroFrame length of first burstNot a fault: power-up offset calibration (needs 16+ SCLKs); FSM should discard it
All codes 0PIEZO node DC, VMIDNode stuck at GND: R2 open, D1 rotated, bridge to GND
All codes 4095PIEZO node DCNode stuck at 3V3: R3 open, D1 rotated, bridge to 3V3
Quiescent code far from 2048Measured R1/R2/R3, VMID vs PIEZO DCWrong resistor value, meter-loading misread, leaky/damaged D1, ADC offset never calibrated
Codes noisy at rest (tens of LSB)AVDD ripple, C1/C2 placement, SCLK integrityReference noise (AVDD is the reference), missing decoupling, ground bounce
Data misaligned by a bitAnalyzer clock edge settingData launches on SCLK falling and should be latched on rising; 2 leading zeros before D11
No knock responseDisc coupling, J2 continuityDisc not mechanically coupled, broken disc wire, open R1 leaves node biased but AC-dead only if disc side open
Knock rings forever / motorboatsStream rate vs burst, envelope constantsUnder-sampled aliasing or fabric filter constants, not usually hardware
Rest code shifts after hard strikesPIEZO DC, R1-R3 values, diode test on D1Strike damage to divider or D1; stop abuse testing
Rail lifts on strikes3V3 during strikeExpected pump path through D1; bound strike energy, consider rail loading

11. Bench record template#

FieldRecord
Board revision / serial
Disc identity (size, source, capacitance if measured)
Equipment (supply, DMM, scope, analyzer) and settings
Measured R1 / R2 / R3
Diode-test results on D1 (all four directions)
Computed vs measured VMID and PIEZO DC (loading-corrected)
Idle and streaming supply currents
SCLK, frame length, sample rate used
Frame-format capture reference
Quiescent code mean / noise (LSB)
Knock capture references and resonance/decay notes
Clamp abuse results (max excursions, rail lift)
Deviations, raw-file paths
Reviewer / date / disposition

12. Review conclusion#

The signal chain is small but complete and each element carries real weight: the 1 MOhm trio gives the charge-source disc a mid-scale DC home at negligible standing current, the BAT54S (wired per its verified series pinout) turns a disc's worst habit into a bounded rail event, the pull-up on ~CS keeps the registerless ADC quiet until the host is real, and the decoupling meets the ADS7042's explicit reference-capacitance requirement. The interface facts (16-clock read-only frame, two leading zeros, calibration frames) were verified against the TI datasheet and match the schematic's annotations. The principal open risks are physical, not schematic: no layout exists (the AVDD reference decoupling placement and the high-impedance PIEZO node routing both matter), the disc itself is an uncharacterized TBD part, the clamp's real strike behavior and rail-pump magnitude have never been observed, and the LF-corner estimate is disc-dependent. Until a fabricated board passes Sections 9.A-9.D (and 9.E deliberately), every number here remains a target.