AM/FM Receiver Molecule
Public Made by Adomby adom
USB-powered AM/FM receiver on an Adom Molecule: discrete BJT and op-amp superhet (10.7 MHz and 455 kHz IFs), STM32G0B1 tuning, self-calibration and USB audio over one USB-C cable. 96 x 96 mm pin grid, 4 layers, KiCad 10.
AM/FM Receiver Molecule
A USB-powered AM/FM broadcast receiver on an Adom Molecule: the radio is discrete transistors and op-amps, and an STM32G0B1 tunes it, calibrates it, and streams the audio to a PC over the same USB-C cable that powers it and updates its firmware.
Status
Designed and checked in KiCad 10 (ERC and DRC clean, netlist checked pin for pin against the generator), with JLCPCB fab files ready. Not built or tested yet. RF performance is hand-calculated; expect to trim tank capacitors at bring-up. The firmware is outlined below but not written yet.
Parts
All 88 BOM lines (312 parts JLC places, plus the 32 machine pins and contacts the Adom Factory presses in) link to a wiki page with the symbol, footprint, 3D model, datasheet and the LCSC, Mouser and DigiKey numbers. Pages created for this board carry a verification log; check a page before reusing its part.
| Qty | References | Value | Part (MPN) | Wiki page | LCSC |
|---|---|---|---|---|---|
| 12 | C101 C104 C212 C214 C402 C406 C503 C512 C603 C605 C701 C722 | 10u | Samsung Electro-Mechanics CL21A106KAYNNNE | adom/samsung-cl21a-x5r-0805 | C15850 |
| 35 | C102 C105 C107 C110 C111 C115 C205 C209 C211 C213 C215 C311 C314 C401 C403 C404 C405 C407 C413 C504 C506 C510 C513 C604 C606 C607 C610 C615 C620 C702 C706 C709 C712 C721 C723 | 100n | YAGEO CC0603KRX7R9BB104 | adom/cc0603-100nf | C14663 |
| 13 | C103 C108 C202 C204 C206 C207 C208 C210 C613 C614 C616 C716 C717 | 1u | Samsung Electro-Mechanics CL10A105KB8NNNC | adom/cl10a105kb8nnnc | C15849 |
| 1 | C106 | 22u | Samsung Electro-Mechanics CL21A226MAQNNNE | adom/samsung-cl21a-x5r-0805 | C45783 |
| 14 | C109 C322 C501 C505 C507 C508 C601 C602 C608 C609 C611 C705 C708 C711 | 10n | FH (Guangdong Fenghua Advanced Tech) 0603B103K500NT | adom/fenghua-0603-mlcc | C57112 |
| 3 | C114 C201 C203 | 4.7u | Samsung Electro-Mechanics CL21A475KAQNNNE | adom/cl21a475kaqnnng (1) | C1779 |
| 2 | C116 C117 | 18p | Samsung Electro-Mechanics CL10C180JB8NNNC | adom/cl10c180jb8nnnc | C1647 |
| 2 | C301 C302 | 2.7n | Murata Electronics GRM1885C1H272JA01D | adom/murata-grm18-gcm18-c0g-0603 | C77034 |
| 5 | C303 C304 C412 C707 C710 | 47p | Samsung Electro-Mechanics CL10C470JB8NNNC | adom/samsung-cl10c-c0g-0603 | C1671 |
| 7 | C305 C306 C310 C320 C502 C509 C714 | 22p | Samsung Electro-Mechanics CL10C220JB8NNNC | adom/samsung-cl10c-c0g-0603 | C1653 |
| 8 | C307 C308 C312 C315 C316 C619 C703 C720 | 1n | Samsung Electro-Mechanics CL10B102KB8NNNC | adom/cl10b102kb8nnnc | C1588 |
| 2 | C309 C319 | 3.3p | YAGEO CC0603CRNPO9BN3R3 | adom/yageo-cc0603-npo | C282249 |
| 2 | C313 C318 | 4.7p | FH (Guangdong Fenghua Advanced Tech) 0603CG4R7C500NT | adom/fenghua-0603-mlcc | C1669 |
| 3 | C317 C410 C516 | 15p | Samsung Electro-Mechanics CL10C150JB8NNNC | adom/samsung-cl10c-c0g-0603 | C1644 |
| 1 | C321 | 2.2p | FH (Guangdong Fenghua Advanced Tech) 0603CG2R2C500NT | adom/fenghua-0603-mlcc | C1651 |
| 4 | C323 C511 C514 C713 | 100p | Samsung Electro-Mechanics CL10C101JB8NNNC | adom/samsung-cl10c-c0g-0603 | C14858 |
| 2 | C408 C515 | 220p | Murata Electronics GCM1885C2A221JA16D | adom/murata-grm18-gcm18-c0g-0603 | C388907 |
| 1 | C409 | 470p | YAGEO CC0603JRNPO9BN471 | adom/yageo-cc0603-npo | C106211 |
| 1 | C411 | 33p | Samsung Electro-Mechanics CL10C330JB8NNNC | adom/samsung-cl10c-c0g-0603 | C1663 |
| 2 | C612 C618 | 2.2n | Walsin Tech Corp 0603N222J500CT | adom/0603n222j500ct | C296055 |
| 1 | C617 | 4.7n | YAGEO CC0603JRNPO9BN472 | adom/yageo-cc0603-npo | C576818 |
| 1 | C704 | 150p | YAGEO CC0603JRNPO9BN151 | adom/yageo-cc0603-npo | C107038 |
| 2 | C715 C718 | 1.5n | YAGEO CC0603JRNPO9BN152 | adom/yageo-cc0603-npo | C107039 |
| 1 | C719 | 680p | YAGEO CC0603JRNPO9BN681 | adom/yageo-cc0603-npo | C107055 |
| 1 | D104 | RED | Hubei KENTO Elec KT-0603R | barrett-land/kt-0603r | C2286 |
| 2 | D105 D106 | B5819W | Jiangsu Changjing Electronics Technology Co., Ltd. B5819W SL | adom/b5819w | C8598 |
| 1 | D201 | GREEN (FM) | Hubei KENTO Elec KT-0603G | adom/kt-0603g | C12624 |
| 1 | D202 | YELLOW (AM) | Hubei KENTO Elec KT-0603Y | adom/kt-0603y | C2287 |
| 1 | D203 | BLUE (USB/stereo) | Hubei KENTO Elec KT-0603B | barrett-land/kt-0603b | C2288 |
| 3 | D301 D302 D401 | BB910 | Shikues BB910 | adom/bb910 | C475628 |
| 2 | D601 D701 | BAT54WS | Diodes Incorporated BAT54WS-7-F | adom/bat54ws-7-f | C124205 |
| 1 | D702 | BAT54S | MDD(Microdiode Semiconductor) BAT54S | adom/bat54s (2) | C408389 |
| 1 | F101 | 500mA | TECHFUSE nSMD050-33V | adom/nsmd050-33v | C70077 |
| 2 | FB101 FB102 | 600R@100MHz | Sunlord GZ1608D601TF | adom/gz1608d601tf | C1002 |
| 2 | FL501 FL502 | HCCF3-10.700-LTCVS3L | HCI HCCF3-10.700-LTCVS3L | adom/hccf3-10-700-ltcvs3l | C19191232 |
| 1 | FL601 | HCCF2-455.000-LTWCGL | HCI HCCF2-455.000-LTWCGL | adom/hccf2-455-000-ltwcgl | C19186014 |
| 1 | J101 | USB-C | Korean Hroparts Elec TYPE-C-31-M-12 | adom/type-c-31-m-12 | C165948 |
| 1 | J301 | ANT (SMA) | BAT WIRELESS BWSMA-KWE-Z001 | adom/bwsma-kwe-z001 | C496551 |
| 2 | L301 L303 | 2.2u | TDK NLV32T-2R2J-PF | adom/nlv32t-2r2j-pf | C89016 |
| 2 | L302 L401 | 8.2u | YJYCOIN YSCM322522-8R2J | adom/yscm322522-8r2j | C52259800 |
| 1 | L304 | 56n | Murata Electronics LQW18AN56NG00D | adom/murata-lqw18an | C98079 |
| 1 | L305 | 120n | Murata Electronics LQW18ANR12G00D | adom/murata-lqw18an | C86138 |
| 1 | L306 | 150n | Murata Electronics LQW18ANR15G00D | adom/murata-lqw18an | C113131 |
| 1 | L307 | 110n | Murata Electronics LQW18ANR11G00D | adom/murata-lqw18an | C113130 |
| 2 | Q201 Q202 | MMBT3906 | Jiangsu Changjing Electronics Technology Co., Ltd. MMBT3906 2A(RANGE:100-300) | adom/mmbt3906 (3) | C2143 |
| 3 | Q301 Q302 Q303 | MMBTH10 | UMW(Youtai Semiconductor Co., Ltd.) MMBTH10 | adom/mmbth10 | C545531 |
| 12 | Q401 Q402 Q403 Q501 Q502 Q503 Q602 Q604 Q605 Q701 Q702 Q703 | MMBT3904 | Jiangsu Changjing Electronics Technology Co., Ltd. MMBT3904(RANGE:100-300) | adom/mmbt3904 (4) | C20526 |
| 2 | Q601 Q603 | BC847BS | FUXINSEMI BC847BS | adom/bc847bs | C5380687 |
| 2 | R101 R102 | 5.1k | UNI-ROYAL(Uniroyal Elec) 0603WAF5101T5E | adom/0603waf5101t5e | C23186 |
| 33 | R103 R201 R203 R204 R205 R207 R208 R209 R210 R211 R214 R215 R217 R219 R310 R604 R605 R608 R609 R610 R614 R619 R622 R624 R625 R627 R628 R704 R708 R713 R717 R722 R723 | 10k | UNI-ROYAL(Uniroyal Elec) 0603WAF1002T5E | adom/0603waf1002t5e | C25804 |
| 7 | R107 R606 R611 R617 R702 R706 R710 | 2.2k | UNI-ROYAL(Uniroyal Elec) 0603WAF2201T5E | adom/uniroyal-0603waf | C4190 |
| 9 | R202 R206 R212 R314 R403 R409 R410 R413 R510 | 22k | UNI-ROYAL(Uniroyal Elec) 0603WAF2202T5E | adom/0603waf2202t5e | C31850 |
| 7 | R213 R218 R220 R225 R629 R715 R724 | 1k | UNI-ROYAL(Uniroyal Elec) 0603WAF1001T5E | adom/0603waf1001t5e | C21190 |
| 1 | R216 | 100 | UNI-ROYAL(Uniroyal Elec) 0603WAF1000T5E | adom/0603waf1000t5e | C22775 |
| 3 | R224 R226 R512 | 220 | UNI-ROYAL(Uniroyal Elec) 0603WAF2200T5E | adom/uniroyal-0603waf | C22962 |
| 9 | R301 R307 R313 R412 R620 R626 R712 R719 R721 | 100k | UNI-ROYAL(Uniroyal Elec) 0603WAF1003T5E | adom/uniroyal-0603waf | C25803 |
| 2 | R302 R406 | 56 | UNI-ROYAL(Uniroyal Elec) 0603WAF560JT5E | adom/uniroyal-0603waf | C25196 |
| 5 | R303 R311 R623 R714 R716 | 4.7k | UNI-ROYAL(Uniroyal Elec) 0603WAF4701T5E | adom/0603waf4701t5e | C23162 |
| 1 | R304 | 1.8k | UNI-ROYAL(Uniroyal Elec) 0603WAF1801T5E | adom/uniroyal-0603waf | C4177 |
| 7 | R305 R405 R502 R506 R514 R602 R701 | 22 | UNI-ROYAL(Uniroyal Elec) 0603WAF220JT5E | adom/0603waf220jt5e | C23345 |
| 1 | R306 | 82 | UNI-ROYAL(Uniroyal Elec) 0603WAF820JT5E | adom/uniroyal-0603waf | C23255 |
| 5 | R308 R309 R402 R408 R615 | 47 | UNI-ROYAL(Uniroyal Elec) 0603WAF470JT5E | adom/0603waf470jt5e | C23182 |
| 6 | R312 R501 R503 R508 R509 R616 | 330 | UNI-ROYAL(Uniroyal Elec) 0603WAF3300T5E | adom/0603waf3300t5e | C23138 |
| 5 | R315 R404 R414 R511 R603 | 6.8k | UNI-ROYAL(Uniroyal Elec) 0603WAF6801T5E | adom/0603waf6801t5e | C23212 |
| 2 | R316 R415 | 150 | UNI-ROYAL(Uniroyal Elec) 0603WAF1500T5E | adom/uniroyal-0603waf | C22808 |
| 5 | R317 R515 R516 R618 R711 | 47k | UNI-ROYAL(Uniroyal Elec) 0603WAF4702T5E | adom/0603waf4702t5e | C25819 |
| 1 | R401 | 51 | UNI-ROYAL(Uniroyal Elec) 0603WAF510JT5E | adom/uniroyal-0603waf | C23197 |
| 3 | R407 R705 R709 | 470 | UNI-ROYAL(Uniroyal Elec) 0603WAF4700T5E | adom/0603waf4700t5e | C23179 |
| 3 | R411 R513 R517 | 1.5k | UNI-ROYAL(Uniroyal Elec) 0603WAF1501T5E | adom/uniroyal-0603waf | C22843 |
| 1 | R504 | 15k | UNI-ROYAL(Uniroyal Elec) 0603WAF1502T5E | adom/uniroyal-0603waf | C22809 |
| 1 | R505 | 5.6k | UNI-ROYAL(Uniroyal Elec) 0603WAF5601T5E | adom/uniroyal-0603waf | C23189 |
| 1 | R507 | 120 | UNI-ROYAL(Uniroyal Elec) 0603WAF1200T5E | adom/uniroyal-0603waf | C22787 |
| 1 | R601 | 2.7k | UNI-ROYAL(Uniroyal Elec) 0603WAF2701T5E | adom/uniroyal-0603waf | C13167 |
| 2 | R607 R612 | 2k | UNI-ROYAL(Uniroyal Elec) 0603WAF2001T5E | adom/uniroyal-0603waf | C22975 |
| 3 | R613 R703 R707 | 33k | UNI-ROYAL(Uniroyal Elec) 0603WAF3302T5E | adom/uniroyal-0603waf | C4216 |
| 1 | R621 | 39k | UNI-ROYAL(Uniroyal Elec) 0603WAF3902T5E | adom/uniroyal-0603waf | C23153 |
| 1 | R718 | 51k | UNI-ROYAL(Uniroyal Elec) 0603WAF5102T5E | adom/0603waf5102t5e | C23196 |
| 1 | R720 | 200k | UNI-ROYAL(Uniroyal Elec) 0603WAF2003T5E | adom/uniroyal-0603waf | C25811 |
| 1 | R725 | 1.2k | UNI-ROYAL(Uniroyal Elec) 0603WAF1201T5E | adom/uniroyal-0603waf | C22765 |
| 1 | R726 | 4.3k | UNI-ROYAL(Uniroyal Elec) 0603WAF4301T5E | adom/uniroyal-0603waf | C23159 |
| 1 | U101 | USBLC6-2SC6 | STMicroelectronics USBLC6-2SC6 | ray/usblc6-2sc6 | C7519 |
| 1 | U102 | AP2112K-3.3 | Diodes Incorporated AP2112K-3.3TRG1 | adom/ap2112k-3-3trg1 | C51118 |
| 1 | U103 | STM32G0B1CCU7 | STMicroelectronics STM32G0B1CCU7 | adom/stm32g0b1ccu7 | C29759424 |
| 4 | U201 U202 U601 U701 | TLV9062IDR | Texas Instruments TLV9062IDR | adom/tlv9062idr | C398355 |
| 1 | Y101 | 40MHz | TKD SX32Y040000BC1T001 | adom/sx32y040000bc1t001 | C337678 |
| 1 | Y501 | 10.24MHz | HCI 0132M4-10.240F12DZNG | adom/0132m4-10-240f12dzng | C51822681 |
| 28 | MC1 MC2 MC3 MC4 MC5 MC6 MC7 MC8 MC9 MC10 MC11 MC12 MC13 MC14 MC15 MC16 MC17 MC18 MC19 MC20 MC21 MC22 MC23 MC24 MC25 MC26 MC27 MC28 | MachineContactMedium | Adom MachineContactMedium | adom/machinecontactmedium | not on JLC (pressed in by the Adom Factory) |
| 4 | MP1 MP2 MP3 MP4 | MachinePinLargeStandard | Adom MachinePinLargeStandard | adom/machinepinlargestandard | not on JLC (pressed in by the Adom Factory) |
- CL21A475KAQNNNE on adom/cl21a475kaqnnng: page is the CL21A475KAQNNNG reel variant; same part, different packaging suffix
- BAT54S on adom/bat54s: page is the Diodes Inc BAT54S; we order the MDD BAT54S (same SOT-23 pinout)
- MMBT3906 2A(RANGE:100-300) on adom/mmbt3906: page is the Diodes Inc MMBT3906; we order the CJ MMBT3906 (same SOT-23 pinout)
- MMBT3904(RANGE:100-300) on adom/mmbt3904: page is the Diodes Inc MMBT3904; we order the CJ MMBT3904 (same SOT-23 pinout)
Two parts to check in the JLC placement preview:
- FL601 (HCCF2-455.000-LTWCGL) is not symmetric: pins 1 and 2 are the signal pins and 3 and 4 are ground. Rotated 180 degrees, the 455 kHz signal lands on ground. Its part page shows pin 1.
- D301, D302, D401 (BB910 varactors): the Shikues datasheet does not label the terminals, so the footprint assumes the standard cathode-band pinning. Confirm the band on the first parts. See the BB910 page.
A KiCad 10 project for a USB-powered AM/FM broadcast receiver. The radio itself is built from discrete transistors (MMBTH10 / MMBT3904 / BC847BS) and TLV9062 op-amps.
An onboard STM32G0B1 does all the digital work:
- It tunes the varactor oscillators, switches bands, calibrates the receiver itself, and reads the demodulated audio with its ADC.
- It streams that audio to a PC as a USB Audio Class device.
- It takes every setting, and every firmware update, over the same USB-C cable. No other board is needed.
| Item | Value |
|---|---|
| Bands | FM 87.5 to 108 MHz, AM (MW) 530 to 1700 kHz |
| Architecture | Dual-conversion superhet: 10.7 MHz first IF (both bands), 455 kHz second IF |
| Detectors | AM: diode envelope detector with op-amp AGC. FM: diode-pump pulse-count discriminator |
| Tuning | Varactor VCOs driven by the STM32 DACs (12-bit), digital AFC through an IF counter, and self-calibration against crystal-derived markers |
| Control & programming | USB-C only: UAC audio, a CDC command port, and USB DFU (a blank chip boots into ROM DFU; updates need no jumper) |
| Interface | USB-C (power, audio, control, firmware), SMA antenna, 4 LEDs. 4 grounded large Adom machine pins + 28 medium machine contacts (optional: VIN, USB, SWD/reset, UART, audio out, antenna, probes) |
| Debug | 59 labelled test pads covering every supply rail, stage bias and signal node, plus 9 probe contacts |
| PCB | Adom Molecule, 96 × 96 mm large-pin grid (102.5 × 102.5 mm outline), 4 layers (F.Cu signal / In1 GND / In2 +5VA & +3V3 / B.Cu signal), JLCPCB rules |
Verification status (KiCad 10.0)
- Netlist: the schematic's exported netlist matches
tools/design.pypin for pin (403 parts including 32 machine pins/contacts and 59 test pads; 155 nets).tools/check_sch.pychecks this. - ERC: 0 errors, 0 warnings (all severities).
- DRC: 0 violations (all severities), 0 unconnected items, 0 schematic-parity issues.
- Board: 403 footprints, 1,974 track segments (≈4.5 m), 976 vias, 4 copper layers, 102.5 × 102.5 mm molecule outline.
- Not verified: RF performance. Oscillator ranges, IF gains and filter terminations are hand calculations. Expect to trim the tank capacitors during bring-up (see below). No SPICE or EM simulation was run.
Board layout and silkscreen
The layout is floorplanned by function (tools/floorplan.py).
- Every circuit block has its own rectangle on the board, and the silkscreen outlines each one with its function written into the top edge.
- Signal flow runs from the antenna (top right), through the front ends (right column) and the 10.7 MHz and 455 kHz IFs (middle column), to the MCU (left column).
- The left column stacks USB/power, the MCU, the LDO and the LED / audio-out block. All their contacts form one column down the left edge.
- Tuning sits bottom right, so only five slow DC control lines (two DACs, the PWM and two band enables) cross the IF column.
- Inside each block, parts sit on a 0.5 mm grid, prefer a common orientation, and are pulled onto shared rows and columns.
The silkscreen is kept clean:
- Reference designators: none on the silkscreen. They are on the F.Fab layer, so KiCad's assembly view and the schematic still cross-reference.
- Part outlines: passives and discretes have none.
- What remains: the block outlines and labels, each IC's part name, the test-pad and machine-contact signal names, the connector outlines, and the LED names.
- DRC: because footprints were edited on the board, the project sets KiCad's "footprint doesn't match library" check to ignore.
| Silkscreen group | Section |
|---|---|
| USB-C / POWER IN | Power & MCU |
| STM32 MCU | Power & MCU |
| 3.3 V LDO / RAILS | Power & MCU |
| 10.24 MHz XO | 10.7 MHz IF |
| 10.7 MHz IF AMP | 10.7 MHz IF |
| 2ND MIXER | 10.7 MHz IF |
| 10.7 MHz FILTER | 10.7 MHz IF |
| 455 kHz AM FILTER | AM IF |
| AGC VGA | AM IF |
| AGC / RSSI / AM AUDIO | AM IF |
| IF AMP / AM DETECTOR | AM IF |
| FM LIMITER | FM IF |
| FM RSSI | FM IF |
| SQUARER / IF COUNT | FM IF |
| AFC / FM AUDIO | FM IF |
| FM DISCRIMINATOR | FM IF |
| FM MIXER | FM front end |
| FM LO | FM front end |
| FM RF AMP | FM front end |
| ANT / DIPLEXER | FM front end |
| AM MIXER | AM front end |
| AM LO | AM front end |
| AM RF AMP | AM front end |
| VARACTOR DRIVE | Tuning & UI |
| RF TRACKING / VREF | Tuning & UI |
| BAND SWITCH | Tuning & UI |
| ENCODER / LEDS / AUDIO | Tuning & UI |
Adom Molecule
This board follows Adom's Molecule Design Guide (white paper v1.0) and uses the official parts from adom/adom-machine-parts-library. The KiCad copies are in lib/AdomMachine.*, with STEP models from the component pages.
| Rule | This molecule |
|---|---|
| Machine pin in every corner (pincer grip) | 4× MachinePinLargeStandard (Ø3.45 mm plated hole, 5.2 mm pad), all four on GND, 96 × 96 mm apart. That is 3 × 3 cells of the 32 mm large-class grid, so the molecule mounts directly on the base scaffold without a user scaffold. Large Standard is the only large pin Adom makes. |
| Contacts | All 28 are MachineContactMedium, the smaller of Adom's two contact sizes: 0.78 mm drill, 1.3 mm pad, 24 AWG wire. None is closer than 6 mm to a large pin; the pins' 3 mm-radius courtyard is the pincer keep-out. |
| All pins/contacts on the 2 mm grid from the origin pin | MP1 is the origin (KiCad drill/place and grid origin). Every machine contact is at an even-mm offset from MP1, and the probe contacts were snapped to that lattice by the placer. |
| Board outline | 102.5 × 102.5 mm: 3.25 mm beyond the pin centres, with corner arcs centred on the pins (no wings). That is the large pin's 2.6 mm pad radius plus the 0.65 mm edge clearance Adom's example molecules use. |
| Connections via machine pins/contacts | Power, USB, SWD/reset, UART, audio and antenna are on edge contacts, but none is required: USB-C alone runs the board. The only connectors are the USB-C (the pincers can plug USB) and the SMA jack. |
| Jumpers instead of buttons | No buttons and no jumpers are needed. Firmware updates use USB DFU: a blank chip boots into it, and the firmware re-enters it on request. For recovery from a broken image, CLK(=BOOT0) + 3V3 and RST + GND are adjacent contact pairs a machine-pin jumper can bridge. |
| Self-contained | The full radio, MCU, crystal timebase, regulators and decoupling are on board. Tuning, band, volume, calibration and updates are all controlled from the PC over USB-C, with no external controls. |
Machine pin and contact map
Grid coordinates are mm from MP1; +x is right and +y is down, as seen in KiCad.
| Ref | Net | Silk label | Grid (x, y) |
|---|---|---|---|
| MP1 | GND |
corner machine pin (large) | (0, 0) |
| MP2 | GND |
corner machine pin (large) | (96, 0) |
| MP3 | GND |
corner machine pin (large) | (0, 96) |
| MP4 | GND |
corner machine pin (large) | (96, 96) |
| MC1 | VIN |
5V | (0, 6) |
| MC2 | GND |
GND | (0, 8) |
| MC3 | USB_DP |
D+ | (0, 24) |
| MC4 | USB_DM |
D- | (0, 26) |
| MC5 | GND |
GND | (0, 28) |
| MC6 | +3V3 |
3V3 | (0, 34) |
| MC7 | SWCLK |
CLK | (0, 36) |
| MC8 | NRST |
RST | (0, 38) |
| MC9 | GND |
GND | (0, 40) |
| MC10 | SWDIO |
DIO | (0, 44) |
| MC11 | GND |
GND | (0, 46) |
| MC12 | UART_TX |
TX | (0, 52) |
| MC13 | UART_RX |
RX | (0, 54) |
| MC14 | GND |
GND | (0, 56) |
| MC15 | AM_AUDIO |
AM | (0, 84) |
| MC16 | FM_AUDIO |
FM | (0, 86) |
| MC17 | GND |
GND | (0, 88) |
| MC18 | ANT |
ANT | (96, 20) |
| MC19 | GND |
GND | (96, 22) |
The probe contacts (for the factory's probe needles) sit on the grid next to their circuits: MC20 CF2_OUT, MC21 IF2_OUT, MC22 AM_DET, MC23 FM_DEMOD, MC24 LIM_SQ, MC25 VT_FM, MC26 VT_AM, MC27 VT_RF, MC28 +5VA.
Debug test points
59 bare copper test pads, grouped by circuit. Each has its short name printed next to it on the silkscreen (the name is in brackets below).
- Supply, bias and ground pads are 1.5 mm, for a DMM probe or a scope ground spring. Every circuit block has its own GND pad.
- Signal pads are 1 mm.
- They are copper only: no part, not in the BOM or CPL, so they add nothing to the JLC order.
| Circuit | Test pads |
|---|---|
| Power & MCU | TP101 VBUS (VBUS), TP102 VIN (VIN), TP103 VIN_OR (VOR), TP104 +5V (5V), TP105 +3V3 (3V3), TP106 +3.3VA (3V3A), TP107 +5VA (5VA), TP108 GND (GND), TP109 GND (GND), TP110 CAL_MARK (CAL) |
| Tuning & band switch | TP201 DAC_FM (DACF), TP202 DAC_AM (DACA), TP203 PWM_RF (PWM), TP204 VTF_OUT (VTF1), TP205 VTA_OUT (VTA1), TP206 VTR_OUT (VTR1), TP207 VREF_1V65 (VREF), TP208 +5V_FM (5VFM), TP209 +5V_AM (5VAM), TP210 GND (GND), TP211 GND (GND) |
| FM front end | TP301 V_RF1 (VRF), TP302 V_LO1 (VLO), TP303 FMLO_E (FLO), TP304 IF_MIX (MIX), TP305 GND (GND) |
| AM front end | TP401 V_AM1 (VAM1), TP402 V_AM2 (VAM2), TP403 AM_RFIN (AMIN), TP404 AMRF_C (ARF), TP405 AMLO_E (ALO), TP406 GND (GND) |
| 10.7 MHz IF / 2nd mixer | TP501 V_IF1 (VIF1), TP502 V_IF2 (VIF2), TP503 CF1_OUT (CF1), TP504 IF_C1 (IF1), TP505 XO_E (XO), TP506 GND (GND) |
| AM IF, AGC & detector | TP601 V_IF3 (VIF3), TP602 VBIAS (VB), TP603 AMF_OUT (AMF), TP604 VGA1_OUT (VGA1), TP605 VGA2_OUT (VGA2), TP606 AM_IFOUT (AIF), TP607 V_AGC (AGC), TP608 RSSI_AM (RSA), TP609 AMA_OUT (AMA), TP610 GND (GND), TP611 GND (GND) |
| FM limiter & discriminator | TP701 V_IF4 (VIF4), TP702 LIM1_C (LIM1), TP703 LIM2_C (LIM2), TP704 RSSI_FM (RSF), TP705 IF_CNT (CNT), TP706 VREF_FM (VRFM), TP707 FM_DC (FMDC), TP708 FMA_OUT (FMA), TP709 GND (GND), TP710 GND (GND) |
On the RF side the pads sit on low-impedance nodes (oscillator emitters, mixer output, supply rails) rather than on the tank circuits, so a probe doesn't detune them.
Using it in the Adom Factory
- Mounting: the large corner pins sit on the 32 mm grid, so the molecule plugs straight into the base scaffold's large contacts.
- One cable does everything: plug USB-C into a PC.
- It powers the board, carries the audio (a USB microphone), accepts every tuning and settings command, and reflashes the firmware.
- No other board, encoder, programmer or jumper is needed.
- Optional contacts:
- VIN: 5 V from the control panel's PS2 or USB rail can come in on the VIN contact (MC1) instead of USB-C. The two are OR-ed through B5819W diodes. Current draw is about 80 mA.
- Debug: SWD (DIO/CLK/RST) and a UART console (TX/RX) are there for firmware debugging only.
- Audio: the AM/FM audio contacts (MC15/MC16) can feed another molecule or a scope.
Signal chain and frequency plan
┌─ 2 MHz LPF ─ AM preamp (Q401) ─ AM mixer (Q403) ◄─ AM VCO 11.23 to 12.4 MHz (Q402, Clapp)
SMA ─ diplexer ────┤ │
└─ 70 MHz HPF + 130 MHz LPF ─ FM RF amp (Q301, varactor-tracked tank)
─ FM mixer (Q303) ◄─ FM VCO 98.7 to 118.7 MHz (Q302, Colpitts)
│
IF_MIX (10.7 MHz, 330 Ω)
│
FL501 10.7 MHz ─ IF amp (Q501) ─ FL502 10.7 MHz ─ 2nd mixer (Q502) ◄─ 10.24 MHz XO (Q503)
│ 455 kHz
┌────────────────────────────────────┴───────────────────────────┐
AM: FL601 455 kHz ±4.5 kHz ─ VGA1/VGA2 (BC847BS pairs, FM: RC LPF ─ limiter (Q701, Q702) ─ squarer (Q703)
tail-current AGC) ─ post-amp (Q605) ─ BAT54 detector ─ diode pump (C714 + BAT54S) ─ U701A integrator
─ U601A AGC integrator ─ U601B 5 kHz Sallen-Key (75 µs de-emphasis) ─ U701B 15 kHz Sallen-Key
─► AM_AUDIO (PA0) V_AGC ─► RSSI_AM (PA2) ─► FM_AUDIO (PA1) FM_DC ─► PA3 LIM_SQ ─► IF_CNT (PA15)
- FM uses high-side injection (LO = RF + 10.7 MHz). The RF amplifier's tank is tuned by
VT_RF(a filtered PWM), so the firmware can track the preselector to the LO and suppress the image 21.4 MHz above. - AM is up-converted to 10.7 MHz (LO = RF + 10.7 MHz). The image lands at 22 to 23 MHz, far beyond the 2 MHz low-pass, so no tracking preselector is needed and the VCO only has to cover a 1.1:1 range.
- Both bands share the 10.7 MHz IF and the second conversion to 455 kHz. The second LO is a 10.240 MHz crystal (JLC-stocked; 10.245 MHz parts are scarce), so the first IF is actually 10.695 MHz. Firmware sets LO1 = RF + 10.695 MHz; the offset is only 5 kHz, well inside the 10.7 MHz filters' 180 kHz passband.
- AM: the narrow ceramic filter sets the selectivity.
- FM: the wide 10.7 MHz filters set the noise bandwidth, and the ±75 kHz deviation (16 % of 455 kHz) goes straight to the pulse-count detector.
Pulse-count FM detector
Each IF cycle the 0 to 4.6 V square wave (LIM_SQ) moves a fixed charge C714 · (Vpp − 2·Vf) into U701A's
summing junction, so the average current is proportional to the IF frequency:
40 µA at 455 kHz and ±6.6 µA at ±75 kHz deviation.
- Audio and de-emphasis: R718 (51 k) converts the current to ±0.34 V of audio, and R718 ∥ C715 (51 k ∥ 1.5 nF) gives the 75 µs de-emphasis. For 50 µs (EU), change C715 to 1 nF.
- AFC:
FM_DC(FM_DEMOD × 2/3, 0.1 s time constant) gives the firmware an AFC error signal.IF_CNTlets TIM2 count the IF directly.
AM AGC
Two BC847BS differential pairs act as variable-gain amplifiers. Their gain is proportional to the tail current, about 40 dB of range per stage.
- Loop: U601A integrates
AM_DET − 0.98 Vand drives both tail transistors through a ÷2 divider, which holds the detected carrier at about 1 V. - Signal strength:
RSSI_AM(V_AGC/2) is the firmware's signal-strength reading, used for seek. It is inverted: a lower voltage means a stronger signal.
STM32G0B1CCU7 pin map
The MCU is an STM32G0B1CCU7 (Cortex-M0+, 256 KB flash, 144 KB RAM, USB FS, dual 12-bit DAC).
It replaces the STM32F072 because of how a blank chip boots:
- The G0B1 has a flash empty check. A blank chip straight from the JLC assembly line boots into ST's ROM USB DFU bootloader.
- The very first firmware load therefore goes over USB, just like every later update.
- The F072 has no empty check. A blank F072 needs BOOT0 pulled high by a jumper.
| Pin | Function | Net |
|---|---|---|
| PA0 / PA1 | ADC_IN0 / ADC_IN1 | AM_AUDIO / FM_AUDIO (biased at 1.65 V) |
| PA2 | ADC_IN2 | RSSI_AM (AGC voltage / 2) |
| PA3 | ADC_IN3 | FM_DC (discriminator DC, AFC) |
| PA6 | ADC_IN6 | RSSI_FM (limiter stage-1 detector) |
| PA4 | DAC1_OUT1 | DAC_FM → ×1.45 → VT_FM (FM VCO) |
| PA5 | DAC1_OUT2 | DAC_AM → ×1.45 → VT_AM (AM VCO) |
| PB1 | TIM3_CH4 PWM | PWM_RF → 2-pole RC → ×1.45 → VT_RF (FM preselector) |
| PA15 | TIM2_ETR | IF_CNT (limited 455 kHz IF: AFC and self-calibration) |
| PA8 | TIM1_CH1 | CAL_MARK → 47 k + 100 pF → ANT (calibration markers; idles low) |
| PF0 / PF1 | HSE | 40 MHz crystal Y101. Its harmonics land at 80 and 120 MHz, clear of the FM band and the LO range. |
| PB8 / PB9 | GPIO open-drain (5 V tolerant) | FM_EN_N / AM_EN_N: low = band powered |
| PB13 / PB14 / PB15 | GPIO | LED_FM / LED_AM / LED_STAT |
| PA11 / PA12 | USB FS | D− / D+. USB runs on HSI48 + CRS, locked to the host's SOF. |
| PB6 / PB7 | USART1 TX / RX | UART_TX / UART_RX: optional debug console (MC12/MC13) |
| PA13 / PA14, PF2 | SWD, NRST | Optional debug contacts DIO / CLK / RST. PA14 = SWCLK is also BOOT0 (10 k pull-down). |
| VREF+ | ADC / DAC reference | +3.3VA (ferrite-filtered) |
Programming and control over USB (firmware outline, not yet written)
Everything runs over the one USB-C cable: power, audio, control and firmware updates.
Programming
- First flash: a blank G0B1 enumerates as STM32 BOOTLOADER (USB DFU, VID 0483 / PID DF11). Flash it with
dfu-util -a 0 -s 0x08000000:leave -D amfm.binor STM32CubeProgrammer.- The empty-flash flag is only re-read at power-on. Use
:leave, or power-cycle once after the first flash.
- The empty-flash flag is only re-read at power-on. Use
- Updates: the firmware exposes a USB DFU runtime interface, so
dfu-util -eworks.- On that request (or the CDC command
dfu), it stores a magic word in RAM and resets. - Its startup code sees the word and jumps to the ROM bootloader at 0x1FFF0000.
dfu-utilthen writes the new image and leaves, with no jumper and no ST-Link.
- On that request (or the CDC command
- Recovery, only if a broken image never answers USB: bridge CLK↔3V3 (CLK is BOOT0), then RST↔GND or power-cycle. The chip comes up in ROM DFU.
Clocks
- The 40 MHz crystal drives the PLL: 64 MHz SYSCLK, and 128 MHz for TIM1.
- USB runs on HSI48 with CRS synced to SOF.
- Every frequency the MCU generates or measures is therefore crystal-accurate (±10 ppm).
USB composite device
- Audio: UAC microphone, 48 kHz, 16-bit mono.
- TIM-triggered ADC with DMA on PA0/PA1, sending the active band.
- The PC's volume and mute controls act on a feature unit.
- Control: a CDC-ACM text port (mirrored on the UART console). Commands:
| Command | Action |
|---|---|
band fm / band am |
Powers the chosen front end (FM_EN_N / AM_EN_N) and loads its tuning table. |
freq 101.1 / freq 1010 |
Tunes in MHz (FM) or kHz (AM): DAC from the calibration table, then AFC. |
seek up / seek down, scan |
Steps and stops on stations, found via RSSI plus the IF count. |
mute, volume N, squelch N |
Digital, in the audio path. |
deemph 50 / deemph 75 |
The analog chain is 75 µs; 50 µs regions get a first-order digital correction. |
rssi?, status? |
Signal strength, AGC voltage, IF frequency, band, frequency. |
cal |
Runs the self-calibration below and stores the tables in flash. |
dfu |
Reboots into the ROM DFU bootloader. |
Tuning
- A per-band table maps DAC code to LO frequency; a second table maps FM frequency to the
VT_RFpreselector PWM. - After each tune, AFC counts
IF_CNTfor 10 ms against 455.000 kHz and trims the DAC code.
Self-calibration (cal: no signal generator, probe or SDR needed)
- Markers: TIM1 drives
CAL_MARKwith a square wave of 128 MHz / N.- Its harmonics reach the antenna input through 47 kΩ and 100 pF, at about −60 dBm each.
- Example: N = 13 gives markers at 88.6, 98.5 and 108.3 MHz. AM uses the fundamental directly, for example 600 / 1000 / 1400 kHz.
- Find each marker: sweep the DAC until the IF counter sees it.
- Compute the LO: LO = f_marker + 10.240 MHz + f_IF2, where f_IF2 is the counted IF.
- The MCU's crystal sets f_marker and the gate time. The ±20 ppm 10.24 MHz crystal sets the second LO.
- Build the table: a few markers per band give a DAC → LO table accurate to a few kHz.
- It also checks that each VCO covers its band (98.7 to 118.7 MHz and 11.23 to 12.4 MHz) and reports if it doesn't.
- Preselector: with a marker in view, sweep the
VT_RFPWM for maximumRSSI_FMto build the tracking table. - Idle: the marker pin idles low, so nothing is injected during normal reception.
Bring-up and alignment
- Rails: power from USB and check the test pads VBUS, VOR, 5V, 3V3, 3V3A and 5VA. The board enumerates as STM32 BOOTLOADER; flash the firmware over USB.
- Check each stage's bias rail too: VRF, VLO, VAM1, VAM2, VIF1-VIF4 and VB. Every block has a GND pad next to it.
- Band power: send
band fmand check+5V_FM≈ 4.9 V (pad 5VFM); thenband am(pad 5VAM). The DAC outputs are at DACF/DACA and the op-amp outputs at VTF1/VTA1/VTR1. - Self-calibration: run
cal. The firmware reports each VCO's measured range and builds its tables. The CAL pad shows the marker square wave while it runs.- If a range misses the band, adjust C319 (FM) or C410 (AM) to shift it. Adjust C320 / C411 to change its width.
- Crystal oscillator: check 10.240 MHz at pad XO. With a marker tuned in, 455 kHz appears at probe contact 455K (MC21) and 10.7 MHz at 10M7 (MC20).
- FM detector: probe SQ (MC24) should show a clean square wave.
FM_DEMOD(probe DEM, MC23) sits near 1.8 V with an unmodulated IF. - AM chain: follow the signal through the pads AMF → VGA1 → VGA2 → AIF → DET (MC22) → AMA, with AGC showing the control voltage.
Ordering from JLCPCB
Every BOM line has an in-stock JLCPCB part (LCSC number), checked against JLCPCB's parts API on 2026-09-29: 86 line items, 312 placed parts. Of those lines, 46 are Basic, 4 Preferred Extended and 36 Extended. Parts cost about $11 per board, and each Extended line adds JLC's per-order Extended-part fee.
- PCB: upload
fab/amfm_receiver_gerbers.zip(Gerbers + drill, origin at MP1, the top-left corner pin). Settings:- 4 layers, 102.5 × 102.5 mm, 1.6 mm. The corner pin holes are 3.45 mm plated through-holes.
- Optionally, the impedance-controlled stackup JLC04161H-7628. The RF-netclass traces are 0.36 mm, about 50 Ω over the In1 ground plane.
- Assembly: top side only. Upload
fab/amfm_receiver_BOM_JLCPCB.csv(Comment, Designator, Footprint, LCSC Part #) andfab/amfm_receiver_CPL_JLCPCB.csv(Designator, Mid X, Mid Y, Layer, Rotation).- The SMA jack (J301) is the only through-hole part JLC fits: choose Standard PCBA, or leave it out and hand-solder it.
- The machine pins (MP1-MP4) and machine contacts (MC1-MC28) are not in the JLC files: JLC only drills their plated holes, and the Adom Factory presses the pins and contacts in.
- The 59 test pads (TP…) are bare copper and are not in the BOM or CPL either.
- Check the placement preview before paying. CPL rotations were converted from KiCad to JLC orientation with the JLCKicadTools correction table.
- Confirm pin 1 or polarity on U103 (QFN-48), U101/U102, U201/U202/U601/U701 (SOIC-8), the SOT-23 and SOT-363 transistors, and the diodes/varactors (D301, D302, D401, D601, D701, D702). Also check the LEDs, the crystals Y101/Y501 and the three ceramic filters.
- Any part the preview shows rotated can be fixed in the order page.
Parts that differ from a generic design
- MCU: STM32G0B1CCU7 (C29759424, QFN-48). It was chosen over the STM32F072 because its flash empty check boots a blank chip into ROM USB DFU, so programming never needs a jumper or an ST-Link.
- The exposed pad uses KiCad's thermal-via land pattern, which ties it to the inner ground plane.
- MCU crystal: 40 MHz SX32Y040000BC1T001 (C337678, 12 pF load, 20 Ω ESR), with 18 pF C0G loads.
- 40 MHz puts the crystal's harmonics at 80 and 120 MHz, outside the FM band and the 98.7 to 118.7 MHz LO range.
- The low ESR keeps the crystal's critical gm at about 1.1 mA/V, inside the G0's 1.5 mA/V start-up limit.
- Ceramic filters: SMD parts JLC stocks.
- FL501/FL502: HCI HCCF3-10.700-LTCVS3L (C19191232), 7.0 × 3.0 mm, 180 kHz.
- FL601: HCCF2-455.000-LTWCGL (C19186014), ±4.5 kHz.
- Footprints are in
lib/AMFM.pretty, built from LCSC's land patterns.
- Varactor: BB910 (C475628) is a low-voltage part: 35 to 45 pF at 0.5 V and 10 to 20 pF at 5 V, capacitance ratio 3.25 typical and 1.2 minimum (Shikues datasheet p.1). A low-ratio part narrows the VCO ranges, which
calreports. - RF inductors: L304-L307 are Murata LQW18 wire-wound parts (Q ≈ 35 at 100 MHz). The medium-wave inductors are 1210 wire-wound: NLV32T-2R2J-PF and YSCM322522-8R2J (Q = 30).
- Capacitors: every capacitor that sets a frequency, bandwidth or filter corner is C0G/NP0.
- LEDs: the green and blue LEDs (KT-0603G/B, about 2.8 V forward drop) use 220 Ω resistors so they light from a 3.3 V GPIO.
Regenerating (the generators are in tools/)
Everything is generated from tools/design.py, the single netlist source of truth:
cd tools
python3 make_lib.py # project symbols/footprints (ceramic filters, Adom machine pin/contact)
python3 gen_sch.py # hierarchical schematic (9 sheets incl. Molecule_IO)
python3 check_sch.py # KiCad netlist == design.py, pin for pin
python3 gen_pcb.py place # board, stackup, rules, placement, planes, Specctra DSN
# route build/amfm_receiver.dsn with Freerouting -> build/amfm_receiver.ses
python3 gen_pcb.py finish
python3 gen_pcb.py repair # DRC-driven rip-up/re-route until kicad-cli DRC is clean
python3 make_bom.py # grouped BOM with JLC type / stock / price
python3 make_jlc.py # JLCPCB BOM + CPL
./make_fab.sh # Gerbers, drill, placement, schematic PDF, BOMs
Files
| Path | What it is |
|---|---|
kicad/ |
The KiCad 10 project: amfm_receiver.kicad_pro, the 10 schematic sheets, amfm_receiver.kicad_pcb, and the project libraries in kicad/lib/. The five LCSC 3D models are the logo-free STEPs from the part pages (3D only; copper and fab output are unchanged). |
fab/ |
What goes to JLCPCB: amfm_receiver_gerbers.zip, amfm_receiver_BOM_JLCPCB.csv, amfm_receiver_CPL_JLCPCB.csv, plus the full BOM, the KiCad placement file and the schematic PDF. |
amfm-receiver-molecule.glb |
The assembled board, Z-up in metres, anchored on the front-left machine pin (step2glb molecule mode), with _footprint.json / _symbol.json for placing the molecule in a layout. |
tools/ |
The generators: design.py is the single netlist source; the others build the schematic, board, routing repairs, BOM and fab files (see Regenerating). |
Release amfm-receiver-molecule.step.gz |
The full board STEP (50 MB unzipped) on the Releases tab. |
# AM/FM Receiver Molecule
A USB-powered AM/FM broadcast receiver on an Adom Molecule: the radio is discrete transistors and op-amps, and an STM32G0B1 tunes it, calibrates it, and streams the audio to a PC over the same USB-C cable that powers it and updates its firmware.
::adom-verified{src="/adom/amfm-receiver-molecule/render/verification.json"}
## Status
Designed and checked in KiCad 10 (ERC and DRC clean, netlist checked pin for pin against the generator), with JLCPCB fab files ready. **Not built or tested yet.** RF performance is hand-calculated; expect to trim tank capacitors at bring-up. The firmware is outlined below but not written yet.
## Parts
All 88 BOM lines (312 parts JLC places, plus the 32 machine pins and contacts the Adom Factory presses in) link to a wiki page with the symbol, footprint, 3D model, datasheet and the LCSC, Mouser and DigiKey numbers. Pages created for this board carry a verification log; check a page before reusing its part.
| Qty | References | Value | Part (MPN) | Wiki page | LCSC |
|---:|---|---|---|---|---|
| 12 | C101 C104 C212 C214 C402 C406 C503 C512 C603 C605 C701 C722 | 10u | Samsung Electro-Mechanics CL21A106KAYNNNE | [adom/samsung-cl21a-x5r-0805](https://wiki.adom.inc/adom/samsung-cl21a-x5r-0805) | [C15850](https://www.lcsc.com/product-detail/C15850.html) |
| 35 | C102 C105 C107 C110 C111 C115 C205 C209 C211 C213 C215 C311 C314 C401 C403 C404 C405 C407 C413 C504 C506 C510 C513 C604 C606 C607 C610 C615 C620 C702 C706 C709 C712 C721 C723 | 100n | YAGEO CC0603KRX7R9BB104 | [adom/cc0603-100nf](https://wiki.adom.inc/adom/cc0603-100nf) | [C14663](https://www.lcsc.com/product-detail/C14663.html) |
| 13 | C103 C108 C202 C204 C206 C207 C208 C210 C613 C614 C616 C716 C717 | 1u | Samsung Electro-Mechanics CL10A105KB8NNNC | [adom/cl10a105kb8nnnc](https://wiki.adom.inc/adom/cl10a105kb8nnnc) | [C15849](https://www.lcsc.com/product-detail/C15849.html) |
| 1 | C106 | 22u | Samsung Electro-Mechanics CL21A226MAQNNNE | [adom/samsung-cl21a-x5r-0805](https://wiki.adom.inc/adom/samsung-cl21a-x5r-0805) | [C45783](https://www.lcsc.com/product-detail/C45783.html) |
| 14 | C109 C322 C501 C505 C507 C508 C601 C602 C608 C609 C611 C705 C708 C711 | 10n | FH (Guangdong Fenghua Advanced Tech) 0603B103K500NT | [adom/fenghua-0603-mlcc](https://wiki.adom.inc/adom/fenghua-0603-mlcc) | [C57112](https://www.lcsc.com/product-detail/C57112.html) |
| 3 | C114 C201 C203 | 4.7u | Samsung Electro-Mechanics CL21A475KAQNNNE | [adom/cl21a475kaqnnng](https://wiki.adom.inc/adom/cl21a475kaqnnng) (1) | [C1779](https://www.lcsc.com/product-detail/C1779.html) |
| 2 | C116 C117 | 18p | Samsung Electro-Mechanics CL10C180JB8NNNC | [adom/cl10c180jb8nnnc](https://wiki.adom.inc/adom/cl10c180jb8nnnc) | [C1647](https://www.lcsc.com/product-detail/C1647.html) |
| 2 | C301 C302 | 2.7n | Murata Electronics GRM1885C1H272JA01D | [adom/murata-grm18-gcm18-c0g-0603](https://wiki.adom.inc/adom/murata-grm18-gcm18-c0g-0603) | [C77034](https://www.lcsc.com/product-detail/C77034.html) |
| 5 | C303 C304 C412 C707 C710 | 47p | Samsung Electro-Mechanics CL10C470JB8NNNC | [adom/samsung-cl10c-c0g-0603](https://wiki.adom.inc/adom/samsung-cl10c-c0g-0603) | [C1671](https://www.lcsc.com/product-detail/C1671.html) |
| 7 | C305 C306 C310 C320 C502 C509 C714 | 22p | Samsung Electro-Mechanics CL10C220JB8NNNC | [adom/samsung-cl10c-c0g-0603](https://wiki.adom.inc/adom/samsung-cl10c-c0g-0603) | [C1653](https://www.lcsc.com/product-detail/C1653.html) |
| 8 | C307 C308 C312 C315 C316 C619 C703 C720 | 1n | Samsung Electro-Mechanics CL10B102KB8NNNC | [adom/cl10b102kb8nnnc](https://wiki.adom.inc/adom/cl10b102kb8nnnc) | [C1588](https://www.lcsc.com/product-detail/C1588.html) |
| 2 | C309 C319 | 3.3p | YAGEO CC0603CRNPO9BN3R3 | [adom/yageo-cc0603-npo](https://wiki.adom.inc/adom/yageo-cc0603-npo) | [C282249](https://www.lcsc.com/product-detail/C282249.html) |
| 2 | C313 C318 | 4.7p | FH (Guangdong Fenghua Advanced Tech) 0603CG4R7C500NT | [adom/fenghua-0603-mlcc](https://wiki.adom.inc/adom/fenghua-0603-mlcc) | [C1669](https://www.lcsc.com/product-detail/C1669.html) |
| 3 | C317 C410 C516 | 15p | Samsung Electro-Mechanics CL10C150JB8NNNC | [adom/samsung-cl10c-c0g-0603](https://wiki.adom.inc/adom/samsung-cl10c-c0g-0603) | [C1644](https://www.lcsc.com/product-detail/C1644.html) |
| 1 | C321 | 2.2p | FH (Guangdong Fenghua Advanced Tech) 0603CG2R2C500NT | [adom/fenghua-0603-mlcc](https://wiki.adom.inc/adom/fenghua-0603-mlcc) | [C1651](https://www.lcsc.com/product-detail/C1651.html) |
| 4 | C323 C511 C514 C713 | 100p | Samsung Electro-Mechanics CL10C101JB8NNNC | [adom/samsung-cl10c-c0g-0603](https://wiki.adom.inc/adom/samsung-cl10c-c0g-0603) | [C14858](https://www.lcsc.com/product-detail/C14858.html) |
| 2 | C408 C515 | 220p | Murata Electronics GCM1885C2A221JA16D | [adom/murata-grm18-gcm18-c0g-0603](https://wiki.adom.inc/adom/murata-grm18-gcm18-c0g-0603) | [C388907](https://www.lcsc.com/product-detail/C388907.html) |
| 1 | C409 | 470p | YAGEO CC0603JRNPO9BN471 | [adom/yageo-cc0603-npo](https://wiki.adom.inc/adom/yageo-cc0603-npo) | [C106211](https://www.lcsc.com/product-detail/C106211.html) |
| 1 | C411 | 33p | Samsung Electro-Mechanics CL10C330JB8NNNC | [adom/samsung-cl10c-c0g-0603](https://wiki.adom.inc/adom/samsung-cl10c-c0g-0603) | [C1663](https://www.lcsc.com/product-detail/C1663.html) |
| 2 | C612 C618 | 2.2n | Walsin Tech Corp 0603N222J500CT | [adom/0603n222j500ct](https://wiki.adom.inc/adom/0603n222j500ct) | [C296055](https://www.lcsc.com/product-detail/C296055.html) |
| 1 | C617 | 4.7n | YAGEO CC0603JRNPO9BN472 | [adom/yageo-cc0603-npo](https://wiki.adom.inc/adom/yageo-cc0603-npo) | [C576818](https://www.lcsc.com/product-detail/C576818.html) |
| 1 | C704 | 150p | YAGEO CC0603JRNPO9BN151 | [adom/yageo-cc0603-npo](https://wiki.adom.inc/adom/yageo-cc0603-npo) | [C107038](https://www.lcsc.com/product-detail/C107038.html) |
| 2 | C715 C718 | 1.5n | YAGEO CC0603JRNPO9BN152 | [adom/yageo-cc0603-npo](https://wiki.adom.inc/adom/yageo-cc0603-npo) | [C107039](https://www.lcsc.com/product-detail/C107039.html) |
| 1 | C719 | 680p | YAGEO CC0603JRNPO9BN681 | [adom/yageo-cc0603-npo](https://wiki.adom.inc/adom/yageo-cc0603-npo) | [C107055](https://www.lcsc.com/product-detail/C107055.html) |
| 1 | D104 | RED | Hubei KENTO Elec KT-0603R | [barrett-land/kt-0603r](https://wiki.adom.inc/barrett-land/kt-0603r) | [C2286](https://www.lcsc.com/product-detail/C2286.html) |
| 2 | D105 D106 | B5819W | Jiangsu Changjing Electronics Technology Co., Ltd. B5819W SL | [adom/b5819w](https://wiki.adom.inc/adom/b5819w) | [C8598](https://www.lcsc.com/product-detail/C8598.html) |
| 1 | D201 | GREEN (FM) | Hubei KENTO Elec KT-0603G | [adom/kt-0603g](https://wiki.adom.inc/adom/kt-0603g) | [C12624](https://www.lcsc.com/product-detail/C12624.html) |
| 1 | D202 | YELLOW (AM) | Hubei KENTO Elec KT-0603Y | [adom/kt-0603y](https://wiki.adom.inc/adom/kt-0603y) | [C2287](https://www.lcsc.com/product-detail/C2287.html) |
| 1 | D203 | BLUE (USB/stereo) | Hubei KENTO Elec KT-0603B | [barrett-land/kt-0603b](https://wiki.adom.inc/barrett-land/kt-0603b) | [C2288](https://www.lcsc.com/product-detail/C2288.html) |
| 3 | D301 D302 D401 | BB910 | Shikues BB910 | [adom/bb910](https://wiki.adom.inc/adom/bb910) | [C475628](https://www.lcsc.com/product-detail/C475628.html) |
| 2 | D601 D701 | BAT54WS | Diodes Incorporated BAT54WS-7-F | [adom/bat54ws-7-f](https://wiki.adom.inc/adom/bat54ws-7-f) | [C124205](https://www.lcsc.com/product-detail/C124205.html) |
| 1 | D702 | BAT54S | MDD(Microdiode Semiconductor) BAT54S | [adom/bat54s](https://wiki.adom.inc/adom/bat54s) (2) | [C408389](https://www.lcsc.com/product-detail/C408389.html) |
| 1 | F101 | 500mA | TECHFUSE nSMD050-33V | [adom/nsmd050-33v](https://wiki.adom.inc/adom/nsmd050-33v) | [C70077](https://www.lcsc.com/product-detail/C70077.html) |
| 2 | FB101 FB102 | 600R@100MHz | Sunlord GZ1608D601TF | [adom/gz1608d601tf](https://wiki.adom.inc/adom/gz1608d601tf) | [C1002](https://www.lcsc.com/product-detail/C1002.html) |
| 2 | FL501 FL502 | HCCF3-10.700-LTCVS3L | HCI HCCF3-10.700-LTCVS3L | [adom/hccf3-10-700-ltcvs3l](https://wiki.adom.inc/adom/hccf3-10-700-ltcvs3l) | [C19191232](https://www.lcsc.com/product-detail/C19191232.html) |
| 1 | FL601 | HCCF2-455.000-LTWCGL | HCI HCCF2-455.000-LTWCGL | [adom/hccf2-455-000-ltwcgl](https://wiki.adom.inc/adom/hccf2-455-000-ltwcgl) | [C19186014](https://www.lcsc.com/product-detail/C19186014.html) |
| 1 | J101 | USB-C | Korean Hroparts Elec TYPE-C-31-M-12 | [adom/type-c-31-m-12](https://wiki.adom.inc/adom/type-c-31-m-12) | [C165948](https://www.lcsc.com/product-detail/C165948.html) |
| 1 | J301 | ANT (SMA) | BAT WIRELESS BWSMA-KWE-Z001 | [adom/bwsma-kwe-z001](https://wiki.adom.inc/adom/bwsma-kwe-z001) | [C496551](https://www.lcsc.com/product-detail/C496551.html) |
| 2 | L301 L303 | 2.2u | TDK NLV32T-2R2J-PF | [adom/nlv32t-2r2j-pf](https://wiki.adom.inc/adom/nlv32t-2r2j-pf) | [C89016](https://www.lcsc.com/product-detail/C89016.html) |
| 2 | L302 L401 | 8.2u | YJYCOIN YSCM322522-8R2J | [adom/yscm322522-8r2j](https://wiki.adom.inc/adom/yscm322522-8r2j) | [C52259800](https://www.lcsc.com/product-detail/C52259800.html) |
| 1 | L304 | 56n | Murata Electronics LQW18AN56NG00D | [adom/murata-lqw18an](https://wiki.adom.inc/adom/murata-lqw18an) | [C98079](https://www.lcsc.com/product-detail/C98079.html) |
| 1 | L305 | 120n | Murata Electronics LQW18ANR12G00D | [adom/murata-lqw18an](https://wiki.adom.inc/adom/murata-lqw18an) | [C86138](https://www.lcsc.com/product-detail/C86138.html) |
| 1 | L306 | 150n | Murata Electronics LQW18ANR15G00D | [adom/murata-lqw18an](https://wiki.adom.inc/adom/murata-lqw18an) | [C113131](https://www.lcsc.com/product-detail/C113131.html) |
| 1 | L307 | 110n | Murata Electronics LQW18ANR11G00D | [adom/murata-lqw18an](https://wiki.adom.inc/adom/murata-lqw18an) | [C113130](https://www.lcsc.com/product-detail/C113130.html) |
| 2 | Q201 Q202 | MMBT3906 | Jiangsu Changjing Electronics Technology Co., Ltd. MMBT3906 2A(RANGE:100-300) | [adom/mmbt3906](https://wiki.adom.inc/adom/mmbt3906) (3) | [C2143](https://www.lcsc.com/product-detail/C2143.html) |
| 3 | Q301 Q302 Q303 | MMBTH10 | UMW(Youtai Semiconductor Co., Ltd.) MMBTH10 | [adom/mmbth10](https://wiki.adom.inc/adom/mmbth10) | [C545531](https://www.lcsc.com/product-detail/C545531.html) |
| 12 | Q401 Q402 Q403 Q501 Q502 Q503 Q602 Q604 Q605 Q701 Q702 Q703 | MMBT3904 | Jiangsu Changjing Electronics Technology Co., Ltd. MMBT3904(RANGE:100-300) | [adom/mmbt3904](https://wiki.adom.inc/adom/mmbt3904) (4) | [C20526](https://www.lcsc.com/product-detail/C20526.html) |
| 2 | Q601 Q603 | BC847BS | FUXINSEMI BC847BS | [adom/bc847bs](https://wiki.adom.inc/adom/bc847bs) | [C5380687](https://www.lcsc.com/product-detail/C5380687.html) |
| 2 | R101 R102 | 5.1k | UNI-ROYAL(Uniroyal Elec) 0603WAF5101T5E | [adom/0603waf5101t5e](https://wiki.adom.inc/adom/0603waf5101t5e) | [C23186](https://www.lcsc.com/product-detail/C23186.html) |
| 33 | R103 R201 R203 R204 R205 R207 R208 R209 R210 R211 R214 R215 R217 R219 R310 R604 R605 R608 R609 R610 R614 R619 R622 R624 R625 R627 R628 R704 R708 R713 R717 R722 R723 | 10k | UNI-ROYAL(Uniroyal Elec) 0603WAF1002T5E | [adom/0603waf1002t5e](https://wiki.adom.inc/adom/0603waf1002t5e) | [C25804](https://www.lcsc.com/product-detail/C25804.html) |
| 7 | R107 R606 R611 R617 R702 R706 R710 | 2.2k | UNI-ROYAL(Uniroyal Elec) 0603WAF2201T5E | [adom/uniroyal-0603waf](https://wiki.adom.inc/adom/uniroyal-0603waf) | [C4190](https://www.lcsc.com/product-detail/C4190.html) |
| 9 | R202 R206 R212 R314 R403 R409 R410 R413 R510 | 22k | UNI-ROYAL(Uniroyal Elec) 0603WAF2202T5E | [adom/0603waf2202t5e](https://wiki.adom.inc/adom/0603waf2202t5e) | [C31850](https://www.lcsc.com/product-detail/C31850.html) |
| 7 | R213 R218 R220 R225 R629 R715 R724 | 1k | UNI-ROYAL(Uniroyal Elec) 0603WAF1001T5E | [adom/0603waf1001t5e](https://wiki.adom.inc/adom/0603waf1001t5e) | [C21190](https://www.lcsc.com/product-detail/C21190.html) |
| 1 | R216 | 100 | UNI-ROYAL(Uniroyal Elec) 0603WAF1000T5E | [adom/0603waf1000t5e](https://wiki.adom.inc/adom/0603waf1000t5e) | [C22775](https://www.lcsc.com/product-detail/C22775.html) |
| 3 | R224 R226 R512 | 220 | UNI-ROYAL(Uniroyal Elec) 0603WAF2200T5E | [adom/uniroyal-0603waf](https://wiki.adom.inc/adom/uniroyal-0603waf) | [C22962](https://www.lcsc.com/product-detail/C22962.html) |
| 9 | R301 R307 R313 R412 R620 R626 R712 R719 R721 | 100k | UNI-ROYAL(Uniroyal Elec) 0603WAF1003T5E | [adom/uniroyal-0603waf](https://wiki.adom.inc/adom/uniroyal-0603waf) | [C25803](https://www.lcsc.com/product-detail/C25803.html) |
| 2 | R302 R406 | 56 | UNI-ROYAL(Uniroyal Elec) 0603WAF560JT5E | [adom/uniroyal-0603waf](https://wiki.adom.inc/adom/uniroyal-0603waf) | [C25196](https://www.lcsc.com/product-detail/C25196.html) |
| 5 | R303 R311 R623 R714 R716 | 4.7k | UNI-ROYAL(Uniroyal Elec) 0603WAF4701T5E | [adom/0603waf4701t5e](https://wiki.adom.inc/adom/0603waf4701t5e) | [C23162](https://www.lcsc.com/product-detail/C23162.html) |
| 1 | R304 | 1.8k | UNI-ROYAL(Uniroyal Elec) 0603WAF1801T5E | [adom/uniroyal-0603waf](https://wiki.adom.inc/adom/uniroyal-0603waf) | [C4177](https://www.lcsc.com/product-detail/C4177.html) |
| 7 | R305 R405 R502 R506 R514 R602 R701 | 22 | UNI-ROYAL(Uniroyal Elec) 0603WAF220JT5E | [adom/0603waf220jt5e](https://wiki.adom.inc/adom/0603waf220jt5e) | [C23345](https://www.lcsc.com/product-detail/C23345.html) |
| 1 | R306 | 82 | UNI-ROYAL(Uniroyal Elec) 0603WAF820JT5E | [adom/uniroyal-0603waf](https://wiki.adom.inc/adom/uniroyal-0603waf) | [C23255](https://www.lcsc.com/product-detail/C23255.html) |
| 5 | R308 R309 R402 R408 R615 | 47 | UNI-ROYAL(Uniroyal Elec) 0603WAF470JT5E | [adom/0603waf470jt5e](https://wiki.adom.inc/adom/0603waf470jt5e) | [C23182](https://www.lcsc.com/product-detail/C23182.html) |
| 6 | R312 R501 R503 R508 R509 R616 | 330 | UNI-ROYAL(Uniroyal Elec) 0603WAF3300T5E | [adom/0603waf3300t5e](https://wiki.adom.inc/adom/0603waf3300t5e) | [C23138](https://www.lcsc.com/product-detail/C23138.html) |
| 5 | R315 R404 R414 R511 R603 | 6.8k | UNI-ROYAL(Uniroyal Elec) 0603WAF6801T5E | [adom/0603waf6801t5e](https://wiki.adom.inc/adom/0603waf6801t5e) | [C23212](https://www.lcsc.com/product-detail/C23212.html) |
| 2 | R316 R415 | 150 | UNI-ROYAL(Uniroyal Elec) 0603WAF1500T5E | [adom/uniroyal-0603waf](https://wiki.adom.inc/adom/uniroyal-0603waf) | [C22808](https://www.lcsc.com/product-detail/C22808.html) |
| 5 | R317 R515 R516 R618 R711 | 47k | UNI-ROYAL(Uniroyal Elec) 0603WAF4702T5E | [adom/0603waf4702t5e](https://wiki.adom.inc/adom/0603waf4702t5e) | [C25819](https://www.lcsc.com/product-detail/C25819.html) |
| 1 | R401 | 51 | UNI-ROYAL(Uniroyal Elec) 0603WAF510JT5E | [adom/uniroyal-0603waf](https://wiki.adom.inc/adom/uniroyal-0603waf) | [C23197](https://www.lcsc.com/product-detail/C23197.html) |
| 3 | R407 R705 R709 | 470 | UNI-ROYAL(Uniroyal Elec) 0603WAF4700T5E | [adom/0603waf4700t5e](https://wiki.adom.inc/adom/0603waf4700t5e) | [C23179](https://www.lcsc.com/product-detail/C23179.html) |
| 3 | R411 R513 R517 | 1.5k | UNI-ROYAL(Uniroyal Elec) 0603WAF1501T5E | [adom/uniroyal-0603waf](https://wiki.adom.inc/adom/uniroyal-0603waf) | [C22843](https://www.lcsc.com/product-detail/C22843.html) |
| 1 | R504 | 15k | UNI-ROYAL(Uniroyal Elec) 0603WAF1502T5E | [adom/uniroyal-0603waf](https://wiki.adom.inc/adom/uniroyal-0603waf) | [C22809](https://www.lcsc.com/product-detail/C22809.html) |
| 1 | R505 | 5.6k | UNI-ROYAL(Uniroyal Elec) 0603WAF5601T5E | [adom/uniroyal-0603waf](https://wiki.adom.inc/adom/uniroyal-0603waf) | [C23189](https://www.lcsc.com/product-detail/C23189.html) |
| 1 | R507 | 120 | UNI-ROYAL(Uniroyal Elec) 0603WAF1200T5E | [adom/uniroyal-0603waf](https://wiki.adom.inc/adom/uniroyal-0603waf) | [C22787](https://www.lcsc.com/product-detail/C22787.html) |
| 1 | R601 | 2.7k | UNI-ROYAL(Uniroyal Elec) 0603WAF2701T5E | [adom/uniroyal-0603waf](https://wiki.adom.inc/adom/uniroyal-0603waf) | [C13167](https://www.lcsc.com/product-detail/C13167.html) |
| 2 | R607 R612 | 2k | UNI-ROYAL(Uniroyal Elec) 0603WAF2001T5E | [adom/uniroyal-0603waf](https://wiki.adom.inc/adom/uniroyal-0603waf) | [C22975](https://www.lcsc.com/product-detail/C22975.html) |
| 3 | R613 R703 R707 | 33k | UNI-ROYAL(Uniroyal Elec) 0603WAF3302T5E | [adom/uniroyal-0603waf](https://wiki.adom.inc/adom/uniroyal-0603waf) | [C4216](https://www.lcsc.com/product-detail/C4216.html) |
| 1 | R621 | 39k | UNI-ROYAL(Uniroyal Elec) 0603WAF3902T5E | [adom/uniroyal-0603waf](https://wiki.adom.inc/adom/uniroyal-0603waf) | [C23153](https://www.lcsc.com/product-detail/C23153.html) |
| 1 | R718 | 51k | UNI-ROYAL(Uniroyal Elec) 0603WAF5102T5E | [adom/0603waf5102t5e](https://wiki.adom.inc/adom/0603waf5102t5e) | [C23196](https://www.lcsc.com/product-detail/C23196.html) |
| 1 | R720 | 200k | UNI-ROYAL(Uniroyal Elec) 0603WAF2003T5E | [adom/uniroyal-0603waf](https://wiki.adom.inc/adom/uniroyal-0603waf) | [C25811](https://www.lcsc.com/product-detail/C25811.html) |
| 1 | R725 | 1.2k | UNI-ROYAL(Uniroyal Elec) 0603WAF1201T5E | [adom/uniroyal-0603waf](https://wiki.adom.inc/adom/uniroyal-0603waf) | [C22765](https://www.lcsc.com/product-detail/C22765.html) |
| 1 | R726 | 4.3k | UNI-ROYAL(Uniroyal Elec) 0603WAF4301T5E | [adom/uniroyal-0603waf](https://wiki.adom.inc/adom/uniroyal-0603waf) | [C23159](https://www.lcsc.com/product-detail/C23159.html) |
| 1 | U101 | USBLC6-2SC6 | STMicroelectronics USBLC6-2SC6 | [ray/usblc6-2sc6](https://wiki.adom.inc/ray/usblc6-2sc6) | [C7519](https://www.lcsc.com/product-detail/C7519.html) |
| 1 | U102 | AP2112K-3.3 | Diodes Incorporated AP2112K-3.3TRG1 | [adom/ap2112k-3-3trg1](https://wiki.adom.inc/adom/ap2112k-3-3trg1) | [C51118](https://www.lcsc.com/product-detail/C51118.html) |
| 1 | U103 | STM32G0B1CCU7 | STMicroelectronics STM32G0B1CCU7 | [adom/stm32g0b1ccu7](https://wiki.adom.inc/adom/stm32g0b1ccu7) | [C29759424](https://www.lcsc.com/product-detail/C29759424.html) |
| 4 | U201 U202 U601 U701 | TLV9062IDR | Texas Instruments TLV9062IDR | [adom/tlv9062idr](https://wiki.adom.inc/adom/tlv9062idr) | [C398355](https://www.lcsc.com/product-detail/C398355.html) |
| 1 | Y101 | 40MHz | TKD SX32Y040000BC1T001 | [adom/sx32y040000bc1t001](https://wiki.adom.inc/adom/sx32y040000bc1t001) | [C337678](https://www.lcsc.com/product-detail/C337678.html) |
| 1 | Y501 | 10.24MHz | HCI 0132M4-10.240F12DZNG | [adom/0132m4-10-240f12dzng](https://wiki.adom.inc/adom/0132m4-10-240f12dzng) | [C51822681](https://www.lcsc.com/product-detail/C51822681.html) |
| 28 | MC1 MC2 MC3 MC4 MC5 MC6 MC7 MC8 MC9 MC10 MC11 MC12 MC13 MC14 MC15 MC16 MC17 MC18 MC19 MC20 MC21 MC22 MC23 MC24 MC25 MC26 MC27 MC28 | MachineContactMedium | Adom MachineContactMedium | [adom/machinecontactmedium](https://wiki.adom.inc/adom/machinecontactmedium) | not on JLC (pressed in by the Adom Factory) |
| 4 | MP1 MP2 MP3 MP4 | MachinePinLargeStandard | Adom MachinePinLargeStandard | [adom/machinepinlargestandard](https://wiki.adom.inc/adom/machinepinlargestandard) | not on JLC (pressed in by the Adom Factory) |
1. CL21A475KAQNNNE on [adom/cl21a475kaqnnng](https://wiki.adom.inc/adom/cl21a475kaqnnng): page is the CL21A475KAQNNNG reel variant; same part, different packaging suffix
2. BAT54S on [adom/bat54s](https://wiki.adom.inc/adom/bat54s): page is the Diodes Inc BAT54S; we order the MDD BAT54S (same SOT-23 pinout)
3. MMBT3906 2A(RANGE:100-300) on [adom/mmbt3906](https://wiki.adom.inc/adom/mmbt3906): page is the Diodes Inc MMBT3906; we order the CJ MMBT3906 (same SOT-23 pinout)
4. MMBT3904(RANGE:100-300) on [adom/mmbt3904](https://wiki.adom.inc/adom/mmbt3904): page is the Diodes Inc MMBT3904; we order the CJ MMBT3904 (same SOT-23 pinout)
**Two parts to check in the JLC placement preview:**
- **FL601** (HCCF2-455.000-LTWCGL) is not symmetric: pins 1 and 2 are the signal pins and 3 and 4 are ground. Rotated 180 degrees, the 455 kHz signal lands on ground. Its [part page](https://wiki.adom.inc/adom/hccf2-455-000-ltwcgl) shows pin 1.
- **D301, D302, D401** (BB910 varactors): the Shikues datasheet does not label the terminals, so the footprint assumes the standard cathode-band pinning. Confirm the band on the first parts. See the [BB910 page](https://wiki.adom.inc/adom/bb910).
A KiCad 10 project for a USB-powered AM/FM broadcast receiver. The radio itself is built from discrete
transistors (MMBTH10 / MMBT3904 / BC847BS) and TLV9062 op-amps.
An onboard STM32G0B1 does all the digital work:
* It tunes the varactor oscillators, switches bands, calibrates the receiver itself, and reads the demodulated audio with its ADC.
* It streams that audio to a PC as a USB Audio Class device.
* It takes every setting, and every firmware update, over the same USB-C cable. No other board is needed.
| Item | Value |
|---|---|
| Bands | FM 87.5 to 108 MHz, AM (MW) 530 to 1700 kHz |
| Architecture | Dual-conversion superhet: 10.7 MHz first IF (both bands), 455 kHz second IF |
| Detectors | AM: diode envelope detector with op-amp AGC. FM: diode-pump pulse-count discriminator |
| Tuning | Varactor VCOs driven by the STM32 DACs (12-bit), digital AFC through an IF counter, and self-calibration against crystal-derived markers |
| Control & programming | USB-C only: UAC audio, a CDC command port, and USB DFU (a blank chip boots into ROM DFU; updates need no jumper) |
| Interface | USB-C (power, audio, control, firmware), SMA antenna, 4 LEDs. 4 grounded large Adom machine pins + 28 medium machine contacts (optional: VIN, USB, SWD/reset, UART, audio out, antenna, probes) |
| Debug | 59 labelled test pads covering every supply rail, stage bias and signal node, plus 9 probe contacts |
| PCB | Adom Molecule, 96 × 96 mm large-pin grid (102.5 × 102.5 mm outline), 4 layers (F.Cu signal / In1 GND / In2 +5VA & +3V3 / B.Cu signal), JLCPCB rules |
## Verification status (KiCad 10.0)
* **Netlist:** the schematic's exported netlist matches `tools/design.py` pin for pin (403 parts including 32 machine pins/contacts and 59 test pads; 155 nets). `tools/check_sch.py` checks this.
* **ERC:** 0 errors, 0 warnings (all severities).
* **DRC:** 0 violations (all severities), 0 unconnected items, 0 schematic-parity issues.
* **Board:** 403 footprints, 1,974 track segments (≈4.5 m), 976 vias, 4 copper layers, 102.5 × 102.5 mm molecule outline.
* **Not verified:** RF performance. Oscillator ranges, IF gains and filter terminations are hand calculations. Expect to trim the tank capacitors during bring-up (see below). No SPICE or EM simulation was run.
## Board layout and silkscreen
The layout is floorplanned by function (`tools/floorplan.py`).
* Every circuit block has its own rectangle on the board, and the silkscreen outlines each one with its function written into the top edge.
* Signal flow runs from the antenna (top right), through the front ends (right column) and the 10.7 MHz and 455 kHz IFs (middle column), to the MCU (left column).
* The left column stacks USB/power, the MCU, the LDO and the LED / audio-out block. All their contacts form one column down the left edge.
* Tuning sits bottom right, so only five slow DC control lines (two DACs, the PWM and two band enables) cross the IF column.
* Inside each block, parts sit on a 0.5 mm grid, prefer a common orientation, and are pulled onto shared rows and columns.
The silkscreen is kept clean:
* **Reference designators:** none on the silkscreen. They are on the F.Fab layer, so KiCad's assembly view and the schematic still cross-reference.
* **Part outlines:** passives and discretes have none.
* **What remains:** the block outlines and labels, each IC's part name, the test-pad and machine-contact signal names, the connector outlines, and the LED names.
* **DRC:** because footprints were edited on the board, the project sets KiCad's "footprint doesn't match library" check to *ignore*.
| Silkscreen group | Section |
|---|---|
| USB-C / POWER IN | Power & MCU |
| STM32 MCU | Power & MCU |
| 3.3 V LDO / RAILS | Power & MCU |
| 10.24 MHz XO | 10.7 MHz IF |
| 10.7 MHz IF AMP | 10.7 MHz IF |
| 2ND MIXER | 10.7 MHz IF |
| 10.7 MHz FILTER | 10.7 MHz IF |
| 455 kHz AM FILTER | AM IF |
| AGC VGA | AM IF |
| AGC / RSSI / AM AUDIO | AM IF |
| IF AMP / AM DETECTOR | AM IF |
| FM LIMITER | FM IF |
| FM RSSI | FM IF |
| SQUARER / IF COUNT | FM IF |
| AFC / FM AUDIO | FM IF |
| FM DISCRIMINATOR | FM IF |
| FM MIXER | FM front end |
| FM LO | FM front end |
| FM RF AMP | FM front end |
| ANT / DIPLEXER | FM front end |
| AM MIXER | AM front end |
| AM LO | AM front end |
| AM RF AMP | AM front end |
| VARACTOR DRIVE | Tuning & UI |
| RF TRACKING / VREF | Tuning & UI |
| BAND SWITCH | Tuning & UI |
| ENCODER / LEDS / AUDIO | Tuning & UI |
## Adom Molecule
This board follows Adom's [Molecule Design Guide](https://wiki.adom.inc/adom/molecule-design-guide) (white paper v1.0) and uses the official parts from [adom/adom-machine-parts-library](https://wiki.adom.inc/adom/adom-machine-parts-library). The KiCad copies are in `lib/AdomMachine.*`, with STEP models from the component pages.
| Rule | This molecule |
|---|---|
| Machine pin in every corner (pincer grip) | 4× **MachinePinLargeStandard** (Ø3.45 mm plated hole, 5.2 mm pad), all four on **GND**, **96 × 96 mm** apart. That is 3 × 3 cells of the 32 mm large-class grid, so the molecule mounts directly on the base scaffold without a user scaffold. Large Standard is the only large pin Adom makes. |
| Contacts | All 28 are **MachineContactMedium**, the smaller of Adom's two contact sizes: 0.78 mm drill, 1.3 mm pad, 24 AWG wire. None is closer than 6 mm to a large pin; the pins' 3 mm-radius courtyard is the pincer keep-out. |
| All pins/contacts on the 2 mm grid from the origin pin | MP1 is the origin (KiCad drill/place and grid origin). Every machine contact is at an even-mm offset from MP1, and the probe contacts were snapped to that lattice by the placer. |
| Board outline | 102.5 × 102.5 mm: 3.25 mm beyond the pin centres, with corner arcs centred on the pins (no wings). That is the large pin's 2.6 mm pad radius plus the 0.65 mm edge clearance Adom's example molecules use. |
| Connections via machine pins/contacts | Power, USB, SWD/reset, UART, audio and antenna are on edge contacts, but none is required: USB-C alone runs the board. The only connectors are the USB-C (the pincers can plug USB) and the SMA jack. |
| Jumpers instead of buttons | No buttons and no jumpers are needed. Firmware updates use USB DFU: a blank chip boots into it, and the firmware re-enters it on request. For recovery from a broken image, **CLK(=BOOT0) + 3V3** and **RST + GND** are adjacent contact pairs a machine-pin jumper can bridge. |
| Self-contained | The full radio, MCU, crystal timebase, regulators and decoupling are on board. Tuning, band, volume, calibration and updates are all controlled from the PC over USB-C, with no external controls. |
### Machine pin and contact map
Grid coordinates are mm from MP1; +x is right and +y is down, as seen in KiCad.
| Ref | Net | Silk label | Grid (x, y) |
|---|---|---|---|
| MP1 | `GND` | corner machine pin (large) | (0, 0) |
| MP2 | `GND` | corner machine pin (large) | (96, 0) |
| MP3 | `GND` | corner machine pin (large) | (0, 96) |
| MP4 | `GND` | corner machine pin (large) | (96, 96) |
| MC1 | `VIN` | 5V | (0, 6) |
| MC2 | `GND` | GND | (0, 8) |
| MC3 | `USB_DP` | D+ | (0, 24) |
| MC4 | `USB_DM` | D- | (0, 26) |
| MC5 | `GND` | GND | (0, 28) |
| MC6 | `+3V3` | 3V3 | (0, 34) |
| MC7 | `SWCLK` | CLK | (0, 36) |
| MC8 | `NRST` | RST | (0, 38) |
| MC9 | `GND` | GND | (0, 40) |
| MC10 | `SWDIO` | DIO | (0, 44) |
| MC11 | `GND` | GND | (0, 46) |
| MC12 | `UART_TX` | TX | (0, 52) |
| MC13 | `UART_RX` | RX | (0, 54) |
| MC14 | `GND` | GND | (0, 56) |
| MC15 | `AM_AUDIO` | AM | (0, 84) |
| MC16 | `FM_AUDIO` | FM | (0, 86) |
| MC17 | `GND` | GND | (0, 88) |
| MC18 | `ANT` | ANT | (96, 20) |
| MC19 | `GND` | GND | (96, 22) |
The probe contacts (for the factory's probe needles) sit on the grid next to their circuits: MC20 `CF2_OUT`, MC21 `IF2_OUT`, MC22 `AM_DET`, MC23 `FM_DEMOD`, MC24 `LIM_SQ`, MC25 `VT_FM`, MC26 `VT_AM`, MC27 `VT_RF`, MC28 `+5VA`.
### Debug test points
59 bare copper test pads, grouped by circuit. Each has its short name printed next to it on the silkscreen (the name is in brackets below).
* Supply, bias and ground pads are 1.5 mm, for a DMM probe or a scope ground spring. Every circuit block has its own GND pad.
* Signal pads are 1 mm.
* They are copper only: no part, not in the BOM or CPL, so they add nothing to the JLC order.
| Circuit | Test pads |
|---|---|
| Power & MCU | TP101 `VBUS` (VBUS), TP102 `VIN` (VIN), TP103 `VIN_OR` (VOR), TP104 `+5V` (5V), TP105 `+3V3` (3V3), TP106 `+3.3VA` (3V3A), TP107 `+5VA` (5VA), TP108 `GND` (GND), TP109 `GND` (GND), TP110 `CAL_MARK` (CAL) |
| Tuning & band switch | TP201 `DAC_FM` (DACF), TP202 `DAC_AM` (DACA), TP203 `PWM_RF` (PWM), TP204 `VTF_OUT` (VTF1), TP205 `VTA_OUT` (VTA1), TP206 `VTR_OUT` (VTR1), TP207 `VREF_1V65` (VREF), TP208 `+5V_FM` (5VFM), TP209 `+5V_AM` (5VAM), TP210 `GND` (GND), TP211 `GND` (GND) |
| FM front end | TP301 `V_RF1` (VRF), TP302 `V_LO1` (VLO), TP303 `FMLO_E` (FLO), TP304 `IF_MIX` (MIX), TP305 `GND` (GND) |
| AM front end | TP401 `V_AM1` (VAM1), TP402 `V_AM2` (VAM2), TP403 `AM_RFIN` (AMIN), TP404 `AMRF_C` (ARF), TP405 `AMLO_E` (ALO), TP406 `GND` (GND) |
| 10.7 MHz IF / 2nd mixer | TP501 `V_IF1` (VIF1), TP502 `V_IF2` (VIF2), TP503 `CF1_OUT` (CF1), TP504 `IF_C1` (IF1), TP505 `XO_E` (XO), TP506 `GND` (GND) |
| AM IF, AGC & detector | TP601 `V_IF3` (VIF3), TP602 `VBIAS` (VB), TP603 `AMF_OUT` (AMF), TP604 `VGA1_OUT` (VGA1), TP605 `VGA2_OUT` (VGA2), TP606 `AM_IFOUT` (AIF), TP607 `V_AGC` (AGC), TP608 `RSSI_AM` (RSA), TP609 `AMA_OUT` (AMA), TP610 `GND` (GND), TP611 `GND` (GND) |
| FM limiter & discriminator | TP701 `V_IF4` (VIF4), TP702 `LIM1_C` (LIM1), TP703 `LIM2_C` (LIM2), TP704 `RSSI_FM` (RSF), TP705 `IF_CNT` (CNT), TP706 `VREF_FM` (VRFM), TP707 `FM_DC` (FMDC), TP708 `FMA_OUT` (FMA), TP709 `GND` (GND), TP710 `GND` (GND) |
On the RF side the pads sit on low-impedance nodes (oscillator emitters, mixer output, supply rails) rather than on the tank circuits, so a probe doesn't detune them.
### Using it in the Adom Factory
* **Mounting:** the large corner pins sit on the 32 mm grid, so the molecule plugs straight into the base scaffold's large contacts.
* **One cable does everything:** plug USB-C into a PC.
* It powers the board, carries the audio (a USB microphone), accepts every tuning and settings command, and reflashes the firmware.
* No other board, encoder, programmer or jumper is needed.
* **Optional contacts:**
* **VIN:** 5 V from the control panel's PS2 or USB rail can come in on the VIN contact (MC1) instead of USB-C. The two are OR-ed through B5819W diodes. Current draw is about 80 mA.
* **Debug:** SWD (DIO/CLK/RST) and a UART console (TX/RX) are there for firmware debugging only.
* **Audio:** the AM/FM audio contacts (MC15/MC16) can feed another molecule or a scope.
## Signal chain and frequency plan
```
┌─ 2 MHz LPF ─ AM preamp (Q401) ─ AM mixer (Q403) ◄─ AM VCO 11.23 to 12.4 MHz (Q402, Clapp)
SMA ─ diplexer ────┤ │
└─ 70 MHz HPF + 130 MHz LPF ─ FM RF amp (Q301, varactor-tracked tank)
─ FM mixer (Q303) ◄─ FM VCO 98.7 to 118.7 MHz (Q302, Colpitts)
│
IF_MIX (10.7 MHz, 330 Ω)
│
FL501 10.7 MHz ─ IF amp (Q501) ─ FL502 10.7 MHz ─ 2nd mixer (Q502) ◄─ 10.24 MHz XO (Q503)
│ 455 kHz
┌────────────────────────────────────┴───────────────────────────┐
AM: FL601 455 kHz ±4.5 kHz ─ VGA1/VGA2 (BC847BS pairs, FM: RC LPF ─ limiter (Q701, Q702) ─ squarer (Q703)
tail-current AGC) ─ post-amp (Q605) ─ BAT54 detector ─ diode pump (C714 + BAT54S) ─ U701A integrator
─ U601A AGC integrator ─ U601B 5 kHz Sallen-Key (75 µs de-emphasis) ─ U701B 15 kHz Sallen-Key
─► AM_AUDIO (PA0) V_AGC ─► RSSI_AM (PA2) ─► FM_AUDIO (PA1) FM_DC ─► PA3 LIM_SQ ─► IF_CNT (PA15)
```
* **FM** uses high-side injection (LO = RF + 10.7 MHz). The RF amplifier's tank is tuned by `VT_RF` (a filtered PWM), so the firmware can track the preselector to the LO and suppress the image 21.4 MHz above.
* **AM** is up-converted to 10.7 MHz (LO = RF + 10.7 MHz). The image lands at 22 to 23 MHz, far beyond the 2 MHz low-pass, so no tracking preselector is needed and the VCO only has to cover a 1.1:1 range.
* Both bands share the 10.7 MHz IF and the second conversion to 455 kHz. The second LO is a 10.240 MHz crystal (JLC-stocked; 10.245 MHz parts are scarce), so the first IF is actually **10.695 MHz**. Firmware sets LO1 = RF + 10.695 MHz; the offset is only 5 kHz, well inside the 10.7 MHz filters' 180 kHz passband.
* **AM:** the narrow ceramic filter sets the selectivity.
* **FM:** the wide 10.7 MHz filters set the noise bandwidth, and the ±75 kHz deviation (16 % of 455 kHz) goes straight to the pulse-count detector.
### Pulse-count FM detector
Each IF cycle the 0 to 4.6 V square wave (`LIM_SQ`) moves a fixed charge `C714 · (Vpp − 2·Vf)` into U701A's
summing junction, so the average current is proportional to the IF frequency:
40 µA at 455 kHz and ±6.6 µA at ±75 kHz deviation.
- **Audio and de-emphasis:** R718 (51 k) converts the current to ±0.34 V of audio, and R718 ∥ C715 (51 k ∥ 1.5 nF) gives the 75 µs de-emphasis. For 50 µs (EU), change C715 to 1 nF.
- **AFC:** `FM_DC` (FM_DEMOD × 2/3, 0.1 s time constant) gives the firmware an AFC error signal. `IF_CNT` lets TIM2 count the IF directly.
### AM AGC
Two BC847BS differential pairs act as variable-gain amplifiers. Their gain is proportional to the tail current, about 40 dB of range per stage.
- **Loop:** U601A integrates `AM_DET − 0.98 V` and drives both tail transistors through a ÷2 divider, which holds the detected carrier at about 1 V.
- **Signal strength:** `RSSI_AM` (V_AGC/2) is the firmware's signal-strength reading, used for seek. It is inverted: a lower voltage means a stronger signal.
## STM32G0B1CCU7 pin map
The MCU is an STM32G0B1CCU7 (Cortex-M0+, 256 KB flash, 144 KB RAM, USB FS, dual 12-bit DAC).
It replaces the STM32F072 because of how a blank chip boots:
* The G0B1 has a flash **empty check**. A blank chip straight from the JLC assembly line boots into ST's ROM USB DFU bootloader.
* The very first firmware load therefore goes over USB, just like every later update.
* The F072 has no empty check. A blank F072 needs BOOT0 pulled high by a jumper.
| Pin | Function | Net |
|---|---|---|
| PA0 / PA1 | ADC_IN0 / ADC_IN1 | `AM_AUDIO` / `FM_AUDIO` (biased at 1.65 V) |
| PA2 | ADC_IN2 | `RSSI_AM` (AGC voltage / 2) |
| PA3 | ADC_IN3 | `FM_DC` (discriminator DC, AFC) |
| PA6 | ADC_IN6 | `RSSI_FM` (limiter stage-1 detector) |
| PA4 | DAC1_OUT1 | `DAC_FM` → ×1.45 → `VT_FM` (FM VCO) |
| PA5 | DAC1_OUT2 | `DAC_AM` → ×1.45 → `VT_AM` (AM VCO) |
| PB1 | TIM3_CH4 PWM | `PWM_RF` → 2-pole RC → ×1.45 → `VT_RF` (FM preselector) |
| PA15 | TIM2_ETR | `IF_CNT` (limited 455 kHz IF: AFC and self-calibration) |
| PA8 | TIM1_CH1 | `CAL_MARK` → 47 k + 100 pF → `ANT` (calibration markers; idles low) |
| PF0 / PF1 | HSE | 40 MHz crystal Y101. Its harmonics land at 80 and 120 MHz, clear of the FM band and the LO range. |
| PB8 / PB9 | GPIO open-drain (5 V tolerant) | `FM_EN_N` / `AM_EN_N`: low = band powered |
| PB13 / PB14 / PB15 | GPIO | `LED_FM` / `LED_AM` / `LED_STAT` |
| PA11 / PA12 | USB FS | D− / D+. USB runs on HSI48 + CRS, locked to the host's SOF. |
| PB6 / PB7 | USART1 TX / RX | `UART_TX` / `UART_RX`: optional debug console (MC12/MC13) |
| PA13 / PA14, PF2 | SWD, NRST | Optional debug contacts DIO / CLK / RST. PA14 = SWCLK is also BOOT0 (10 k pull-down). |
| VREF+ | ADC / DAC reference | `+3.3VA` (ferrite-filtered) |
## Programming and control over USB (firmware outline, not yet written)
Everything runs over the one USB-C cable: power, audio, control and firmware updates.
**Programming**
1. **First flash:** a blank G0B1 enumerates as *STM32 BOOTLOADER* (USB DFU, VID 0483 / PID DF11). Flash it with `dfu-util -a 0 -s 0x08000000:leave -D amfm.bin` or STM32CubeProgrammer.
* The empty-flash flag is only re-read at power-on. Use `:leave`, or power-cycle once after the first flash.
2. **Updates:** the firmware exposes a USB **DFU runtime** interface, so `dfu-util -e` works.
* On that request (or the CDC command `dfu`), it stores a magic word in RAM and resets.
* Its startup code sees the word and jumps to the ROM bootloader at 0x1FFF0000.
* `dfu-util` then writes the new image and leaves, with no jumper and no ST-Link.
3. **Recovery**, only if a broken image never answers USB: bridge **CLK↔3V3** (CLK is BOOT0), then **RST↔GND** or power-cycle. The chip comes up in ROM DFU.
**Clocks**
* The 40 MHz crystal drives the PLL: 64 MHz SYSCLK, and 128 MHz for TIM1.
* USB runs on HSI48 with CRS synced to SOF.
* Every frequency the MCU generates or measures is therefore crystal-accurate (±10 ppm).
**USB composite device**
* **Audio:** UAC microphone, 48 kHz, 16-bit mono.
* TIM-triggered ADC with DMA on PA0/PA1, sending the active band.
* The PC's volume and mute controls act on a feature unit.
* **Control:** a CDC-ACM text port (mirrored on the UART console). Commands:
| Command | Action |
|---|---|
| `band fm` / `band am` | Powers the chosen front end (`FM_EN_N` / `AM_EN_N`) and loads its tuning table. |
| `freq 101.1` / `freq 1010` | Tunes in MHz (FM) or kHz (AM): DAC from the calibration table, then AFC. |
| `seek up` / `seek down`, `scan` | Steps and stops on stations, found via RSSI plus the IF count. |
| `mute`, `volume N`, `squelch N` | Digital, in the audio path. |
| `deemph 50` / `deemph 75` | The analog chain is 75 µs; 50 µs regions get a first-order digital correction. |
| `rssi?`, `status?` | Signal strength, AGC voltage, IF frequency, band, frequency. |
| `cal` | Runs the self-calibration below and stores the tables in flash. |
| `dfu` | Reboots into the ROM DFU bootloader. |
**Tuning**
* A per-band table maps DAC code to LO frequency; a second table maps FM frequency to the `VT_RF` preselector PWM.
* After each tune, AFC counts `IF_CNT` for 10 ms against 455.000 kHz and trims the DAC code.
**Self-calibration (`cal`: no signal generator, probe or SDR needed)**
1. **Markers:** TIM1 drives `CAL_MARK` with a square wave of 128 MHz / N.
* Its harmonics reach the antenna input through 47 kΩ and 100 pF, at about −60 dBm each.
* Example: N = 13 gives markers at 88.6, 98.5 and 108.3 MHz. AM uses the fundamental directly, for example 600 / 1000 / 1400 kHz.
2. **Find each marker:** sweep the DAC until the IF counter sees it.
3. **Compute the LO:** LO = f_marker + 10.240 MHz + f_IF2, where f_IF2 is the counted IF.
* The MCU's crystal sets f_marker and the gate time. The ±20 ppm 10.24 MHz crystal sets the second LO.
4. **Build the table:** a few markers per band give a DAC → LO table accurate to a few kHz.
* It also checks that each VCO covers its band (98.7 to 118.7 MHz and 11.23 to 12.4 MHz) and reports if it doesn't.
5. **Preselector:** with a marker in view, sweep the `VT_RF` PWM for maximum `RSSI_FM` to build the tracking table.
6. **Idle:** the marker pin idles low, so nothing is injected during normal reception.
## Bring-up and alignment
1. **Rails:** power from USB and check the test pads VBUS, VOR, 5V, 3V3, 3V3A and 5VA. The board enumerates as *STM32 BOOTLOADER*; flash the firmware over USB.
* Check each stage's bias rail too: VRF, VLO, VAM1, VAM2, VIF1-VIF4 and VB. Every block has a GND pad next to it.
2. **Band power:** send `band fm` and check `+5V_FM` ≈ 4.9 V (pad 5VFM); then `band am` (pad 5VAM). The DAC outputs are at DACF/DACA and the op-amp outputs at VTF1/VTA1/VTR1.
3. **Self-calibration:** run `cal`. The firmware reports each VCO's measured range and builds its tables. The CAL pad shows the marker square wave while it runs.
* If a range misses the band, adjust C319 (FM) or C410 (AM) to shift it. Adjust C320 / C411 to change its width.
4. **Crystal oscillator:** check 10.240 MHz at pad XO. With a marker tuned in, 455 kHz appears at probe contact 455K (MC21) and 10.7 MHz at 10M7 (MC20).
5. **FM detector:** probe SQ (MC24) should show a clean square wave. `FM_DEMOD` (probe DEM, MC23) sits near 1.8 V with an unmodulated IF.
6. **AM chain:** follow the signal through the pads AMF → VGA1 → VGA2 → AIF → DET (MC22) → AMA, with AGC showing the control voltage.
## Ordering from JLCPCB
Every BOM line has an in-stock JLCPCB part (LCSC number), checked against JLCPCB's parts API on 2026-09-29: 86 line items, 312 placed parts. Of those lines, 46 are Basic, 4 Preferred Extended and 36 Extended. Parts cost about $11 per board, and each Extended line adds JLC's per-order Extended-part fee.
1. **PCB:** upload `fab/amfm_receiver_gerbers.zip` (Gerbers + drill, origin at MP1, the top-left corner pin). Settings:
* 4 layers, 102.5 × 102.5 mm, 1.6 mm. The corner pin holes are 3.45 mm plated through-holes.
* Optionally, the impedance-controlled stackup **JLC04161H-7628**. The RF-netclass traces are 0.36 mm, about 50 Ω over the In1 ground plane.
2. **Assembly:** top side only. Upload `fab/amfm_receiver_BOM_JLCPCB.csv` (Comment, Designator, Footprint, LCSC Part #) and `fab/amfm_receiver_CPL_JLCPCB.csv` (Designator, Mid X, Mid Y, Layer, Rotation).
* The SMA jack (J301) is the only through-hole part JLC fits: choose *Standard* PCBA, or leave it out and hand-solder it.
* The machine pins (MP1-MP4) and machine contacts (MC1-MC28) are **not** in the JLC files: JLC only drills their plated holes, and the Adom Factory presses the pins and contacts in.
* The 59 test pads (TP…) are bare copper and are not in the BOM or CPL either.
3. **Check the placement preview before paying.** CPL rotations were converted from KiCad to JLC orientation with the JLCKicadTools correction table.
* Confirm pin 1 or polarity on U103 (QFN-48), U101/U102, U201/U202/U601/U701 (SOIC-8), the SOT-23 and SOT-363 transistors, and the diodes/varactors (D301, D302, D401, D601, D701, D702). Also check the LEDs, the crystals Y101/Y501 and the three ceramic filters.
* Any part the preview shows rotated can be fixed in the order page.
### Parts that differ from a generic design
* **MCU:** **STM32G0B1CCU7** (C29759424, QFN-48). It was chosen over the STM32F072 because its flash empty check boots a blank chip into ROM USB DFU, so programming never needs a jumper or an ST-Link.
* The exposed pad uses KiCad's thermal-via land pattern, which ties it to the inner ground plane.
* **MCU crystal:** 40 MHz **SX32Y040000BC1T001** (C337678, 12 pF load, 20 Ω ESR), with 18 pF C0G loads.
* 40 MHz puts the crystal's harmonics at 80 and 120 MHz, outside the FM band and the 98.7 to 118.7 MHz LO range.
* The low ESR keeps the crystal's critical gm at about 1.1 mA/V, inside the G0's 1.5 mA/V start-up limit.
* **Ceramic filters:** SMD parts JLC stocks.
* FL501/FL502: HCI **HCCF3-10.700-LTCVS3L** (C19191232), 7.0 × 3.0 mm, 180 kHz.
* FL601: **HCCF2-455.000-LTWCGL** (C19186014), ±4.5 kHz.
* Footprints are in `lib/AMFM.pretty`, built from LCSC's land patterns.
* **Varactor:** **BB910** (C475628) is a low-voltage part: 35 to 45 pF at 0.5 V and 10 to 20 pF at 5 V, capacitance ratio 3.25 typical and 1.2 minimum (Shikues datasheet p.1). A low-ratio part narrows the VCO ranges, which `cal` reports.
* **RF inductors:** L304-L307 are Murata **LQW18** wire-wound parts (Q ≈ 35 at 100 MHz). The medium-wave inductors are 1210 wire-wound: NLV32T-2R2J-PF and YSCM322522-8R2J (Q = 30).
* **Capacitors:** every capacitor that sets a frequency, bandwidth or filter corner is C0G/NP0.
* **LEDs:** the green and blue LEDs (KT-0603G/B, about 2.8 V forward drop) use 220 Ω resistors so they light from a 3.3 V GPIO.
## Regenerating (the generators are in `tools/`)
Everything is generated from `tools/design.py`, the single netlist source of truth:
```
cd tools
python3 make_lib.py # project symbols/footprints (ceramic filters, Adom machine pin/contact)
python3 gen_sch.py # hierarchical schematic (9 sheets incl. Molecule_IO)
python3 check_sch.py # KiCad netlist == design.py, pin for pin
python3 gen_pcb.py place # board, stackup, rules, placement, planes, Specctra DSN
# route build/amfm_receiver.dsn with Freerouting -> build/amfm_receiver.ses
python3 gen_pcb.py finish
python3 gen_pcb.py repair # DRC-driven rip-up/re-route until kicad-cli DRC is clean
python3 make_bom.py # grouped BOM with JLC type / stock / price
python3 make_jlc.py # JLCPCB BOM + CPL
./make_fab.sh # Gerbers, drill, placement, schematic PDF, BOMs
```
## Files
| Path | What it is |
|---|---|
| `kicad/` | The KiCad 10 project: `amfm_receiver.kicad_pro`, the 10 schematic sheets, `amfm_receiver.kicad_pcb`, and the project libraries in `kicad/lib/`. The five LCSC 3D models are the logo-free STEPs from the part pages (3D only; copper and fab output are unchanged). |
| `fab/` | What goes to JLCPCB: `amfm_receiver_gerbers.zip`, `amfm_receiver_BOM_JLCPCB.csv`, `amfm_receiver_CPL_JLCPCB.csv`, plus the full BOM, the KiCad placement file and the schematic PDF. |
| `amfm-receiver-molecule.glb` | The assembled board, Z-up in metres, anchored on the front-left machine pin (step2glb molecule mode), with `_footprint.json` / `_symbol.json` for placing the molecule in a layout. |
| `tools/` | The generators: `design.py` is the single netlist source; the others build the schematic, board, routing repairs, BOM and fab files (see Regenerating). |
| Release `amfm-receiver-molecule.step.gz` | The full board STEP (50 MB unzipped) on the Releases tab. |