imrishabh18/rp2040-motor-controller

This circuit module provides a microcontroller-based NEMA17 stepper motor driver with integrated USB-C Power Delivery, temperature sensing, and safety interlocks.

Version
1.0.16
License
unset
Stars
0

tests/nema17-mechanical.test.tsx

import { expect, test } from "bun:test";
import type { AnySourceComponent, PcbComponent, PcbPlatedHole } from "circuit-json";
import { Circuit } from "tscircuit";
import Board from "../index.circuit";
import { assertCommonGround } from "./helpers/assertCommonGround";

test("NEMA 17 perimeter, four mounting drills and shared ground are preserved", async () => {
  const c = new Circuit({platform:{routingDisabled:true}});
  c.add(<Board routingDisabled />); await c.renderUntilSettled();
  const json=c.getCircuitJson();
  const board=json.find(x=>x.type==="pcb_board")!;
  expect(board.width).toBeCloseTo(42.30,3);
  expect(board.height).toBeCloseTo(42.32,3);
  expect(board.num_layers).toBe(4);
  expect(board.thickness).toBe(1.6);
  const mounts=json.filter((x): x is Extract<AnySourceComponent, {type:"source_component"}> =>x.type==="source_component" && /^MH[1-4]$/.test(x.name??""));
  expect(mounts).toHaveLength(4);
  const centers=mounts.map(m=>{
    const pc=json.find((x): x is PcbComponent =>x.type==="pcb_component" && x.source_component_id===m.source_component_id)!;
    const hole=json.find((x): x is PcbPlatedHole =>x.type==="pcb_plated_hole" && x.pcb_component_id===pc.pcb_component_id)!;
    if (hole.shape !== "circle") throw new Error("Mount must use a circular plated drill");
    expect(hole.hole_diameter).toBe(3.3);
    expect(hole.outer_diameter).toBe(5.6);
    return [pc.center.x,pc.center.y];
  }).sort((a,b)=>a[0]-b[0] || a[1]-b[1]);
  expect(centers).toEqual([[-15.5,-15.5],[-15.5,15.5],[15.5,-15.5],[15.5,15.5]]);
  expect(assertCommonGround(json).groundNetDeclarations).toBe(1);
},60000);