← AXO-009

Circuit review & bench-test guide

AXO-009 — buzzer pack (active + passive) PMOD module

Design-stage — board not yet fabricated

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:

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#

3. Power and control sequence#

  1. 3V3 and GND arrive on PMOD pins 6/12 and 5/11. C1 (100 nF) decouples the rail local to the two FET switches.
  2. At power-up with the host tri-stated, R2 and R4 pull both gates to GND, so Q1 and Q2 are off. ACT_SW and PZ_SW sit 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.
  3. Active beep: the host drives BUZZ_ACT high. Current flows through R1 into Q1's gate; Q1's gate reaches ~3.3 V (well above the AO3400A threshold), Q1 turns on, and ACT_SW is 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.
  4. Active stop: the host drives BUZZ_ACT low (or tri-states it, letting R2 pull it down). Q1 turns off. The coil current collapses; D1 clamps the inductive turn-off spike at ACT_SW to about 3V3 + one diode drop.
  5. Passive tone: the host applies a PWM square wave on BUZZ_PWM (e.g. 4 kHz, ~50% duty). Q2 switches PZ_SW on 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.
  6. 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 pin123456789101112
NetBUZZ_ACTBUZZ_PWMNCNCGND3V3NCNCNCNCGND3V3

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:

NetWhereRole
BUZZ_ACT_GQ1 gate, R1/R2 junctionActive-FET gate; ~0 V off, ~3.3 V driven
ACT_SWQ1 drain / BZ1 low side / D1 anodeActive buzzer switch node; flyback observation point
BUZZ_PWM_GQ2 gate, R3/R4 junctionPassive-FET gate; PWM square wave when driven
PZ_SWQ2 drain / BZ2 low side / R5Piezo 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 / valueFunction and why neededIf absent/openIf shorted, wrong, or misassembled
J112-pin PMOD plug, Type 1 GPIOHost power (3V3/GND) and the two drive lines BUZZ_ACT (pin 1) / BUZZ_PWM (pin 2); rest NCNo power or no drive — module deadOffset insertion puts 3V3 on a signal pin or swaps the two channels; verify pin 1 orientation
C1100 nF 16 V X7R 0603 (Murata GRM188R71C104KA01D)Local rail decoupling for the two FET switches; supplies the transient current each buzzer edge demandsMore rail bounce when a buzzer switches; worse EMIShort kills the 3V3 rail (host/bench limit should catch it)
#FLG01ERC power flag on 3V3Schematic ERC bookkeeping onlyERC "no power driver" warningNot applicable; no physical part
#FLG02ERC power flag on GNDSchematic ERC bookkeeping onlyERC warningNot applicable; no physical part

5.2 Active magnetic buzzer channel (on/off)#

Ref.Part / valueFunction and why neededIf absent/openIf shorted, wrong, or misassembled
BZ1TBD 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 loadNo sound on the active channelReversed 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
Q1AO3400A 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 highBuzzer 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
D1Nexperia 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 highQ1 drain sees an unclamped inductive spike at every turn-off — repeated stress toward/over the AO3400A 30 V Vds ratingReversed (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)
R11 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 pinGate 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
R210 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 FPGAGate can float; stray coupling may partially turn Q1 on → spurious/continuous beepShort 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 / valueFunction and why neededIf absent/openIf shorted, wrong, or misassembled
BZ2TBD 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 ≈ loudnessNo sound on the passive channelA 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
Q2AO3400A N-FET, SOT-23Low-side switch for BZ2. Gate = BUZZ_PWM_G, drain = PZ_SW, source = GND. Switched by the host PWMNo 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
R51 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 notesDisc can retain charge; PZ_SW can float high with Q2 off, leaving the piezo statically biased and muffling/detuning the next noteShort 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)
R31 kΩ 0603 (Yageo RC0603FR-071KL)Q2 gate series resistor from PMOD pin 2: edge-rate limit / gate protection, same role as R1R4 still pulls the gate down → Q2 off, no toneToo large slows switching — but the passive channel switches at kHz, so keep it small; short removes edge-rate limiting
R410 kΩ 0603 (Yageo RC0603FR-0710KL)Q2 gate pull-down: piezo silent until the host drives BUZZ_PWMGate floats; possible spurious partial turn-onShort 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)ValueBoard-specific interpretation
Drain-Source voltage V_DS(max)30 VThe 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 VThe 3.3 V gate drive is nowhere near the limit; no gate clamp needed
Continuous drain current I_D5.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 V19 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 V24 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 V18 mΩ typ / 26.5 mΩ maxFull-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_g6 nC typ (7 nC max) at V_GS=4.5 VTrivial charge; the 1 kΩ gate resistor comfortably drives it at kHz PWM rates
Switching timest_d(on) 3 ns, t_r 2.5 ns, t_d(off) 25 ns, t_f 4 nsNanosecond intrinsic edges; the audio band is negligibly slow by comparison
Body diode V_SD0.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)
PackageSOT-23Standard 3-pin; pin 1 gate, pin 2 source, pin 3 drain per the AO3400A symbol used in generate_design.py
Power dissipation P_D1.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.

QuantityDesign target / calculatedWhat 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) — negligibleScope 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 currentTBD — depends on chosen buzzer (commonly tens of mA at 3.3 V)Bench supply current with BUZZ_ACT high
Passive piezo drive currentTBD — small, capacitive; scales with frequency and disc sizeBench supply current under PWM
Flyback clamp level at Q1 turn-off (with D1)≈3V3 + V_f ≈ 4.0 V peak at ACT_SWSingle-shot scope on turn-off edge
Flyback spike without D1Large inductive overshoot (part-dependent) trending toward/over 30 V — do not dwell hereScope; compare against §9-B
Piezo loudest frequencyNear ~4 kHz resonance (disc-dependent)Frequency sweep, SPL by ear / meter
Piezo usable range~200 Hz to ~10 kHzSweep BUZZ_PWM, listen/scope
Gate switching RC (1 kΩ × ~630 pF)~0.6 µs — immeasurably fast vs audio edgesScope gate vs drain edge

8. Manual schematic and assembly review checklist#

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:

A. Unpowered inspection and resistance tests#

  1. Complete the §8 checklist under magnification.
  2. Measure 3V3-to-GND resistance in both meter polarities; investigate any hard short before applying power.
  3. 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).
  4. Confirm R5 reads ~1 kΩ from PZ_SW to 3V3, and that D1 is present on the active channel with correct band orientation.

B. First power, silent-default check#

  1. Apply 3V3 with no drive on either line (host tri-stated / jumpers open).
  2. 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).
  3. Confirm ACT_SW and PZ_SW sit 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.

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

  1. 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).
  2. With D1 fitted (normal board): the turn-off overshoot at ACT_SW should be clamped to ≈3V3 + V_f ≈ 4 V and decay quickly. This is the intended behavior.
  3. 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.
  4. Margin discussion: with D1, ACT_SW peaks ~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.
  5. Re-fit D1 (band/cathode to 3V3) before continuing.

E. Passive piezo frequency sweep#

  1. Drive BUZZ_PWM with a variable square wave and sweep ~200 Hz to ~10 kHz at ~50% duty.
  2. 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.
  3. 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.
  4. 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.
  5. Confirm the tone stops cleanly when the PWM is removed (R5 discharges the disc; no lingering bias).

F. N-FET gate checks#

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

  1. 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.
  2. Verify the chosen buzzers' measured current is within the PMOD 3V3 budget and that C1 keeps the rail quiet when a buzzer switches.
  3. Acoustic-emission, EMC, and endurance testing are out of scope for the first article and require pinned MPNs first.

10. Troubleshooting map#

SymptomFirst measurementsLikely areas
No sound on either channel3V3 present? Gate nodes swing 0↔3.3 V?J1 power, host not driving, R1/R2/R3/R4
Active silent, passive worksBZ1 polarity, Q1 gate on-state, ACT_SWBZ1 reversed/wrong part, Q1, R1/R2
Passive silent under PWMIs it PWM (not DC)? PZ_SW switching?Wrong drive (DC), Q2, R3/R4, BZ2 open
Passive beeps on any DC highPart type on BZ2An active buzzer was fitted where a passive belongs
Active makes no tone under PWMUnderstood as expected?Not a fault — active buzzer ignores PWM as pitch (§9-C)
Continuous beep, cannot stopQ1 D–S short? D1 reversed? Gate stuck high?Q1 short, D1 backwards, R2 open/host stuck
Large spike on ACT_SW at turn-offIs D1 fitted and correctly oriented?D1 missing/reversed/open
Weak or dull piezo notesPZ_SW idle level, R5 valueR5 open (disc stays biased) or wrong value
Gate never reaches ~3.3 VR1/R3 open? Host drive strength?Gate series resistor open, host pin
Buzzer never silent by defaultGate node at 0 V with host tri-stated?R2/R4 open, stray coupling
Rail dips when buzzer switchesC1 present/placed? Buzzer current?C1 missing, buzzer draws more than budget

11. Bench record template#

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