All Projects ADS1220 Load Cell Amplifier

ADS1220 Load Cell Amplifier

A custom SPI ADC board and C++ driver for high-rate strain gauge measurement

Context
Northwestern HAND Lab (NSF Engineering Research Center)
Role
Co-designer — schematic capture, PCB layout, driver development
Timeline
Jan. 2025 – Present
Collaborators
Yuchan Choi. Advised by Anthony Shilati and Luke Batteas.
KiCad PlatformIO C++ Teensy 4.0/4.1 Python MATLAB Onshape

Problem

Researchers across the lab use strain gauge load cells, but the commercially available amplifier modules are effectively black boxes, and the ADC-to-microcontroller interface is tedious to set up from scratch each time. The module we were using, the NAU7802, communicates over I2C and tops out at 320 SPS — far short of what the lab needed. Target: 2 kHz sampling.

Approach

The work moved through three phases: confirm the existing hardware could produce trustworthy readings at all, calibrate it properly, then replace the bottleneck.

1. Characterize the problem with the existing hardware

Built an I2C interface between a NAU7802, a Teensy, and a load cell, plus a Python script for live plotting, to confirm readings could be captured at all.

2. Calibration

Designed and 3D printed a test rig in Onshape to hang known weights.

3D printed calibration rig, designed in Onshape
Photo — 3D printed calibration rig (Onshape)
Calibration fit plot, weight vs raw reading, 209x + 415043, R squared 0.998
Plot — calibration fit, 209x + 415043 (R² = 0.998)

Initial readings were too noisy to be repeatable, so the calibration routine was changed to average over a 10-second window per weight, repeated 5 times per weight. Resulting fit: 209x + 415043, R² = 0.998.

3. Replace the NAU7802 with a custom board

The NAU7802’s I2C interface was the limiting factor, so the next step was a custom board built around the ADS1220, which uses SPI.

KiCad schematic of the ADS1220 front end — power supply decoupling, clock pins, data pins, and the strain gauge analog input filter

Schematic — KiCad, ADS1220 front end

PCB Design Considerations

  • Anti-aliasing — passive RC low-pass filters on both analog inputs. Common-mode cutoff 994.72 Hz, sized against the 2 kHz sampling target. A differential-mode filter was added to reject inter-bridge noise. Transfer functions were modeled and Bode-plotted in MATLAB.
  • Power protection — a positive clamping circuit (BZV55B3V3) on the strain gauge inputs to protect against negative voltage, plus an anti-polarity protection diode.
  • Power regulation — an LP2985 low-dropout regulator to hold a stable 5V rail from a higher external supply.
  • Robustness details — indicator LEDs on AVDD and DVDD, decoupling capacitors throughout, 47Ω series resistors on the SPI lines, and analog traces kept as short as possible.
  • ADC clock — a 4.096 MHz PWM signal at 50% duty cycle supplied as the ADC clock.

Iteration

Two parallel board families were developed in tandem: a standalone breakout board, and a carrier board that sits directly on a Teensy.

Version A — Standalone Breakout

Version A v1 standalone breakout board render
v1

Manufactured, then found unusable on a breadboard — the M3 screw holes blocked it.

Version A v2 standalone breakout board render, components moved to the back
v2

Moved components to the back of the board and dropped the screw holes to free up breadboard clearance.

Version B — Teensy Carrier Board

Version B v2 Teensy carrier board render, initial mockup
v2

Initial mockup of the carrier-board concept.

Version B v3 Teensy carrier board render, the version demoed working
v3 · demoed working

Improved trace routing, added the external power supply path, and fixed the low-pass filter.

Video — v3 board (Version B) demoed working

Firmware

Wrote a C++ ADS1220 driver library in PlatformIO exposing begin, reset, register read/write, raw and calibrated reads, startConversion, powerDown, and findADCOffset.

  • findADCOffset averages 2000 samples to zero the load cell.
  • reset includes the ~1 ms delay the ADS1220 requires before it will accept any SPI command.

These boards are now used throughout the HAND Lab at Northwestern for strain-gauge data acquisition.

Eric Oh

© 2025 Eric Oh. All rights reserved.

LinkedIn GitHub Email