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