mohan-bee/fitness-band
A 4-layer BLE wearable mainboard with Li-ion charging/protection, 3.3/1.8 V power regulation, motion and battery sensing, plus a folded 2-layer flex sensor board carrying MAX30102 optical and TMP117 temperature sensors.
- Version
- 0.0.2
- License
- unset
- Stars
- 0
index.circuit.tsx
PCB
Schematic
import { mainRouting } from "./routing/main-routing"
import { Fragment } from "react"
import { MDBT50Q_1MV2 } from "./imports/MDBT50Q_1MV2"
import { LPS3015_222MRB } from "./imports/LPS3015_222MRB"
import { BMA400 } from "./imports/BMA400"
import { MCP73871 } from "./imports/MCP73871"
import { TPS63031DSKR } from "./imports/TPS63031DSKR"
import { MAX17048G_T10 } from "./imports/MAX17048G_T10"
import { TLV70018DDCR } from "./imports/TLV70018DDCR"
import { FlexLanding, FlexConnections, Rails } from "./interconnect"
import { Cap, Pullup, InputSchottky, InputTvs } from "./parts"
export default function MainBoard() {
return <board width={50} height={24} thickness={0.8} layers={4} autorouter={{local:true,algorithmFn:mainRouting}}
minTraceWidth={0.1} minTraceToPadEdgeClearance={0.1} minPadEdgeToPadEdgeClearance={0.1}
minViaPadDiameter={0.45} minViaHoleDiameter={0.2} minBoardEdgeClearance={0.2}
pcbStyle={{silkscreenFontSize:0.8,viaPadDiameter:0.45,viaHoleDiameter:0.2}}>
<Rails />
<copperpour name="GROUND_PLANE" layer="inner1" connectsTo="net.GND" unbroken clearance={0.15}
boardEdgeMargin={0.3} outline={[{x:-24.2,y:-11.7},{x:24.7,y:-11.7},{x:24.7,y:11.7},{x:-24.2,y:11.7}]} />
<net name="VBAT" isPowerNet nominalTraceWidth={0.15} />
<net name="VSYS" isPowerNet nominalTraceWidth={0.15} />
<net name="CHG_5V" isPowerNet nominalTraceWidth={0.15} />
<net name="DOCK_5V" isPowerNet nominalTraceWidth={0.15} />
<net name="FUSED_5V" isPowerNet nominalTraceWidth={0.15} />
<schematicsection name="Radio" displayName="BLE + SWD" />
<schematicsection name="Power" displayName="Protected dock + charge + 3.3V" />
<schematicsection name="Motion" displayName="Motion + battery gauge" />
<schematicsection name="SensorLink" displayName="Flex + 1.8V" />
<MDBT50Q_1MV2 schWidth={2} name="U1" pcbX={-18.7} pcbY={0} pcbRotation={90} allowOffBoard
schX={0} schY={0} schSectionName="Radio"
connections={{GND1:"net.GND",GND2:"net.GND",GND3:"net.GND",GND4:"net.GND",GND5:"net.GND",
VDD:"net.V3V3",VDDH:"net.V3V3",P0_26:"net.SDA",P0_27:"net.SCL",P0_11:"net.PPG_INT",
P0_12:"net.MOTION_INT",P0_13:"net.CHG_INT",P0_14:"net.FG_INT",SWDIO:"net.SWDIO",SWDCLK:"net.SWDCLK",nRESET:"net.RESET"}} />
{/* Raytac Rev L pp9/11: local antenna y=5.7..9.5; top-only notch x=-2.3..-0.7,y=4.5..5.7. */}
<keepout shape="rect" pcbX={-26.3} pcbY={0} width={3.8} height={24} layers={["top","inner1","inner2","bottom"]} excludeRefs={[".U1"]} />
<keepout shape="rect" pcbX={-23.8} pcbY={-1.5} width={1.2} height={1.6} layers={["top"]} excludeRefs={[".U1"]} />
<chip schWidth={2} name="J_SWD" doNotPlace manufacturerPartNumber="6-pad SWD fixture" pcbX={-17} pcbY={-9.5}
schX={8} schY={0} schSectionName="Radio"
pinLabels={{pin1:["VTREF"],pin2:["SWDIO"],pin3:["GND"],pin4:["SWDCLK"],pin5:["RESET"],pin6:["GND2"]}}
footprint={<footprint insertionDirection="from_above">
{Array.from({length:6},(_,i)=><Fragment key={String(i)}><smtpad shape="circle" radius={0.45} pcbX={i*1.3-3.25} pcbY={0} portHints={[`pin${i+1}`]} /></Fragment>)}
<courtyardrect width={8} height={1.5} />
</footprint>}
connections={{pin1:"net.V3V3",pin2:"net.SWDIO",pin3:"net.GND",pin4:"net.SWDCLK",pin5:"net.RESET",pin6:"net.GND"}} />
<MCP73871 schWidth={2.4} name="U2" pcbX={-4.5} pcbY={5} schX={22} schY={1} schSectionName="Power"
connections={{IN1:"net.CHG_5V",IN2:"net.CHG_5V",VPCC:"net.CHG_5V",SEL:"net.CHG_5V",CE:"net.CHG_5V",
BAT1:"net.VBAT",BAT2:"net.VBAT",BAT_SENSE:"net.VBAT",OUT1:"net.VSYS",OUT2:"net.VSYS",
VSS1:"net.GND",VSS2:"net.GND",EP:"net.GND",PROG2:"net.GND",N_TE:"net.GND",STAT1:"net.CHG_INT",THERM:"net.BAT_NTC"}} />
<resistor schRotation={-90} name="R7" resistance="20k" manufacturerPartNumber="RC0402FR-0720KL" footprint="0402" pcbX={-0.4} pcbY={5}
schX={22} schY={-6} schSectionName="Power" connections={{pin1:".U2 > .PROG1",pin2:"net.GND"}} />
<resistor schRotation={-90} name="R8" resistance="100k" manufacturerPartNumber="RC0402FR-07100KL" footprint="0402" pcbX={-0.4} pcbY={3}
schX={24} schY={-6} schSectionName="Power" connections={{pin1:".U2 > .PROG3",pin2:"net.GND"}} />
<resistor schRotation={-90} name="R9" resistance="162k" manufacturerPartNumber="RC0402FR-07162KL" footprint="0402" pcbX={-5.5} pcbY={-2}
schX={19} schY={-6} schSectionName="Power" connections={{pin1:"net.BAT_NTC",pin2:"net.GND"}} />
<TPS63031DSKR name="U3" pcbX={8} pcbY={5} schX={34} schY={1} schSectionName="Power"
connections={{VIN:"net.VSYS",VINA:"net.VSYS",EN:"net.VSYS",GND:"net.GND",PGND:"net.GND",EP:"net.GND",PS:"net.GND",VOUT:"net.V3V3",FB:"net.V3V3",L1:"net.SW1",L2:"net.SW2"}} />
<LPS3015_222MRB name="L1" pcbX={3.2} pcbY={5} pcbRotation={90} schX={34} schY={6} schSectionName="Power"
connections={{pin1:"net.SW1",pin2:"net.SW2"}} />
<chip schWidth={1.7} name="J_BAT" pcbRotation={180} doNotPlace manufacturerPartNumber="150mAh pack + Semitec 103NT-4-R025H41G harness" pcbX={8} pcbY={-10.5}
schX={17} schY={-4} schSectionName="Power" pinLabels={{pin1:["BAT"],pin2:["GND"],pin3:["NTC"]}}
footprint={<footprint insertionDirection="from_above">
{[0,1,2].map(i=><Fragment key={String(i)}><smtpad shape="rect" width={1.4} height={2} pcbX={i*2-2} pcbY={0} portHints={[`pin${i+1}`]} /></Fragment>)}
<courtyardrect width={6} height={2.5} />
</footprint>}
connections={{BAT:"net.VBAT",GND:"net.GND",NTC:"net.BAT_NTC"}} />
<chip schHeight={1.2} schWidth={1.7} schPinArrangement={{topSide:["POS"],bottomSide:["GND"]}}
name="J_CHG" doNotPlace manufacturerPartNumber="Recessed 5V dock contacts" pcbX={-5} pcbY={11}
schX={12} schY={9} schSectionName="Power" pinLabels={{pin1:["POS"],pin2:["GND"]}}
footprint={<footprint insertionDirection="from_above">
{[0,1].map(i=><Fragment key={String(i)}><smtpad shape="circle" radius={0.65} pcbX={i*3-1.5} pcbY={0} portHints={[`pin${i+1}`]} /></Fragment>)}
<courtyardrect width={4.8} height={1.8} />
</footprint>}
connections={{POS:"net.DOCK_5V",GND:"net.GND"}} />
<fuse schRotation={-90} name="F1" manufacturerPartNumber="1206L020YR" currentRating="0.2A" voltageRating="16V" footprint="1206"
pcbX={-15} pcbY={8.8} schX={16} schY={9} schSectionName="Power" connections={{pin1:"net.DOCK_5V",pin2:"net.FUSED_5V"}} />
<InputSchottky pcbRotation={180} name="D1" pcbX={-9.5} pcbY={7.5} schX={20} schY={9} schSectionName="Power"
pinLabels={{pin1:["K"],pin2:["A"]}} connections={{pin1:"net.CHG_5V",pin2:"net.FUSED_5V"}} />
<InputTvs name="D2" pcbX={-9.4} pcbY={10.5} schX={12} schY={5} schSectionName="Power"
pinLabels={{pin1:["LINE"],pin2:["GND"]}} connections={{pin1:"net.DOCK_5V",pin2:"net.GND"}} />
<BMA400 pcbRotation={90} name="U4" pcbX={-8} pcbY={-5.5} schX={0} schY={-18} schSectionName="Motion"
connections={{VDD:"net.V3V3",VDDIO:"net.V3V3",CSB:"net.V3V3",GND:"net.GND",GNDIO:"net.GND",SDO:"net.GND",SCX:"net.SCL",SDX:"net.SDA",INT1:"net.MOTION_INT"}} />
<MAX17048G_T10 name="U5" pcbX={2} pcbY={-5.5} schX={11} schY={-18} schSectionName="Motion"
connections={{VDD:"net.VBAT",CELL:"net.VBAT",CTG:"net.GND",GND:"net.GND",EP:"net.GND",QSTRT:"net.GND",SCL:"net.SCL",SDA:"net.SDA",N_ALRT:"net.FG_INT"}} />
<TLV70018DDCR name="U6" pcbX={15} pcbY={-4} schX={25} schY={-18} schSectionName="SensorLink"
connections={{IN:"net.V3V3",EN:"net.V3V3",GND:"net.GND",OUT:"net.V1V8"}} />
<FlexLanding name="J_FLEX" pcbX={23} pcbY={0} schX={37} schY={-18} schSectionName="SensorLink" />
<FlexConnections name="J_FLEX" />
{([
["C1","10uF",-10,1.6,0,-7,1,"Radio","V3V3"], ["C2","100nF",-10,-0.5,0,-5.8,1,"Radio","V3V3"],
["C3","10uF",-9,4.7,0,17,5,"Power","CHG_5V"], ["C4","10uF",-3,8.7,0,22,6,"Power","VBAT"],
["C5","10uF",-5.5,0.2,0,27,5,"Power","VSYS"], ["C6","10uF",8,1.5,270,28.2,5,"Power","VSYS"],
["C7","10uF",7,8.7,90,35,-4,"Power","V3V3"], ["C8","10uF",10.5,8.7,90,36.2,-4,"Power","V3V3"],
["C9","100nF",-10.8,-5.5,0,-5,-16,"Motion","V3V3"], ["C10","100nF",-8,-8.3,180,-3.8,-16,"Motion","V3V3"],
["C11","100nF",2,-8,0,16,-19,"Motion","VBAT"],
["C12","1uF",17,-7,0,21,-22,"SensorLink","V3V3"], ["C13","1uF",11,-6,0,29,-22,"SensorLink","V1V8"],
["C19","100nF",10.8,5.3,0,40,3,"Power","VSYS"],
] as const).map(([name,value,x,y,rotation,sx,sy,section,rail])=><Cap key={name} name={name} capacitance={value}
maxDecouplingTraceLength={name === "C6" ? 5 : name === "C7" ? 5 : name === "C19" ? 5 : undefined}
pcbX={x} pcbY={y} pcbRotation={rotation} schX={sx} schY={sy} schSectionName={section}
connections={{pin1:`net.${rail}`,pin2:"net.GND"}} />)}
{([
["R1","10k","CHG_INT",-1,0,27,-3,"Power"], ["R2","10k","FG_INT",5,-5.5,16,-15,"Motion"],
["R3","4.7k","SCL",17,5,32,-13,"SensorLink"], ["R4","4.7k","SDA",17,3,36,-13,"SensorLink"],
["R5","4.7k","PPG_INT",17,1,40,-13,"SensorLink"],
] as const).map(([name,value,signal,x,y,sx,sy,section])=><Pullup pcbRotation={name === "R2" ? 180 : 0} key={name} name={name} resistance={value}
pcbX={x} pcbY={y} schX={sx} schY={sy} schSectionName={section} connections={{pin1:"net.V3V3",pin2:`net.${signal}`}} />)}
<hole name="H1" pcbX={22} pcbY={10} diameter={1.6} />
<hole name="H2" pcbX={22} pcbY={-10} diameter={1.6} />
</board>
}