ODrive v3 Brushless Servo Drive
This lab provides an in-depth study of high-performance dual-axis motor control using Field-Oriented Control (FOC) for three-phase brushless DC (BLDC) and permanent-magnet synchronous motors. Students set up, calibrate, and evaluate an advanced servo drive system utilizing an ARM Cortex-M4F microcontroller, dedicated three-phase gate drivers, and low-side current shunt sensing. Working with hardware in the loop, learners interface feedback sensors such as optical quadrature encoders and Hall sensors, perform automated motor parameter identification, tune closed-loop torque, velocity, and position control loops, and analyze dynamic response under varying loads. The lab also explores power electronics essentials including regenerative braking management across power resistors, inverter thermal monitoring, and real-time motor telemetry streaming over CAN bus and USB communication interfaces.
Uploaded by demo on 2026-09-03 · ready · Electronics · Original source ↗
Files: CHANGELOG.md · GUI_package.json · ODrive_README.md
Readiness checks
-
complete 2026-09-03 15:54 🛡 Cybersecurity: Do not place on an open network · 18 findings 21 searches · 9 pagesview · PDF
Latest report — 2026-09-03 15:54
Readiness: ODrive v3 Brushless Servo Drive
Verdict: At risk · 2026-09-03 · est. parts cost $210–$650 per station Cybersecurity — software & network: Do not place on an open network
This is the cold check — no previous readiness report exists, so this report is the baseline every future check will measure drift against. Every individual component on the bill of materials can be ordered today, several of them from more than one distributor, and the two parts that looked troubled turned out to have evidence-verified substitutes. The problem is the centrepiece. The vendor's own product page calls the board "ODrive v3.6 (NRND)" and says "Recommended to use ODrive S1 instead"; the vendor's comparison page says the v3.6 "is approaching its end of life, and strongly recommended against for new and existing designs". The recommended replacement does not replace this lab: the S1 controls one motor where this lab drives two, and the same comparison table marks the v3.6 with an X for both "Next-Gen Firmware Support" and "ODrive GUI Support" — the successor boards run a different, closed software stack, which is exactly what the lab's snapshot records. The repository holds no Gerber or fabrication files, so the board cannot be rebuilt from the lab's own materials either. The lab runs today on boards still listed at $259 and on surplus stock; it has no supported path beyond that.
Action required
| Part | Problem | Recommended action |
|---|---|---|
| ODrive v3.6 board assembly | Vendor-declared NRND and approaching end of life; the recommended successor (ODrive S1) is single-axis and on an incompatible closed firmware stack | Buy the boards and spares now while the vendor still lists them at $259.00; start planning a curriculum migration, because the successor hardware needs a different lab |
| NTCG163JF103FT1 (inverter FET thermistor, ×2) | Active on paper but zero stock at all five ECIA distributors (DigiKey 12-week factory lead, Mouser 55,997 on order, Future 116,000 on order) | Substitute ERT-J1VG103FA at $0.19 with 605,202 in stock — a parametrically verified match (see Substitutes) |
| NVMFS5C612NLT1G (inverter MOSFETs, ×12) | Lifecycle status Not For New Designs; ECIA lifecycle risk Med | Still 45,000 in stock at $7.73, but switch to NVMFS5C612NLET1G — Active, $5.54, identical package and ratings |
| NVD5C668NLT4G (brake-driver MOSFET) | Out of stock at DigiKey with a 57-week factory lead; only 1 of 5 ECIA distributors holds any | Order from Mouser (2,389 in stock @ $3.08). DigiKey's suggested alternate IPD50N06S409ATMA1 was checked and is Discontinued at DigiKey with zero stock anywhere — do not use it |
| Low-side current shunt resistors (4–6) | The snapshot's representative part number WSL2512R0010FEA exists in no catalog, and the lab's materials never state the board's actual shunt value | Read the fitted shunt value off the board or from the firmware's board-revision constants before ordering, then buy the matching WSL2512 value at ≥2 W |
| 24 V DC bus supply | Not a sourcing problem but a shopping hazard: the same search returns 30 W units (MEAN WELL RPS-30-24 at $12.90, HDR-30-24 at $13.40) alongside the 30 A units this lab needs | Order by wattage, not by the model number's digits — the lab needs a 700 W-class supply |
Cybersecurity — software & network
Do not place on an open network — The GUI's backend daemon listens on all interfaces with no authentication on handlers that command motor motion, and it runs on an end-of-life Electron and Vue stack whose pinned dependencies carry critical advisories with no in-version fix.
| Component | Version | How known | Support status |
|---|---|---|---|
| ODriveGUI (Electron desktop application) | 0.1.0 | read from project (the version field of GUI/package.json (fetched/02-package.json)) | — |
| electron | 15.5.5 | read from project (pinned in GUI/package-lock.json (fetched/01-package-lock.json)) | unsupported since 2022-05-24 |
| vue | 2.6.11 | read from project (pinned in GUI/package-lock.json (fetched/01-package-lock.json)) | unsupported since 2022-07-01 |
| vuex | 3.5.1 | read from project (pinned in GUI/package-lock.json (fetched/01-package-lock.json)) | — |
| socket.io-client | 3.0.4 | read from project (pinned in GUI/package-lock.json (fetched/01-package-lock.json)) | — |
| socket.io-parser | 4.0.2 | read from project (pinned in GUI/package-lock.json (fetched/01-package-lock.json), resolved under socket.io-client) | — |
| xmlhttprequest-ssl | 1.5.5 | read from project (pinned in GUI/package-lock.json (fetched/01-package-lock.json), resolved under socket.io-client) | — |
| ws | 7.2.5 | read from project (pinned in GUI/package-lock.json (fetched/01-package-lock.json)) | — |
| chart.js | 2.9.3 | read from project (pinned in GUI/package-lock.json (fetched/01-package-lock.json)) | — |
| chartjs-plugin-streaming | 1.8.0 | read from project (pinned in GUI/package-lock.json (fetched/01-package-lock.json)) | — |
| uuid | 8.2.0 | read from project (pinned in GUI/package-lock.json (fetched/01-package-lock.json)) | — |
| parseuri | 0.0.6 | read from project (pinned in GUI/package-lock.json (fetched/01-package-lock.json), resolved under socket.io-client) | — |
| vue-template-compiler | 2.6.11 | read from project (pinned in GUI/package-lock.json (fetched/01-package-lock.json)) | — |
| @vue/cli-service | 4.4.6 | read from project (pinned in GUI/package-lock.json (fetched/01-package-lock.json)) | — |
| @babel/traverse | 7.10.4 | read from project (pinned in GUI/package-lock.json (fetched/01-package-lock.json), build toolchain) | — |
| cipher-base | 1.0.4 | read from project (pinned in GUI/package-lock.json (fetched/01-package-lock.json), build toolchain) | — |
| ODriveGUI backend daemon (Flask + Flask-SocketIO) | not determined | unpinned (GUI/server/odrive_server.py imports flask, flask_socketio, flask_cors and engineio; no version constraint for any of them exists anywhere in the repository) | — |
| odrivetool / odrive (PyPI host control tool) | not determined | unpinned (tools/requirements.txt contains only an index URL and '-e .'; tools/setup.py install_requires lists ipython, PyUSB, requests, IntelHex, matplotlib, monotonic and setuptools with no version pins) | — |
| ODrive embedded firmware | 0.5.6 | inferred (recorded in the lab snapshot as the top release in CHANGELOG.md; CHANGELOG.md was not fetched this run) | — |
| STM32CubeMX HAL | 1.19.0 | inferred (recorded in the lab snapshot from CHANGELOG.md; not fetched this run) | — |
| ARM CMSIS-DSP | not determined | not determined (no version is stated in the lab's sources) | — |
| Firmware build toolchain (Tup, GNU Make, arm-none-eabi-gcc) | not determined | not determined (no versions are stated in the repository root files) | — |
| ODriveArduino / ODriveEnums.h | not determined | not determined (the Arduino library carries no version pin) | — |
| Component | Finding | Severity | Fix available? |
|---|---|---|---|
| @babel/traverse | The build toolchain pins @babel/traverse 7.10.4, which can be made to execute attacker-controlled code while compiling — it only matters for someone who builds the GUI from source. — GHSA-67hx-6x53-jw92 | critical | Mitigation only — build dependency only; regenerate the lockfile before building the GUI from source (fixed at 7.23.2). |
| cipher-base | The build toolchain pins cipher-base 1.0.4, which skips type checks and can be fed crafted data to rewind a hash — it only matters for someone who builds the GUI from source. — GHSA-cpq7-6gpm-g9rc | critical | Mitigation only — build dependency only; regenerate the lockfile before building the GUI from source (fixed at 1.0.5). |
| socket.io-parser | The pinned socket.io-parser 4.0.2 accepts malformed packets without validating them, so anything that can connect to the GUI's daemon socket can crash it or exhaust its memory. — GHSA-qm95-pgcg-qqfq, GHSA-2m8v-j782-fhvr, GHSA-677m-j7p3-52f9 | critical | No — project pins socket.io-client ^3.0.4 in GUI/package.json, which resolves socket.io-parser to 4.0.2; the fix starts at 4.0.5. |
| xmlhttprequest-ssl | The pinned xmlhttprequest-ssl 1.5.5 allows code injection and does not validate TLS certificates properly, so traffic between the GUI and its daemon can be tampered with. — GHSA-h4j5-c7cj-74xg, GHSA-72mh-269x-7mh5 | critical | No — project pins socket.io-client ^3.0.4 in GUI/package.json, which resolves xmlhttprequest-ssl to 1.5.5; the fix starts at 1.6.2. |
| chart.js | The live-plotting library is pinned at chart.js 2.9.3, which is vulnerable to prototype pollution from the data it is given. — GHSA-h68q-55jf-x68w | high | Yes — update to 2.9.4. |
| electron | The GUI runs on Electron 15.5.5, which carries 38 known advisories including context-isolation escapes and use-after-free bugs, so content the GUI renders could break out and run code on the lab PC. — GHSA-qqvq-6xgj-jw8g, GHSA-532v-xpq5-8h95, GHSA-9wfr-w7mm-pc7f, GHSA-h7rp-cf8h-j98x (+2 more) | high | No — project pins electron ^15.5.5 in GUI/package.json; the earliest fixed builds are Electron 22.3.25 and later. |
| ws | The WebSocket library carrying GUI traffic is pinned at ws 7.2.5, which can be exhausted into a denial of service by a crafted request, taking the GUI's link to the drive down. — GHSA-96hv-2xvq-fx4p, GHSA-3h5v-q93c-6h6q, GHSA-6fc8-4gx4-v693 | high | Mitigation only — regenerate the lockfile to pick up ws 7.5.11 within the same major version, or keep the GUI off shared networks. |
| parseuri | parseuri 0.0.6, which socket.io-client uses to parse the daemon's address, can be hung by a crafted URL, and no fixed version exists. — GHSA-6fx8-h7jm-663j | moderate | Mitigation only — no fixed version has been published; the parser is only reached with the address the GUI itself supplies. |
| uuid | uuid 8.2.0 is missing a buffer bounds check in its v3/v5/v6 generators. — GHSA-w5hq-g745-h8pq | moderate | No — project pins uuid ^8.2.0 in GUI/package.json; the fix starts at 11.1.1. |
| vue-template-compiler | vue-template-compiler 2.6.11 can be induced to emit cross-site-scripting into a compiled template, and no fixed version exists for the Vue 2 line. — GHSA-g3ch-rx76-35fx | moderate | Mitigation only — no fixed version has been published for Vue 2's compiler; it is a build-time dependency. |
| vue | vue 2.6.11 has an inefficient regular expression in parseHTML that can be made to hang the GUI. — GHSA-5j4c-8p2g-v4jx | low | No — requires platform migration (the fix is in the Vue 3 line). |
| electron | Electron 15 reached end of life on 2022-05-24 and receives no further security updates, so the advisories against the pinned 15.5.5 build have no fix inside that major version. | posture | No — requires platform migration. |
| ODriveGUI backend daemon (Flask + Flask-SocketIO) | The daemon that the GUI talks to starts with socketio.run(app, host='0.0.0.0', port=5000), so it listens on every network interface of the lab PC rather than only on localhost. | posture | Mitigation only — bind the daemon to 127.0.0.1, or keep the lab PC off shared networks and behind a host firewall. |
| ODriveGUI backend daemon (Flask + Flask-SocketIO) | None of the daemon's socket.io handlers require authentication, and they include setProperty and callFunction, so anyone who can reach port 5000 can change the drive's configuration and command the motor to move. | posture | Mitigation only — isolate the lab PC on its own network segment and never leave a motor able to move freely while the bus is powered. |
| ODriveGUI backend daemon (Flask + Flask-SocketIO) | The daemon accepts connections from any web origin: SocketIO is created with cors_allowed_origins="*" and Flask-CORS is enabled with support_credentials=True, so any page the lab PC browses can open a socket to it. | posture | Mitigation only — restrict cors_allowed_origins to the GUI's own origin. |
| ODriveGUI backend daemon (Flask + Flask-SocketIO) | The daemon's Flask session key is hardcoded in the public repository as app.config['SECRET_KEY'] = 'secret', so any session cookie it issues can be forged by anyone who has read the source. | posture | Mitigation only — set SECRET_KEY from an environment variable to a random value. |
| odrivetool / odrive (PyPI host control tool) | Dependencies unpinned: 8 of 8 in tools/setup.py (ipython, PyUSB, requests, IntelHex, matplotlib, monotonic, setuptools, pywin32) — 'pip install odrive' installs whatever is current, so the tool students run against the drive has no checkable security state. | posture | Mitigation only — pin versions / use a lockfile. |
| vue | Vue 2.6 reached end of life on 2022-07-01, so the GUI's UI framework is no longer receiving security fixes. | posture | No — requires platform migration. |
What this means for your lab
The desktop GUI that comes with this lab starts a small server on the lab PC, and that server listens on every network connection the PC has, not just on the PC itself. It asks for no password, and the commands it accepts include changing the drive's settings and telling the motor to move. In practice that means anyone else on the same campus or lab network, while the GUI is open, could spin a motor that is bolted to a bench or a robot arm - a safety problem before it is a data problem. The GUI itself is also built on a version of Electron and of Vue that stopped receiving security updates in 2022, and the versions its lockfile pins carry several serious known flaws with no fix available inside those versions. Nothing in the drive's own firmware was checkable - there is no vulnerability database for vendor microcontroller firmware - so treat 'not checked' there as unknown, not as safe. What to do: run the GUI only on a PC that is not on the shared campus network, or on an isolated lab segment; keep the motor mechanically restrained or unloaded whenever the bus is powered and the GUI is open; and raise this with campus IT before connecting any lab PC running this software to a network they manage.
Not checked
- ODrive embedded firmware 0.5.6: vendor firmware for an embedded microcontroller; no advisory database covers it, and CHANGELOG.md was not fetched this run
- STM32CubeMX HAL 1.19.0: vendor microcontroller HAL package; no advisory database covers it
- ARM CMSIS-DSP: no version is stated in the lab's sources, so there is nothing to look up
- Firmware build toolchain (Tup, GNU Make, arm-none-eabi-gcc): versions are neither pinned nor stated in the repository
- ODriveArduino / ODriveEnums.h: Arduino library with no version pin, and no advisory database covers the Arduino ecosystem
- odrivetool / odrive (PyPI) and its dependencies: installed unpinned via 'pip install odrive'; no exact version exists to check
- Flask, Flask-SocketIO, Flask-CORS, python-engineio (GUI backend daemon): imported by GUI/server/odrive_server.py with no version constraint anywhere in the repository; no exact version to check
- Host operating system and Python runtime: no version or codename is stated in the lab's materials
- 893 further dependencies in package-lock.json: beyond the 500-dependency automatic check cap (e.g. dotenv, dotenv-expand, duplexer, duplexer3, duplexify)
Parts
Active integrated circuits and semiconductors
| Part | Spec/Package | Status | Stock | Price | Source |
|---|---|---|---|---|---|
| STM32F405RGT6 | 64-LQFP, VDD 1.8–3.6 V, ARM Cortex-M4F | Active | DigiKey stock not reported; Arrow 2,009 | $12.50 (DigiKey) | DigiKey; Arrow $8.278; Mouser 0 (27,739 on order) |
| STM32F405RGT6TR (reel variant) | 64-LQFP (10x10), VDD 1.8–3.6 V | Active | 198 | $13.25 | DigiKey |
| DRV8301DCAR (×2) | 56-HTSSOP / 56-PowerTFSOP, supply 6–60 V | Active | 3,888 | $8.73 | DigiKey; Mouser 30 @ $8.52 |
| NVMFS5C612NLT1G (×12) | 8-PowerTDFN 5-lead / 5-DFN 5x6, 60 V, 36 A (Ta) / 235 A (Tc) | Not For New Designs | 45,000 | $7.73 | DigiKey; Rochester 240,000 @ $2.03; Mouser 2,269 @ $5.79 |
| NVD5C668NLT4G | TO-252-3 / DPAK, 60 V, 49 A (Tc) | Active (57-week DigiKey lead) | 0 at DigiKey; Mouser 2,389 | $3.01 (DigiKey list) | Mouser @ $3.08 is the only stocking distributor |
| NTCG163JF103FT1 (×2) | NTC 10 kΩ, 3380 K, ±1%, 0603 (1608 metric) | Active (12-week lead) | 0 at all 5 ECIA distributors | $0.18 | DigiKey (backorder only) |
| Low-side shunt resistors (4–6) | 0.5 mΩ or 1.0 mΩ, ≤1%, ≥2 W, 2512 or 1206 | not checked | — | — | Representative MPN WSL2512R0010FEA is in no catalog and no ECIA distributor lists it |
Electromechanical and external hardware
| Part | Spec/Package | Status | Stock | Price | Source |
|---|---|---|---|---|---|
| JS102011SAQN (DFU/boot switch) | SPDT slide, 300 mA DC / 6 V, SMT right angle, 2.00 mm actuator | Active | 57,265 | $0.85 | DigiKey |
| AMT102-V (quadrature encoder, 1–2) | Supply 3.6–5.5 V, 2–8 mm open-centre, motor/chassis mount | Active | 3,774 | $34.23 | DigiKey (Same Sky, formerly CUI Devices) |
| ST-LINK/V2 (SWD programmer) | USB dongle, 3.3 V SWD | Active | 7,336 | $25.65 | DigiKey; the vendor page confirms the ST-Link is the right tool for the v3.6 |
| External brake resistor (0.5 Ω, ≥50 W) | Chassis-mount wirewound, aluminium housed | Readily available (and shipped with a new board) | — | $7.95 | Parts Connexion (Riedon 0R5, 50 W, ±1%); also $9.53 RS - America |
| Motor phase thermistors (up to 2) | 10 kΩ NTC probe, motor-embedded or lug | Readily available | — | $7.19 | Walmart - Envistia Mall; also $1.39 Vetco, $3.32 TE Connectivity |
| DC bus power supply (24 V, 30 A) | 720 W-class switching supply or LiPo pack | Readily available | — | $70.49 | Walmart - Tasharina Corp; also $101.49 eBay, $139.99 Powerwerx |
| Brushless motor, 5065-class 270 KV (1–2) | 3-phase BLDC outrunner, phase R 10 mΩ–1 Ω | Readily available | — | $89.00 | ODrive Robotics (the vendor's own motor); also $34.00 eBay, $60.50 Mayrc |
| ODrive v3.6 board assembly | 140 x 50 mm PCBA, 12–56 V in, dual 3-phase inverter | Obsolete / NRND — vendor end-of-life | not stated on the fetched page | $259.00 | ODrive Robotics; clone listing $47.55 USA.Banggood (unverified) |
Substitutes
| For part | Substitute | Differences | Verified | Judgment |
|---|---|---|---|---|
| NVMFS5C612NLT1G (NRND) | NVMFS5C612NLET1G — onsemi, Active, $5.54, 1,695 in stock | VDS 60 V = 60 V; ID 38 A (Ta) / 250 A (Tc) vs 36 A (Ta) / 235 A (Tc) — exceeds, acceptable; gate drive 4.5 V / 10 V identical; Ciss 6660 pF identical; dissipation 3.8 W (Ta) / 167 W (Tc) identical; TJ -55 to 175 °C identical; package 8-PowerTDFN 5-lead / 5-DFN 5x6 identical. Cheaper than the original and Active where it is NRND | verified: package/case + supplier device package, drain-source voltage, gate drive voltage, continuous and pulsed current (DigiKey parametrics on both parts). Not verified: pin-for-pin lead arrangement and RDS(on) — the snapshot's ≤3 mΩ requirement is in neither parametric block; what the trailing "E" encodes is assumed, not evidenced | Acceptable |
| NTCG163JF103FT1 (zero stock) | ERT-J1VG103FA — Panasonic Industry, $0.19, 605,202 in stock | 10 kΩ = 10 kΩ; ±1% = ±1%; B-value tolerance ±1% = ±1%; B value 3380 K = 3380 K; 0603 (1608 metric) = 0603 (1608 metric); 100 mW = 100 mW; -40 to 125 °C identical. DigiKey classes it a Parametric Equivalent. Caveat: its own status is Last Time Buy (ECIA lifecycle risk High), but 8 distributors hold stock — buy the lab's lifetime supply at once | verified: package/case + mounting type, nominal resistance, resistance tolerance, B-value tolerance, power rating, operating temperature (DigiKey parametrics on both parts); B value 3380 K (DigiKey description on both). Not verified: the full resistance-vs-temperature curve against the firmware's derating table — no datasheet was fetched | Acceptable (first choice) |
| NTCG163JF103FT1 (zero stock) | NCP18XH103F03RB — Murata, $0.18, 160,259 in stock | Same parametric match as above on every field; its own status is Not For New Designs (ECIA lifecycle risk Med, supply-chain risk Low), and Avnet holds 340,000 @ $0.06189 at qty 4000 | verified: package/case + mounting type, nominal resistance, resistance tolerance, B-value tolerance, power rating, operating temperature (DigiKey parametrics on both parts); B value 3380 K (DigiKey description on both). Not verified: full R-T curve vs the firmware's derating table | Acceptable (second choice) |
| NVD5C668NLT4G (57-week lead) | IPD50N06S409ATMA1 — Infineon | Checked on DigiKey's own suggestion and rejected: status Discontinued at DigiKey, no price, no stock; ECIA supply-chain risk High, 0 of 2 distributors with stock | verified: lifecycle status and stock at DigiKey and across ECIA (part_lookup this run) | Rejected — worse than the original |
| NVD5C668NLT4G (57-week lead) | DMTH6010SK3Q-13 — Diodes Inc., $2.03 | 60 V VDS meets the ≥60 V requirement; TO-252 matches the package family by description only; continuous current 16.3 A vs the original's 49 A (Tc) — the 70 A pulsed rating is what a brake chopper needs, and the snapshot states no numeric brake current, so this cannot be settled from evidence | not verified: footprint and lead arrangement, RDS(on), pulsed-current adequacy — no parametric block and no stock figure were returned for this part, and no datasheet was fetched | Plausible, unverified — prefer buying the original from Mouser |
| Low-side shunt (representative MPN not in catalog) | WSL25121L000FEA — Vishay Dale, Active, $1.85, 10,930 in stock | 1 mΩ matches the snapshot's 1.0 mΩ option; ±1% meets ≤1%; 2512 (6332 metric) matches; but it is rated 1 W against the snapshot's stated ≥2 W — it falls short of a stated requirement | verified: package/case, resistance, tolerance, power rating (DigiKey parametrics). Not verified: nothing about the board's actually fitted shunt — the lab's materials never state it | Not acceptable as specified — it confirms the family is stocked, but check the board's real shunt value and rating first |
| ODrive v3.6 board | ODrive S1 — $149.00, backorder shipping by September 14 | Axis count 1 vs the lab's 2 — hard stop, this lab is explicitly a dual-axis controller with per-axis firmware objects; voltage 12–48 V (50.5 V max) vs the lab's 12–56 V — narrower, falls short at the top; and the vendor's comparison table marks the v3.6 X for both "Next-Gen Firmware Support" and "ODrive GUI Support" while the S1 is ✓ for both — the two boards are on different software stacks | verified: axis count, voltage range, continuous current, price and lead time (vendor product page fetched this run); firmware and GUI stack difference (vendor comparison table fetched this run) | Not acceptable — replaces the hardware but invalidates the lab |
| ODrive v3.6 board | Third-party "ODrive V3.6" clone — $47.55, USA.Banggood | The claim this substitution hinges on — that the board carries the same STM32F405/DRV8301 silicon and runs the same open-source v3.6 firmware image — was not confirmed; the shopping result exposes only a Google Shopping redirect, not the seller's own product page | not verified: silicon, firmware compatibility, board revision, quality, warranty — nothing beyond the listing title and price | Plausible, unverified — confirm compatibility with the seller before treating the price as equivalent value |
Verify any substitute against its own datasheet before ordering — the checks above are made against distributor parametric data and vendor pages, which is not the same as reading the part's specification sheet.
Other dependencies
- PCB fabrication files — not available. The snapshot records that Gerbers, layer count, copper weight and exact outer dimensions are absent from the uploaded repository files, and nothing found this run contradicts that. The board cannot be re-fabricated from the lab's own materials. The vendor product page does mention "3D files available to download from this OnShape page" — mechanical data, not fabrication data, and that link was not followed.
- Vendor shop, shop.odriverobotics.com — live. Both the v3.6 and S1 product pages were fetched successfully this run.
- Vendor documentation, docs.odriverobotics.com — live. The hardware comparison page was fetched successfully this run.
- GitHub repository, github.com/odriverobotics/ODrive — live. The GUI directory listed successfully (12 entries) and five files were fetched from the master branch this run.
- Main project site (www.odriverobotics.com), the Discourse forum, the community-chat link, Travis CI (travis-ci.org/madcowswe/ODrive) and the GitHub Actions link — not checked. None were fetched this run. Both CI references point at a legacy
.orgTravis URL and amadcowswe/repository path; worth an eyeball at the next check. - Board running change — mechanical. The fetched vendor page warns that "Due to supply constraints ODrive v3.6 may come with electrolytic capacitors that are 2mm taller taller than previous versions (10.8 - 12.8mm tall)" — a clearance detail for anyone reusing an existing enclosure or mounting.
Watch list
- The ODrive v3.6 board itself. Vendor-declared NRND and end-of-life, with the successor on an incompatible stack. This is the line most likely to end the lab rather than merely inconvenience it — check whether the vendor still lists it at every future check.
- NTCG163JF103FT1 inverter thermistors. Zero stock at all five ECIA distributors today, and both verified substitutes carry their own lifecycle flags (Last Time Buy, Not For New Designs). This part family is retiring; buy ahead.
- NVD5C668NLT4G brake-driver MOSFET. One stocking distributor and a 57-week factory lead — a single Mouser stock-out turns this into a hard-to-obtain part.
- NVMFS5C612NLT1G inverter MOSFETs. Already Not For New Designs with ECIA lifecycle risk Med. Deep stock today (45,000 at DigiKey, 240,000 at Rochester), but NRND parts do not restock.
- The low-side shunt resistors. Still unresolved: nobody has established what value and rating the board actually carries. Worth settling once, from a real board, so future checks have something exact to look up.
- STM32F405RGT6 supply concentration. Active and low-risk, but only 1 of 5 ECIA distributors held stock this run, with tens of thousands on order elsewhere — a thin position for the part the whole board is built around.
Snapshot What the lab depended on when it was uploaded — the baseline the readiness checks research against.
The ODrive v3 Brushless Servo Drive project builds a dual-axis high-performance motor controller for three-phase brushless DC (BLDC), permanent-magnet synchronous, and AC induction motors using Field-Oriented Control (FOC). The hardware architecture centers on an STMicroelectronics STM32F405 microcontroller paired with two Texas Instruments DRV8301 three-phase pre-driver ICs driving external power MOSFET bridges with low-side shunt current sensing. The system operates on a high-current main DC power bus (Vbus) nominally rated between 12 V and 56 V (depending on the specific board revision variant: 24 V vs. 56 V models), with internal buck and linear regulators providing a 3.3 V logic rail for the microcontroller and gate driver digital interfaces, a 5 V rail for external encoder and Hall sensor power, and an internal ~11 V to 12 V supply rail for power MOSFET gate switching.
Bill of Materials
Note on Source Artifacts: Native CAD board files, schematics, and tabular hardware BOM files are omitted from the uploaded files. Component reference designators (e.g., C1, R1) are not present in the repository documentation. The bill of materials below catalogs all primary active integrated circuits, discrete functional stages, electromechanical controls, and external system hardware explicitly mandated by the firmware release documentation, hardware changelog, and developer setup files.
STMicroelectronics STM32F405 ARM Cortex-M4F Microcontroller
- Identity: STMicroelectronics STM32F405RGT6 (or STM32F405 series ARM Cortex-M4F with FPU, 168 MHz, 1 MB Flash).
- Quantity: 1
- Footprint/package: LQFP-64 (or 64-pin fine-pitch QFP package as implemented across ODrive v3.1–v3.6 boards).
- Electrical constraints: 3.3 V logic supply rail (VDD = 3.0 V to 3.6 V). Operates TIM1 and TIM8 advanced motor control timers at high-frequency PWM (24 kHz switching, 8 kHz control loop), high-speed ADC sampling synchronized to timer updates, hardware SPI to DRV8301 gate drivers, USB FS device peripheral, CAN controller, and multi-channel UART.
- Substitution latitude: No substitution permitted. The firmware directly targets the STM32F405 hardware peripherals, register layouts, STM32CubeMX HAL v1.19.0, OTP memory registers, and custom CMSIS-DSP routines.
- Operated control: No.
- Sourcing plan: distributor lookup: STM32F405RGT6
Texas Instruments DRV8301 Dual Three-Phase Gate Driver with Shunt Amplifiers
- Identity: Texas Instruments DRV8301 (exact part: DRV8301DCAR).
- Quantity: 2 (one dedicated IC per motor axis: Axis 0 and Axis 1).
- Footprint/package: HTSSOP-56 (PowerPAD package).
- Electrical constraints: Supply voltage operating range up to 60 V DC. Interfaces directly to high-current MOSFET gates, provides internal 1.5 A buck converter supply capabilities, two internal high-accuracy current shunt amplifiers per IC, hardware SPI interface (configured via DMA in firmware v0.5.2+), and active-low nFAULT monitoring line.
- Substitution latitude: No substitution permitted. The firmware control loops, SPI configuration register sequences, amplifier gain settings, and fault-handling logic are strictly tailored to the DRV8301.
- Operated control: No.
- Sourcing plan: distributor lookup: DRV8301DCAR
Power Inverter MOSFET Bridges (Axis 0 and Axis 1)
- Identity: N-channel power MOSFETs (specific part number dependent on board revision and voltage tier: 24 V vs. 56 V rating; e.g., NVMFS5C612NL or similar 60 V N-channel MOSFETs).
- Quantity: 12 (6 MOSFETs per axis arranged in three half-bridges for high-side and low-side switching).
- Footprint/package: Surface-mount power package (typically DFN 5x6 / SO-8 FL / PowerPAK 56).
- Electrical constraints: VDS breakdown voltage ≥ 40 V (for 24 V boards) or ≥ 60 V (for 56 V boards); continuous drain current ID ≥ 60 A; low RDS(on) (≤ 3 mΩ). Driven by DRV8301 gate outputs at 24 kHz switching frequency.
- Substitution latitude: Any low-RDS(on), logic/medium-gate-voltage N-channel power MOSFET fitting the PCB footprint and meeting or exceeding the bus voltage and phase current requirements.
- Sourcing plan: distributor lookup (representative example — sources give spec only): NVMFS5C612NLT1G
Low-Side Current Shunt Resistors
- Identity: Low-inductance precision current sense shunt resistors.
- Quantity: 4 to 6 (two or three shunts per axis on low-side inverter legs).
- Footprint/package: High-power surface-mount chip footprint (typically 2512 or 1206 footprint).
- Electrical constraints: Resistance value calibrated in firmware per board generation (e.g., 0.5 mΩ or 1.0 mΩ; v3.4+ uses dedicated low-value current shunts, whereas v3.3 and earlier compensated for trace resistance). Power rating ≥ 2 W, tolerance ≤ 1%.
- Substitution latitude: Must match the calibrated shunt resistance expected by the board's firmware configuration and DRV8301 shunt amplifier input range to prevent current-sense saturation faults.
- Sourcing plan: distributor lookup (representative example — sources give spec only): WSL2512R0010FEA
Dynamic Brake Resistor Driver Stage
- Identity: Switched low-side or high-side power MOSFET circuit for dynamic power braking.
- Quantity: 1
- Footprint/package: Surface-mount power package (typically DFN 5x6 or TO-252).
- Electrical constraints: VDS ≥ 60 V, pulsed current handling matching maximum brake dump current. Switched via MCU PWM/digital output with overvoltage clamping ramps (dc_bus_overvoltage_ramp_start to dc_bus_overvoltage_ramp_end).
- Substitution latitude: Any power MOSFET rated for the maximum DC bus voltage and peak braking dissipation currents.
- Sourcing plan: distributor lookup (representative example — sources give spec only): NVD5C668NLT4G
External Dynamic Power Brake Resistor
- Identity: Chassis-mount or external high-power wirewound/ceramic power resistor.
- Quantity: 1
- Footprint/package: External chassis-mount power resistor with screw terminals or flying leads (e.g., 50 W to 200 W aluminum-housed wirewound resistor).
- Electrical constraints: Resistance typically 0.5 Ω, 1.0 Ω, or 2.0 Ω (configured via odrv.config.brake_resistance and odrv.config.enable_brake_resistor). Continuous power rating ≥ 50 W, peak absorbing power up to several hundred watts during rapid motor deceleration.
- Substitution latitude: Any high-power resistor of appropriate resistance matching the commanded deceleration dump energy; resistance value must be set into firmware configuration parameters.
- Operated control: No.
- Sourcing plan: retail shopping search: 50W 0.5 ohm wirewound aluminum brake resistor
Inverter FET Temperature Sensing Thermistors
- Identity: Negative Temperature Coefficient (NTC) surface-mount thermistors.
- Quantity: 2 (one positioned adjacent to each inverter bridge: axis0.fet_thermistor, axis1.fet_thermistor).
- Footprint/package: SMD 0603 or 0402.
- Electrical constraints: Nominal resistance 10 kΩ or 100 kΩ at 25 °C with known beta value (calibrated in firmware for inverter_temp_limit_lower and inverter_temp_limit_upper linear thermal derating).
- Substitution latitude: Must match the thermistor beta coefficient and nominal resistance profile programmed into the firmware ADC lookup/derating routines.
- Operated control: No.
- Sourcing plan: distributor lookup (representative example — sources give spec only): NTCG163JF103FT1
Motor Phase Winding Thermistors (External)
- Identity: External NTC thermistors or PT1000/KTY sensors embedded in brushless motor windings (axis.motor_thermistor).
- Quantity: Up to 2 (one per attached motor).
- Footprint/package: Motor-embedded cartridge, bead, or ring-lug sensor wired to ODrive auxiliary analog inputs.
- Electrical constraints: Interfaced to ODrive analog inputs with second-order low-pass filtering applied in firmware (v0.5.2+) for noise immunity.
- Substitution latitude: Any thermistor sensor supported by ODrive thermistor configuration parameters.
- Operated control: No.
- Sourcing plan: retail shopping search: 10K NTC motor thermistor temperature sensor
DFU Mode / Boot Mode Switch
- Identity: Miniature slide switch or toggle switch for STM32 BOOT0 pin selection.
- Quantity: 1
- Footprint/package: Subminiature SPDT slide switch, surface-mount or through-hole.
- Electrical constraints: Logic level switching (3.3 V / GND) to select between STM32 internal ROM DFU bootloader mode and standard Flash boot (run) mode.
- Substitution latitude: Any SPDT miniature slide switch or 2-pin jumper header with 2.54 mm or 1.27 mm pitch.
- Operated control: Yes. Students/operators physically toggle this switch between "DFU" and "RUN" positions when recovering or updating board firmware via USB.
- Sourcing plan: distributor lookup (representative example — sources give spec only): JS102011SAQN
External Feedback Sensors (Quadrature Encoders / Hall Effect / SPI Absolute Encoders)
- Identity: Incremental quadrature optical/magnetic encoders (e.g., CUI AMT102-V), 3-phase Hall effect sensors, or SPI-based absolute load encoders.
- Quantity: 1 to 2 units (one per motor channel).
- Footprint/package: External sensor modules wired via JST-PH or 2.54 mm pin headers to board encoder inputs (A, B, Z/Index, 5V, GND) or SPI lines.
- Electrical constraints: 5 V or 3.3 V supply. Standard digital quadrature pulses, digital Hall states (with automated polarity calibration), or SPI communications for absolute position estimates.
- Substitution latitude: Wide latitude; firmware supports quadrature encoders with index, Hall sensors, SPI absolute encoders, or sensorless back-EMF tracking.
- Operated control: No.
- Sourcing plan: retail shopping search: AMT102-V capacitive modular encoder kit
DC Bus Main Power Supply
- Identity: Regulated DC power supply or high-discharge lithium-polymer battery pack.
- Quantity: 1
- Footprint/package: External benchtop supply or battery pack connected to high-current screw terminals / soldered leads.
- Electrical constraints: Voltage output between 12 V and 24 V (for 24 V models) or up to 56 V (for 56 V models). Capable of supplying peak current up to 60 A per axis depending on motor mechanical load.
- Substitution latitude: Any stable DC power source within the board's rated voltage bounds.
- Operated control: Power supply controls operated by user during lab setup.
- Sourcing plan: retail shopping search: 24V 30A DC switching power supply
Brushless Three-Phase Motors
- Identity: 3-phase brushless DC (BLDC), PMSM, or AC Induction Motor (ACIM).
- Quantity: 1 to 2 motors.
- Footprint/package: External motors (e.g., 5065 or D5065 outrunner motors) wired to Phase A, B, C screw terminals.
- Electrical constraints: Motor winding phase resistance typically between 10 mΩ and 1.0 Ω; inductance ≤ 2500 µH; KV rating suited for 12 V to 56 V operation.
- Substitution latitude: Wide latitude within firmware current limits and inductance/resistance calibration thresholds.
- Operated control: No.
- Sourcing plan: retail shopping search: D5065 270KV brushless motor
Hardware Programming & Debug Interface: ST-Link V2
- Identity: STMicroelectronics ST-Link V2 (or compatible SWD programmer/debugger).
- Quantity: 1
- Footprint/package: External USB dongle connecting to SWD 4-pin header (GND, SWDIO, SWCLK, 3.3V).
- Electrical constraints: 3.3 V SWD target interface logic.
- Substitution latitude: Any CMSIS-DAP or ST-Link compatible SWD programmer supported by OpenOCD.
- Operated control: No.
- Sourcing plan: retail shopping search: ST-Link V2 programmer debugger
ODrive v3.x Printed Circuit Board Assembly
- Identity: Fully assembled ODrive v3.5 or v3.6 dual-axis servo drive board (marked NRND).
- Quantity: 1
- Footprint/package: Multi-layer PCB assembly, approximate dimensions 140 mm x 50 mm.
- Electrical constraints: Main DC input 12 V to 56 V; dual independent 3-phase inverter channels.
- Substitution latitude: Revisions v3.4 through v3.6 are functionally interchangeable with appropriate firmware build flags. Successor commercial closed-source units (ODrive Pro, S1, Micro) use incompatible firmware and closed protocols.
- Operated control: No.
- Sourcing plan: retail shopping search: ODrive v3.6 board 56V
Software and network dependencies
The ODrive v3 lab relies on an ecosystem spanning desktop client GUI software, host-side Python control tools, firmware build toolchains, and embedded microcontroller firmware.
ODriveGUI Desktop Application
- Name: ODriveGUI
- Repository/Source: GUI client application within ODrive repository
- Version: 0.1.0
- Where version came from: pinned in GUI_package.json
- Whether versions are pinned: Pinned to exact version 0.1.0 in GUI_package.json.
- Manifest location: GUI_package.json
- Check plan: vulnerability lookup: ODriveGUI / npm / 0.1.0
ODriveGUI Runtime: Electron
- Name: electron
- Repository/Source: npm registry
- Version: ^15.5.5 (production and development dependency)
- Where version came from: pinned in GUI_package.json
- Whether versions are pinned: Not strictly pinned; uses caret range ^15.5.5 without a lockfile in the upload.
- Manifest location: GUI_package.json
- Check plan: vulnerability lookup: electron / npm / 15.5.5
ODriveGUI Core UI Framework: Vue.js
- Name: vue
- Repository/Source: npm registry
- Version: ^2.6.11
- Where version came from: pinned in GUI_package.json
- Whether versions are pinned: Caret range ^2.6.11 without a lockfile.
- Manifest location: GUI_package.json
- Check plan: vulnerability lookup: vue / npm / 2.6.11
ODriveGUI State Management: Vuex
- Name: vuex
- Repository/Source: npm registry
- Version: ^3.5.1
- Where version came from: pinned in GUI_package.json
- Whether versions are pinned: Caret range ^3.5.1 without a lockfile.
- Manifest location: GUI_package.json
- Check plan: vulnerability lookup: vuex / npm / 3.5.1
ODriveGUI Charting and Streaming: Chart.js & Plugin
- Name: chart.js and chartjs-plugin-streaming
- Repository/Source: npm registry
- Version: chart.js ^2.9.3; chartjs-plugin-streaming ^1.8.0; vue-chartjs ^3.5.0
- Where version came from: pinned in GUI_package.json
- Whether versions are pinned: Caret ranges ^2.9.3, ^1.8.0, and ^3.5.0 without a lockfile.
- Manifest location: GUI_package.json
- Check plan: vulnerability lookup: chart.js / npm / 2.9.3
ODriveGUI Real-Time Daemon Transport: socket.io-client
- Name: socket.io-client
- Repository/Source: npm registry
- Version: ^3.0.4
- Where version came from: pinned in GUI_package.json
- Whether versions are pinned: Caret range ^3.0.4 without a lockfile.
- Manifest location: GUI_package.json
- Check plan: vulnerability lookup: socket.io-client / npm / 3.0.4
Additional ODriveGUI Production Packages
- Names and versions:
- core-js: ^3.6.5 (pinned in GUI_package.json, caret range)
- file-saver: ^2.0.2 (pinned in GUI_package.json, caret range)
- typeface-roboto: 0.0.75 (pinned in GUI_package.json, exact version)
- uuid: ^8.2.0 (pinned in GUI_package.json, caret range)
- vue-context: ^5.2.0 (pinned in GUI_package.json, caret range)
- vue-directive-tooltip: ^1.6.3 (pinned in GUI_package.json, caret range)
- vue-json-component: ^0.4.1 (pinned in GUI_package.json, caret range)
- vue-slider-component: ^3.2.11 (pinned in GUI_package.json, caret range)
- Where versions came from: pinned in GUI_package.json
- Whether versions are pinned: Unpinned beyond caret ranges (except typeface-roboto which is exact).
- Manifest location: GUI_package.json
- Check plan: vulnerability lookup: core-js / npm / 3.6.5
- Names and versions:
ODriveGUI Development and Build Toolchain
- Names and versions:
- @vue/cli-service: ~4.4.0 (pinned in GUI_package.json, tilde range)
- @vue/cli-plugin-babel: ~4.4.0 (pinned in GUI_package.json, tilde range)
- @vue/cli-plugin-eslint: ~4.4.0 (pinned in GUI_package.json, tilde range)
- @vue/cli-plugin-router: ^4.4.6 (pinned in GUI_package.json, caret range)
- babel-eslint: ^10.1.0 (pinned in GUI_package.json, caret range)
- electron-devtools-installer: ^3.1.0 (pinned in GUI_package.json, caret range)
- electron-icon-builder: ^1.0.2 (pinned in GUI_package.json, caret range)
- eslint: ^6.7.2 (pinned in GUI_package.json, caret range)
- eslint-plugin-vue: ^6.2.2 (pinned in GUI_package.json, caret range)
- vue-cli-plugin-electron-builder: ~2.0.0-rc.4 (pinned in GUI_package.json, tilde range)
- vue-cli-plugin-yaml: ^1.0.2 (pinned in GUI_package.json, caret range)
- vue-template-compiler: 2.6.11 (pinned in GUI_package.json, exact version)
- Where versions came from: pinned in GUI_package.json
- Manifest location: GUI_package.json
- Check plan: vulnerability lookup: @vue/cli-service / npm / 4.4.0
- Names and versions:
ODrive Embedded Firmware
- Name: ODrive Firmware
- Repository/Source: https://github.com/odriverobotics/ODrive (Firmware/ directory)
- Version: 0.5.6 (latest stable release for ODrive v3.x documented in CHANGELOG.md; release history covers v0.1.0 through v0.5.6)
- Where version came from: stated in documentation
- Whether versions are pinned: Version 0.5.6 is explicitly documented as the top release in CHANGELOG.md; active development ceased (marked NRND).
- Manifest location: CHANGELOG.md
- Check plan: not checkable: vendor firmware release for embedded microcontroller with no centralized advisory database
Embedded Hardware HAL & Architecture Libraries
- Names: STM32CubeMX HAL and ARM CMSIS-DSP
- Repository/Source: STMicroelectronics / ARM CMSIS
- Version: STM32CubeMX HAL v1.19.0 (stated in CHANGELOG.md for v0.4.7/0.5.x); CMSIS-DSP version not stated (noted in CHANGELOG.md as carrying a local custom fix for arm_cos_f32 singularity near -π/2).
- Where version came from: stated in documentation
- Whether versions are pinned: HAL v1.19.0 is stated in documentation; CMSIS version is not stated.
- Manifest location: CHANGELOG.md
- Check plan: not checkable: vendor microcontroller HAL package
Firmware Build Engine & Compiler Toolchain
- Name: Tup build system, GNU Make, and arm-none-eabi-gcc (supporting C++17)
- Repository/Source: Standard open-source toolchains (Tup via tup.config and Tupfile.lua; GNU Make for OTP memory flashing make write_otp and make erase_config)
- Version: not stated in the sources (C++ standard explicitly designated as C++17 in CHANGELOG.md under release 0.5.0)
- Where version came from: stated in documentation
- Whether versions are pinned: Unpinned; versions not stated in repository root files.
- Manifest location: CHANGELOG.md
- Check plan: not checkable: build toolchain versions not pinned
Host Control Tool & Python Communication Stack
- Name: odrivetool, odrive, and fibre RPC library
- Repository/Source: PyPI (pip install odrive) / GitHub Actions workflow
- Version: Nightly / latest (README badge references pip install odrive (nightly); historical support noted for Python 3 and legacy Python 2.7 in CHANGELOG.md)
- Where version came from: stated in documentation
- Whether versions are pinned: Completely unpinned. README shows bare command pip install odrive without version constraint.
- Manifest location: ODrive_README.md
- Check plan: not checkable: package dependency is unpinned
Arduino Interface Header & Driver
- Name: ODriveArduino and autogenerated ODriveEnums.h
- Repository/Source: GitHub repository Arduino/ODriveArduino/
- Version: not stated
- Where version came from: stated in documentation
- Whether versions are pinned: Not pinned.
- Manifest location: CHANGELOG.md
- Check plan: not checkable: Arduino library without version pin
Network Exposure:
- The ODrive v3 physical hardware does not incorporate on-board Ethernet or Wi-Fi network interfaces. Exposure occurs exclusively over local physical buses and USB endpoints.
- USB Device Endpoints: The STM32 microcontroller configures a composite USB device exposing:
- USB CDC Serial (virtual COM port) implementing ASCII protocol commands (e.g., q, p, f, sc, sr).
- Vendor-Specific Class endpoint utilizing WinUSB descriptors (driverless WinUSB on Windows 8+) for Native Fibre RPC protocol communications.
- CAN Bus: Communicates via CANSimple protocol at configurable baud rates up to 1 Mbps. Transmits and receives cyclic telemetry across standard CAN command IDs: 0x01 (Heartbeat), 0x03 (Get Motor Error), 0x04 (Get Encoder Error), 0x05 (Get Sensorless Error), 0x09 (Get Encoder Estimates), 0x0A (Get Encoder Count), 0x14 (Get Iq), 0x15 (Get Sensorless Estimates), 0x17 (Get Bus Voltage / Current), 0x1C (Get ADC Voltage), and 0x1D (Get Controller Error), defined in odrive-cansimple.dbc.
- UART Interfaces: UART0 (GPIO 1/2) and UART1 (GPIO 3/4) running ASCII or Fibre streaming protocol.
- Desktop GUI Network Layer: ODriveGUI package.json utilizes socket.io-client (^3.0.4) to communicate with a local backend Python/Fibre daemon over WebSockets (IPC/localhost). Default port numbers, remote host bindings, and authentication credentials are not stated in the sources.
Remaining Temporal Dependencies
Web Resources and Documentation URLs:
- User Documentation: https://docs.odriverobotics.com/ and https://docs.odriverobotics.com/v/latest/developer-guide.html#
- Main Project Website: https://www.odriverobotics.com/
- Discussion Forum: https://discourse.odriverobotics.com/
- Community Chat: https://discourse.odriverobotics.com/t/come-chat-with-us/281
- Continuous Integration: Travis CI (https://travis-ci.org/madcowswe/ODrive) and GitHub Actions (https://github.com/madcowswe/ODrive/actions)
Hardware Lifecycle and Fabrication Parameters:
- Product Lifecycle Status: The ODrive v3.x hardware platform is officially marked NRND (Not Recommended for New Designs). The vendor has transitioned development to closed-source successor hardware (ODrive Pro, S1, Micro).
- PCB Fabrication Specifications: Board Gerber files, layer count, copper weight, and exact outer dimensions are not stated in the uploaded repository files. Physical replication requires sourcing legacy v3.5 or v3.6 PCB manufacturing files or purchasing pre-assembled surplus/clone hardware. Modern high-current inverter designs of this class typically require a 4-layer PCB with 2 oz or 3 oz outer and inner copper weights to sustain 60 A+ motor phase currents.