imrishabh18/rp2040-motor-controller
An RP2040-based NEMA17 stepper-motor controller with USB-C programming and PD motor-power negotiation, DRV8825 dual H-bridge drive, current/temperature telemetry, protected power filtering, status RGB LED, buzzer alarm, and optional magnetic encoder.
- Version
- 1.0.41
- License
- unset
- Stars
- 3
engineering/revision-checks.json
{
"version": "1.0.38",
"baselineVersion": "1.0.37",
"circuitJsonSha256": "348dadaea9678f379871b2b83a0719b7680c4f8eed15f178e91e43c89ae28086",
"gerbersSha256": "fc55354d2238323ae94e12a3d244f8cbc81190594ae39aad342d4f2552aa6587",
"build": "pass",
"typecheck": "pass",
"circuitTests": {
"passed": 23,
"failed": 0,
"assertions": 2254
},
"tsciCheck": {
"errors": 0,
"warnings": 179,
"byType": {
"source_refdes_convention_warning": 8,
"pcb_component_missing_courtyard_warning": 13,
"source_part_not_found_warning": 103,
"pcb_trace_too_long_warning": 19,
"source_component_pins_underspecified_warning": 10,
"source_no_power_pin_defined_warning": 15,
"source_no_ground_pin_defined_warning": 8,
"schematic_component_styling_warning": 3
}
},
"gerberShortsAllFourLayers": 0,
"manufacturing": {
"sha256": "348dadaea9678f379871b2b83a0719b7680c4f8eed15f178e91e43c89ae28086",
"shapeCount": 7217,
"netsChecked": 106,
"bareCopperGroups": 108,
"assembledGroups": 106,
"internalConnections": [
{
"component": "Y1",
"ports": [
"source_port_111",
"source_port_112"
]
},
{
"component": "SW_BOOT",
"ports": [
"source_port_116",
"source_port_115"
]
},
{
"component": "SW_BOOT",
"ports": [
"source_port_118",
"source_port_117"
]
},
{
"component": "SW_RUN",
"ports": [
"source_port_120",
"source_port_119"
]
},
{
"component": "SW_RUN",
"ports": [
"source_port_122",
"source_port_121"
]
}
],
"unmappedElements": [],
"shortContacts": [],
"polygonPadClearanceViolations": [],
"splitNets": [],
"holeSpacingViolations": [],
"holeToCopperViolations": [],
"pthDrillToCopperViolations": [],
"npthToCopperViolations": [],
"copperToBoardEdgeViolations": []
},
"ground": {
"circuitJsonSha256": "348dadaea9678f379871b2b83a0719b7680c4f8eed15f178e91e43c89ae28086",
"groundCopperConnectedComponents": 1,
"groundPourCount": 25,
"geometryPieceCount": 1363,
"groups": [
{
"pieces": 1363,
"areaSumMm2": 2435.7869191918903,
"elements": [
"pcb_copper_pour_103",
"pcb_copper_pour_111",
"pcb_copper_pour_132",
"pcb_copper_pour_145",
"pcb_copper_pour_148",
"pcb_copper_pour_154",
"pcb_copper_pour_155",
"pcb_copper_pour_159",
"pcb_copper_pour_172",
"pcb_copper_pour_179",
"pcb_copper_pour_184",
"pcb_copper_pour_19",
"pcb_copper_pour_191",
"pcb_copper_pour_192",
"pcb_copper_pour_195",
"pcb_copper_pour_197",
"pcb_copper_pour_198",
"pcb_copper_pour_199",
"pcb_copper_pour_20",
"pcb_copper_pour_200",
"pcb_copper_pour_201",
"pcb_copper_pour_202",
"pcb_copper_pour_44",
"pcb_copper_pour_85",
"pcb_copper_pour_91",
"pcb_plated_hole_0",
"pcb_plated_hole_1",
"pcb_plated_hole_12",
"pcb_plated_hole_13",
"pcb_plated_hole_14",
"pcb_plated_hole_15",
"pcb_plated_hole_2",
"pcb_plated_hole_3",
"pcb_plated_hole_4",
"pcb_plated_hole_5",
"pcb_plated_hole_6",
"pcb_plated_hole_7",
"pcb_smtpad_101",
"pcb_smtpad_102",
"pcb_smtpad_108",
"pcb_smtpad_11",
"pcb_smtpad_110",
"pcb_smtpad_113",
"pcb_smtpad_114",
"pcb_smtpad_117",
"pcb_smtpad_118",
"pcb_smtpad_120",
"pcb_smtpad_126",
"pcb_smtpad_128",
"pcb_smtpad_13",
"pcb_smtpad_134",
"pcb_smtpad_136",
"pcb_smtpad_138",
"pcb_smtpad_140",
"pcb_smtpad_142",
"pcb_smtpad_144",
"pcb_smtpad_148",
"pcb_smtpad_15",
"pcb_smtpad_150",
"pcb_smtpad_154",
"pcb_smtpad_170",
"pcb_smtpad_171",
"pcb_smtpad_174",
"pcb_smtpad_175",
"pcb_smtpad_185",
"pcb_smtpad_19",
"pcb_smtpad_194",
"pcb_smtpad_195",
"pcb_smtpad_208",
"pcb_smtpad_21",
"pcb_smtpad_214",
"pcb_smtpad_215",
"pcb_smtpad_217",
"pcb_smtpad_220",
"pcb_smtpad_23",
"pcb_smtpad_232",
"pcb_smtpad_234",
"pcb_smtpad_238",
"pcb_smtpad_240",
"pcb_smtpad_244",
"pcb_smtpad_246",
"pcb_smtpad_248",
"pcb_smtpad_250",
"pcb_smtpad_252",
"pcb_smtpad_261",
"pcb_smtpad_264",
"pcb_smtpad_267",
"pcb_smtpad_273",
"pcb_smtpad_279",
"pcb_smtpad_286",
"pcb_smtpad_288",
"pcb_smtpad_292",
"pcb_smtpad_293",
"pcb_smtpad_294",
"pcb_smtpad_300",
"pcb_smtpad_304",
"pcb_smtpad_308",
"pcb_smtpad_309",
"pcb_smtpad_310",
"pcb_smtpad_316",
"pcb_smtpad_32",
"pcb_smtpad_320",
"pcb_smtpad_328",
"pcb_smtpad_33",
"pcb_smtpad_333",
"pcb_smtpad_338",
"pcb_smtpad_342",
"pcb_smtpad_346",
"pcb_smtpad_347",
"pcb_smtpad_352",
"pcb_smtpad_354",
"pcb_smtpad_36",
"pcb_smtpad_361",
"pcb_smtpad_366",
"pcb_smtpad_371",
"pcb_smtpad_5",
"pcb_smtpad_7",
"pcb_smtpad_74",
"pcb_smtpad_9",
"pcb_smtpad_96",
"pcb_trace_8",
"pcb_via_0",
"pcb_via_1",
"pcb_via_10",
"pcb_via_11",
"pcb_via_169",
"pcb_via_170",
"pcb_via_171",
"pcb_via_172",
"pcb_via_173",
"pcb_via_174",
"pcb_via_175",
"pcb_via_176",
"pcb_via_177",
"pcb_via_178",
"pcb_via_179",
"pcb_via_180",
"pcb_via_181",
"pcb_via_182",
"pcb_via_183",
"pcb_via_184",
"pcb_via_185",
"pcb_via_186",
"pcb_via_187",
"pcb_via_188",
"pcb_via_189",
"pcb_via_190",
"pcb_via_191",
"pcb_via_192",
"pcb_via_193",
"pcb_via_194",
"pcb_via_195",
"pcb_via_196",
"pcb_via_197",
"pcb_via_198",
"pcb_via_199",
"pcb_via_2",
"pcb_via_200",
"pcb_via_201",
"pcb_via_202",
"pcb_via_203",
"pcb_via_262",
"pcb_via_263",
"pcb_via_297",
"pcb_via_298",
"pcb_via_3",
"pcb_via_4",
"pcb_via_5",
"pcb_via_6",
"pcb_via_7",
"pcb_via_8",
"pcb_via_9",
"source_net_0_retained_100",
"source_net_0_retained_101",
"source_net_0_retained_102",
"source_net_0_retained_104",
"source_net_0_retained_105",
"source_net_0_retained_106",
"source_net_0_retained_107",
"source_net_0_retained_108",
"source_net_0_retained_109",
"source_net_0_retained_110",
"source_net_0_retained_111",
"source_net_0_retained_112",
"source_net_0_retained_114",
"source_net_0_retained_115",
"source_net_0_retained_116",
"source_net_0_retained_117",
"source_net_0_retained_118",
"source_net_0_retained_119",
"source_net_0_retained_120",
"source_net_0_retained_121",
"source_net_0_retained_122",
"source_net_0_retained_123",
"source_net_0_retained_124",
"source_net_0_retained_125",
"source_net_0_retained_128",
"source_net_0_retained_129",
"source_net_0_retained_130",
"source_net_0_retained_131",
"source_net_0_retained_132",
"source_net_0_retained_134",
"source_net_0_retained_135",
"source_net_0_retained_136",
"source_net_0_retained_137",
"source_net_0_retained_138",
"source_net_0_retained_139",
"source_net_0_retained_140",
"source_net_0_retained_141",
"source_net_0_retained_142",
"source_net_0_retained_143",
"source_net_0_retained_144",
"source_net_0_retained_145",
"source_net_0_retained_146",
"source_net_0_retained_147",
"source_net_0_retained_148",
"source_net_0_retained_149",
"source_net_0_retained_150",
"source_net_0_retained_151",
"source_net_0_retained_152",
"source_net_0_retained_153",
"source_net_0_retained_154",
"source_net_0_retained_155",
"source_net_0_retained_156",
"source_net_0_retained_157",
"source_net_0_retained_158",
"source_net_0_retained_159",
"source_net_0_retained_160",
"source_net_0_retained_161",
"source_net_0_retained_162",
"source_net_0_retained_163",
"source_net_0_retained_164",
"source_net_0_retained_165",
"source_net_0_retained_166",
"source_net_0_retained_167",
"source_net_0_retained_168",
"source_net_0_retained_169",
"source_net_0_retained_170",
"source_net_0_retained_171",
"source_net_0_retained_172",
"source_net_0_retained_173",
"source_net_0_retained_174",
"source_net_0_retained_175",
"source_net_0_retained_176",
"source_net_0_retained_177",
"source_net_0_retained_178",
"source_net_0_retained_179",
"source_net_0_retained_180",
"source_net_0_retained_181",
"source_net_0_retained_182",
"source_net_0_retained_252",
"source_net_0_retained_254",
"source_net_0_retained_267",
"source_net_0_retained_268",
"source_net_0_retained_269",
"source_net_0_retained_97",
"source_net_0_retained_98",
"source_net_0_retained_99",
"source_trace_126__source_net_0_retained_126",
"source_trace_175__source_net_0_retained_127",
"source_trace_178__source_net_0_retained_103",
"source_trace_68__source_net_0_retained_133",
"source_trace_82__source_net_0_retained_113"
]
}
],
"auditedLayers": [
"top",
"inner1",
"inner2",
"bottom"
]
},
"outerGroundConnectivity": {
"circuitJsonSha256": "348dadaea9678f379871b2b83a0719b7680c4f8eed15f178e91e43c89ae28086",
"groundCopperConnectedComponents": 1,
"groundPourCount": 25,
"geometryPieceCount": 1145,
"groups": [
{
"pieces": 1145,
"areaSumMm2": 2228.7715228375496,
"elements": [
"pcb_copper_pour_103",
"pcb_copper_pour_111",
"pcb_copper_pour_132",
"pcb_copper_pour_145",
"pcb_copper_pour_148",
"pcb_copper_pour_154",
"pcb_copper_pour_155",
"pcb_copper_pour_159",
"pcb_copper_pour_172",
"pcb_copper_pour_179",
"pcb_copper_pour_184",
"pcb_copper_pour_19",
"pcb_copper_pour_191",
"pcb_copper_pour_192",
"pcb_copper_pour_195",
"pcb_copper_pour_197",
"pcb_copper_pour_20",
"pcb_copper_pour_44",
"pcb_copper_pour_85",
"pcb_copper_pour_91",
"pcb_plated_hole_0",
"pcb_plated_hole_1",
"pcb_plated_hole_12",
"pcb_plated_hole_13",
"pcb_plated_hole_14",
"pcb_plated_hole_15",
"pcb_plated_hole_2",
"pcb_plated_hole_3",
"pcb_plated_hole_4",
"pcb_plated_hole_5",
"pcb_plated_hole_6",
"pcb_plated_hole_7",
"pcb_smtpad_101",
"pcb_smtpad_102",
"pcb_smtpad_108",
"pcb_smtpad_11",
"pcb_smtpad_110",
"pcb_smtpad_113",
"pcb_smtpad_114",
"pcb_smtpad_117",
"pcb_smtpad_118",
"pcb_smtpad_120",
"pcb_smtpad_126",
"pcb_smtpad_128",
"pcb_smtpad_13",
"pcb_smtpad_134",
"pcb_smtpad_136",
"pcb_smtpad_138",
"pcb_smtpad_140",
"pcb_smtpad_142",
"pcb_smtpad_144",
"pcb_smtpad_148",
"pcb_smtpad_15",
"pcb_smtpad_150",
"pcb_smtpad_154",
"pcb_smtpad_170",
"pcb_smtpad_171",
"pcb_smtpad_174",
"pcb_smtpad_175",
"pcb_smtpad_185",
"pcb_smtpad_19",
"pcb_smtpad_194",
"pcb_smtpad_195",
"pcb_smtpad_208",
"pcb_smtpad_21",
"pcb_smtpad_214",
"pcb_smtpad_215",
"pcb_smtpad_217",
"pcb_smtpad_220",
"pcb_smtpad_23",
"pcb_smtpad_232",
"pcb_smtpad_234",
"pcb_smtpad_238",
"pcb_smtpad_240",
"pcb_smtpad_244",
"pcb_smtpad_246",
"pcb_smtpad_248",
"pcb_smtpad_250",
"pcb_smtpad_252",
"pcb_smtpad_261",
"pcb_smtpad_264",
"pcb_smtpad_267",
"pcb_smtpad_273",
"pcb_smtpad_279",
"pcb_smtpad_286",
"pcb_smtpad_288",
"pcb_smtpad_292",
"pcb_smtpad_293",
"pcb_smtpad_294",
"pcb_smtpad_300",
"pcb_smtpad_304",
"pcb_smtpad_308",
"pcb_smtpad_309",
"pcb_smtpad_310",
"pcb_smtpad_316",
"pcb_smtpad_32",
"pcb_smtpad_320",
"pcb_smtpad_328",
"pcb_smtpad_33",
"pcb_smtpad_333",
"pcb_smtpad_338",
"pcb_smtpad_342",
"pcb_smtpad_346",
"pcb_smtpad_347",
"pcb_smtpad_352",
"pcb_smtpad_354",
"pcb_smtpad_36",
"pcb_smtpad_361",
"pcb_smtpad_366",
"pcb_smtpad_371",
"pcb_smtpad_5",
"pcb_smtpad_7",
"pcb_smtpad_74",
"pcb_smtpad_9",
"pcb_smtpad_96",
"pcb_trace_8",
"pcb_via_0",
"pcb_via_1",
"pcb_via_10",
"pcb_via_11",
"pcb_via_169",
"pcb_via_170",
"pcb_via_171",
"pcb_via_172",
"pcb_via_173",
"pcb_via_174",
"pcb_via_175",
"pcb_via_176",
"pcb_via_177",
"pcb_via_178",
"pcb_via_179",
"pcb_via_180",
"pcb_via_181",
"pcb_via_182",
"pcb_via_183",
"pcb_via_184",
"pcb_via_185",
"pcb_via_186",
"pcb_via_187",
"pcb_via_188",
"pcb_via_189",
"pcb_via_190",
"pcb_via_191",
"pcb_via_192",
"pcb_via_193",
"pcb_via_194",
"pcb_via_195",
"pcb_via_196",
"pcb_via_197",
"pcb_via_198",
"pcb_via_199",
"pcb_via_2",
"pcb_via_200",
"pcb_via_201",
"pcb_via_202",
"pcb_via_203",
"pcb_via_262",
"pcb_via_263",
"pcb_via_297",
"pcb_via_298",
"pcb_via_3",
"pcb_via_4",
"pcb_via_5",
"pcb_via_6",
"pcb_via_7",
"pcb_via_8",
"pcb_via_9",
"source_net_0_retained_100",
"source_net_0_retained_101",
"source_net_0_retained_102",
"source_net_0_retained_104",
"source_net_0_retained_105",
"source_net_0_retained_106",
"source_net_0_retained_107",
"source_net_0_retained_108",
"source_net_0_retained_109",
"source_net_0_retained_110",
"source_net_0_retained_111",
"source_net_0_retained_112",
"source_net_0_retained_114",
"source_net_0_retained_115",
"source_net_0_retained_116",
"source_net_0_retained_117",
"source_net_0_retained_118",
"source_net_0_retained_119",
"source_net_0_retained_120",
"source_net_0_retained_121",
"source_net_0_retained_122",
"source_net_0_retained_123",
"source_net_0_retained_124",
"source_net_0_retained_125",
"source_net_0_retained_128",
"source_net_0_retained_129",
"source_net_0_retained_130",
"source_net_0_retained_131",
"source_net_0_retained_132",
"source_net_0_retained_134",
"source_net_0_retained_135",
"source_net_0_retained_136",
"source_net_0_retained_137",
"source_net_0_retained_138",
"source_net_0_retained_139",
"source_net_0_retained_140",
"source_net_0_retained_141",
"source_net_0_retained_142",
"source_net_0_retained_143",
"source_net_0_retained_144",
"source_net_0_retained_145",
"source_net_0_retained_146",
"source_net_0_retained_147",
"source_net_0_retained_148",
"source_net_0_retained_149",
"source_net_0_retained_150",
"source_net_0_retained_151",
"source_net_0_retained_152",
"source_net_0_retained_156",
"source_net_0_retained_157",
"source_net_0_retained_158",
"source_net_0_retained_159",
"source_net_0_retained_162",
"source_net_0_retained_163",
"source_net_0_retained_164",
"source_net_0_retained_165",
"source_net_0_retained_166",
"source_net_0_retained_167",
"source_net_0_retained_168",
"source_net_0_retained_169",
"source_net_0_retained_170",
"source_net_0_retained_171",
"source_net_0_retained_172",
"source_net_0_retained_173",
"source_net_0_retained_174",
"source_net_0_retained_175",
"source_net_0_retained_176",
"source_net_0_retained_177",
"source_net_0_retained_178",
"source_net_0_retained_179",
"source_net_0_retained_252",
"source_net_0_retained_254",
"source_net_0_retained_267",
"source_net_0_retained_268",
"source_net_0_retained_269",
"source_net_0_retained_97",
"source_net_0_retained_98",
"source_net_0_retained_99",
"source_trace_126__source_net_0_retained_126",
"source_trace_175__source_net_0_retained_127",
"source_trace_178__source_net_0_retained_103",
"source_trace_68__source_net_0_retained_133",
"source_trace_82__source_net_0_retained_113"
]
}
],
"auditedLayers": [
"top",
"bottom"
]
},
"kelvin": {
"circuitJsonSha256": "348dadaea9678f379871b2b83a0719b7680c4f8eed15f178e91e43c89ae28086",
"branches": [
{
"branch": "CURRENT_A_SENSE_POS",
"powerPath": "MOTOR_A_PLUS",
"separationOutsideShuntMm": 0.4034282409177854,
"sharedCopperOutsideShunt": false,
"amplifierPadTouchedByLoadPath": false
},
{
"branch": "CURRENT_A_SENSE_NEG",
"powerPath": "CURRENT_A_WINDING",
"separationOutsideShuntMm": 0.12499999999999954,
"sharedCopperOutsideShunt": false,
"amplifierPadTouchedByLoadPath": false
},
{
"branch": "CURRENT_B_SENSE_POS",
"powerPath": "MOTOR_B_PLUS",
"separationOutsideShuntMm": 0.4676944841832967,
"sharedCopperOutsideShunt": false,
"amplifierPadTouchedByLoadPath": false
},
{
"branch": "CURRENT_B_SENSE_NEG",
"powerPath": "CURRENT_B_WINDING",
"separationOutsideShuntMm": 0.39800000000000013,
"sharedCopperOutsideShunt": false,
"amplifierPadTouchedByLoadPath": false
}
]
},
"assembly": {
"circuitJsonSha256": "348dadaea9678f379871b2b83a0719b7680c4f8eed15f178e91e43c89ae28086",
"gerbersSha256": "fc55354d2238323ae94e12a3d244f8cbc81190594ae39aad342d4f2552aa6587",
"excludedDoNotPlaceComponents": [
"MH1",
"MH2",
"MH3",
"MH4",
"U_ENCODER"
],
"excludedBarePcbAssemblyFeatures": [
"MH1",
"MH2",
"MH3",
"MH4",
"TP_3V3",
"TP_GND",
"TP_PD",
"TP_PD_GND",
"TP_SWCLK",
"TP_SWDIO",
"TP_VMOTOR"
],
"assemblyTopCount": 103,
"assemblyBottomComponents": [],
"jlcpcbRotationCorrectionsDegrees": {
"Q_BUZZER": 0,
"Q_PD_ENABLE": 0
}
},
"driverThermalVias": {
"status": "pass",
"circuitJsonSha256": "348dadaea9678f379871b2b83a0719b7680c4f8eed15f178e91e43c89ae28086",
"gerbersSha256": "fc55354d2238323ae94e12a3d244f8cbc81190594ae39aad342d4f2552aa6587",
"inPadThermalViaCount": 12,
"manuallyAddedThermalViaCount": 0,
"supplierPart": "C81582",
"solidGroundContactLayers": [
"top thermal pad",
"inner1",
"inner2",
"bottom"
],
"topThermalPadSolderable": true,
"bottomThermalViasTentedInGerber": true,
"platedThroughDrillsVerified": true,
"vias": [
{
"x": 5.5000230000000006,
"y": -9.949902,
"drillMm": 0.3000248,
"padMm": 0.5000244,
"bottomMaskOpeningClearanceMm": 6.940947220356257
},
{
"x": 4.300127000000001,
"y": -12.349948,
"drillMm": 0.3000248,
"padMm": 0.5000244,
"bottomMaskOpeningClearanceMm": 8.584451151051313
},
{
"x": 5.5000230000000006,
"y": -11.150052,
"drillMm": 0.3000248,
"padMm": 0.5000244,
"bottomMaskOpeningClearanceMm": 7.855195917695736
},
{
"x": 5.5000230000000006,
"y": -12.349948,
"drillMm": 0.3000248,
"padMm": 0.5000244,
"bottomMaskOpeningClearanceMm": 7.434571557018337
},
{
"x": 3.099977000000001,
"y": -12.349948,
"drillMm": 0.3000248,
"padMm": 0.5000244,
"bottomMaskOpeningClearanceMm": 8.499132638328463
},
{
"x": 5.5000230000000006,
"y": -13.550098,
"drillMm": 0.3000248,
"padMm": 0.5000244,
"bottomMaskOpeningClearanceMm": 7.138325176016934
},
{
"x": 4.300127000000001,
"y": -13.550098,
"drillMm": 0.3000248,
"padMm": 0.5000244,
"bottomMaskOpeningClearanceMm": 8.318333616035899
},
{
"x": 3.099977000000001,
"y": -13.550098,
"drillMm": 0.3000248,
"padMm": 0.5000244,
"bottomMaskOpeningClearanceMm": 9.502522224285615
},
{
"x": 4.300127000000001,
"y": -11.150052,
"drillMm": 0.3000248,
"padMm": 0.5000244,
"bottomMaskOpeningClearanceMm": 7.581324223955088
},
{
"x": 4.300127000000001,
"y": -9.972,
"drillMm": 0.3000248,
"padMm": 0.5000244,
"bottomMaskOpeningClearanceMm": 6.464387903280127
},
{
"x": 3.099977000000001,
"y": -11.150052,
"drillMm": 0.3000248,
"padMm": 0.5000244,
"bottomMaskOpeningClearanceMm": 7.311377694079972
},
{
"x": 3.099977000000001,
"y": -9.949902,
"drillMm": 0.3000248,
"padMm": 0.5000244,
"bottomMaskOpeningClearanceMm": 6.127744991295209
}
]
},
"exportedClearances": {
"circuitJsonSha256": "348dadaea9678f379871b2b83a0719b7680c4f8eed15f178e91e43c89ae28086",
"gerbersSha256": "fc55354d2238323ae94e12a3d244f8cbc81190594ae39aad342d4f2552aa6587",
"npthDrillsVerified": 4,
"usbPlatedSlotsVerified": 8,
"checks": [
{
"hole": "pcb_hole_0",
"layer": "top",
"distanceMm": 0.20754384234745799,
"requiredMm": 0.2
},
{
"hole": "pcb_hole_1",
"layer": "top",
"distanceMm": 0.2075437374857896,
"requiredMm": 0.2
},
{
"hole": "pcb_hole_2",
"layer": "top",
"distanceMm": 0.20754384234745799,
"requiredMm": 0.2
},
{
"hole": "pcb_hole_3",
"layer": "top",
"distanceMm": 0.20754384234745663,
"requiredMm": 0.2
},
{
"boardEdge": true,
"layer": "top",
"distanceMm": 0.2999989909327906,
"requiredMm": 0.2
},
{
"hole": "pcb_hole_0",
"layer": "inner1",
"distanceMm": 0.377533399999999,
"requiredMm": 0.2
},
{
"hole": "pcb_hole_1",
"layer": "inner1",
"distanceMm": 0.377533399999999,
"requiredMm": 0.2
},
{
"hole": "pcb_hole_2",
"layer": "inner1",
"distanceMm": 0.5287232910688376,
"requiredMm": 0.2
},
{
"hole": "pcb_hole_3",
"layer": "inner1",
"distanceMm": 0.5287232910688368,
"requiredMm": 0.2
},
{
"boardEdge": true,
"layer": "inner1",
"distanceMm": 0.7858686845946106,
"requiredMm": 0.2
},
{
"hole": "pcb_hole_0",
"layer": "inner2",
"distanceMm": 0.4527829387688786,
"requiredMm": 0.2
},
{
"hole": "pcb_hole_1",
"layer": "inner2",
"distanceMm": 0.5287232910688376,
"requiredMm": 0.2
},
{
"hole": "pcb_hole_2",
"layer": "inner2",
"distanceMm": 0.5287232910688376,
"requiredMm": 0.2
},
{
"hole": "pcb_hole_3",
"layer": "inner2",
"distanceMm": 0.5287232910688368,
"requiredMm": 0.2
},
{
"boardEdge": true,
"layer": "inner2",
"distanceMm": 0.7858686845946106,
"requiredMm": 0.2
},
{
"hole": "pcb_hole_0",
"layer": "bottom",
"distanceMm": 0.2075438423474564,
"requiredMm": 0.2
},
{
"hole": "pcb_hole_1",
"layer": "bottom",
"distanceMm": 0.2075438423474564,
"requiredMm": 0.2
},
{
"hole": "pcb_hole_2",
"layer": "bottom",
"distanceMm": 0.20754384234745554,
"requiredMm": 0.2
},
{
"hole": "pcb_hole_3",
"layer": "bottom",
"distanceMm": 0.20754384234745663,
"requiredMm": 0.2
},
{
"boardEdge": true,
"layer": "bottom",
"distanceMm": 0.2999989909327906,
"requiredMm": 0.2
}
],
"violations": []
},
"pdVoltageControl": {
"status": "pass",
"gpios": [
4,
5,
6
],
"cfgPhysicalPins": [
9,
2,
3
],
"inverted": true,
"startupRequestV": 5
},
"temperatureTelemetry": {
"i2cAddress": "0x48",
"sdaGpio": 26,
"sclGpio": 27,
"alertGpio": null,
"unusedGpio": 24,
"alertPolicy": "RP2040 software using I2C temperature",
"enableGpio": 22,
"sensorDistanceMm": 5.699999999999999,
"checkedElectricalGroups": 11,
"hardwareInterlock": "PD-gated MCU enable",
"autonomousBoardTemperatureShutdown": false,
"status": "pass"
},
"outerMotorPower": {
"status": "pass",
"motorNets": 11,
"checkedTraceCount": 29,
"checkedTraceIds": [
"pcb_trace_9",
"pcb_trace_10",
"pcb_trace_11",
"pcb_trace_12",
"source_trace_253_retained_24",
"source_trace_239_retained_28",
"source_trace_197_retained_41",
"source_trace_196_retained_42",
"source_trace_195_retained_43",
"source_trace_194_retained_44",
"source_trace_193_retained_45",
"source_trace_192_retained_46",
"source_trace_155_retained_57",
"source_trace_153__source_trace_156__source_trace_160__source_trace_161__source_trace_280_retained_58",
"source_trace_153_retained_59",
"source_trace_153__source_trace_156__source_trace_160__source_trace_161__source_trace_280_retained_60",
"source_trace_153__source_trace_156__source_trace_160__source_trace_161__source_trace_280_retained_61",
"source_trace_153__source_trace_156__source_trace_160__source_trace_161__source_trace_280_retained_62",
"source_trace_120__source_trace_122__source_trace_123__source_trace_124__source_trace_154__source_trace_157__source_trace_158__source_trace_159__source_trace_171__source_trace_172__source_trace_281_retained_79",
"source_trace_172_retained_80",
"source_trace_124_retained_81",
"source_trace_159_retained_82",
"source_trace_123_retained_83",
"source_trace_120__source_trace_122__source_trace_123__source_trace_124__source_trace_154__source_trace_157__source_trace_158__source_trace_159__source_trace_171__source_trace_172__source_trace_281_retained_84",
"source_trace_120__source_trace_122__source_trace_123__source_trace_124__source_trace_154__source_trace_157__source_trace_158__source_trace_159__source_trace_171__source_trace_172__source_trace_281_retained_85",
"source_trace_120__source_trace_122__source_trace_123__source_trace_124__source_trace_154__source_trace_157__source_trace_158__source_trace_159__source_trace_171__source_trace_172__source_trace_281_retained_86",
"source_trace_120__source_trace_122__source_trace_123__source_trace_124__source_trace_154__source_trace_157__source_trace_158__source_trace_159__source_trace_171__source_trace_172__source_trace_281_retained_87",
"source_trace_158_retained_88",
"source_trace_120__source_trace_122__source_trace_123__source_trace_124__source_trace_154__source_trace_157__source_trace_158__source_trace_159__source_trace_171__source_trace_172__source_trace_281_retained_89"
],
"wireLengthMmByLayer": {
"top": 166.99502846761115,
"bottom": 236.18949308803963
},
"allowedWireLayers": [
"top",
"bottom"
],
"throughViasAllowed": true
},
"jlcClearances": {
"padToPad": [],
"padToTrace": [],
"traceToTrace": [],
"viaToPad": [],
"viaToTrace": [],
"motorPowerToPad": []
},
"copper": {
"outerOz": 1,
"innerOz": 0.5,
"layers": 4
},
"netlist": "pass",
"functionalNetlistUnchanged": true,
"onlyComponentsChanged": [
"J_USB",
"J_MOTOR_USB"
],
"schematicPlacement": {
"exitCode": 0,
"advisory": "U_PD box has excess vertical pin padding; retained to keep labels clear."
},
"pcbPlacement": {
"drcErrors": 0,
"drcWarnings": 0,
"orientationHeuristics": 8,
"cliExitCode": 1
},
"packageContents": {
"firmwareIncluded": false
},
"published": false,
"hardwareTested": false,
"fabricationApproval": "Layout checks pass. Both USB-C receptacles now use 20 V-rated C165948. Confirm connector slot solder joints and placement in assembly review; physical hardware remains untested. See engineering/usb-c-20v-v1.0.38.md.",
"changes": {
"testPointsRemoved": 0,
"componentsRemoved": 0,
"currentLimitUnchanged": true,
"importedThermalVias": 12,
"manualThermalVias": 0,
"placementChanges": {
"J_USB": {
"before": {
"center": {
"x": -5.999999999999999,
"y": 16.924999999999997
},
"rotation": 180,
"layer": "top"
},
"after": {
"center": {
"x": -6,
"y": 17.12504355
},
"rotation": 180,
"layer": "top"
}
},
"J_MOTOR_USB": {
"before": {
"center": {
"x": 6.999999999999999,
"y": 16.924999999999997
},
"rotation": 180,
"layer": "top"
},
"after": {
"center": {
"x": 7,
"y": 17.12504355
},
"rotation": 180,
"layer": "top"
}
}
},
"usbLocatorDrillMm": 0.6,
"usbFootprint": "Exact C165948 EasyEDA import, including polygon power lands",
"usbShellSlotMm": {
"width": 0.8,
"lengths": [
1.4,
1.6
]
},
"floatingPourFragmentsRemoved": 178
},
"preferredPowerPadClearances": {
"hardMinimumMm": 0.1,
"powerMinimumMm": 0.15,
"previousExceptions": 37,
"exceptions": 0,
"review": "engineering/power-pad-clearance-review.json"
}
}
