AnasSarkiz/usb-c-pd-brushed-motor

USB-C PD-powered motor controller with protected input, selectable 5/9/12 V buck supply, MCU qualification, PWM H-bridge drive, overvoltage sensing, regenerative energy-dump resistors, and safety interlocks.

Version
0.0.1-a48-cloud-pipeline9-unrouted-c41d79a-305b1e7a
License
unset
Stars
0

scripts/power-report.ts

import {
  motorInputCurrentA,
  pwmTiming,
  regulatedMotorVoltageV,
} from "./electrical-calculations"

import { reviewMotorContracts } from "./motor-validation-calculations"

const inputLimitNominalA = 18_000 / 6_980
const inputLimitMinimumA = (inputLimitNominalA * 0.9) / 1.02
const inputLimitMaximumA = (inputLimitNominalA * 1.1) / 0.98
console.log({
  revision: "A22 prototype analysis",
  warning:
    "Analytic assumptions; physical efficiency/thermal/peak tests pending",
  inputLimitNominalA,
  inputLimitMinimumA,
  inputLimitMaximumA,
  regulatedVoltagesV: [
    regulatedMotorVoltageV(),
    regulatedMotorVoltageV(21_000),
    regulatedMotorVoltageV(12_000),
  ],
  pwmAtMinimum: pwmTiming({ fraction: 0 }),
  pwmAtMidpoint: pwmTiming({ fraction: 0.5 }),
  pwmAtMaximum: pwmTiming({ fraction: 1 }),
})
for (const motorVoltageV of [5, 9, 12]) {
  for (const contractVoltageV of [15, 20]) {
    for (const motorCurrentA of [2, 2.22, 2.4]) {
      const requiredInputCurrentA = motorInputCurrentA({
        motorVoltageV,
        motorCurrentA,
        contractVoltageV,
      })
      console.log({
        motorVoltageV,
        contractVoltageV,
        motorCurrentA,
        requiredInputCurrentA,
        minimumInputLimitMarginA: inputLimitMinimumA - requiredInputCurrentA,
      })
    }
  }
}

for (const motorVoltageV of [5, 9, 12] as const)
  console.log(
    reviewMotorContracts({
      motorVoltageV,
      peakMotorCurrentA: 2.423,
      sourceCapabilities: [
        { voltageV: 15, currentA: 3 },
        { voltageV: 20, currentA: 3 },
      ],
    }),
  )

import { railMonitorThresholdsV } from "./motor-validation-calculations"
for (const branch of [undefined, 21_000, 12_000])
  console.log(railMonitorThresholdsV(branch))