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.42
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"
  }
}