← AXO-014

Circuit review & bench-test guide

AXO-014 — IR remote link PMOD module

Design-stage — board not yet fabricated

Document purpose#

This document explains the axo-014-ir module at component level and turns the design evidence into a practical manual-review and bench-test plan. It is based on generate_design.py, README.md, and reports/erc.rpt.

This board has never been fabricated or assembled. The schematic is ERC clean (0/0, see reports/erc.rpt) and the netlist has been reviewed, but the PCB layout has not been started — no gerbers, no renders, no physical board. Every number here is a design target or a datasheet expectation to verify. Layout-dependent items (RX shading from the TX LED's side lobe, emitter thermal spreading, supply-RC placement) cannot be reviewed yet and are flagged below.

1. What the board does#

AXO-014 carries both halves of an IR remote link so the NEC protocol can be taught in both directions on one PMOD:

It teaches nec_ir_rx (decode any TV remote) and nec_ir_tx (remote-control the actuator-line robot). It does not decode NEC in hardware — the FPGA does the timing/framing. The TX LED must be driven with the 38 kHz carrier, never DC-high.

Functional block diagram#

PMOD plug J1 (Type 1 GPIO)
  6/12: 3V3 ──┬── R1 47R ──┬── IR_VS ──┬── U1 Vs (TSDP34138)
              │            C1 10uF     C2 100nF
              │            (RC bulk)   (pin bypass)
              │            to GND      to GND
  1: IR_RX <── R2 100R ── IR_OUT ────── U1 OUT (push-pull, idle high)
              U1 GND ── GND

  6/12: 3V3 ── R3 33R (0805) ── LED_A ─[D1 TSAL6400]─ LED_K ── Q1 drain (AO3400A)
  2: IR_TX ── R4 1k ── IR_TX_G ──┬── Q1 gate         Q1 source ── GND
                                 └── R5 10k ── GND (gate pull-down)

2. Safety and scope boundaries#

3. Power and signal sequence#

  1. The host applies 3.3 V to PMOD 6/12 and GND to 5/11.
  2. Receiver rail: R1 (47 Ω) + C1 (10 µF) + C2 (100 nF) form the datasheet application-circuit supply filter; IR_VS (a filtered node, not the raw rail) powers U1's Vs. The RC suppresses supply disturbance that would otherwise couple into the demodulator's AGC.
  3. Receiver output: U1's OUT is push-pull (verified: the stock symbol types pin 1 as output, matching the TSDP341xx push-pull driver — unlike TSOP parts that need an external pull-up). It idles high and pulses low under a valid 38 kHz burst; R2 (100 Ω) series-protects it into PMOD 1.
  4. Emitter default-off: R5 (10 kΩ) pulls Q1's gate to GND, so the emitter is off while the host pin is unconfigured. R4 (1 kΩ) is the gate series resistor from PMOD 2.
  5. Emitter drive: the host toggles IR_TX with a 38 kHz carrier; Q1 turns on each carrier half-cycle, sinking LED current set by R3: I ≈ (3.3 − V_F(TSAL6400 ≈ 1.35 V) − I·Rds(on)(AO3400A ≈ 30 mΩ)) / 33 Ω ≈ 57 mA peak. NEC bursts gate the carrier so average LED current stays < 20 mA.

4. Interfaces#

PMOD pin123456789101112
NetIR_RXIR_TXNCNCGND3V3NCNCNCNCGND3V3

NEC framing the HDL must produce/decode: 9 ms AGC burst + 4.5 ms space, then 32 bits (address / ~address / command / ~command), each bit a 562.5 µs burst then a 562.5 µs space (logic 0) or 1.6875 ms space (logic 1), all bursts being 38 kHz carrier at ~50 % duty.

No dedicated test points; probe at J1 and the R1–R5/C1–C2/D1/Q1 pads. (Layout to-do: add probe pads; keep RX shaded from the TX side lobe.)

5. Component-by-component review#

5.1 Receiver#

Ref.PartFunction and why neededIf absent/openIf shorted, wrong, or misassembled
U1Vishay TSDP34138, 38 kHz IR demodulating receiver, 940 nm, push-pull OUTDemodulates the carrier; delivers a clean idle-high/active-low bitstream to the FPGANo RX; IR_RX floats (undefined at host)Vs/GND swap destroys U1; wrong carrier variant (not 38 kHz) won't demodulate the emitter; poor solder on OUT gives intermittent decode
R147 Ω (RC0603FR-0747RL)Receiver supply-RC series element (datasheet app circuit)Open: U1 unpowered, no RX≫47 Ω: excess IR drop starves Vs; short: RC filtering lost, supply noise raises decode errors

5.2 Receiver supply filter and output series#

Ref.ValueFunctionIf omitted or wrong
C110 µF 10 V X5R 0805RC bulk (datasheet recommends ≥ 4.7 µF); reservoir against burst-driven supply dipsOpen: RC filter defeated; AGC sees supply disturbance, spurious/false demod
C2100 nF 16 V X7RVs-pin high-frequency bypassOpen: HF supply noise reaches U1; marginal demod
R2100 ΩSeries protection on the receiver-driven (push-pull) OUT lineOpen: no RX at host (floats); shorted: works, no miswire protection

5.3 Emitter#

Ref.Part / valueFunctionIf omitted or wrong
R333 Ω 0805 (RC0805FR-0733RL)LED ballast setting ~57 mA peak; 0805 for I²R headroomOpen: no TX; smaller value: overcurrent risk; 0603: exceeds power rating and may drift/fail
D1Vishay TSAL6400, 940 nm 5 mm IR emitter, 100 mA cont. / 200 mA pulseThe transmit source, matched to the RX's 940 nm/38 kHz bandOpen/reversed: no emission; reversed polarity means the LED never conducts
Q1AO3400A, N-ch logic-level MOSFET, SOT-23, ~30 mΩLow-side switch gating the LED from IR_TXD-S short: LED stuck on (DC current); wrong pinout (G/S/D) breaks switching; open: no TX
R41 kΩGate series resistor from PMOD 2 (edge-rate/ringing control)Open: gate never driven, no TX; too large: slows the 38 kHz edges
R510 kΩGate pull-down: emitter OFF while the host pin is unconfiguredOpen: gate floats, LED can partially turn on at power-up; too small: host must fight it (negligible)

Power flags #FLG01 (3V3), #FLG02 (GND), and #FLG03 (IR_VS — the filtered node needs its own ERC source marker since it is fed through R1) are ERC markers, not physical parts. Every schematic reference designator (U1, D1, Q1, J1, R1–R5, C1–C2) is covered. No jumpers on this module.

6. Datasheet summary and design interpretation#

Primary references: Vishay TSDP341xx, TSAL6400, AO3400A. Check revisions before procurement.

DeviceKey facts used hereBoard-specific interpretation
TSDP3413838 kHz nominal, 940 nm, push-pull output stage (data-link grade, unlike remote-control TSOP with open-collector + internal pull-up); Vs 2.5–5.5 V; app circuit recommends 47 Ω + ≥ 4.7 µF supply RCNo external OUT pull-up fitted (push-pull); 47 Ω + 10 µF + 100 nF as the supply filter; re-verify RC values at design review
TSAL6400940 nm, V_F ≈ 1.35 V at ~100 mA, 100 mA continuous / 200 mA pulseAt ~57 mA the LED is well inside continuous rating; no duty limit can damage it — the constraint is decode quality and room flooding, not the part
AO3400AN-ch, 30 V, ~28–30 mΩ at Vgs ≥ 4.5 V (higher at lower Vgs); SOT-23 G(1)/S(2)/D(3)At 3.3 V gate drive Rds(on) is small vs the 33 Ω ballast, so current is set almost entirely by R3 and V_F

Emitter current math (design): I = (3.3 − 1.35 − I·0.03)/33 ≈ 57 mA peak. NEC at 50 % carrier duty gated by bursts → average LED current < 20 mA. A DC-high IR_TX dissipates ~190 mW (LED + ballast) — safe but wrong.

7. Expected values before bench testing#

None measured — no board exists.

QuantityExpectedHow to measure
3V3-to-GND resistance, unpoweredHigh (kΩ–MΩ after caps charge)DMM both polarities
IR_VS-to-3V3 resistance≈47 Ω (R1)DMM at IR_VS node → 3V3
IR_TX_G-to-GND≈10 kΩ (R5)DMM at gate node → GND
LED path (R3 + D1) forwardballast 33 Ω in series with a diode dropDMM diode mode across R3+D1
Idle IR_RX level≈3.3 V (idle high, no carrier)DMM/scope at PMOD 1
IR_RX under a 38 kHz remotepulses low during burstsScope at PMOD 1 while pressing a TV remote
LED peak current, active≈57 mA peakCurrent-sense in the LED leg / scope across R3
Average LED current, NEC traffic< 20 mAAveraging meter during transmit
Standalone RX supply currentreceiver quiescent ≈ 0.4–1 mA classµA/mA meter

The canonical first checks#

Receiver: power the board, scope PMOD 1 — idle 3.3 V. Point any TV remote at U1 and press a button: PMOD 1 should show the NEC envelope (a long ~9 ms low AGC pulse, then the bit pattern of low bursts). This is the nec_ir_rx input. No response = U1 unpowered (R1 open), wrong carrier, or R2 open.

Emitter: with the LED driven by a 38 kHz square wave (bench function generator or the HDL carrier), a phone camera pointed at D1 shows a flickering white/purple glow. Scope across R3 shows ~38 kHz pulses; the voltage across R3 divided by 33 Ω is the peak current (≈57 mA). A DC-high test should be brief only — it is safe but pointless.

8. Manual schematic and assembly review checklist#

Reviewable now:

Assembly (eventual first article — none exists yet):

9. Ordered bench-test procedure#

Stop at the first abnormal result. Record board serial, supply voltage, equipment, and operator. Contexts: standalone (bench supply + function generator / SPI-free GPIO source, phases B–D) and PMOD host (FPGA drives the carrier and decodes, phase E).

A. Unpowered inspection and resistance tests#

  1. Complete the Section 8 checklist under magnification.
  2. DMM 3V3-to-GND (J1 6 → 5), both polarities: no hard short.
  3. IR_VS → 3V3: ≈47 Ω (R1). IR_TX_G → GND: ≈10 kΩ (R5).
  4. Diode-mode across R3+D1 (LED_A → LED_K): a diode drop plus the ballast; reverse reads open. Confirms D1 polarity.
  5. IR_RX (PMOD 1) → U1 OUT: ≈100 Ω (R2).

B. Standalone first power (receiver)#

  1. Bench supply 3.3 V (measure it), current limit 50–100 mA, output off. Wire + to J1 6/12, − to 5/11.
  2. Power on: no trip; quiescent draw ≈ sub-mA. Verify IR_VS ≈ 3.3 V (small drop across R1), C1/C2 charged.
  3. Scope PMOD 1: idle high (≈3.3 V).

C. Receiver 38 kHz burst capture and NEC decode#

  1. Point any 38 kHz NEC remote (most TV remotes) at U1; press a button.
  2. Scope PMOD 1: confirm the 9 ms AGC low burst + 4.5 ms high space, then 32 bit-cells (each a 562.5 µs low burst followed by a 562.5 µs or 1.6875 ms high space). Idle returns high.
  3. Decode by hand or with a logic analyzer's IR decoder: the 32 bits are address / ~address / command / ~command; ~address should be the bitwise complement of address (a quick sanity check that framing is right).
  4. Vary distance/angle; confirm reliable demod within the receiver's range. Erratic/false low pulses point at a weak supply RC (C1) or ambient IR.

D. Emitter drive and current verification (duty limits)#

  1. Drive IR_TX from a function generator: 38 kHz square wave, 50 % duty, 3.3 V amplitude (never DC-high for the current-verification step beyond a momentary check).
  2. Scope across R3: pulses at 38 kHz; peak V_R3 / 33 Ω ≈ 57 mA peak. Confirm the average is much lower under gated bursts.
  3. Phone camera on D1: visible flicker confirms emission.
  4. Duty-limit note to record: peak 57 mA < 100 mA continuous, so no NEC duty pattern can overstress the LED; the only limit is thermal on R3 (0805, ~107 mW peak) and decode etiquette (don't flood the room). A brief DC-high test (≤ a few seconds) verifies the LED lights continuously and Q1 stays cool, then return to carrier drive.

E. PMOD-host loopback (FPGA carrier + decode)#

  1. Measure the host socket rail: 3.3 V. Plug in with the host unconfigured; verify IR_TX_G near 0 V (R5 holding Q1 off).
  2. Load nec_ir_tx: generate a 38 kHz carrier gated by a known NEC frame on IR_TX. Scope PMOD 2 and R3 to confirm the carrier and current.
  3. Load nec_ir_rx on IR_RX. Loopback: aim the emitter at (or reflect it toward) the receiver; the decoded address/command out of nec_ir_rx should equal what nec_ir_tx sent. This is the module's headline test.
  4. If the RX sees the TX even without line-of-sight (crosstalk), the layout shading is inadequate — record it as a layout finding.
  5. Range/interoperability: decode several real remotes; transmit to a consumer IR device or the actuator-line robot receiver.

F. Release-only tests#

Optical power/wavelength characterization, thermal soak of R3/D1 at worst duty, ESD at J1 and the exposed emitter, and RX sensitivity/interference testing belong to a separate qualification plan, gated on a board existing.

10. Troubleshooting map#

SymptomFirst measurementsLikely areas
No RX at allIR_VS voltage; PMOD 1 idle levelR1 open, U1 Vs/GND swap, R2 open, wrong carrier freq
RX idle low or noisySupply RC (C1/C2); ambient IRC1 open (poor filtering), fluorescent/sunlight interference
RX sees garbage NECEnvelope timing on scopeRemote is not NEC/38 kHz, or U1 partly damaged
No TX emissionScope PMOD 2 and R3; camera on D1IR_TX is DC not carrier, R4 open, Q1 pinout, D1 reversed, R3 open
TX stuck on (DC current)IR_TX level; Q1 drainHost driving DC-high, or Q1 D-S short
LED current wrongV across R3 / 33 ΩWrong R3 value, low gate drive raising Rds(on)
Loopback failsAim/reflection; TX and RX each aloneOptical alignment, RX shading vs TX crosstalk, one side broken
R3 runs hotDuty and packageExcess duty/DC-high, or an 0603 fitted by mistake

11. Bench record template#

FieldRecord
Board revision / serial
Supply voltage (exact) and current limit
Remote(s) used; host carrier source; equipment + calibration
Unpowered resistance / diode results (A.2–A.5)
Receiver idle level + NEC envelope capture path
Decoded address/command from a real remote
Emitter peak current (V_R3/33 Ω) and average
Duty/thermal note (R3 temperature)
FPGA loopback: sent vs decoded frame
RX/TX crosstalk observation
Deviations, photos, raw-file paths
Reviewer / date / disposition

12. Review conclusion#

The schematic is a faithful two-halves IR link: a push-pull TSDP34138 with the datasheet's 47 Ω + ≥ 4.7 µF supply RC and a 100 Ω output series resistor, and a TSAL6400 low-side-switched by an AO3400A behind a 33 Ω 0805 ballast that sets a ~57 mA peak, with a gate pull-down guaranteeing emitter-off before configuration. The current math is stated and safe (57 mA < 100 mA continuous, so no duty cycle can destroy the LED), the 0805 ballast choice is justified by I²R, and the "carrier not DC" rule is the operational discipline that matters. The principal risks are that nothing physical exists yet (no layout, no first-article data); TX/RX optical crosstalk that only a real layout with RX shading can resolve; and correct AO3400A/D1 orientation and the 0805 ballast at assembly. The bring-up ladder — RX NEC envelope capture, real- remote decode, emitter current verification with duty note, and the FPGA carrier→decode loopback — is exactly what the nec_ir_rx/nec_ir_tx cores will need to reproduce.