Circuit review & bench-test guide
AXO-009 — buzzer pack (active + passive) PMOD module
Document purpose#
This document explains the axo-009-buzzer 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, rev 0.1-schematic, 2026-07-12), the README, the ERC report in reports/erc.rpt, and the Alpha & Omega AO3400A datasheet.
Prototype caveat — read first. This is an unfabricated prototype. The schematic is generated, ERC is clean (0 errors / 0 warnings, reports/erc.rpt), and the netlist has been reviewed. There is no PCB layout, no fabrication, no assembly, no BOM export, and no bench result of any kind. Two of the most important parts — the active buzzer BZ1 and the passive piezo BZ2 — are TBD: only the KiCad footprints are chosen (MagneticBuzzer_Kobitone_254-EMB84Q-RO and Buzzer_12x9.5RM7.6); the exact orderable MPNs are open. Every expected value below is a design target, not a measurement. Acoustic output and current draw depend entirely on the specific buzzers eventually chosen, so the sound-pressure and current numbers here are order-of-magnitude placeholders to be replaced once real parts are pinned.
1. What the board does#
The board is a 12-pin Type 1 GPIO PMOD carrying two independent sound channels, and the contrast between them is the lesson:
- Active channel (BZ1): an active magnetic buzzer with a built-in oscillator. Drive
BUZZ_ACTto a steady logic high and it beeps at its fixed factory pitch. This is the on/off lesson — alarms and status beeps. The host does not, and should not, generate a tone; a DC level is the whole interface. - Passive channel (BZ2): a passive piezo disc with no oscillator inside. Here the FPGA is the oscillator: a PWM square wave on
BUZZ_PWMsets the pitch (frequency) and, loosely, the loudness (duty). This is the melody/siren/DDS-timing lesson. A steady DC on this channel does nothing but a single click.
Each channel is a low-side AO3400A N-FET switch: the load's high side ties to 3V3, its low side to the FET drain, and the source to GND. A 1 kΩ gate series resistor and 10 kΩ gate pull-down keep the FET off (and the buzzer silent) until the host actively drives the line. The inductive magnetic buzzer gets a flyback diode (D1); the capacitive piezo gets a bleed resistor (R5) instead — the difference in load type drives the difference in protection.
Functional block diagram#
PMOD J1 (Type 1 GPIO)
ACTIVE CHANNEL (on/off)
pin1 BUZZ_ACT ──R1 1k──┬── BUZZ_ACT_G ──┤ Q1 gate (AO3400A)
│ │
R2 10k Q1 drain = ACT_SW
│ │
GND 3V3 ──[ BZ1 active buzzer ]── ACT_SW
│ (coil, self-oscillating)
3V3 ──|<── D1 1N4148WS ──── ACT_SW
(cathode to 3V3, flyback clamp)
│
Q1 source = GND
PASSIVE CHANNEL (PWM = pitch)
pin2 BUZZ_PWM ──R3 1k──┬── BUZZ_PWM_G ──┤ Q2 gate (AO3400A)
│ │
R4 10k Q2 drain = PZ_SW
│ │
GND 3V3 ──[ BZ2 passive piezo ]── PZ_SW
│ (capacitive disc)
3V3 ──[ R5 1k bleed ]────── PZ_SW
│ (discharge path, NO diode)
Q2 source = GND
pins 5/11 GND pins 6/12 3V3 C1 100nF rail decoupling
pins 3,4,7,8,9,10 = NC
2. Safety and scope boundaries#
- This is a 3.3 V logic-level module. Both
BUZZ_ACTandBUZZ_PWMare host-driven inputs to the FET gates; the module never drives the host, so the 100 Ω module-driven-line rule does not apply here (documented in the README). - Acoustic hazard is low but real. A piezo swept near its ~4 kHz resonance at full drive is loud and shrill at close range. Do not press the disc to your ear; keep bench sweeps short.
- Use a current-limited 3.3 V bench supply for standalone testing. Set the limit modestly (e.g. 100–200 mA) until the real buzzers are pinned and their actual current is known — an active magnetic buzzer can pull tens of mA continuously.
- Earth-referenced oscilloscope grounds clip only to board GND. The flyback measurement in §9 looks at the Q1 drain (
ACT_SW), which is a low-side node referenced to GND — safe for a standard probe. - Do not drive the active buzzer with a PWM expecting a tone, and do not drive the passive piezo with steady DC expecting sound. Both are functional misuse (see §9-C); neither damages the board but both waste bench time.
- Because BZ1/BZ2 are TBD parts, treat their current, coil inductance, and capacitance as unknown until datasheets exist. Verify the chosen active buzzer's rated current is within the PMOD 3V3 budget before relying on it.
- Clean beeps are not an EMC, acoustic-emission, or product-safety qualification. This is a learning module, not a certified product.
3. Power and control sequence#
- 3V3 and GND arrive on PMOD pins 6/12 and 5/11. C1 (100 nF) decouples the rail local to the two FET switches.
- At power-up with the host tri-stated, R2 and R4 pull both gates to GND, so Q1 and Q2 are off.
ACT_SWandPZ_SWsit at ~3V3 (pulled up through the buzzer / bleed resistor), and both buzzers are silent by default. This is the intended state for an unconfigured FPGA. - Active beep: the host drives
BUZZ_ACThigh. Current flows through R1 into Q1's gate; Q1's gate reaches ~3.3 V (well above the AO3400A threshold), Q1 turns on, andACT_SWis pulled toward GND. Current flows through BZ1's coil; BZ1's internal oscillator drives the coil and it beeps at its fixed pitch. Driving the pin high is the entire action — there is no tone to generate. - Active stop: the host drives
BUZZ_ACTlow (or tri-states it, letting R2 pull it down). Q1 turns off. The coil current collapses; D1 clamps the inductive turn-off spike atACT_SWto about 3V3 + one diode drop. - Passive tone: the host applies a PWM square wave on
BUZZ_PWM(e.g. 4 kHz, ~50% duty). Q2 switchesPZ_SWon and off at the PWM rate. The piezo disc is charged and discharged each cycle, flexing mechanically — the PWM frequency is the pitch. R5 provides the discharge path each time Q2 is off so the disc does not stay DC-biased. - Passive stop: the host drops the PWM to a static level. With Q2 off, R5 bleeds any residual charge off the disc and it goes silent (a static high or low produces at most a single click, not a tone).
Why the two channels are built differently#
The active buzzer is an inductive coil with its own driver; the passive piezo is a capacitive disc driven by the FPGA. An inductor resists a sudden current change and produces a large voltage spike at turn-off — hence D1. A capacitor produces no inductive flyback spike, so a diode is pointless; instead the risk is the disc staying charged/biased, so R5 provides a bleed path. Same FET, same gate network — opposite load physics, opposite protection part.
4. Interfaces and pin maps#
| PMOD pin | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Net | BUZZ_ACT | BUZZ_PWM | NC | NC | GND | 3V3 | NC | NC | NC | NC | GND | 3V3 |
- pin 1
BUZZ_ACT— steady-high drive for the active magnetic buzzer BZ1. - pin 2
BUZZ_PWM— PWM drive for the passive piezo BZ2 (frequency = pitch). - pins 5/11 GND, pins 6/12 3V3 — doubled power/ground per PMOD Type 1.
- pins 3, 4, 7, 8, 9, 10 — NC on this module.
Both signal pins are inputs to the module (FET gates). There is no open-drain line, no I2C, and nothing the module drives back toward the host.
Internal named nets worth probing on a future PCB:
| Net | Where | Role |
|---|---|---|
BUZZ_ACT_G | Q1 gate, R1/R2 junction | Active-FET gate; ~0 V off, ~3.3 V driven |
ACT_SW | Q1 drain / BZ1 low side / D1 anode | Active buzzer switch node; flyback observation point |
BUZZ_PWM_G | Q2 gate, R3/R4 junction | Passive-FET gate; PWM square wave when driven |
PZ_SW | Q2 drain / BZ2 low side / R5 | Piezo switch node; scope the PWM drive here |
5. Component-by-component review#
Every reference designator in generate_design.py appears below. #FLG01 and #FLG02 are ERC power-flag pseudo-components on 3V3 and GND; they have no physical footprint and are listed only for completeness.
5.1 Connector and shared power#
| Ref. | Part / value | Function and why needed | If absent/open | If shorted, wrong, or misassembled |
|---|---|---|---|---|
| J1 | 12-pin PMOD plug, Type 1 GPIO | Host power (3V3/GND) and the two drive lines BUZZ_ACT (pin 1) / BUZZ_PWM (pin 2); rest NC | No power or no drive — module dead | Offset insertion puts 3V3 on a signal pin or swaps the two channels; verify pin 1 orientation |
| C1 | 100 nF 16 V X7R 0603 (Murata GRM188R71C104KA01D) | Local rail decoupling for the two FET switches; supplies the transient current each buzzer edge demands | More rail bounce when a buzzer switches; worse EMI | Short kills the 3V3 rail (host/bench limit should catch it) |
| #FLG01 | ERC power flag on 3V3 | Schematic ERC bookkeeping only | ERC "no power driver" warning | Not applicable; no physical part |
| #FLG02 | ERC power flag on GND | Schematic ERC bookkeeping only | ERC warning | Not applicable; no physical part |
5.2 Active magnetic buzzer channel (on/off)#
| Ref. | Part / value | Function and why needed | If absent/open | If shorted, wrong, or misassembled |
|---|---|---|---|---|
| BZ1 | TBD 3.3 V active magnetic buzzer (Kobitone 254-EMB84Q-RO footprint) | Self-oscillating beeper: high side to 3V3, low side to Q1 drain (ACT_SW). Drive BUZZ_ACT high → fixed-pitch beep. Inductive coil load | No sound on the active channel | Reversed polarity may not oscillate (many magnetic buzzers are polarized); a shorted coil overloads Q1/rail; wrong (passive) part inserted here beeps only under external PWM |
| Q1 | AO3400A N-FET, SOT-23 (Transistor_FET:AO3400A) | Low-side switch for BZ1. Gate = BUZZ_ACT_G, drain = ACT_SW, source = GND. Grounds the buzzer's low side when the host drives high | Buzzer never sounds (path to GND open) | D–S short leaves BZ1 permanently energized (continuous beep); G–S short holds it off; rotated SOT-23 mis-wires gate/drain/source |
| D1 | Nexperia 1N4148WS, SOD-323 (Diode:1N4148WS) | Flyback clamp across the BZ1 coil: cathode to 3V3, anode to ACT_SW. Captures the inductive turn-off spike, clamping ACT_SW to ~3V3 + Vf instead of letting it fly high | Q1 drain sees an unclamped inductive spike at every turn-off — repeated stress toward/over the AO3400A 30 V Vds rating | Reversed (cathode to ACT_SW) shorts BZ1 to 3V3 through the diode whenever Q1 turns on — continuous current, no switching; a shorted diode ties ACT_SW to 3V3 (buzzer never grounds) |
| R1 | 1 kΩ 0603 (Yageo RC0603FR-071KL) | Q1 gate series resistor from PMOD pin 1: limits gate edge rate / inrush into Q1's gate capacitance, protects the host pin | Gate floats relative to the pin — R2 still pulls it down, so Q1 stays off (no drive path) | Too large slows switching (irrelevant at beep rates); short is mostly harmless here but removes edge-rate limiting |
| R2 | 10 kΩ 0603 (Yageo RC0603FR-0710KL) | Q1 gate pull-down: defines the off state so BZ1 is silent until the host drives BUZZ_ACT — critical for an unconfigured/tri-stated FPGA | Gate can float; stray coupling may partially turn Q1 on → spurious/continuous beep | Short to GND holds Q1 permanently off (buzzer never sounds); wrong-value (too small) fights the host's high level but 10 k is fine |
5.3 Passive piezo channel (PWM = pitch)#
| Ref. | Part / value | Function and why needed | If absent/open | If shorted, wrong, or misassembled |
|---|---|---|---|---|
| BZ2 | TBD 12 mm passive piezo disc, 7.6 mm pitch (Buzzer_12x9.5RM7.6 footprint) | No internal oscillator — the FPGA PWM is the oscillator. High side to 3V3, low side to Q2 drain (PZ_SW). Capacitive load; frequency = pitch, duty ≈ loudness | No sound on the passive channel | A shorted disc ties PZ_SW to 3V3; an active buzzer mistakenly fitted here would ignore the PWM and beep on any high; piezo is generally non-polarized |
| Q2 | AO3400A N-FET, SOT-23 | Low-side switch for BZ2. Gate = BUZZ_PWM_G, drain = PZ_SW, source = GND. Switched by the host PWM | No tone (disc never grounds) | D–S short DC-biases the disc (a click then silence); G–S short holds it off; rotated package mis-wires pins |
| R5 | 1 kΩ 0603 (Yageo RC0603FR-071KL) | Bleed resistor in parallel with the piezo, 3V3 to PZ_SW. A capacitive load has no inductive flyback, so no diode is used; instead R5 gives the disc a discharge path each PWM-off phase so it does not stay DC-charged/biased between notes | Disc can retain charge; PZ_SW can float high with Q2 off, leaving the piezo statically biased and muffling/detuning the next note | Short ties PZ_SW to 3V3 (disc never grounds, no tone); too small wastes current continuously through Q2; too large slows the discharge (weaker/duller notes) |
| R3 | 1 kΩ 0603 (Yageo RC0603FR-071KL) | Q2 gate series resistor from PMOD pin 2: edge-rate limit / gate protection, same role as R1 | R4 still pulls the gate down → Q2 off, no tone | Too large slows switching — but the passive channel switches at kHz, so keep it small; short removes edge-rate limiting |
| R4 | 10 kΩ 0603 (Yageo RC0603FR-0710KL) | Q2 gate pull-down: piezo silent until the host drives BUZZ_PWM | Gate floats; possible spurious partial turn-on | Short holds Q2 off (no tone); analogous to R2 |
Why R5 is a resistor and D1 is a diode — the core teaching point. A diode across BZ1 does real work: an inductor forced to stop conducting develops V = -L·di/dt, a fast spike that D1 catches. A diode across BZ2 would do nothing useful — a capacitor does not generate a flyback spike. What a capacitive disc needs instead is a path to bleed its stored charge so it does not sit at a DC bias between PWM phases; that is exactly what R5's 1 kΩ to 3V3 provides. Matching the protection part to the load's physics is the lesson.
6. Datasheet summary and design interpretation#
Consulted: Alpha & Omega Semiconductor AO3400A, 30 V N-Channel MOSFET, Rev 3.1 (July 2023), <http://www.aosmd.com/pdfs/datasheet/AO3400A.pdf>. The 1N4148WS (Nexperia, SOD-323) is summarized from general knowledge: ~100 V, ~150 mA average forward, fast switching (~4 ns reverse-recovery), Vf roughly 0.7–1 V at these small currents. BZ1 and BZ2 have no datasheet — they are TBD parts; their numbers must be filled in once MPNs are pinned.
| AO3400A fact (Rev 3.1) | Value | Board-specific interpretation |
|---|---|---|
| Drain-Source voltage V_DS(max) | 30 V | The clamped ACT_SW node (≈3V3 + Vf ≈ 4 V with D1) sits far under 30 V. The margin discussion in §9 is about what happens to this rating without D1 fitted |
| Gate-Source voltage V_GS(max) | ±12 V | The 3.3 V gate drive is nowhere near the limit; no gate clamp needed |
| Continuous drain current I_D | 5.7 A at T_A=25 °C (4.7 A at 70 °C) | Vastly more than any small buzzer coil will draw; the FET is grossly over-rated for this job (a deliberate, cheap, robust choice) |
| Gate threshold V_GS(th) | 0.65 V min / 1.05 V typ / 1.45 V max (V_DS=V_GS, I_D=250 µA) | A 3.3 V drive is ~2× the max threshold — the FET fully enhances. Even a worst-case 1.45 V part is solidly on at 3.3 V |
| R_DS(on) at V_GS=4.5 V | 19 mΩ typ / 32 mΩ max (I_D=5 A) | Bounds the on-resistance just above our 3.3 V drive |
| R_DS(on) at V_GS=2.5 V | 24 mΩ typ / 48 mΩ max (I_D=3 A) | Bounds it just below. Interpolating to V_GS≈3.3 V gives ≈22 mΩ typ — negligible drop at buzzer-level currents (e.g. 22 mΩ × 50 mA ≈ 1.1 mV) |
| R_DS(on) at V_GS=10 V | 18 mΩ typ / 26.5 mΩ max | Full-enhancement reference; we never reach 10 V, but 3.3 V is already close to this floor |
| Input capacitance C_iss | ~630 pF (V_DS=15 V) | With R1/R3 = 1 kΩ the gate RC ≈ 1 kΩ × 630 pF ≈ 0.6 µs — far faster than any audio-rate edge; switching is effectively instantaneous at our frequencies |
| Total gate charge Q_g | 6 nC typ (7 nC max) at V_GS=4.5 V | Trivial charge; the 1 kΩ gate resistor comfortably drives it at kHz PWM rates |
| Switching times | t_d(on) 3 ns, t_r 2.5 ns, t_d(off) 25 ns, t_f 4 ns | Nanosecond intrinsic edges; the audio band is negligibly slow by comparison |
| Body diode V_SD | 0.7 V typ / 1 V max (I_S=1 A) | Present drain→source; irrelevant for this low-side, single-switch topology (no reverse conduction expected) |
| Package | SOT-23 | Standard 3-pin; pin 1 gate, pin 2 source, pin 3 drain per the AO3400A symbol used in generate_design.py |
| Power dissipation P_D | 1.4 W (25 °C) / 0.9 W (70 °C) | Orders of magnitude above the milliwatt-scale dissipation expected here; thermally a non-issue |
No shoot-through is possible. Each channel is a single low-side switch — there is no complementary high-side FET, so there is no half-bridge and no cross-conduction path. The only "both on" concern would be excessive average current if a load shorted, which the FET's 5.7 A rating and the rail limit absorb.
Check the latest datasheet revision and confirm the SOT-23 pinout against the chosen part before procurement.
7. Expected values before bench testing#
Targets assume 3V3 = 3.300 V. BZ1/BZ2 current and SPL are placeholders pending real MPNs. All values are design targets, not measured results.
| Quantity | Design target / calculated | What to measure |
|---|---|---|
| Gate off-state voltage (host tri-stated) | ~0 V at BUZZ_ACT_G / BUZZ_PWM_G (R2/R4 pull-down) | DMM at gate node |
| Gate on-state voltage (host driving high) | ~3.3 V (no current through R1/R3 at DC, so no divider drop) | DMM / scope at gate node |
| V_GS margin over threshold | ~3.3 V vs ≤1.45 V max V_GS(th) → ~2.3× | Compare measured gate to datasheet |
| R_DS(on) at V_GS≈3.3 V | ≈22 mΩ typ (interpolated 2.5 V/4.5 V rows) | V_DS drop at known current / I |
| Q1/Q2 drain drop at, say, 50 mA | ≈1.1 mV (22 mΩ × 50 mA) — negligible | Scope ACT_SW/PZ_SW low level |
| Silent-default idle current | ~0 mA (both FETs off; only leakage) | Bench supply current, no drive |
| Active buzzer beep current | TBD — depends on chosen buzzer (commonly tens of mA at 3.3 V) | Bench supply current with BUZZ_ACT high |
| Passive piezo drive current | TBD — small, capacitive; scales with frequency and disc size | Bench supply current under PWM |
| Flyback clamp level at Q1 turn-off (with D1) | ≈3V3 + V_f ≈ 4.0 V peak at ACT_SW | Single-shot scope on turn-off edge |
| Flyback spike without D1 | Large inductive overshoot (part-dependent) trending toward/over 30 V — do not dwell here | Scope; compare against §9-B |
| Piezo loudest frequency | Near ~4 kHz resonance (disc-dependent) | Frequency sweep, SPL by ear / meter |
| Piezo usable range | ~200 Hz to ~10 kHz | Sweep BUZZ_PWM, listen/scope |
| Gate switching RC (1 kΩ × ~630 pF) | ~0.6 µs — immeasurably fast vs audio edges | Scope gate vs drain edge |
8. Manual schematic and assembly review checklist#
- Confirm J1 pin 1 orientation: pin 1 = BUZZ_ACT (active), pin 2 = BUZZ_PWM (passive). Swapping them silently swaps the two lessons.
- Verify Q1 and Q2 SOT-23 orientation (gate/source/drain) against the AO3400A footprint; a rotated FET mis-wires the switch.
- D1 polarity is critical: cathode (band) to 3V3, anode to
ACT_SW. Reversed D1 is a hard fault (continuous conduction). Confirm during placement. - Confirm BZ1 is the active part and BZ2 is the passive part, and that BZ1's polarity (if the chosen magnetic buzzer is polarized) matches high-side-to-3V3, low-side-to-
ACT_SW. - Measure R1 = R3 = 1 kΩ (gate series) and R2 = R4 = 10 kΩ (gate pull-down) and R5 = 1 kΩ (piezo bleed) before power.
- Confirm R5 is present and D1 is absent on the piezo channel, and D1 is present and no bleed diode is on the active channel — the two channels are deliberately asymmetric.
- Verify C1 = 100 nF across 3V3/GND, placed close to the two FETs (carry into layout review — layout not yet started).
- Confirm the TBD buzzer MPNs are pinned and their rated current fits the PMOD 3V3 budget before any release build.
- Confirm pins 3,4,7,8,9,10 are NC and not accidentally routed.
9. Ordered bench-test procedure#
Stop at the first abnormal result. Record board serial, host identity, the actual buzzer MPNs fitted (or "TBD prototype part"), measured 3V3, and resistor values. Two contexts are called out throughout:
- Context (a) — PMOD host: plug into a 3.3 V PMOD Type 1 port on the ECP5 host (ULX3S-class). Drive BUZZ_ACT / BUZZ_PWM from FPGA GPIO/PWM.
- Context (b) — standalone 3.3 V bench: wire 3V3/GND from a current-limited bench supply; drive BUZZ_ACT / BUZZ_PWM from a 3.3 V signal source (function generator, Pico, or a manual jumper to 3V3 for the steady-high tests).
A. Unpowered inspection and resistance tests#
- Complete the §8 checklist under magnification.
- Measure 3V3-to-GND resistance in both meter polarities; investigate any hard short before applying power.
- Confirm each gate node reads ~10 kΩ to GND (R2/R4) with the host disconnected, and ~1 kΩ from the gate to its PMOD pin (R1/R3).
- Confirm R5 reads ~1 kΩ from
PZ_SWto 3V3, and that D1 is present on the active channel with correct band orientation.
B. First power, silent-default check#
- Apply 3V3 with no drive on either line (host tri-stated / jumpers open).
- Expect no sound from either buzzer and near-zero supply current. Confirm both gate nodes sit at ~0 V — this proves R2/R4 hold the FETs off and the module is silent by default (the correct state for an unconfigured FPGA).
- Confirm
ACT_SWandPZ_SWsit near 3V3 (pulled up through the buzzer / bleed with the FETs off).
C. Active-vs-passive drive verification (the defining test)#
This test proves each channel behaves according to its load type. Do it before anything else acoustic.
- Steady HIGH on BUZZ_ACT. Drive pin 1 to a static 3.3 V (jumper to 3V3 or set the GPIO high). BZ1 should beep at its fixed pitch — its internal oscillator runs from the DC level. Note: a DC level, not an FPGA tone, produces this sound.
- Steady HIGH on BUZZ_PWM. Drive pin 2 to a static 3.3 V. BZ2 should be essentially silent — at most a single click as the disc charges. A passive piezo makes no tone from DC.
- PWM on BUZZ_PWM. Apply a ~4 kHz, ~50% square wave to pin 2. BZ2 should now sing at ~4 kHz. This is the FPGA acting as the oscillator.
- PWM on BUZZ_ACT (negative test). Applying PWM to pin 1 is wrong/ pointless: the active buzzer just beeps whenever the line is high and chops the beep with the PWM — it does not track the PWM as pitch. Confirm this to internalize the contrast, then stop driving pin 1 with PWM.
- Record which channel responded to DC and which to PWM. Active = DC/on-off, passive = PWM/pitch. If they are reversed, BZ1 and BZ2 are swapped or the wrong part type was fitted.
D. Flyback capture on the active (magnetic) buzzer#
Purpose: confirm D1 clamps the coil's turn-off spike and understand the Vds margin.
- Scope the Q1 drain (
ACT_SW), GND-referenced, DC-coupled, with enough bandwidth (≥20 MHz) to catch a fast edge. Trigger single-shot on the turn-off edge (BUZZ_ACT high→low). - With D1 fitted (normal board): the turn-off overshoot at
ACT_SWshould be clamped to ≈3V3 + V_f ≈ 4 V and decay quickly. This is the intended behavior. - With D1 removed (diagnostic only, brief): the same edge should show a much larger inductive overshoot (
V = -L·di/dt), part-dependent, trending toward or beyond the AO3400A's 30 V V_DS(max). An unclamped small-coil spike can approach or exceed the FET rating and repeatedly stress it. Do not run the board this way beyond the measurement. - Margin discussion: with D1,
ACT_SWpeaks ~4 V, leaving ~26 V of the 30 V rating unused — a comfortable margin. Without D1, the margin is uncontrolled and depends on the (TBD) coil. This is the concrete reason the inductive channel gets a diode and the capacitive one does not. - Re-fit D1 (band/cathode to 3V3) before continuing.
E. Passive piezo frequency sweep#
- Drive BUZZ_PWM with a variable square wave and sweep ~200 Hz to ~10 kHz at ~50% duty.
- Note the frequency where the disc is loudest — expect it near ~4 kHz (mechanical resonance of a 12 mm disc). Measure SPL by ear at a safe distance, or with an SPL meter if available.
- Scope both the drive at
PZ_SW(a clean chopped square wave) and, if you can probe it, the disc voltage, to see the capacitive load's charge/ discharge shape and confirm R5 bleeds it between edges. - Duty ≈ loudness: at a fixed frequency, vary duty (e.g. 10% → 50%) and note the loudness change. This is approximate, not a calibrated volume control — record the trend, not an absolute.
- Confirm the tone stops cleanly when the PWM is removed (R5 discharges the disc; no lingering bias).
F. N-FET gate checks#
- Off state: with the host tri-stated, confirm both gate nodes measure ~0 V (R2/R4 working → FET off → silent by default). This is the safety-relevant default.
- On state: drive each line high and confirm the gate reaches ~3.3 V. Compare to the datasheet V_GS(th) (≤1.45 V max): the FET is fully enhanced with R_DS(on) ≈ 22 mΩ (interpolated from the 2.5 V/4.5 V rows).
- Drop check: with a buzzer conducting, scope the FET low level at
ACT_SW/PZ_SW; it should sit only a few mV above GND (R_DS(on) × I), confirming the FET is a good switch, not a linear device. - No shoot-through: confirm by inspection there is only one FET per channel (low-side) — there is no high-side device and therefore no cross-conduction path to test for.
G. Host-integration and release tests#
- In context (a), drive both channels from the eventual HDL (a tone/PWM core for BZ2, a simple gate for BZ1) and confirm clean edges through R1/R3.
- Verify the chosen buzzers' measured current is within the PMOD 3V3 budget and that C1 keeps the rail quiet when a buzzer switches.
- Acoustic-emission, EMC, and endurance testing are out of scope for the first article and require pinned MPNs first.
10. Troubleshooting map#
| Symptom | First measurements | Likely areas |
|---|---|---|
| No sound on either channel | 3V3 present? Gate nodes swing 0↔3.3 V? | J1 power, host not driving, R1/R2/R3/R4 |
| Active silent, passive works | BZ1 polarity, Q1 gate on-state, ACT_SW | BZ1 reversed/wrong part, Q1, R1/R2 |
| Passive silent under PWM | Is it PWM (not DC)? PZ_SW switching? | Wrong drive (DC), Q2, R3/R4, BZ2 open |
| Passive beeps on any DC high | Part type on BZ2 | An active buzzer was fitted where a passive belongs |
| Active makes no tone under PWM | Understood as expected? | Not a fault — active buzzer ignores PWM as pitch (§9-C) |
| Continuous beep, cannot stop | Q1 D–S short? D1 reversed? Gate stuck high? | Q1 short, D1 backwards, R2 open/host stuck |
Large spike on ACT_SW at turn-off | Is D1 fitted and correctly oriented? | D1 missing/reversed/open |
| Weak or dull piezo notes | PZ_SW idle level, R5 value | R5 open (disc stays biased) or wrong value |
| Gate never reaches ~3.3 V | R1/R3 open? Host drive strength? | Gate series resistor open, host pin |
| Buzzer never silent by default | Gate node at 0 V with host tri-stated? | R2/R4 open, stray coupling |
| Rail dips when buzzer switches | C1 present/placed? Buzzer current? | C1 missing, buzzer draws more than budget |
11. Bench record template#
| Field | Record |
|---|---|
| Board revision / serial | |
| Host context (PMOD FPGA / standalone) and IDs | |
| BZ1 / BZ2 actual MPNs fitted (or "TBD") | |
| Measured 3V3 | |
| R1/R2/R3/R4/R5 measured values | |
| Silent-default: gate off-state voltages | |
| Gate on-state voltages (both channels) | |
| Active-vs-passive verification (§9-C) result | |
Flyback capture with/without D1 (peak at ACT_SW) | |
| Piezo resonance frequency and loudest point | |
| Piezo sweep range confirmed (200 Hz–10 kHz) | |
| Duty-vs-loudness observation | |
| Active buzzer current / passive drive current | |
| Deviations, scope captures, raw-file paths | |
| Reviewer / date / disposition |
12. Review conclusion#
The design is a clean, deliberately asymmetric two-channel switch: two identical AO3400A low-side stages, each with a 1 kΩ gate series resistor and a 10 kΩ pull-down that guarantee silent-by-default behavior for an unconfigured FPGA, differentiated only by their load-appropriate protection — a 1N4148WS flyback diode on the inductive magnetic buzzer and a 1 kΩ bleed resistor on the capacitive piezo. The AO3400A is grossly over-rated for buzzer-level currents (5.7 A, 30 V, ~22 mΩ at the 3.3 V drive), so the FET is never the risk; a 3.3 V gate is ~2× its worst-case threshold and fully enhances it, and the single low-side topology rules out shoot-through. The teaching contrast — steady DC drives the self-oscillating active buzzer, PWM drives the FPGA-is-the-oscillator passive piezo — is the point of the board and the first thing to verify on the bench.
The principal open items are that no PCB exists yet (layout, decoupling placement, and buzzer footprints all unverified), that BZ1 and BZ2 are TBD parts so every current and sound-pressure figure here is a placeholder until real MPNs are pinned and their current is checked against the PMOD budget, that D1 polarity is a load-bearing assembly detail (reversed D1 is a hard fault), and that every expected value in this guide is calculated or reasoned, not measured on hardware. The schematic is ERC-clean (0/0) and the netlist reviewed; nothing here has been fabricated or tested.