main
noah amfm-receiver-molecule: KiCad project, fab files, 3D and README (5/7) 27fae5d 1d ago
(kicad_sch
	(version 20251024)
	(generator "eeschema")
	(generator_version "10.0")
	(uuid "18f8ede3-13f1-5c50-9c4a-943343ee2478")
	(paper "A3")
	(title_block
		(title "AM/FM Receiver Molecule - discrete BJT/op-amp radio, STM32 USB audio")
		(date "2026-10-02")
		(rev "B (molecule)")
		(company "Adom")
		(comment 1 "4-layer PCB, JLCPCB-compatible rules")
		(comment 2 "Generated from tools/design.py (single source of truth)")
	)
	(lib_symbols)
	(text "AM/FM RECEIVER MOLECULE  -  discrete BJT + op-amp radio, STM32G0B1 USB audio"
		(exclude_from_sim no)
		(at 12.7 20.32 0)
		(effects (font (size 4 4) (bold yes)) (justify left bottom))
		(uuid "01f03014-b20a-5186-8c0d-95e98d8ae93b")
	)
	(sheet
		(at 20.32 35.56)
		(size 114.3 55.88)
		(exclude_from_sim no)
		(in_bom yes)
		(on_board yes)
		(dnp no)
		(fields_autoplaced yes)
		(stroke (width 0.1524) (type solid))
		(fill (color 0 0 0 0))
		(uuid "79a0e2cd-4299-5691-9113-322db6091e0c")
		(property "Sheetname" "FM_Frontend"
			(at 20.32 34.8488 0)
			(effects (font (size 1.27 1.27)) (justify left bottom))
		)
		(property "Sheetfile" "fm_frontend.kicad_sch"
			(at 20.32 92.0338 0)
			(effects (font (size 1.27 1.27)) (justify left top))
		)
		(instances (project "amfm_receiver" (path "/18f8ede3-13f1-5c50-9c4a-943343ee2478" (page "4"))))
	)
	(text "Antenna, diplexer & FM front end"
		(exclude_from_sim no)
		(at 22.32 89.56 0)
		(effects (font (size 1.8 1.8) (bold yes)) (justify left bottom))
		(uuid "11cccc3d-2cd0-52d1-b958-9821a4bfaa4f")
	)
	(text "FM: high-side LO, IF 10.7 MHz.  Varactor tanks use BB910 through a 22 pF"
		(exclude_from_sim no)
		(at 22.32 40.56 0)
		(effects (font (size 1.4 1.4)) (justify left bottom))
		(uuid "32edf82e-cf85-5066-b7f4-7c1e21553835")
	)
	(text "series capacitor (reduces RF swing on the diode and sets the tuning"
		(exclude_from_sim no)
		(at 22.32 43.56 0)
		(effects (font (size 1.4 1.4)) (justify left bottom))
		(uuid "ecae5e6d-60d9-54dc-a4ed-6a9c4e4eb48e")
	)
	(text "ratio)."
		(exclude_from_sim no)
		(at 22.32 46.56 0)
		(effects (font (size 1.4 1.4)) (justify left bottom))
		(uuid "abbc0872-c9f0-57b5-806c-de49851ac296")
	)
	(sheet
		(at 20.32 104.14)
		(size 114.3 55.88)
		(exclude_from_sim no)
		(in_bom yes)
		(on_board yes)
		(dnp no)
		(fields_autoplaced yes)
		(stroke (width 0.1524) (type solid))
		(fill (color 0 0 0 0))
		(uuid "9f5090b5-2c4c-5b92-be88-c8ef3f1fdbd4")
		(property "Sheetname" "AM_Frontend"
			(at 20.32 103.4288 0)
			(effects (font (size 1.27 1.27)) (justify left bottom))
		)
		(property "Sheetfile" "am_frontend.kicad_sch"
			(at 20.32 160.6138 0)
			(effects (font (size 1.27 1.27)) (justify left top))
		)
		(instances (project "amfm_receiver" (path "/18f8ede3-13f1-5c50-9c4a-943343ee2478" (page "5"))))
	)
	(text "AM front end (up-conversion to 10.7 MHz)"
		(exclude_from_sim no)
		(at 22.32 158.14 0)
		(effects (font (size 1.8 1.8) (bold yes)) (justify left bottom))
		(uuid "351856e6-555e-55aa-8c92-f838e4b9519c")
	)
	(text "AM 530-1700 kHz is up-converted with a high-side LO at 11.23-12.4 MHz; the"
		(exclude_from_sim no)
		(at 22.32 109.14 0)
		(effects (font (size 1.4 1.4)) (justify left bottom))
		(uuid "c26332d8-341a-5fa9-aca2-d1489971e041")
	)
	(text "image lands at 22-23 MHz and is removed by the 2 MHz LPF, so no tracking"
		(exclude_from_sim no)
		(at 22.32 112.14 0)
		(effects (font (size 1.4 1.4)) (justify left bottom))
		(uuid "97348dad-9deb-5e0a-988a-92f1dc4558dc")
	)
	(text "preselector is needed."
		(exclude_from_sim no)
		(at 22.32 115.14 0)
		(effects (font (size 1.4 1.4)) (justify left bottom))
		(uuid "44e9941b-fd34-5b68-a625-76150ab0d048")
	)
	(sheet
		(at 149.86 35.56)
		(size 114.3 55.88)
		(exclude_from_sim no)
		(in_bom yes)
		(on_board yes)
		(dnp no)
		(fields_autoplaced yes)
		(stroke (width 0.1524) (type solid))
		(fill (color 0 0 0 0))
		(uuid "7ae8963f-5825-5a54-ab11-b87d7a6dbf4d")
		(property "Sheetname" "IF_10M7"
			(at 149.86 34.8488 0)
			(effects (font (size 1.27 1.27)) (justify left bottom))
		)
		(property "Sheetfile" "if_10m7.kicad_sch"
			(at 149.86 92.0338 0)
			(effects (font (size 1.27 1.27)) (justify left top))
		)
		(instances (project "amfm_receiver" (path "/18f8ede3-13f1-5c50-9c4a-943343ee2478" (page "6"))))
	)
	(text "10.7 MHz IF & second conversion to 455 kHz"
		(exclude_from_sim no)
		(at 151.86 89.56 0)
		(effects (font (size 1.8 1.8) (bold yes)) (justify left bottom))
		(uuid "798794a4-5b58-59cc-ba74-bf8b4d0755ac")
	)
	(text "Two 10.7 MHz ceramic filters (230 kHz) around one BJT gain stage, then a"
		(exclude_from_sim no)
		(at 151.86 40.56 0)
		(effects (font (size 1.4 1.4)) (justify left bottom))
		(uuid "de72ad0b-5a0b-557c-9e29-11af18d04f2a")
	)
	(text "BJT mixer with a 10.24 MHz crystal oscillator converts both bands to 455"
		(exclude_from_sim no)
		(at 151.86 43.56 0)
		(effects (font (size 1.4 1.4)) (justify left bottom))
		(uuid "e0a30d1f-71b1-559f-abcb-c83196599ec7")
	)
	(text "kHz."
		(exclude_from_sim no)
		(at 151.86 46.56 0)
		(effects (font (size 1.4 1.4)) (justify left bottom))
		(uuid "2a0e0266-d939-56fc-91e8-156ed87c7cac")
	)
	(sheet
		(at 279.4 35.56)
		(size 114.3 55.88)
		(exclude_from_sim no)
		(in_bom yes)
		(on_board yes)
		(dnp no)
		(fields_autoplaced yes)
		(stroke (width 0.1524) (type solid))
		(fill (color 0 0 0 0))
		(uuid "cde52c28-1d11-5b9f-8b34-c0367b9766c5")
		(property "Sheetname" "AM_IF"
			(at 279.4 34.8488 0)
			(effects (font (size 1.27 1.27)) (justify left bottom))
		)
		(property "Sheetfile" "am_if.kicad_sch"
			(at 279.4 92.0338 0)
			(effects (font (size 1.27 1.27)) (justify left top))
		)
		(instances (project "amfm_receiver" (path "/18f8ede3-13f1-5c50-9c4a-943343ee2478" (page "7"))))
	)
	(text "AM 455 kHz IF, AGC & envelope detector"
		(exclude_from_sim no)
		(at 281.4 89.56 0)
		(effects (font (size 1.8 1.8) (bold yes)) (justify left bottom))
		(uuid "66bd3833-7be3-5e27-9f07-160805c455bb")
	)
	(text "Gain is set by the tail currents of two BC847BS differential pairs (~40 dB"
		(exclude_from_sim no)
		(at 281.4 40.56 0)
		(effects (font (size 1.4 1.4)) (justify left bottom))
		(uuid "60ce2f76-71a1-5406-aa96-aa3eec9c446a")
	)
	(text "range each); an op-amp integrator holds the detected carrier at ~1 V."
		(exclude_from_sim no)
		(at 281.4 43.56 0)
		(effects (font (size 1.4 1.4)) (justify left bottom))
		(uuid "449a8305-6222-56db-a17f-e8d0d65e2b08")
	)
	(sheet
		(at 279.4 104.14)
		(size 114.3 55.88)
		(exclude_from_sim no)
		(in_bom yes)
		(on_board yes)
		(dnp no)
		(fields_autoplaced yes)
		(stroke (width 0.1524) (type solid))
		(fill (color 0 0 0 0))
		(uuid "7f492491-f31d-57a8-93ce-fded8f627f19")
		(property "Sheetname" "FM_IF"
			(at 279.4 103.4288 0)
			(effects (font (size 1.27 1.27)) (justify left bottom))
		)
		(property "Sheetfile" "fm_if.kicad_sch"
			(at 279.4 160.6138 0)
			(effects (font (size 1.27 1.27)) (justify left top))
		)
		(instances (project "amfm_receiver" (path "/18f8ede3-13f1-5c50-9c4a-943343ee2478" (page "8"))))
	)
	(text "FM 455 kHz limiter & pulse-count discriminator"
		(exclude_from_sim no)
		(at 281.4 158.14 0)
		(effects (font (size 1.8 1.8) (bold yes)) (justify left bottom))
		(uuid "6fd185c1-cbfb-5227-8902-0e36b68ddd90")
	)
	(text "Each IF cycle transfers a fixed charge C*(Vpp-2Vf) into the op-amp summing"
		(exclude_from_sim no)
		(at 281.4 109.14 0)
		(effects (font (size 1.4 1.4)) (justify left bottom))
		(uuid "f14084d5-01a3-5177-b1de-a0f88eb6dbb0")
	)
	(text "node, so the average current is proportional to frequency (40 uA at 455"
		(exclude_from_sim no)
		(at 281.4 112.14 0)
		(effects (font (size 1.4 1.4)) (justify left bottom))
		(uuid "60465b71-5020-53ed-aa25-e2ad9deb1a12")
	)
	(text "kHz, +/-6.6 uA at +/-75 kHz)."
		(exclude_from_sim no)
		(at 281.4 115.14 0)
		(effects (font (size 1.4 1.4)) (justify left bottom))
		(uuid "df9aa4fb-8192-5bad-972d-c3632c6c1105")
	)
	(sheet
		(at 149.86 104.14)
		(size 114.3 55.88)
		(exclude_from_sim no)
		(in_bom yes)
		(on_board yes)
		(dnp no)
		(fields_autoplaced yes)
		(stroke (width 0.1524) (type solid))
		(fill (color 0 0 0 0))
		(uuid "1b671d19-7e31-5203-b3cc-27ac66ed76b2")
		(property "Sheetname" "Tuning_UI"
			(at 149.86 103.4288 0)
			(effects (font (size 1.27 1.27)) (justify left bottom))
		)
		(property "Sheetfile" "tuning_ui.kicad_sch"
			(at 149.86 160.6138 0)
			(effects (font (size 1.27 1.27)) (justify left top))
		)
		(instances (project "amfm_receiver" (path "/18f8ede3-13f1-5c50-9c4a-943343ee2478" (page "3"))))
	)
	(text "Tuning, band switching & user interface"
		(exclude_from_sim no)
		(at 151.86 158.14 0)
		(effects (font (size 1.8 1.8) (bold yes)) (justify left bottom))
		(uuid "02734bdf-9a28-592e-b5f7-278fc21028fd")
	)
	(text "DAC outputs are scaled x1.45 by rail-to-rail op-amps to 0-4.8 V and"
		(exclude_from_sim no)
		(at 151.86 109.14 0)
		(effects (font (size 1.4 1.4)) (justify left bottom))
		(uuid "4df8670a-7d49-5bb8-9f6d-3b13886bc140")
	)
	(text "heavily RC filtered (varactor noise = LO phase noise).  The RF tracking"
		(exclude_from_sim no)
		(at 151.86 112.14 0)
		(effects (font (size 1.4 1.4)) (justify left bottom))
		(uuid "1f8b1e81-9405-5867-a4f0-f8ae7eb84324")
	)
	(text "tank uses a filtered 12-bit PWM."
		(exclude_from_sim no)
		(at 151.86 115.14 0)
		(effects (font (size 1.4 1.4)) (justify left bottom))
		(uuid "2738da20-9d15-563d-9b64-92a28c584021")
	)
	(sheet
		(at 279.4 172.72)
		(size 114.3 55.88)
		(exclude_from_sim no)
		(in_bom yes)
		(on_board yes)
		(dnp no)
		(fields_autoplaced yes)
		(stroke (width 0.1524) (type solid))
		(fill (color 0 0 0 0))
		(uuid "b7bcedf3-092e-53e9-b7cb-2a962ebb14bd")
		(property "Sheetname" "Power_MCU"
			(at 279.4 172.0088 0)
			(effects (font (size 1.27 1.27)) (justify left bottom))
		)
		(property "Sheetfile" "power_mcu.kicad_sch"
			(at 279.4 229.1938 0)
			(effects (font (size 1.27 1.27)) (justify left top))
		)
		(instances (project "amfm_receiver" (path "/18f8ede3-13f1-5c50-9c4a-943343ee2478" (page "2"))))
	)
	(text "Power, USB & MCU"
		(exclude_from_sim no)
		(at 281.4 226.72 0)
		(effects (font (size 1.8 1.8) (bold yes)) (justify left bottom))
		(uuid "c5d5dd02-436c-5ad3-89c4-8c99b934c689")
	)
	(text "USB-C 5 V in -> PTC -> +5V.  AP2112K LDO -> +3V3 (MCU).  Ferrite-filtered"
		(exclude_from_sim no)
		(at 281.4 177.72 0)
		(effects (font (size 1.4 1.4)) (justify left bottom))
		(uuid "8cc44d68-1140-5f66-9818-82dcf7411c1f")
	)
	(text "+5VA (all analog/RF) and +3.3VA (MCU VREF+: ADC / DAC reference).  The"
		(exclude_from_sim no)
		(at 281.4 180.72 0)
		(effects (font (size 1.4 1.4)) (justify left bottom))
		(uuid "04a41d75-d480-579b-9d2f-12c57576ece6")
	)
	(text "STM32G0B1 runs USB from HSI48 + CRS and its timers from a 40 MHz crystal;"
		(exclude_from_sim no)
		(at 281.4 183.72 0)
		(effects (font (size 1.4 1.4)) (justify left bottom))
		(uuid "e21be9d0-ec1d-50b4-9971-8e66ca4b1343")
	)
	(text "a blank chip boots straight into the ROM USB DFU bootloader."
		(exclude_from_sim no)
		(at 281.4 186.72 0)
		(effects (font (size 1.4 1.4)) (justify left bottom))
		(uuid "e5e54955-af63-50ac-a86e-00ab26603233")
	)
	(sheet
		(at 20.32 172.72)
		(size 114.3 55.88)
		(exclude_from_sim no)
		(in_bom yes)
		(on_board yes)
		(dnp no)
		(fields_autoplaced yes)
		(stroke (width 0.1524) (type solid))
		(fill (color 0 0 0 0))
		(uuid "f309d33b-72b0-50df-988d-26802f658409")
		(property "Sheetname" "Molecule_IO"
			(at 20.32 172.0088 0)
			(effects (font (size 1.27 1.27)) (justify left bottom))
		)
		(property "Sheetfile" "molecule_io.kicad_sch"
			(at 20.32 229.1938 0)
			(effects (font (size 1.27 1.27)) (justify left top))
		)
		(instances (project "amfm_receiver" (path "/18f8ede3-13f1-5c50-9c4a-943343ee2478" (page "9"))))
	)
	(text "Molecule interface: machine pins & contacts"
		(exclude_from_sim no)
		(at 22.32 226.72 0)
		(effects (font (size 1.8 1.8) (bold yes)) (justify left bottom))
		(uuid "8e9321a2-f240-5ea1-900c-f349c0952e73")
	)
	(text "Adom Molecule (Molecule Design Guide v1.0): large / standard machine pins"
		(exclude_from_sim no)
		(at 22.32 177.72 0)
		(effects (font (size 1.4 1.4)) (justify left bottom))
		(uuid "4bffae73-a23d-5a52-ae8a-7a45da447ebf")
	)
	(text "in the four corners, 96 x 96 mm apart on the 32 mm large grid (mounts"
		(exclude_from_sim no)
		(at 22.32 180.72 0)
		(effects (font (size 1.4 1.4)) (justify left bottom))
		(uuid "a7b7e562-faa5-5073-8309-d7b86ecf62e9")
	)
	(text "directly on the base scaffold), and medium machine contacts on the 2 mm"
		(exclude_from_sim no)
		(at 22.32 183.72 0)
		(effects (font (size 1.4 1.4)) (justify left bottom))
		(uuid "6f5bb7fd-eca8-5d2a-9fb7-b8ff858a31f2")
	)
	(text "grid measured from MP1.  All four corner pins are GND; 5 V comes in on the"
		(exclude_from_sim no)
		(at 22.32 186.72 0)
		(effects (font (size 1.4 1.4)) (justify left bottom))
		(uuid "9fd157d4-9d75-559d-bcf1-42aaa8ffbc31")
	)
	(text "VIN contact (MC1) or USB-C.  None of the contacts is needed in use: power,"
		(exclude_from_sim no)
		(at 22.32 189.72 0)
		(effects (font (size 1.4 1.4)) (justify left bottom))
		(uuid "23ecbd87-51ef-5c8a-bde0-f89c2807aa08")
	)
	(text "control, audio and firmware updates all run over USB-C.  SWD, UART and the"
		(exclude_from_sim no)
		(at 22.32 192.72 0)
		(effects (font (size 1.4 1.4)) (justify left bottom))
		(uuid "e0b98661-5540-5355-a1ad-c076c6f5b7ef")
	)
	(text "audio outputs are optional debug / monitor points; CLK(=BOOT0)/3V3 and"
		(exclude_from_sim no)
		(at 22.32 195.72 0)
		(effects (font (size 1.4 1.4)) (justify left bottom))
		(uuid "ccf8573f-0e92-5cd7-8dc8-34b1e43968bf")
	)
	(text "RST/GND are adjacent pairs for jumper recovery."
		(exclude_from_sim no)
		(at 22.32 198.72 0)
		(effects (font (size 1.4 1.4)) (justify left bottom))
		(uuid "7112b878-f9ea-55bc-bd1c-c9818e0315e6")
	)
	(text "SIGNAL FLOW"
		(exclude_from_sim no)
		(at 20.32 236.22 0)
		(effects (font (size 1.9 1.9) (bold yes)) (justify left bottom))
		(uuid "e8d05782-b6dd-596d-97ac-3221c971cd95")
	)
	(text "ANT -> diplexer -> FM: 88-108 MHz RF amp (tracked varactor tank) -> BJT mixer <- 98.7-118.7 MHz VCO"
		(exclude_from_sim no)
		(at 20.32 240.12 0)
		(effects (font (size 1.6 1.6)) (justify left bottom))
		(uuid "1b5442cf-3313-5030-b0de-57ac2c4b28bc")
	)
	(text "             -> AM: 0.53-1.7 MHz preamp -> BJT mixer <- 11.23-12.4 MHz VCO (up-conversion)"
		(exclude_from_sim no)
		(at 20.32 244.02 0)
		(effects (font (size 1.6 1.6)) (justify left bottom))
		(uuid "332cf382-fcc4-5392-b08d-f3845ba3e79a")
	)
	(text "both -> 10.695 MHz IF (2 ceramic filters + BJT amp) -> BJT mixer <- 10.24 MHz XO -> 455 kHz"
		(exclude_from_sim no)
		(at 20.32 247.92 0)
		(effects (font (size 1.6 1.6)) (justify left bottom))
		(uuid "20aea08f-f813-5be1-aeef-3fc5f3dc421c")
	)
	(text "AM: ceramic filter -> 2x diff-pair VGA -> post-amp -> diode detector -> op-amp AGC & 5 kHz LPF"
		(exclude_from_sim no)
		(at 20.32 251.82 0)
		(effects (font (size 1.6 1.6)) (justify left bottom))
		(uuid "fad7f18a-057f-5823-8109-eef05eee6f13")
	)
	(text "FM: BJT limiter -> squarer -> diode-pump pulse-count detector -> op-amp integrator -> 15 kHz LPF"
		(exclude_from_sim no)
		(at 20.32 255.72 0)
		(effects (font (size 1.6 1.6)) (justify left bottom))
		(uuid "2571995c-a19a-5cd6-a57b-79d2a7e3f5dd")
	)
	(text "STM32G0B1: ADC samples AM_AUDIO / FM_AUDIO; DAC1/DAC2 tune the VCOs; PWM tunes the FM preselector;"
		(exclude_from_sim no)
		(at 20.32 259.62 0)
		(effects (font (size 1.6 1.6)) (justify left bottom))
		(uuid "051fe4c9-765f-555d-84bf-49853503c42f")
	)
	(text "TIM2_ETR counts the limited IF; TIM1 injects 40 MHz-crystal-derived markers at ANT for self-calibration."
		(exclude_from_sim no)
		(at 20.32 263.52 0)
		(effects (font (size 1.6 1.6)) (justify left bottom))
		(uuid "cae6d8e0-86ed-59f0-b721-93ae5659a102")
	)
	(text "USB-C only: UAC audio + CDC control port + DFU runtime; a blank chip boots into ROM USB DFU."
		(exclude_from_sim no)
		(at 20.32 267.42 0)
		(effects (font (size 1.6 1.6)) (justify left bottom))
		(uuid "0e4670cd-e637-5bc2-b0b9-5f8ea13bb8f9")
	)
	(text ""
		(exclude_from_sim no)
		(at 20.32 271.32 0)
		(effects (font (size 1.6 1.6)) (justify left bottom))
		(uuid "a3b4d114-b5db-5315-b9fb-33ee26863868")
	)
	(text "POWER: USB-C 5 V or VIN machine pin (B5819W OR-ing, 500 mA PTC).  AP2112K 3.3 V.  +5VA for analog/RF."
		(exclude_from_sim no)
		(at 20.32 275.22 0)
		(effects (font (size 1.6 1.6)) (justify left bottom))
		(uuid "7acb7b6f-8669-59a3-aafd-cdd62cee9083")
	)
	(text "Band switching: PNP high-side switches (MCU open-drain) power only the active front end."
		(exclude_from_sim no)
		(at 20.32 279.12 0)
		(effects (font (size 1.6 1.6)) (justify left bottom))
		(uuid "25ad8223-f9fd-5872-8e02-d65add158619")
	)
	(text "ADOM MOLECULE: large/standard GND machine pins 96 x 96 mm, 28 medium contacts on the 2 mm grid (all optional)."
		(exclude_from_sim no)
		(at 20.32 283.02 0)
		(effects (font (size 1.6 1.6)) (justify left bottom))
		(uuid "08459ca1-515a-5a00-98c1-db8fd7c58ec1")
	)
	(text "PCB: 4 layers - F.Cu signal / In1.Cu solid GND / In2.Cu power / B.Cu signal + GND pour."
		(exclude_from_sim no)
		(at 20.32 286.92 0)
		(effects (font (size 1.6 1.6)) (justify left bottom))
		(uuid "14868f9a-120c-5a31-af98-be1947f02a84")
	)
	(sheet_instances (path "/" (page "1")))
	(embedded_fonts no)
)