mohan-bee/RP2040-RF-Receiver

The AMS1117-3.3 is a surface-mount voltage regulator IC that converts an input voltage into a stable 3.3V output.

Version
1.0.3
License
unset
Stars
0

index.circuit.tsx

PCBPCB preview for index.circuit.tsx
SchematicSchematic preview for index.circuit.tsx
import { RP2040 } from "./imports/RP2040"
import { W25Q16JVSSIQ } from "./imports/W25Q16JVSSIQ"
import { X322512MSB4SI } from "./imports/X322512MSB4SI"
import { AMS1117_3_3 } from "./imports/AMS1117_3_3"
import { KT_0603R } from "./imports/KT_0603R"
import { SS14 } from "./imports/SS14"
import { PM254V_12_08_H85 } from "./imports/PM254V_12_08_H85"
import { A_2_54_1_6P_ } from "./imports/A_2_54_1_6P_"
import { B2B_PH_K_S_LF__SN_ } from "./imports/B2B_PH_K_S_LF__SN_"

const T = ({ from, to }: { from: string; to: string }) => (
  <trace from={from} to={to} />
)

export default function RP2040RFReceiver() {
  return (
    <board
      width="60mm"
      height="45mm"
      layers={2}
      title="RP2040 RF Receiver"
      schAutoLayoutEnabled
    >
      <schematicsection name="POWER" displayName="1. POWER INPUT + 3.3 V REGULATOR" />
      <schematicsection name="MCU" displayName="2. RP2040 CORE + CLOCK" />
      <schematicsection name="FLASH" displayName="3. QSPI FLASH" />
      <schematicsection name="RADIO" displayName="4. nRF24L01+ MODULE" />
      <schematicsection name="OUTPUTS" displayName="5. SIX OUTPUT CHANNELS" />
      <schematicsection name="PROGRAM" displayName="6. PROGRAMMING HEADER" />

      {/* Battery input and diode-isolated shared regulator input. */}
      <B2B_PH_K_S_LF__SN_ name="J_BAT" pcbX={-25} pcbY={15} pcbRotation={90} schSectionName="POWER" />
      <SS14 name="D_BAT" pcbX={-19} pcbY={15} schSectionName="POWER" />
      <AMS1117_3_3 name="U_REG" pcbX={-12} pcbY={14} pcbRotation={90} schSectionName="POWER" />
      <capacitor name="C_IN" capacitance="10uF" footprint="0603" supplierPartNumbers={{ jlcpcb: ["C19702"] }} pcbX={-18} pcbY={10} schSectionName="POWER" />
      <capacitor name="C_OUT" capacitance="10uF" footprint="0603" supplierPartNumbers={{ jlcpcb: ["C19702"] }} pcbX={-6.5} pcbY={10} schSectionName="POWER" />
      <capacitor name="C_REG" capacitance="100nF" footprint="0603" supplierPartNumbers={{ jlcpcb: ["C14663"] }} pcbX={-6.5} pcbY={13} schSectionName="POWER" />

      <T from=".J_BAT > .pin1" to="net.BAT" />
      <T from=".J_BAT > .pin2" to="net.GND" />
      <T from=".D_BAT > .anode" to="net.BAT" />
      <T from=".D_BAT > .cathode" to="net.VIN" />
      <T from=".U_REG > .VIN" to="net.VIN" />
      <T from=".U_REG > .GND" to="net.GND" />
      <T from=".U_REG > .VOUT1" to="net.V3V3" />
      <T from=".U_REG > .VOUT2" to="net.V3V3" />
      <T from=".C_IN > .pin1" to="net.VIN" />
      <T from=".C_IN > .pin2" to="net.GND" />
      <T from=".C_OUT > .pin1" to="net.V3V3" />
      <T from=".C_OUT > .pin2" to="net.GND" />
      <T from=".C_REG > .pin1" to="net.V3V3" />
      <T from=".C_REG > .pin2" to="net.GND" />

      {/* RP2040 core, local 1.1 V rail, crystal, and decoupling. */}
      <RP2040 name="U_MCU" pcbX={0} pcbY={1} schWidth={2.8} schHeight={5.8} schSectionName="MCU" />
      <X322512MSB4SI name="Y1" pcbX={-9} pcbY={2} pcbRotation={90} schWidth={1.96} schSectionName="MCU" />
      <capacitor name="C_XIN" capacitance="15pF" footprint="0402" supplierPartNumbers={{ jlcpcb: ["C1548"] }} pcbX={-10} pcbY={-2} schSectionName="MCU" />
      <capacitor name="C_XOUT" capacitance="15pF" footprint="0402" supplierPartNumbers={{ jlcpcb: ["C1548"] }} pcbX={-7} pcbY={-2} schSectionName="MCU" />
      <resistor name="R_RUN" resistance="10k" footprint="0603" supplierPartNumbers={{ jlcpcb: ["C25804"] }} pcbX={7.5} pcbY={7} schSectionName="MCU" />
      <capacitor name="C_CORE" capacitance="10uF" footprint="0603" supplierPartNumbers={{ jlcpcb: ["C19702"] }} pcbX={6} pcbY={-4} schSectionName="MCU" />
      <capacitor name="C_MCU1" capacitance="100nF" footprint="0603" supplierPartNumbers={{ jlcpcb: ["C14663"] }} pcbX={-5} pcbY={7} schSectionName="MCU" />
      <capacitor name="C_MCU2" capacitance="100nF" footprint="0603" supplierPartNumbers={{ jlcpcb: ["C14663"] }} pcbX={-2} pcbY={8} schSectionName="MCU" />
      <capacitor name="C_MCU3" capacitance="100nF" footprint="0603" supplierPartNumbers={{ jlcpcb: ["C14663"] }} pcbX={2} pcbY={8.7} schSectionName="MCU" />
      <capacitor name="C_MCU4" capacitance="100nF" footprint="0603" supplierPartNumbers={{ jlcpcb: ["C14663"] }} pcbX={4.3} pcbY={7} schSectionName="MCU" />
      <capacitor name="C_MCU5" capacitance="100nF" footprint="0603" supplierPartNumbers={{ jlcpcb: ["C14663"] }} pcbX={-5} pcbY={-4} schSectionName="MCU" />

      {[
        "IOVDD1", "IOVDD2", "IOVDD3", "IOVDD4", "IOVDD5", "IOVDD6",
        "ADC_AVDD", "USB_VDD", "VREG_IN",
      ].map((pin) => <T key={pin} from={`.U_MCU > .${pin}`} to="net.V3V3" />)}
      <T from=".U_MCU > .GND" to="net.GND" />
      <T from=".U_MCU > .TESTEN" to="net.GND" />
      <T from=".U_MCU > .VREG_VOUT" to="net.V1V1" />
      <T from=".U_MCU > .DVDD1" to="net.V1V1" />
      <T from=".U_MCU > .DVDD2" to="net.V1V1" />
      <T from=".C_CORE > .pin1" to="net.V1V1" />
      <T from=".C_CORE > .pin2" to="net.GND" />
      <T from=".R_RUN > .pin1" to="net.V3V3" />
      <T from=".R_RUN > .pin2" to="net.RUN" />
      <T from=".U_MCU > .RUN" to="net.RUN" />
      <T from=".U_MCU > .XIN" to="net.XIN" />
      <T from=".U_MCU > .XOUT" to="net.XOUT" />
      <T from=".Y1 > .OSC1" to="net.XIN" />
      <T from=".Y1 > .OSC2" to="net.XOUT" />
      <T from=".Y1 > .GND1" to="net.GND" />
      <T from=".Y1 > .GND2" to="net.GND" />
      <T from=".C_XIN > .pin1" to="net.XIN" />
      <T from=".C_XIN > .pin2" to="net.GND" />
      <T from=".C_XOUT > .pin1" to="net.XOUT" />
      <T from=".C_XOUT > .pin2" to="net.GND" />
      {["C_MCU1", "C_MCU2", "C_MCU3", "C_MCU4", "C_MCU5"].map((name) => (
        <group key={name}>
          <T from={`.${name} > .pin1`} to="net.V3V3" />
          <T from={`.${name} > .pin2`} to="net.GND" />
        </group>
      ))}

      {/* External 2 MB QSPI flash. */}
      <W25Q16JVSSIQ name="U_FLASH" pcbX={11} pcbY={3} pcbRotation={90} schSectionName="FLASH" />
      <capacitor name="C_FLASH" capacitance="100nF" footprint="0603" supplierPartNumbers={{ jlcpcb: ["C14663"] }} pcbX={17.5} pcbY={3} schSectionName="FLASH" />
      <T from=".U_FLASH > .pin1" to="net.QSS" />
      <T from=".U_FLASH > .pin2" to="net.QD1" />
      <T from=".U_FLASH > .pin3" to="net.QD2" />
      <T from=".U_FLASH > .GND" to="net.GND" />
      <T from=".U_FLASH > .pin5" to="net.QD0" />
      <T from=".U_FLASH > .CLK" to="net.QCLK" />
      <T from=".U_FLASH > .IO3" to="net.QD3" />
      <T from=".U_FLASH > .VCC" to="net.V3V3" />
      <T from=".U_MCU > .QSPI_SS" to="net.QSS" />
      <T from=".U_MCU > .QSPI_SD0" to="net.QD0" />
      <T from=".U_MCU > .QSPI_SD1" to="net.QD1" />
      <T from=".U_MCU > .QSPI_SD2" to="net.QD2" />
      <T from=".U_MCU > .QSPI_SD3" to="net.QD3" />
      <T from=".U_MCU > .QSPI_SCLK" to="net.QCLK" />
      <T from=".C_FLASH > .pin1" to="net.V3V3" />
      <T from=".C_FLASH > .pin2" to="net.GND" />

      {/* Standard nRF24L01+ 2x4 module header: GND, 3V3, CE, CSN, SCK, MOSI, MISO, IRQ. */}
      <PM254V_12_08_H85 name="J_RF" pcbX={24} pcbY={16} pcbRotation={90} schSectionName="RADIO" />
      <capacitor name="C_RF" capacitance="100nF" footprint="0603" supplierPartNumbers={{ jlcpcb: ["C14663"] }} pcbX={21} pcbY={8} schSectionName="RADIO" />
      <T from=".J_RF > .pin1" to="net.GND" />
      <T from=".J_RF > .pin2" to="net.V3V3" />
      <T from=".J_RF > .pin3" to="net.CE" />
      <T from=".J_RF > .pin4" to="net.CSN" />
      <T from=".J_RF > .pin5" to="net.SCK" />
      <T from=".J_RF > .pin6" to="net.MOSI" />
      <T from=".J_RF > .pin7" to="net.MISO" />
      <T from=".C_RF > .pin1" to="net.V3V3" />
      <T from=".C_RF > .pin2" to="net.GND" />
      <T from=".U_MCU > .GPIO2" to="net.SCK" />
      <T from=".U_MCU > .GPIO3" to="net.MOSI" />
      <T from=".U_MCU > .GPIO4" to="net.MISO" />
      <T from=".U_MCU > .GPIO5" to="net.CSN" />
      <T from=".U_MCU > .GPIO6" to="net.CE" />

      {/* Six GPIO-driven indicator channels. */}
      {[10, 11, 12, 13, 14, 15].map((gpio, index) => {
        const n = index + 1
        const x = -20 + index * 8
        return (
          <group key={gpio}>
            <resistor name={`R_CH${n}`} resistance="330" footprint="0603" supplierPartNumbers={{ jlcpcb: ["C23138"] }} pcbX={x} pcbY={-11} schX={index * 5} schY={0} schSectionName="OUTPUTS" />
            <KT_0603R name={`LED_CH${n}`} pcbX={x} pcbY={-16} pcbRotation={90} schX={index * 5 + 1.6} schY={0} schSectionName="OUTPUTS" />
            <T from={`.U_MCU > .GPIO${gpio}`} to={`net.CH${n}`} />
            <T from={`.R_CH${n} > .pin1`} to={`net.CH${n}`} />
            <T from={`.R_CH${n} > .pin2`} to={`.LED_CH${n} > .anode`} />
            <T from={`.LED_CH${n} > .cathode`} to="net.GND" />
          </group>
        )
      })}

      {/* Female programmer header: VBUS, GND, D+, D-, RUN, BOOTSEL. */}
      <A_2_54_1_6P_ name="J_PROG" pcbX={23} pcbY={-14} pcbRotation={90} schSectionName="PROGRAM" />
      <T from=".J_PROG > .pin1" to="net.VIN" />
      <T from=".J_PROG > .pin2" to="net.GND" />
      <T from=".J_PROG > .pin3" to="net.DP" />
      <T from=".J_PROG > .pin4" to="net.DM" />
      <T from=".J_PROG > .pin5" to="net.RUN" />
      <T from=".J_PROG > .pin6" to="net.QSS" />
      <T from=".U_MCU > .USB_DP" to="net.DP" />
      <T from=".U_MCU > .USB_DM" to="net.DM" />

      <silkscreentext text="RP2040 RF RECEIVER" pcbX={0} pcbY={20} fontSize={1.2} />
      <silkscreentext text="BAT" pcbX={-25} pcbY={11} fontSize={0.8} />
      <silkscreentext text="nRF24" pcbX={21} pcbY={17} fontSize={0.8} />
      <silkscreentext text="PROG: 5V G D+ D- RUN BOOT" pcbX={17} pcbY={-20} fontSize={0.65} />

      {/* Unambiguous pin-1 indicators beside the two polarized headers. */}
      <silkscreencircle pcbX={26.4} pcbY={11.4} radius={0.55} strokeWidth={0.3} />
      <silkscreentext text="1" pcbX={27.4} pcbY={11.4} fontSize={0.8} />
      <silkscreencircle pcbX={24.5} pcbY={-20.3} radius={0.55} strokeWidth={0.3} />
      <silkscreentext text="1" pcbX={25.6} pcbY={-20.3} fontSize={0.8} />

      {/* Keep all copper and routing away from the module antenna at the top edge. */}
      <keepout
        shape="rect"
        width="13mm"
        height="1.5mm"
        layers={["top", "bottom"]}
        pcbX={22.5}
        pcbY={21.5}
      />

      {/* Solid bottom reference plane over the digital/power region. */}
      <copperpour
        name="BOTTOM_GND"
        layer="bottom"
        connectsTo="net.GND"
        clearance="0.25mm"
        boardEdgeMargin="0.5mm"
      />

      {/* M3 enclosure mounting holes, placed in otherwise unused board areas. */}
      <hole name="H1" diameter="3.2mm" pcbX={-27} pcbY={-19} />
      <hole name="H2" diameter="3.2mm" pcbX={-27} pcbY={5} />
      <hole name="H3" diameter="3.2mm" pcbX={27} pcbY={-4} />
      <hole name="H4" diameter="3.2mm" pcbX={14} pcbY={19} />
    </board>
  )
}