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/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
}
}
