krishnax12/ip2312-fast-charging-module

This circuit implements a USB-C powered, IP2312-based 1-cell lithium battery fast charger with integrated power input, inductor, capacitors, resistors, charge and standby LEDs, and voltage/current monitoring components.

Version
0.1.3
License
GPL-3.0
Stars
0

index.circuit.tsx

PCBPCB preview for index.circuit.tsx
SchematicSchematic preview for index.circuit.tsx
/**
 * IP2312 1-cell lithium battery fast charger
 *
 * Based on Sagar Saini's GPL-3.0 project:
 * https://www.instructables.com/Fast-Charging-Module-for-Lithium-Batteries/
 *
 * Board outline, placement, values, and LCSC references are taken from the
 * published Gerber, CPL, BOM, and schematic files dated 2024-02-08.
 */

const Ip2312 = () => (
  <chip
    name="U1"
    manufacturerPartNumber="IP2312-4V35"
    footprint="jlcpcb:C605433"
    supplierPartNumbers={{ jlcpcb: ["C605433"] }}
    pcbX={1.397}
    pcbY={1.523}
    pcbRotation={180}
    pinLabels={{
      pin1: "CHARGE_LED",
      pin2: "TEST",
      pin3: "STANDBY_LED",
      pin4: "NTC",
      pin5: "BAT",
      pin6: "ICHG",
      pin7: "SW",
      pin8: "VIN",
      pin9: "EP",
    }}
  />
)

const UsbCInput = () => (
  <chip
    name="U3"
    manufacturerPartNumber="TYPE-C-16PF"
    footprint="jlcpcb:C2835121"
    supplierPartNumbers={{ jlcpcb: ["C2835121"] }}
    cadModel={{
      objUrl:
        "https://modelcdn.tscircuit.com/easyeda_models/download?uuid=c50ce21ae3b941ce8eeb9bccc6cdef41&pn=C2835121",
      rotationOffset: { x: 0, y: 0, z: 180 },
      positionOffset: { x: -2.15, y: 0, z: 0 },
    }}
    pcbX={-8.893}
    pcbY={0.043}
    pcbRotation={270}
    allowOffBoard
    pinLabels={{
      pin1: "SBU1",
      pin2: "CC1",
      pin3: "DN2",
      pin4: "DP1",
      pin5: "DN1",
      pin6: "DP2",
      pin7: "SBU2",
      pin8: "CC2",
      pin9: "GND1",
      pin10: "VBUS1",
      pin11: "VBUS2",
      pin12: "GND2",
      pin13: "SHIELD1",
      pin14: "SHIELD2",
      pin15: "SHIELD3",
      pin16: "SHIELD4",
    }}
  />
)

const TerminalPad = (props: {
  name: string
  label: string
  pcbX: number
  pcbY: number
}) => (
  <chip
    name={props.name}
    pcbX={props.pcbX}
    pcbY={props.pcbY}
    pinLabels={{ pin1: props.label }}
    allowOffBoard
    footprint={
      <footprint>
        <platedhole
          shape="circular_hole_with_rect_pad"
          holeDiameter="1.1mm"
          rectPadWidth="2.5mm"
          rectPadHeight="2.5mm"
          rectBorderRadius="0.15mm"
          portHints={["pin1"]}
        />
      </footprint>
    }
  />
)

const CurrentSelectJumper = (props: { name: string; pcbX: number }) => (
  <solderjumper
    name={props.name}
    pinLabels={{ 1: "CC", 2: "SELECT" }}
    pcbX={props.pcbX}
    pcbY={-3.427}
    pcbRotation={90}
    layer="bottom"
    footprint={
      <footprint>
        <smtpad
          shape="rect"
          width="1.8mm"
          height="1.8mm"
          pcbX={-1.27}
          layer="bottom"
          portHints={["pin1"]}
        />
        <smtpad
          shape="rect"
          width="1.8mm"
          height="1.8mm"
          pcbX={1.27}
          layer="bottom"
          portHints={["pin2"]}
        />
      </footprint>
    }
  />
)

export default () => (
  <board
    width="25.654mm"
    height="17.018mm"
    solderMaskColor="purple"
    autorouter={{ groupMode: "subcircuit" }}
    placementDrcChecksDisabled
  >
    <net name="VCC" isPowerNet />
    <net name="VBAT" isPowerNet />
    <net name="GND" isGroundNet />
    <net name="CC" />
    <net name="SW" />
    <net name="CHARGE_LED" />
    <net name="STANDBY_LED" />

    <UsbCInput />
    <Ip2312 />

    <inductor
      name="L1"
      inductance="2.2uH"
      footprint="jlcpcb:C385252"
      supplierPartNumbers={{ jlcpcb: ["C385252"] }}
      pcbX={8.387}
      pcbY={-0.127}
      pcbRotation={270}
    />

    <capacitor name="C1" capacitance="22uF" footprint="jlcpcb:C59461" pcbX={-3.553} pcbY={5.203} pcbRotation={180} />
    <capacitor name="C2" capacitance="10uF" footprint="jlcpcb:C96446" pcbX={-3.303} pcbY={3.173} pcbRotation={180} />
    <capacitor name="C3" capacitance="10uF" footprint="jlcpcb:C96446" pcbX={2.037} pcbY={6.603} pcbRotation={180} />
    <capacitor name="C4" capacitance="22uF" footprint="jlcpcb:C59461" pcbX={7.997} pcbY={6.603} pcbRotation={90} />
    <capacitor name="C5" capacitance="22uF" footprint="jlcpcb:C59461" pcbX={2.917} pcbY={-3.427} pcbRotation={180} />

    <resistor name="R1" resistance="51k" footprint="jlcpcb:C23196" pcbX={-0.503} pcbY={6.733} pcbRotation={270} />
    <resistor name="R2" resistance="47k" footprint="jlcpcb:C25819" pcbX={3.047} pcbY={-6.477} pcbRotation={90} />
    <resistor name="R3" resistance="91k" footprint="jlcpcb:C23265" pcbX={0.507} pcbY={-6.477} pcbRotation={90} />
    <resistor name="R4" resistance="130k" footprint="jlcpcb:C22795" pcbX={-2.033} pcbY={-6.477} pcbRotation={90} />
    <resistor name="R5" resistance="1" footprint="jlcpcb:C22936" pcbX={-3.303} pcbY={1.393} />
    <resistor name="R6" resistance="1k" footprint="jlcpcb:C3017736" pcbX={5.457} pcbY={7.5} />
    <resistor name="R7" resistance="100" footprint="0603" pcbX={-7.113} pcbY={-7.617} pcbRotation={180} />
    <resistor name="R8" resistance="100" footprint="0603" pcbX={-7.243} pcbY={7.623} pcbRotation={180} />
    <resistor name="R9" resistance="1" footprint="jlcpcb:C22936" pcbX={5.457} pcbY={6.093} />

    <led
      name="LED1"
      color="red"
      footprint="jlcpcb:C965799"
      pinLabels={{ pin1: "cathode", pin2: "anode" }}
      pcbX={-7.113}
      pcbY={-5.967}
    />
    <led
      name="LED2"
      color="red"
      footprint="jlcpcb:C965799"
      pinLabels={{ pin1: "cathode", pin2: "anode" }}
      pcbX={-7.243}
      pcbY={5.973}
      pcbRotation={180}
    />

    <CurrentSelectJumper name="HDR1" pcbX={-2.033} />
    <CurrentSelectJumper name="HDR2" pcbX={0.507} />
    <CurrentSelectJumper name="HDR3" pcbX={3.047} />

    <TerminalPad name="H1" label="VBAT" pcbX={11.557} pcbY={6.983} />
    <TerminalPad name="H2" label="GND" pcbX={-11.553} pcbY={-7.237} />
    <TerminalPad name="H3" label="VCC" pcbX={-11.553} pcbY={7.243} />
    <TerminalPad name="H4" label="GND" pcbX={11.557} pcbY={-7.107} />

    <silkscreentext text="VIN" pcbX={-10.2} pcbY={5.4} pcbRotation={90} fontSize="1mm" />
    <silkscreentext text="GND" pcbX={-10.2} pcbY={-5.3} pcbRotation={90} fontSize="1mm" />
    <silkscreentext text="VBAT" pcbX={10.2} pcbY={5.1} pcbRotation={90} fontSize="1mm" />
    <silkscreentext text="GND" pcbX={10.2} pcbY={-5.1} pcbRotation={90} fontSize="1mm" />
    <silkscreentext text="IP2312" pcbX={0.8} pcbY={-1.6} fontSize="0.9mm" />

    <trace from=".U3 > .VBUS1" to="net.VCC" />
    <trace from=".U3 > .VBUS2" to="net.VCC" />
    <trace from=".U3 > .GND1" to="net.GND" />
    <trace from=".U3 > .GND2" to="net.GND" />
    <trace from=".U3 > .SHIELD1" to="net.GND" />
    <trace from=".U3 > .SHIELD2" to="net.GND" />
    <trace from=".U3 > .SHIELD3" to="net.GND" />
    <trace from=".U3 > .SHIELD4" to="net.GND" />

    <trace from=".U1 > .VIN" to="net.VCC" />
    <trace from=".U1 > .EP" to="net.GND" />
    <trace from=".U1 > .BAT" to=".R9 > .pin1" />
    <trace from=".R9 > .pin2" to="net.VBAT" />
    <trace from=".U1 > .SW" to="net.SW" />
    <trace from=".L1 > .pin1" to="net.SW" />
    <trace from=".L1 > .pin2" to="net.VBAT" />
    <trace from=".U1 > .ICHG" to="net.CC" />
    <trace from=".U1 > .NTC" to=".R1 > .pin1" />
    <trace from=".R1 > .pin2" to="net.GND" />
    <trace from=".U1 > .TEST" to=".R6 > .pin1" />
    <trace from=".R6 > .pin2" to="net.VBAT" />
    <trace from=".U1 > .CHARGE_LED" to="net.CHARGE_LED" />
    <trace from=".U1 > .STANDBY_LED" to="net.STANDBY_LED" />

    <trace from=".R5 > .pin1" to="net.VCC" />
    <trace from=".R5 > .pin2" to=".C2 > .pin1" />
    <trace from=".C2 > .pin2" to="net.GND" />
    <trace from=".C1 > .pin1" to="net.VCC" />
    <trace from=".C1 > .pin2" to="net.GND" />
    <trace from=".C3 > .pin1" to="net.VCC" />
    <trace from=".C3 > .pin2" to="net.GND" />
    <trace from=".C4 > .pin1" to="net.VBAT" />
    <trace from=".C4 > .pin2" to="net.GND" />
    <trace from=".C5 > .pin1" to="net.VBAT" />
    <trace from=".C5 > .pin2" to="net.GND" />

    <trace from="net.STANDBY_LED" to=".R7 > .pin1" />
    <trace from=".R7 > .pin2" to=".LED1 > .anode" />
    <trace from=".LED1 > .cathode" to="net.GND" />
    <trace from="net.CHARGE_LED" to=".R8 > .pin1" />
    <trace from=".R8 > .pin2" to=".LED2 > .anode" />
    <trace from=".LED2 > .cathode" to="net.GND" />

    <trace from=".R4 > .pin1" to="net.GND" />
    <trace from=".R4 > .pin2" to=".HDR1 > .SELECT" />
    <trace from=".HDR1 > .CC" to="net.CC" />
    <trace from=".R3 > .pin1" to="net.GND" />
    <trace from=".R3 > .pin2" to=".HDR2 > .SELECT" />
    <trace from=".HDR2 > .CC" to="net.CC" />
    <trace from=".R2 > .pin1" to="net.GND" />
    <trace from=".R2 > .pin2" to=".HDR3 > .SELECT" />
    <trace from=".HDR3 > .CC" to="net.CC" />

    <trace from=".H1 > .VBAT" to="net.VBAT" />
    <trace from=".H2 > .GND" to="net.GND" />
    <trace from=".H3 > .VCC" to="net.VCC" />
    <trace from=".H4 > .GND" to="net.GND" />
  </board>
)