Case study 01 · 2021 → present · Technotonin Industries

PAWE. Powered mobility. The chair you already know.

A detachable power-assist for compatible folding manual wheelchairs. It attaches in seconds, lifts off for transport, and fits in a car trunk. I co-founded PAWE with Arav Tyagi and developed its mechanics, electronics, and firmware, guided by feedback from wheelchair users and clinicians.

  • 15 lb device
  • 6 mph top speed
  • ~10 mi range
  • 10 s to attach
  • $1,500 target vs $5–10K chairs
  • US 12,605,293 granted

Why it exists

Friends with muscular dystrophy needed power chairs they could not afford — and could not get into a car.

Cost and transport were the problems we wanted to solve: how could someone add powered mobility to their existing chair and still take it in a car? Arav Tyagi and I started in a garage in 2021 with about $50 of gearboxes, parts donated by our robotics club, and a wheelchair donated by a senior center.

Everything since has been shaped by over 100 interviews with wheelchair users, caretakers and clinicians, and by demo days at the Bellingham and Franklin senior centres where people drove it and told us what was wrong with it.

  • Two friction rollers press against the chair's rear tires; torque transfers by friction. No chair modification.
  • Hot-swap battery clicks in and out by hand, so the pack rides in a bag and the chair stays light.
  • Modular controller — joystick or push-assist, speed-capped per user, with alternative inputs (eye-tracking, tongue-drive) contemplated in the patent claims.
The Technotonin team with PAWE

Technotonin Industries. Co-founders Antonio Marzoratti and Arav Tyagi. Mentors include Scott Harris, co-founder of SolidWorks and Onshape.

Specification

The design at a glance.

Published specifications, design targets, and their supporting sources.

SpecificationValueBasis
Device mass15–17 lb confirmation pendingPublished figures differ; a consistent measured weight is pending.
Top speed6 mphUser-adjustable; 3 mph standard mode
Range per charge~10 miProduct site; local press has reported 8 mi
Attach time~10 sThree-step align-and-lock, no tools
Compatible chairs16–22 in folding frameInvacare, Drive, Karman, Medline tested; rigid frames in development
Rated user mass136 kg / 300 lbAs described in the FDA Pre-Submission
Incline6° (10 %)Clears most ADA-compliant grades
BatteryLiFePO₄ 4S · 12.8 V · 20 AhIntegrated BMS; hot-swappable
Motors2 × MY1016, 250 W24 V brushed, run at ~12.8 V
Drive ratio1 : 1 directRoller on the motor output shaft — no chain, belt or gearbox
IngressIPX4Design target

Mechanism · US 12,605,293

Dual-motor differential friction drive, and the patent that covers it.

Each rear tire gets its own 250 W motor with a compliant roller pressed against the tread. Independent per-side torque and rotational-velocity control means the same two rollers drive, steer and brake — there is no steering mechanism, just a difference in wheel speed.

The contact patch is the whole problem. A rigid roller slips in the wet; a soft one deforms and heats. The claimed solution is a flexible polymer ring backed by rigid polylactic-acid fillers — compliant where it meets rubber, stiff where it carries torque.

  • Claim 1 — two motors on shafts to rotatable ends, a driver per motor, flexible rings between ring and shaft, a controller carrying torque and velocity data, mounted behind the seat.
  • Claim 10 — the polymer ring with rigid PLA fillers.
  • Claim 12 / 17 — the PWM processor architecture and the integrated housing with independent motor control.
  • Filed 22 Feb 2023 · granted 21 Apr 2026 · 19 claims · first-named inventor · assigned to Technotonin Industries LLC.
SIDE VIEW — ONE SIDE REAR TIRE Ø 24 in ROLLER 1.5 in MY1016250 W · 1:1 CLAMP FORCE N [?] FRICTION → TORQUE PLAN VIEW CHAIR PAWE · two motors, two rollers JOYSTICK MCU · USB-C LR

Independent per-side control. Steering is a speed difference between the rollers. The one number nobody has measured yet — the clamp force at the roller — is flagged [?], because the simulation results hinge on it.

Electronics

Inside the power system.

Both boards were designed from schematic capture through complete fabrication and assembly packages. Every net in the as-built documentation carries a tag saying how it was verified: measured, flashed-firmware fact, observed, datasheet-cited, or unknown.

PAWE power distribution diagram

Power tree. LiFePO₄ pack → BMS → illuminated rocker → run/charge relay → switched 12 V bus → Cytron MDD20A dual driver and a Pololu buck-boost for the 5 V logic rail. Always-live battery-sense divider into a 12-bit ADC.

PAWE system block diagram

System block. Chassis RP2040 as USB host (PIO-USB on core 1, 120 MHz) talking to the joystick RP2040 over one cable that also powers it. OLED, IMU and two IR wheel sensors on the chassis side.

Finding · fail-safe path

A BMS cut also kills the relay coil

The relay coil is fed from the raw pack through the rocker, so a BMS over-current cut drops the relay to the charger position, the load disconnects, and a load-detecting BMS re-closes. The system can cycle instead of staying safely off. Found in simulation, now a design item.

Finding · robust

Pack sag cannot glitch the logic rail

The 5 V rail comes off a buck-boost good down to 2.8 V in. Worst corner (60 mΩ source, 5 % SOC, doubled wiring resistance) still leaves ~9.6 V at the pack and ~7.1 V at the driver bus — above every UVLO in the chain.

Finding · measurement trap

Motor current can exceed battery current

During the PWM-off freewheel the motor current circulates in the bridge, so average battery current is duty × motor current. Clamp the meter on the wrong lead and you under-read the motors by the duty cycle.

Firmware & control

Two MCUs, one cable, and a control loop I chose to retire.

The joystick is the master; the chassis is the slave. They talk over USB-C with a framed, checksummed ASCII protocol ($PAWE,ver,type,…*CK), with a link-loss recovery state machine and a motors-off failsafe if the cable is pulled. At PWM = 0 the driver actively brakes, so if the MCU dies the chair stops rather than coasts.

The closed-loop stack (June 2026)

Smoother→heading-hold→turn limit→PID ×2→motor units
  • Gain-scheduled PID — separate low- and high-speed gain sets blended by measured speed; integral clamp expressed in output units so it survives retuning; back-calculation anti-windup that undoes the specific integral step that saturated.
  • Gyro heading-hold — LSM6DS3TRC gyro-Z at 104 Hz; 1.2 s power-on bias average, then continuous still-time bias trimming on a ~2 s time constant whenever the rate stays under 0.7°/s for 250 ms. Engages only when both wheels agree on direction, magnitude and speed, and corrects as a differential nudge so speed never changes.
  • Dual-τ smoothing — separate time constants for driving vs letting go or reversing, so stops feel crisp while cruising stays smooth.
  • Encoder tach — interrupt-driven single-pin period measurement, plus a 4500 µs rejection filter after telemetry showed motor PWM injecting phantom pulses and the tach reporting 669 mph.

The shipped stack

stiction floor→linear map→per-wheel trim→asymmetric slew→motor units

Magnitude-only encoders cannot tell a slow wheel from a reversing one. In a turn the inside wheel reverses, the PID reads a wheel that will not reach target, pushes harder the wrong way, and the integral winds up — a gentle curve becomes a spin. The 4-way joystick had masked it for a year by only ever commanding symmetric drive; the new proportional stick exposed it in a day. Recorded: 132 motor-units chasing an unreachable speed, ~230° of yaw on a straight command. Decision ADR-009: open-loop, sensors to telemetry, nothing left to wind up.

ADR-009 reconstruction
0 / 0motor units L / R
0.0 mphencoder reading
0°heading drift
Endpoints are the recorded values from the firmware decision log (ADR-009) and commits d7da3d9 / a87c427. Curve shapes are illustrative reconstructions, not logged traces.
Also in the repo

An as-built “code schematic”

Ten documents that do for the firmware what a schematic does for a board — boot order on both cores, task tables, every state machine, the wire protocol, the build pipeline — with every claim cited to a source line at a pinned commit.

Also in the repo

An adversarial defect review

Every candidate finding handed to an independent verifier told to refute it. Eleven survived, including a control-core blocking USB write that could defeat link recovery, and a telemetry I²C read that runs ahead of the motor stop.

Also in the repo

Legacy reverse-engineering

Identified which of 22 drifted Arduino sketches was actually flashed on the hardware, from four independent sources — including a read-only serial probe distinguishing two boards that enumerate with the same USB VID/PID.

Simulation twins

Find the brownout on the computer, not under a person.

Two time-stepped models of the same machine. The electrical twin models the pack, BMS, relay, driver, motors, regulator and the firmware's own sensor pipelines; the mechanical twin models roller friction, longitudinal and yaw dynamics, and synthesizes what the encoders and IMU would report. They share one motor model and a reconcile() that asserts their constants agree.

Electrical simulation: hard launch

Electrical · hard launch. Pack voltage, bus voltage, motor and battery current from a full-stick start. Where the sag lands relative to every regulator's under-voltage lockout.

Electrical simulation: BMS trip and relay cycling

Electrical · BMS cycling. The finding that changed the design conversation: an over-current trip drops the relay, the load disappears, the BMS re-closes, and the whole system oscillates instead of staying off.

Electrical simulation: full stall

Electrical · full stall. Both rollers blocked at full command. Stall current per motor is ~39 A before pack sag, ~28 A after — against a BMS threshold that is itself owner-attested, not measured, so the verdict is swept rather than asserted.

Electrical simulation: launch at low state of charge

Electrical · low-battery launch. Same launch at 5 % state of charge. The logic rail survives; the question is whether the BMS under-voltage latch fires first.

Electrical simulation: firmware battery reading under load

Electrical · battery gauge. The firmware's battery divider taps the raw pack terminal, so the reading sags with load current. What the OLED shows vs what the pack actually holds.

Mechanical simulation: phantom encoder pulses

Mechanical · phantom pulses. Motor-PWM noise injects encoder edges tens of microseconds apart; the firmware-measured speed (dotted) spikes to nonsense while true ground speed (solid) climbs smoothly. This is why the 4500 µs filter exists.

Mechanical simulation: encoder speed ceiling

Mechanical · encoder ceiling. The 4500 µs filter implies a maximum readable speed of 7.44 mph on a 1.5 in roller with 8 pulses per rev — and the firmware's own 7.0 mph cap binds first. Reproduced as a regression test in encoder_calc.py --selftest.

Mechanical simulation: synthesized IMU traces

Mechanical · IMU traces. Synthesized gyro and accelerometer signals through the firmware's own bias-trim and integration pipeline, showing how much yaw drift accumulates over a run.

Mechanical simulation: hypothetical heading-hold

Mechanical · heading-hold. A hypothetical future-firmware controller, explicitly labelled as a demo and not a product claim. This is where the retired closed-loop stack goes once direction-aware encoders are fitted.

Mechanical simulation: launch dynamics

Mechanical · launch dynamics. Tractive force, slip flag, longitudinal acceleration and yaw rate from a hard launch, against the static rear-tip acceleration limit from the moment-balance calculator.

Method

Every constant carries a provenance tag

[M] measured · [F] flashed firmware · [O] observed · [DS] datasheet page-cited · [EST] estimate · [?] nobody has measured it. An untagged number is not established.

Method

Checked against hand calculation

The electrical core reproduces hand calculations to under 0.1 %. The mechanical energy ledger closes within ~3 %. Three stdlib-only calculators ship with --selftest that exits non-zero if the arithmetic drifts.

Method

Adversarially reviewed, bias disclosed

Four independent reviewers — physics, software, empirical validation, docs consistency. The report discloses that the BMS threshold changed after the review ran, and hedges the affected verdicts with a published sweep instead of hiding it.

Path to market

We have opened the conversation with the FDA.

In June 2026 I authored and filed PAWE's Pre-Submission with the FDA as the company's regulatory correspondent — the device description, proposed predicates, a proposed test plan and eleven specific questions. FDA's written response arrived in August 2026 and maps out the testing programme for the 510(k) that follows.

Next up is the bench: the measurements and conformance testing that response calls for. Nothing here claims clearance — it claims a clear plan.

What comes next

  • Measure the three numbers the simulations hinge on: roller clamp force, chair centre-of-gravity, cruise and launch current.
  • Fit direction-aware encoders and revisit closed-loop control.
  • Close the eleven firmware findings from the adversarial review.
  • Rewrite the firmware for the cleared product — the prototype code is explicitly not the basis.