MustafaMulla29/rp2040-bldc-motor-controller-new
73×72 mm 4-layer USB‑C PD (5/9/15/20 V) RP2040 controller PCB with protected power switching, MCT8329A sensorless BLDC three-phase MOSFET bridge, USB data/programming, onboard controls, and three motor outputs feeding a 2212 motor through rigid bullet adapters.
- Version
- 0.3.100
- License
- unset
- Stars
- 0
assembly/index.tsx
import React from "react"
import { assembly } from "@tscircuit/core"
import type { CadComponent } from "circuit-json"
import { motorPlan, motorHeatShrinkPlan } from "./models"
import { assemblyParts, phases, type Pose } from "./attachments"
import { MotorLead } from "./component-cable"
/** Motor leads are native cables; adapters are rigid CAD parts.
* Mating positions are right-handed circuit-world mm (+X right, +Y top, +Z above).
*/
export default function MotorAssembly({ includeBoard = true, socketCad, motorPose, children }:
{ includeBoard?: boolean; socketCad: CadComponent[]; motorPose?: Pose; children?: React.ReactNode }) {
const { motor, adapters } = assemblyParts(socketCad, motorPose)
return <assembly.device name="BLDC_CONNECTED_ASSEMBLY">
<assembly.subassembly name="TOP_ASSEMBLY_CONTROLLER"
displayName="Validated header-cleanup PCB; exact imported socket axes"
cadModel={includeBoard ? { glbUrl: "./dist/assets/compact-board.glb",
positionOffset: { x: 0, y: 0, z: 0 }, rotationOffset: { x: 90, y: 180, z: 0 } } : undefined} />
<assembly.subassembly name="MOTOR_ENVELOPE"
displayName="Readytosky 2212 published body envelope"
cadModel={{ jscad: motorPlan(), positionOffset:
motor.pose.position, rotationOffset: motor.pose.rotation }} />
{adapters.map((adapter, phase) => <React.Fragment key={phase}>
<assembly.subassembly name={adapter.name}
displayName={`Rigid 3.5 mm female to 4 mm male adapter ${"UVW"[phase]} — body dimensions unverified`}
cadModel={{glbUrl:"./dist/assets/rigid-adapter.glb",
positionOffset: adapter.pose.position, rotationOffset: adapter.pose.rotation}} />
<assembly.subassembly name={`MOTOR_HEATSHRINK_${"UVW"[phase]}`}
displayName={`Original motor heat-shrink ${"UVW"[phase]} — illustrative dimensions`}
cadModel={{jscad:motorHeatShrinkPlan(),
positionOffset: adapter.pose.position, rotationOffset: adapter.pose.rotation}} />
<MotorLead name={`MOTOR_LEAD_${phases[phase]}`} motor={motor} phase={phases[phase]} adapter={adapter} />
</React.Fragment>)}
{children}
</assembly.device>
}