PCB reference
Selected Top connection · square = pin 1
Coordinates in mm, KiCad absolute origin. Copper fills and exact pad shapes omitted; verify in KiCad.
START HERE · KORAD KD3005D + ANALOG DISCOVERY 3
Use this visual guide with WaveForms, your BNC adapter, two probes and the W1 coax. Select a wire, match the board orientation, then use the enlarged pad view to connect it.
Loading today’s bench handoff…
Find the adapter’s printed connector labels; this overview does not depict its physical port order. Set both scope coupling jumpers to DC on the adapter—the default may be AC. Set the W1 output-impedance jumper to 0 Ω; do not add a 50 Ω terminator. Set each WaveForms scope channel’s attenuation to match its physical probe: currently CH1 = 10×, CH2 = 1×. A reading wrong by 10× on one channel means that channel’s probe switch and software attenuation disagree. All voltages below are the corrected values at the probe tip. Compensate the probes in the first visual step.
Probe ground clips and BNC shields are common ground. A negative rail is measured with the tip, never the ground clip. The BNC adapter makes the scope inputs single-ended. Leave unused scope flywires, W2, V− and DIO outputs disconnected/off.
Coax board end: use a BNC-to-clips or BNC-to-terminal breakout. The centre conductor is W1 signal; the outer shield is GND. If your cable has a BNC connector at both ends, it cannot attach directly to PCB header pins without a suitable breakout. Do not push a bare BNC centre pin onto a PCB pad.
Before the board steps, complete the unpowered assembly inspection. Check pin 1 and component positions in KiCad against your actual board; the illustrations use the current PCB files. Use grabbers on component leads or properly soldered insulated test tails for crowded IC pads. Do not balance loose probe tips across neighbouring pins.
Reference: Digilent BNC adapter setup and scope probe attenuation. The graphical route is manual only: the existing SDK assumes direct 1× flywire inputs and must not be used with these 10× probes without a driver change.
Loading your PCB wiring diagrams…
Keep the wiring shown in the selected visual step. With each probe switch and its WaveForms channel attenuation in agreement (CH1 10×, CH2 1×), displayed voltages refer to the probe tip. Use DC coupling jumpers. Ground clips stay on GND.
| Measurement | Initial screening range |
|---|---|
| +5 V | 4.75–5.25 V |
| Generated negative rail | −5.25 to −3.50 V |
| VREF_P / VREF_N | +2.35…+2.65 V / −2.65…−2.35 V |
| Reference tracking | Within 3% of ±half the measured +5 V |
| Gross ripple | ≤150 mVpp; capture at least 8 ms at ≥1 MS/s, with the complete DC rail visible |
These are provisional fault screens, not a measurement of microvolt noise. Record current and voltages. The negative supply is generated by the charge pump, not regulated to precisely −5 V. If it is missing, verify the pump clock and diode/capacitor polarity. Positive voltage on the negative rail, persistent CC or heating: turn off and inspect. No channel load is permitted until decoupling is fitted.
Keep the visual fixture: J1 1–2 (on-board crystal), nothing on J2.7, W1 disconnected, each probe’s software scaling matching its switch (CH1 10×, CH2 1×), DC coupling. Power off for every clock-pair or mux-case change.
| Measurement | Initial screening range |
|---|---|
| Supplies | +5 V: 4.75–5.25 V; +3.3 V: 3.15–3.45 V |
| 5 V logic | Low −0.3…0.45 V; high 4.0…5.3 V |
| Pi-facing 3.3 V logic | Low −0.3…0.45 V; high 2.7…3.6 V |
| Clocks | ±2% of the selected nominal frequency, 35–65% duty cycle |
| Divider relationships | BCLK = CLK6M ÷2; MCLK = ÷4; PUMP = ÷32; LRCLK = ÷128 |
MCLK low selects QR; high selects QL. Test QL/QR = 0/0, 1/0, 0/1 and 1/1 for both raw DIN and PI_DIN. Ignore switching edges when comparing settled levels. All channel boards remain disconnected during the rail-tie tests. Pi clocks should retain the raw clock polarity, with a short propagation delay; 50 MS/s gives 20 ns per sample, not precision jitter measurement.
With the rev B digital board (on-board crystal) the SDK scripts are the primary route again: run them with --probe 10,1 for the BNC adapter (CH1 10× probe, CH2 1× probe), or without it for direct 1× flywires. References to scope 1−/2− mean ground clips in the BNC setup. Do not switch fixtures or the --probe setting halfway through a test.
The KD3005D has one adjustable output. At 5.00 V, the red terminal is 5 V above the black terminal. It cannot provide independent +5 V and −5 V rails around the same ground simultaneously. The green terminal is protective earth, not a third supply output; leave it unused for this fixture and do not alter any existing earth bonds.
Your power board uses U1 (74HC244), C4, D1/D2, C5/C6 and R1 as an inverting charge pump and filter. With +5 V and a 192 kHz, 0–5 V input at PUMP, it generates a negative voltage at power J3 pin 16. The net is called “−5V”, but it is not regulated to exactly −5.000 V. Its voltage depends on load and losses. No pump clock means no useful negative supply.
Measure a negative rail with scope 2+ on the negative rail and 2− on GND. A multimeter uses red on the negative rail, black on GND and should display a minus sign. Never put AD3 GND on the negative rail.
100 mA is a provisional protection setting for a standalone power or digital board, not a measured consumption specification. Use 100 mA initially for the unloaded power + digital pair too. Current-limit trips require diagnosis.
All grounds on the 2×8 bus are odd-numbered pins. Even pins: 2 +5V · 4 VREF_P · 6 VREF_N · 8 MCLK · 10 PUMP · 12 QL · 14 QR · 16 −5V. Verify orientation in KiCad before making any connection.
Choose either the terminal script or manual WaveForms for this test. They cannot own the AD3 at the same time. Leave W2, V+, V− and digital pattern outputs off and disconnected.
Close WaveForms. In a terminal, run:
cd /home/mads/Projects/vinyl-adc python assembly/bench/run.py devices python assembly/bench/run.py power
The script first checks W1 with no PCB attached, then prompts for the power-board wiring and two sets of rail measurements. Type READY, ON and OFF only after completing the requested action. It cannot switch your Korad off. Reports and raw captures appear under assembly/bench/results/; use “Board tests · AD3” below to refresh results. Multiple devices: add --serial YOUR_SERIAL.
| Lead | Connect to | Purpose |
|---|---|---|
| Korad red; scope 1+ | J3.2 · +5V | Only external board supply |
| Korad black; AD3 GND; scope 1− and 2− | J3.1 · GND | Common reference |
| AD3 W1 | J3.10 · PUMP | 192 kHz, 0–5 V |
| Scope 2+ | J3.16 · −5V | Generated negative rail, never an AD3 supply connection |
| Scope 1+ in reference step | J3.4 · VREF_P | Positive reference |
| Scope 2+ in reference step | J3.6 · VREF_N | Negative reference |
| Measurement | Accept for initial screening |
|---|---|
| +5 V | 4.75–5.25 V |
| Negative rail | −5.25 to −3.50 V; observe the minus sign |
| VREF_P | +2.35 to +2.65 V |
| VREF_N | −2.65 to −2.35 V |
| Reference accuracy | Each reference within 3% of ±½ the measured +5 V |
| Gross ripple | ≤150 mVpp on each rail/reference |
Passing unloaded measurements does not establish the pump’s current capacity for both channels. That is checked later under the actual load.
The rev B digital board clocks itself. U9 (74HCU04) and Y1 form a 6.144 MHz Pierce oscillator whose output reaches J1 pin 1; the J1 shunt across pins 1–2 feeds it to the 74HCT132 buffer. W1 is not connected to the digital board for any test. Keep the power board, channels and Pi disconnected for the standalone test.
Easiest at the bench: start the local browser front end with python assembly/bench/gui.py and open http://127.0.0.1:8090. It shows each step’s wiring, one big READY / ON / OFF button and the current field, and can continue an earlier aborted run without repeating its passed steps. Or, in a terminal, close WaveForms and run one of these, depending on the scope fixture:
cd /home/mads/Projects/vinyl-adc python assembly/bench/run.py digital --ad3-3v3 --probe 10,1 # BNC adapter: CH1 10x probe, CH2 1x probe python assembly/bench/run.py digital --ad3-3v3 # direct 1x scope flywires
The script prompts for the rails wiring and then two probe checks on header pins only: PI_BCLK/PI_LRCLK at J2.4/J2.5 (3.3 V levels and frequencies, the Pi-safety check) and MCLK/PUMP at J4.8/J4.10 (5 V bus clocks). No DIO harness and no QL/QR ties. Omit --ad3-3v3 only if a separate regulated +3.3 V supply feeds J2.3.
| Lead | Connect to | Purpose |
|---|---|---|
| Korad red; scope 1+ | J3.2 · +5V | Only external board supply |
| Korad black; AD3 GND; scope 1− and 2− | J3.1 · GND | Common reference |
| AD3 W1 | J3.10 · PUMP | 192 kHz, 0–5 V |
| Scope 2+ | J3.16 · −5V | Generated negative rail, never an AD3 supply connection |
| Scope 1+ in reference step | J3.4 · VREF_P | Positive reference |
| Scope 2+ in reference step | J3.6 · VREF_N | Negative reference |
| Measurement | Accept for initial screening |
|---|---|
| +5 V | 4.75–5.25 V |
| Negative rail | −5.25 to −3.50 V; observe the minus sign |
| VREF_P | +2.35 to +2.65 V |
| VREF_N | −2.65 to −2.35 V |
| Reference accuracy | Each reference within 3% of ±½ the measured +5 V |
| Gross ripple | ≤150 mVpp on each rail/reference |
Passing unloaded measurements does not establish the pump’s current capacity for both channels. That is checked later under the actual load.
The rev B digital board clocks itself. U9 (74HCU04) and Y1 form a 6.144 MHz Pierce oscillator whose output reaches J1 pin 1; the J1 shunt across pins 1–2 feeds it to the 74HCT132 buffer. W1 is not connected to the digital board for any test. Keep the power board, channels and Pi disconnected for the standalone test.
Easiest at the bench: start the local browser front end with python assembly/bench/gui.py and open http://127.0.0.1:8090. It shows each step’s wiring, one big READY / ON / OFF button and the current field, and can continue an earlier aborted run without repeating its passed steps. Or, in a terminal, close WaveForms and run one of these, depending on the scope fixture:
cd /home/mads/Projects/vinyl-adc python assembly/bench/run.py digital --ad3-3v3 --probe 10,1 # BNC adapter: CH1 10x probe, CH2 1x probe python assembly/bench/run.py digital --ad3-3v3 # direct 1x scope flywires
The script prompts for the rails wiring, the DIO clock wiring and the four QL/QR mux cases, and records frequencies, duty cycles, Pi-side levels, the non-inversion delay screen and the mux truth table. Omit --ad3-3v3 only if a separate regulated +3.3 V supply feeds J2.3. The DIO flywires stay available on the BNC adapter’s pass-through header.
| Lead | Connect to | Setting |
|---|---|---|
| Korad red | J2.1 · +5V | 5.00 V / 100 mA initial limit |
| Korad black; AD3 GND; scope 1− and 2− | J2.2 · GND | Common reference |
| AD3 V+ | J2.3 · +3V3 | +3.30 V; V− off |
| J1 shunt | J1.1 → J1.2 | On-board crystal selected; J2.7 (GPCLK0) left open |
| Check | Scope 1+ | Scope 2+ | Expected |
|---|---|---|---|
| Pi-side clocks | J2.4 · PI_BCLK | J2.5 · PI_LRCLK | 3.072 MHz and 48 kHz, 3.3 V logic (highs 2.7…3.6 V) |
| Bus clocks | J4.8 · MCLK | J4.10 · PUMP | 1.536 MHz and 192 kHz, 5 V logic |
| If nothing runs | J1.1 · Pierce output | U4.10 · CLK6M | 6.144 MHz on both; see troubleshooting |
Screen frequencies within ±2% (the crystal itself should be within ±0.01 %) and duty cycle within 35–65%. Also check that divider outputs track the measured CLK6M by ÷2, ÷4, ÷32 and ÷128 respectively. Use the scope to check voltage: 5 V logic low −0.3…0.45 V, high 4.0…5.3 V; Pi-facing logic low −0.3…0.45 V, high 2.7…3.6 V. A logic analyzer alone cannot establish safe output voltage.
Compare BCLK to PI_BCLK and LRCLK to PI_LRCLK with both scope channels: the paths should be non-inverting, with small propagation delay. At 50 MS/s, each sample is 20 ns; this is a gross polarity/timing check, not a precision jitter measurement.
Keep the standalone digital fixture; the crystal keeps the board clocked. No channel boards may be attached while their Q bus inputs are tied to rails. Every tie change requires the full off/rewire/on sequence from step 4.
Keep DIO1 on MCLK. Add DIO6 and scope 1+ to U6.4 (DIN), DIO7 to J4.12 (QL), DIO8 to J4.14 (QR), and DIO9 plus scope 2+ to J2.6 (PI_DIN). Both scope minus leads remain at GND. Input 0 means tie to board GND; input 1 means tie to board +5 V. Do not drive these 5 V HC inputs from 3.3 V AD3 DIO outputs.
| QL / QR ties | DIN and PI_DIN expected |
|---|---|
| 0 / 0 | Constant low |
| 1 / 0 | Follow MCLK |
| 0 / 1 | Inverse of MCLK |
| 1 / 1 | Constant high |
Judge the centre of each MCLK half-cycle, after propagation delay. DIN is 5 V logic; PI_DIN must remain 3.3 V logic, using the voltage limits in step 4. Record actual QL/QR states as well as outputs. Save each capture with its case name. After finishing, power off and remove all four-case test ties before adding either channel.
There must be one driver on PUMP: AD3 W1 for the standalone power test, or the digital board for the combined test. Never connect both outputs to that net.
Both channels are now fully populated, including their seven 100 nF decoupling capacitors. Before powering a channel, check all 20 required top-side pad connections on it against its assembly map; unplated holes do not join top and bottom copper automatically. Confirm J21: 1–2 on the left board, 2–3 on the right board.
The minimum before the Pi is the stack test, which adds the channel boards one at a time so a faulty one is caught alone: power + digital + left channel (input shorted) → rails at power J3 and the left modulator output QL at digital J4.12 against MCLK; add the right channel → rails again and QR at J4.14; then references, PI_BCLK/PI_LRCLK and PI_DIN/PI_BCLK at the Pi header. No Pi, +3.3 V still from AD3 V+. PI_DIN must toggle continuously at 3.3 V logic; a constant line means a stuck modulator, a wrong J21 or a dead bus line. Start the +5 V current limit at 0.30 A.
left or right): it uses DIO inputs and a 1 kHz tone from W1 and needs the stack reduced to power + digital + that channel.# Browser front end (same tests, big buttons, resume support): python assembly/bench/gui.py # then open http://127.0.0.1:8090 # Terminal route. --probe declares each scope channel's probe: 10,1 = CH1 10x probe, CH2 1x probe (current BNC fixture) python assembly/bench/run.py power --probe 10,1 python assembly/bench/run.py digital --ad3-3v3 --probe 10,1 python assembly/bench/run.py stack --ad3-3v3 --probe 10,1 # optional per-channel debugging: python assembly/bench/run.py left --ad3-3v3 --probe 10,1
Follow the full fixture instructions in the SDK test README and the per-board “Board tests · AD3” stage below. A simulated PASS does not qualify a physical board.
| Observation | Next check, with power off before moving connections |
|---|---|
| Korad in CC; voltage collapses | Check shorts, IC orientation, reversed electrolytics, wrong bus alignment and a ground lead on −5V. Do not increase the current limit to bypass the symptom. |
| +5 V good, negative rail near 0 V | Verify 192 kHz at J3.10; then U1 supply and enables, WL1, pump capacitor/diode orientation and solder joints. No negative rail is expected with the clock stopped. |
| “−5V” is positive | Stop. Verify probe polarity and D1/D2 orientation against KiCad. Do not attach a channel. |
| Negative rail good, reference wrong | Check U2 orientation and supplies, reference resistor values and joints. Do not diagnose the negative reference until the negative rail is established. |
| No digital clocks | Scope J1.1 first. No 6.144 MHz there: check +5 V at U9.14, that U9 is a 74HCU04, the Y1/C16/C17/R10/R11 joints and that nothing loads J1.1. 6.144 MHz at J1.1 but nothing at U4.10: check the J1 shunt is across 1–2, U3 (74HCT132) and its links. Clock at U4.10 but no divider outputs: check U4.11 reset held low. A floating or wrong clock-select connection can look like a dead counter. |
| Oscillator runs far from 6.144 MHz (tens of MHz or a sub-harmonic) | U9 is probably a buffered 74HC04 instead of the unbuffered 74HCU04, or R11 is not 2k2; see design notes §5. Do not test the divider on a wrong clock. |
| All digital frequencies wrong by the same factor | Check the crystal marking and the measured J1.1 frequency. CLK6M is 6.144 MHz; the bus MCLK is 1.536 MHz. |
| 5 V clocks good, Pi outputs missing | Check the separate +3.3 V rail, U8 and the required bottom-only-board wire links. |
| Mux wrong or erratic | Verify QL/QR are actually tied to the intended rails, U6 enable is low, MCLK reaches U6.1, and both channel boards are disconnected. |
| Clocks stop or rails sag when a script opens | Only one application owns the AD3; opening a script resets W1 and V+. With --ad3-3v3 the +3.3 V rail comes from V+ and is only enabled inside each powered step. The crystal clock itself needs only +5 V. |
| SDK cannot load or find AD3 | Close WaveForms, inspect python assembly/bench/run.py devices, and check the installer notes. Device enumeration alone does not exercise hardware outputs. |
For each run record: board/revision, date, clock source and measured frequency, Korad current limit and measured current, rail means and ripple, clock frequencies/levels, mux case results and any heating or failed checks. Save WaveForms captures and the workspace separately; the assembly backup does not include WaveForms files. Do not mark skipped tests as passed.
Stop sequence: Korad off → W1 stop → AD3 V+ off → verify discharge. If software freezes or USB disconnects, turn the Korad off yourself; software cannot guarantee shutdown after a lost connection.
Guide checked against the current PCB snapshot (rev B digital board with the on-board Pierce oscillator) and existing provisional limits on 16 September 2026. No physical board measurements were made while updating it. References: KORAD KD-series manuals, KD-series manufacturer manual, RND-branded copy, AD3 electrical specifications, WaveForms Wavegen settings, local screening limits and validated probe plans.
Selected Top connection · square = pin 1
Coordinates in mm, KiCad absolute origin. Copper fills and exact pad shapes omitted; verify in KiCad.