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

schematic/ChipDescriptions.tsx

import { Fragment } from "react";

/** Text content is retained; the section layout places these notes with their owner. */
export const descriptions = [
	{
		ref: "U1",
		sheet: "controller",
		x: 3.5,
		y: 9,
		lines: [
			"Main application controller.",
			"Generates STEP/DIR control,",
			"reads current and temperature,",
			"and drives status outputs.",
			"No firmware is included.",
		],
	},
	{
		ref: "U2",
		sheet: "controller_programming",
		x: 11.3,
		y: 0.2,
		lines: ["External QSPI flash.", "Stores RP2040", "application code."],
	},
	{
		ref: "U3",
		sheet: "controller_programming",
		x: -3.8,
		y: 1.7,
		lines: ["3.3 V regulator.", "Powers the MCU", "and board logic."],
	},
	{
		ref: "DRIVER",
		sheet: "motor_driver",
		x: -1.7,
		y: -1.2,
		lines: [
			"Dual H-bridge stepper driver.",
			"STEP/DIR controls both windings.",
			"Regulates winding current.",
			"1/16 microsteps; ~1 A peak.",
		],
	},
	{
		ref: "U_PD",
		sheet: "motor_power",
		x: -2.5,
		y: -1.4,
		lines: [
			"USB-PD voltage controller.",
			"GPIO selects 5/9/12/15/20 V.",
			"Power-good gates motor enable.",
		],
	},
	{
		ref: "U_TEMP",
		sheet: "thermal_protection",
		x: 2.2,
		y: 1.7,
		lines: [
			"TMP102 measures temperature",
			"near the motor driver.",
			"RP2040 reads temperature over I2C.",
			"Software decides alerts/shutdown.",
		],
	},
	{
		ref: "U_CURRENT_A",
		sheet: "current_telemetry",
		x: -6.5,
		y: 3.3,
		lines: [
			"Measures winding A current",
			"across its 0.05 ohm shunt.",
			"Filtered output feeds ADC2.",
			"1.65 V at zero; 1 V per amp.",
		],
	},
	{
		ref: "U_CURRENT_B",
		sheet: "current_telemetry",
		x: 7.5,
		y: 3.3,
		lines: [
			"Measures winding B current",
			"across its 0.05 ohm shunt.",
			"Filtered output feeds ADC3.",
			"1.65 V at zero; 1 V per amp.",
		],
	},
	{
		ref: "U_ENCODER",
		sheet: "position_alarm",
		x: -8,
		y: -1.7,
		lines: [
			"Optional magnetic angle sensor.",
			"Reads shaft position over I2C.",
			"Requires an aligned shaft magnet.",
			"Not fitted in factory assembly.",
		],
	},
] as const;

export const ChipDescriptions = () => (
	<>
		{descriptions.flatMap(({ ref, sheet, x, y, lines }) =>
			lines.map((text, line) => (
				<Fragment key={`${ref}-${line}`}>
					<schematictext
						{...{ name: `description_${ref}_${line}`, schSheetName: sheet }}
						schX={x}
						schY={y - line * 0.38}
						text={text}
						anchor="top_left"
						fontSize={0.26}
						color="#31576b"
					/>
				</Fragment>
			)),
		)}
	</>
);