Embedded

VW-MTC1 MazeTrack Assessment Controller

A Voltwyn 90 x 60 mm, four-layer ESP32-S3 controller: four filtered Hall channels into a 12-bit ratiometric ADC, a six-axis IMU, Schmitt-buffered maze contact inputs limited to 9 uA, USB-C with 1S Li-ion charging and power path, a 1 A buck-boost supply, microSD logging and haptic, audio and visual feedback. An Android monitoring app and Python simulation tools sit in the same repository.

Completed ataxia assessment controller projectCase study 9 of 10

3D render of the VW-MTC1 four-layer controller board from the KiCad layout, showing the ESP32-S3 module, USB-C connector, microSD socket, buttons and handle connector.
PCB design renderFull-size image ↗

The challenge

A wire-maze motor-coordination rig used for ataxia research needs a controller that measures handle movement and maze contacts cleanly, runs from a battery and logs sessions, while keeping the current through a person very small.

How the system works

USB-C input feeds an LTC4054 charger and an OR-ed USB and battery power path into an LTC3536 buck-boost 3.3 V rail. The handle connector carries four SS49E Hall sensors through second-order Sallen-Key filters to an MCP3204 ADC, with an ESP32 ADC fallback. Maze wire, start and finish contacts pass a high-value pull-up, RC filter and Schmitt buffer. LTspice netlists and Python analysis tools check the power, filter, contact and haptic circuits.

Design decisions

  1. Kept the 2.49 kohm charge-programming resistor after diagnostic sweeps showed the vendor macro-model, not the board, was the likely source of a low termination current. Changing it to satisfy the model would also have changed the full-charge current.
  2. Recorded that the passive contact front end cannot resolve the 5 ms contact gap requirement, instead of claiming the nominal 20 ms result. A faster-release front end needs its own design and bench validation.
  3. Made the simulation runner treat failed measurements in stepped LTspice tables as failures, so a completed simulation is never reported as a passed one.
  4. Scoped the board as research and education hardware. It is not a registered medical device.

What the evidence shows

KiCad ERC and DRC report no errors. The 20-circuit LTspice dataset produces 66 pass, 93 information and 17 fail assessment rows, including the charger and contact-gap failures. The diagnostic netlists ran 553 parameter cases. CI runs 95 Python tests on Windows and Linux and builds, tests and lints the Android app on Linux.

Development and testing

Schematic and layout

KiCad ERC with 0 errors and DRC with 0 errors, 0 unconnected items and 0 schematic-parity issues on the Rev A package.

Power simulation

Buck-boost load step from 50 to 600 mA held the 3.3 V rail between 3.197 and 3.396 V; simulated efficiency was 91.0 to 93.9 percent. Five long cases completed after the timeout was raised from 180 to 1800 seconds, with no netlist changes.

Charger termination

Thirteen diagnostic cases kept the macro-model termination near 7 percent of charge current, below the datasheet range.

Contact inputs

360 mains-phase, gap and coupling cases plus 180 threshold sensitivity cases. The 5 ms contact gap is not met by the selected front end.

Software tools

95 Python tests and a wheel and source build on Windows and Linux CI; a pin-map compile check and 18 Android JVM tests on Linux CI.

Contact

Let's make the next system work.

Discuss an engineering role, a project or a research collaboration. Tell me what you are building, where it gets difficult and what a useful result would look like.

  1. Send the formIt is sent from this page, without publishing my email address.
  2. I reply to youTo the address you give, with questions or a next step.
  3. Project work starts with DefineA short, fixed-fee phase that sets the scope and the tests.

0 of 4000 characters

Sent from this page, so my email address is never published.