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/fabrication-validation-v1.0.31.json

{
  "version": "1.0.31",
  "circuitJsonSha256": "75f5b96c5354406e9415afc3c8f63225deb371c04c1eb682a042409125650d82",
  "gerbersSha256": "540a6fdfb151e66feb13f01f4e1e4ee25d0c93af63acec00b8f27c80f806c6ab",
  "build": "pass",
  "typecheck": "pass",
  "circuitTests": {
    "passed": 21,
    "failed": 0,
    "assertions": 2290
  },
  "tsciCheck": {
    "errors": 0,
    "warnings": 169,
    "byType": {
      "source_refdes_convention_warning": 5,
      "pcb_component_missing_courtyard_warning": 13,
      "source_part_not_found_warning": 98,
      "pcb_trace_too_long_warning": 19,
      "source_component_pins_underspecified_warning": 11,
      "source_no_power_pin_defined_warning": 12,
      "source_no_ground_pin_defined_warning": 8,
      "schematic_component_styling_warning": 3
    }
  },
  "gerberShortsAllFourLayers": 0,
  "manufacturing": {
    "sha256": "75f5b96c5354406e9415afc3c8f63225deb371c04c1eb682a042409125650d82",
    "shapeCount": 5417,
    "netsChecked": 105,
    "bareCopperGroups": 107,
    "assembledGroups": 105,
    "internalConnections": [
      {
        "component": "Y1",
        "ports": [
          "source_port_112",
          "source_port_111"
        ]
      },
      {
        "component": "SW_BOOT",
        "ports": [
          "source_port_116",
          "source_port_115"
        ]
      },
      {
        "component": "SW_BOOT",
        "ports": [
          "source_port_117",
          "source_port_118"
        ]
      },
      {
        "component": "SW_RUN",
        "ports": [
          "source_port_119",
          "source_port_120"
        ]
      },
      {
        "component": "SW_RUN",
        "ports": [
          "source_port_121",
          "source_port_122"
        ]
      }
    ],
    "unmappedElements": [],
    "shortContacts": [],
    "splitNets": [],
    "holeSpacingViolations": [],
    "holeToCopperViolations": []
  },
  "ground": {
    "circuitJsonSha256": "75f5b96c5354406e9415afc3c8f63225deb371c04c1eb682a042409125650d82",
    "groundCopperConnectedComponents": 1,
    "groundPourCount": 8,
    "geometryPieceCount": 1787,
    "groups": [
      {
        "pieces": 1787,
        "areaSumMm2": 3117.727176066732,
        "elements": [
          "pcb_copper_pour_0",
          "pcb_copper_pour_104",
          "pcb_copper_pour_105",
          "pcb_copper_pour_106",
          "pcb_copper_pour_63",
          "pcb_copper_pour_75",
          "pcb_copper_pour_84",
          "pcb_copper_pour_95",
          "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_180",
          "pcb_smtpad_181",
          "pcb_smtpad_184",
          "pcb_smtpad_185",
          "pcb_smtpad_186",
          "pcb_smtpad_19",
          "pcb_smtpad_197",
          "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_24",
          "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_275",
          "pcb_smtpad_281",
          "pcb_smtpad_288",
          "pcb_smtpad_290",
          "pcb_smtpad_294",
          "pcb_smtpad_295",
          "pcb_smtpad_296",
          "pcb_smtpad_302",
          "pcb_smtpad_306",
          "pcb_smtpad_310",
          "pcb_smtpad_311",
          "pcb_smtpad_312",
          "pcb_smtpad_318",
          "pcb_smtpad_322",
          "pcb_smtpad_330",
          "pcb_smtpad_335",
          "pcb_smtpad_340",
          "pcb_smtpad_344",
          "pcb_smtpad_348",
          "pcb_smtpad_349",
          "pcb_smtpad_35",
          "pcb_smtpad_354",
          "pcb_smtpad_356",
          "pcb_smtpad_36",
          "pcb_smtpad_5",
          "pcb_smtpad_7",
          "pcb_smtpad_74",
          "pcb_smtpad_9",
          "pcb_smtpad_96",
          "pcb_trace_10",
          "pcb_trace_15",
          "pcb_trace_20",
          "pcb_trace_21",
          "pcb_trace_22",
          "pcb_trace_23",
          "pcb_trace_24",
          "pcb_trace_25",
          "pcb_trace_26",
          "pcb_trace_27",
          "pcb_trace_28",
          "pcb_trace_29",
          "pcb_trace_5",
          "pcb_trace_6",
          "pcb_trace_7",
          "pcb_trace_8",
          "pcb_trace_9",
          "pcb_via_0",
          "pcb_via_1",
          "pcb_via_10",
          "pcb_via_11",
          "pcb_via_12",
          "pcb_via_13",
          "pcb_via_14",
          "pcb_via_15",
          "pcb_via_16",
          "pcb_via_161",
          "pcb_via_162",
          "pcb_via_163",
          "pcb_via_164",
          "pcb_via_165",
          "pcb_via_166",
          "pcb_via_167",
          "pcb_via_168",
          "pcb_via_169",
          "pcb_via_17",
          "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_18",
          "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_19",
          "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_2",
          "pcb_via_3",
          "pcb_via_4",
          "pcb_via_5",
          "source_net_0_retained_100",
          "source_net_0_retained_101",
          "source_net_0_retained_102",
          "source_net_0_retained_103",
          "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_113",
          "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_126",
          "source_net_0_retained_127",
          "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_133",
          "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_183",
          "source_net_0_retained_255",
          "source_net_0_retained_257",
          "source_net_0_retained_98",
          "source_net_0_retained_99",
          "source_trace_180__source_net_0_retained_104",
          "source_trace_68__source_net_0_retained_134",
          "source_trace_82__source_net_0_retained_114"
        ]
      }
    ]
  },
  "kelvin": {
    "circuitJsonSha256": "75f5b96c5354406e9415afc3c8f63225deb371c04c1eb682a042409125650d82",
    "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.12499999999999953,
        "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.3705000000000003,
        "sharedCopperOutsideShunt": false,
        "amplifierPadTouchedByLoadPath": false
      }
    ]
  },
  "assembly": {
    "circuitJsonSha256": "75f5b96c5354406e9415afc3c8f63225deb371c04c1eb682a042409125650d82",
    "gerbersSha256": "540a6fdfb151e66feb13f01f4e1e4ee25d0c93af63acec00b8f27c80f806c6ab",
    "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": 98,
    "assemblyBottomComponents": [],
    "jlcpcbRotationCorrectionsDegrees": {
      "Q_BUZZER": 0,
      "Q_PD_ENABLE": 0
    }
  },
  "publication": "Release 1.0.31; publication status recorded separately from this pre-publication validation report.",
  "hardwareTested": false,
  "driverThermalVias": {
    "status": "pass",
    "circuitJsonSha256": "75f5b96c5354406e9415afc3c8f63225deb371c04c1eb682a042409125650d82",
    "gerbersSha256": "540a6fdfb151e66feb13f01f4e1e4ee25d0c93af63acec00b8f27c80f806c6ab",
    "inPadThermalViaCount": 10,
    "retainedPerimeterViaCount": 6,
    "solidGroundContactLayers": [
      "top thermal pad",
      "inner1",
      "inner2",
      "bottom"
    ],
    "topThermalPadSolderable": true,
    "bottomThermalViasTentedInGerber": true,
    "platedThroughDrillsVerified": true,
    "vias": [
      {
        "x": 3.3,
        "y": -12.5,
        "drillMm": 0.3,
        "padMm": 0.5,
        "bottomMaskOpeningClearanceMm": 8.676055294028734
      },
      {
        "x": 3.3,
        "y": -11.5,
        "drillMm": 0.3,
        "padMm": 0.5,
        "bottomMaskOpeningClearanceMm": 7.688984059587425
      },
      {
        "x": 3.3,
        "y": -10.5,
        "drillMm": 0.3,
        "padMm": 0.5,
        "bottomMaskOpeningClearanceMm": 6.705466812630183
      },
      {
        "x": 4.5,
        "y": -12.5,
        "drillMm": 0.3,
        "padMm": 0.5,
        "bottomMaskOpeningClearanceMm": 8.351780049584075
      },
      {
        "x": 4.5,
        "y": -11.5,
        "drillMm": 0.3,
        "padMm": 0.5,
        "bottomMaskOpeningClearanceMm": 7.9751455648052065
      },
      {
        "x": 4.5,
        "y": -10.5,
        "drillMm": 0.3,
        "padMm": 0.5,
        "bottomMaskOpeningClearanceMm": 7.028925027183916
      },
      {
        "x": 5.3,
        "y": -12.5,
        "drillMm": 0.3,
        "padMm": 0.5,
        "bottomMaskOpeningClearanceMm": 7.582163522622677
      },
      {
        "x": 5.3,
        "y": -11.5,
        "drillMm": 0.3,
        "padMm": 0.5,
        "bottomMaskOpeningClearanceMm": 7.906335115244836
      },
      {
        "x": 5.3,
        "y": -10.5,
        "drillMm": 0.3,
        "padMm": 0.5,
        "bottomMaskOpeningClearanceMm": 7.3393506414670435
      },
      {
        "x": 5.3,
        "y": -13.2,
        "drillMm": 0.3,
        "padMm": 0.5,
        "bottomMaskOpeningClearanceMm": 7.40610020565162
      }
    ]
  },
  "temperatureTelemetry": {
    "i2cAddress": "0x48",
    "sdaGpio": 26,
    "sclGpio": 27,
    "alertGpio": 24,
    "enableGpio": 22,
    "sensorDistanceMm": 5.699999999999999,
    "checkedElectricalGroups": 12,
    "hardwareInterlock": "PD-gated MCU enable",
    "autonomousBoardTemperatureShutdown": false,
    "status": "pass"
  },
  "gateRemoval": {
    "mappedPorts": 437,
    "removedPorts": [
      [
        "U_THERM_GATE",
        "A",
        1
      ],
      [
        "U_THERM_GATE",
        "B",
        2
      ],
      [
        "U_THERM_GATE",
        "GND",
        3
      ],
      [
        "U_THERM_GATE",
        "Y",
        4
      ],
      [
        "U_THERM_GATE",
        "VCC",
        5
      ],
      [
        "C_THERM_GATE",
        "pin1",
        1
      ],
      [
        "C_THERM_GATE",
        "pin2",
        2
      ],
      [
        "R_ENABLE_PD",
        "pin1",
        1
      ],
      [
        "R_ENABLE_PD",
        "pin2",
        2
      ]
    ],
    "oldRoutes": 266,
    "newRoutes": 258,
    "changes": [
      {
        "action": "join_continuous_same_net_paths",
        "removedPad": [
          "U_THERM_GATE",
          "A",
          1
        ],
        "between": [
          [
            "R_ENABLE_PD",
            "pin1",
            1
          ],
          [
            "U_THERM_GATE",
            "Y",
            4
          ]
        ]
      },
      {
        "action": "join_continuous_same_net_paths",
        "removedPad": [
          "U_THERM_GATE",
          "B",
          2
        ],
        "between": [
          [
            "U_TEMP",
            "ALERT",
            3
          ],
          [
            "R_TEMP_ALERT",
            "pin1",
            1
          ]
        ]
      },
      {
        "action": "join_continuous_same_net_paths",
        "removedPad": [
          "U_THERM_GATE",
          "GND",
          3
        ],
        "between": [
          [
            "C_THERM_GATE",
            "pin2",
            2
          ],
          [
            "source_manually_placed_via_4",
            "top",
            null
          ]
        ]
      },
      {
        "action": "join_continuous_same_net_paths",
        "removedPad": [
          "U_THERM_GATE",
          "Y",
          4
        ],
        "between": [
          [
            "R_SLEEP_PD",
            "pin1",
            1
          ],
          [
            "R_ENABLE_PD",
            "pin1",
            1
          ]
        ]
      },
      {
        "action": "remove_unused_branch",
        "port": [
          "U_THERM_GATE",
          "VCC",
          5
        ],
        "trace": "source_trace_21__source_trace_27__source_trace_52__source_trace_75__source_trace_140__source_trace_206__source_trace_215__source_trace_216__source_trace_217__source_trace_218__source_trace_224__source_trace_225__source_trace_226__source_trace_248__source_trace_250__source_trace_251__source_trace_256__source_trace_257__source_trace_261__source_trace_270__source_trace_271__source_trace_275__source_trace_299__source_trace_300__source_trace_303__source_trace_305__source_trace_308__source_trace_310__source_net_10_mst45_0"
      },
      {
        "action": "remove_unused_branch",
        "port": [
          "C_THERM_GATE",
          "pin1",
          1
        ],
        "trace": "source_trace_21__source_trace_27__source_trace_52__source_trace_75__source_trace_140__source_trace_206__source_trace_215__source_trace_216__source_trace_217__source_trace_218__source_trace_224__source_trace_225__source_trace_226__source_trace_248__source_trace_250__source_trace_251__source_trace_256__source_trace_257__source_trace_261__source_trace_270__source_trace_271__source_trace_275__source_trace_299__source_trace_300__source_trace_303__source_trace_305__source_trace_308__source_trace_310__source_net_10_mst46_0"
      },
      {
        "action": "join_continuous_same_net_paths",
        "removedPad": [
          "C_THERM_GATE",
          "pin2",
          2
        ],
        "between": [
          [
            "C_VM_BULK",
            "pin2",
            2
          ],
          [
            "source_manually_placed_via_4",
            "top",
            null
          ]
        ]
      },
      {
        "action": "join_continuous_same_net_paths",
        "removedPad": [
          "R_ENABLE_PD",
          "pin1",
          1
        ],
        "between": [
          [
            "Q_PD_ENABLE",
            "drain",
            3
          ],
          [
            "R_SLEEP_PD",
            "pin1",
            1
          ]
        ]
      },
      {
        "action": "join_continuous_same_net_paths",
        "removedPad": [
          "R_ENABLE_PD",
          "pin2",
          2
        ],
        "between": [
          [
            "C_DRV_REF",
            "pin2",
            2
          ],
          [
            "C_DVDD2",
            "pin2",
            2
          ]
        ]
      }
    ]
  },
  "netlist": "pass; see reports/gate-netlist.log",
  "schematicPlacement": "pass; see reports/gate-schematic-placement.log",
  "pcbPlacement": {
    "drcErrors": 0,
    "drcWarnings": 0,
    "orientationHeuristics": 8,
    "note": "Same eight orientation suggestions as v1.0.30; existing placements unchanged."
  },
  "packageContents": {
    "firmwareIncluded": false
  }
}