Overview

The ATM90E32 (ATM90E32AS) is a high-performance 3-phase polyphase Analog Front End (AFE) energy metering IC manufactured by Microchip Technology (formerly Atmel). Built for utility-grade electricity meters, smart solar inverters, and whole-house panel energy monitors, it integrates six 16-bit ADCs to simultaneously measure 3-phase AC voltage and 3-phase AC current.

Achieving Class 0.2 accuracy across a 6000:1 dynamic range, the ATM90E32 computes active power (W), reactive power (VAR), apparent power (VA), active energy (kWh), RMS voltage (VRMSV_{RMS}), RMS current (IRMSI_{RMS}), grid frequency (Hz), power factor (PF), phase angles, and harmonic distortion per phase over a 4-wire SPI bus. It is widely used in ESPHome multi-channel energy monitors and IoTaWatt hardware.

Quick reference

Operating voltage (VDD)3.0 V to 3.6 V DC (3.3 V nominal)
Phases supported3-Phase 4-Wire (Wye), 3-Phase 3-Wire (Delta), or 3 Single-Phase Circuits
ADC architecture6 independent 16-bit Sigma-Delta ADCs (3 Voltage + 3 Current)
Metering accuracyClass 0.2 (±0.2%\pm 0.2\%)
Dynamic range6000 : 1
Interface4-Wire SPI (up to 2 MHz)
Current inputsSupports Current Transformers (CT coils) or Rogowski coils
Voltage inputsSupports AC-AC Voltage Transformers (VT) or resistor dividers

Pinout (48-Pin TQFP Package & SPI Header)

SPI Header & Analog Sensing Pins:

PinNameTypeDescription
1VDDPowerDigital core supply (+3.3 V DC)
2GNDPowerGround reference (0 V)
3CS / SSDigital InputActive-Low SPI Chip Select
4SCLKDigital InputSPI Serial Clock
5SDI / MOSIDigital InputSPI Data Input
6SDO / MISODigital OutputSPI Data Output
7IRQ0 / WARNDigital OutputActive-Low interrupt output (voltage sag / over-current)
8–10VP, VN, VP2Analog InputPhase A, B, C Voltage sense inputs (Vpeak800 mVV_{peak} \le 800\text{ mV})
11–16I1P/I1N, I2P/I2N, I3P/I3NAnalog InputPhase A, B, C Current transformer differential inputs (Vpeak800 mVV_{peak} \le 800\text{ mV})

Specifications

ParameterSymbolMinTypMaxUnitConditions
Supply VoltageVDDV_{DD}3.03.33.6VDC
Active Supply CurrentIDDI_{DD}13.018.0mAAll 6 ADCs active
Active Energy AccuracyEactE_{act}-0.2%±0.1%\pm 0.1\%+0.2%Dynamic range 6000:1
Reactive Energy AccuracyEreactE_{react}-0.2%±0.1%\pm 0.1\%+0.2%Dynamic range 6000:1
Voltage Analog InputVIN_VV_{IN\_V}-800+800mV PeakDifferential peak voltage
Current Analog InputVIN_IV_{IN\_I}-800+800mV PeakDifferential peak voltage
SPI Clock FrequencyfSPIf_{SPI}01.02.0MHzSPI Mode 3 (CPOL=1,CPHA=1CPOL=1, CPHA=1)

Polyphase Register Map

Registers are 16-bit words accessed over SPI:

AddressRegister NameUnitDescription
0xD1UrmsA0.01 V0.01\text{ V}Phase A RMS Voltage
0xD2UrmsB0.01 V0.01\text{ V}Phase B RMS Voltage
0xD3UrmsC0.01 V0.01\text{ V}Phase C RMS Voltage
0xDDIrmsA0.001 A0.001\text{ A}Phase A RMS Current
0xDEIrmsB0.001 A0.001\text{ A}Phase B RMS Current
0xDFIrmsC0.001 A0.001\text{ A}Phase C RMS Current
0xE1PmeanA0.001 W0.001\text{ W}Phase A Active Power
0xF1PFmeanA0.0010.001Phase A Power Factor

Wiring

ATM90E32 PinESP32 GPIOArduino (3.3V)Notes
VDD3.3V3.3VPower rail
GNDGNDGNDSystem ground
SCLKGPIO 18Digital D13SPI Clock
SDO (MISO)GPIO 19Digital D12SPI MISO
SDI (MOSI)GPIO 23Digital D11SPI MOSI
CSGPIO 5Digital D10SPI Chip Select

Example (ESPHome Configuration snippet)

yaml
sensor:
  - platform: atm90e32
    cs_pin: GPIO5
    phase_a:
      voltage:
        name: "Phase A Voltage"
      current:
        name: "Phase A Current"
      power:
        name: "Phase A Power"
      gain_voltage: 36704
      gain_current: 38532
    phase_b:
      voltage:
        name: "Phase B Voltage"
      current:
        name: "Phase B Current"
      power:
        name: "Phase B Power"
      gain_voltage: 36704
      gain_current: 38532
    phase_c:
      voltage:
        name: "Phase C Voltage"
      current:
        name: "Phase C Current"
      power:
        name: "Phase C Power"
      gain_voltage: 36704
      gain_current: 38532
    frequency:
      name: "Grid Frequency"

Common mistakes

  • SPI Mode Misconfiguration: The ATM90E32 requires SPI Mode 3 (CPOL=1,CPHA=1CPOL=1, CPHA=1). Setting Mode 0 results in corrupted SPI register reads (0xFFFF or zero values).
  • Exceeding ±800 mV\pm 800\text{ mV} peak analog inputs: The differential current/voltage inputs connect directly to internal 16-bit Sigma-Delta ADCs. Signals exceeding 800 mV800\text{ mV} peak saturate the ADCs and distort calculations. Ensure burden resistors on CT coils step down current signals below 500 mV500\text{ mV} RMS.

Notes

  • ATM90E32 vs ATM90E26: ATM90E26 is single-phase (1×Voltage,2×Current1\times \text{Voltage}, 2\times \text{Current}); ATM90E32 is 3-phase polyphase (3×Voltage,3×Current3\times \text{Voltage}, 3\times \text{Current}).

Assets & downloads