ADE9000 driver

This driver supports Analog Device’s ADE9000 energy measurement IC on SPI bus.

1. Supported devices

The ADE9000 is a highly accurate, fully integrated, multiphase energy and power quality monitoring device. Superior analog performance and a digital signal processing (DSP) core enable accurate energy monitoring over a wide dynamic range. An integrated high end reference ensures low drift over temperature with a combined drift of less than ±25 ppm/°C maximum for the entire channel including a programmable gain amplifier (PGA) and an analog-to-digital converter (ADC).

2. Device attributes

Power and energy measurements are provided for voltage, current, active power, reactive power, apparent power, and power factor across three phases.

Each IIO device has a device folder under /sys/bus/iio/devices/iio:deviceX, where X is the IIO index of the device. Under these folders reside a set of device files, depending on the characteristics and features of the hardware device in question. These files are consistently generalized and documented in the IIO ABI documentation.

The following tables show the ADE9000 related device files, found in the specific device folder path /sys/bus/iio/devices/iio:deviceX.

Current measurement related device files

Description

in_current[0-2]_raw

Raw current measurement for phases A, B, C.

in_current[0-2]_scale

Scale for current channels.

in_current[0-2]_calibscale

Calibration gain for current channels (AIGAIN reg).

in_altcurrent[0-2]_rms_raw

RMS current measurement for phases A, B, C.

in_altcurrent[0-2]_rms_scale

Scale for RMS current channels.

in_altcurrent[0-2]_rms_calibbias

RMS offset correction for current channels (IRMSOS reg).

Voltage measurement related device files

Description

in_voltage[0-2]_raw

Raw voltage measurement for phases A, B, C.

in_voltage[0-2]_scale

Scale for voltage channels.

in_voltage[0-2]_calibscale

Calibration gain for voltage channels (AVGAIN reg).

in_voltage[0-2]_frequency

Measured line frequency from instantaneous voltage.

in_altvoltage[0-2]_rms_raw

RMS voltage measurement for phases A, B, C.

in_altvoltage[0-2]_rms_scale

Scale for RMS voltage channels.

in_altvoltage[0-2]_rms_calibbias

RMS offset correction for voltage channels (VRMSOS reg).

Power measurement related device files

Description

in_power[0-2]_active_raw

Active power measurement for phases A, B, C.

in_power[0-2]_active_scale

Scale for active power channels.

in_power[0-2]_active_calibbias

Calibration offset for active power (xWATTOS regs).

in_power[0-2]_active_calibscale

Calibration gain for active power (APGAIN reg).

in_power[0-2]_reactive_raw

Reactive power measurement for phases A, B, C.

in_power[0-2]_reactive_scale

Scale for reactive power channels.

in_power[0-2]_reactive_calibbias

Calibration offset for reactive power (xVAROS regs).

in_power[0-2]_apparent_raw

Apparent power measurement for phases A, B, C.

in_power[0-2]_apparent_scale

Scale for apparent power channels.

in_power[0-2]_powerfactor

Power factor for phases A, B, C.

Energy measurement related device files

Description

in_energy[0-2]_active_raw

Active energy measurement for phases A, B, C.

in_energy[0-2]_reactive_raw

Reactive energy measurement for phases A, B, C.

in_energy[0-2]_apparent_raw

Apparent energy measurement for phases A, B, C.

Shared device attributes

Description

name

Name of the IIO device.

filter_type

Waveform buffer filter type (sinc4, sinc4+lp).

filter_type_available

Available filter types for waveform buffer.

3. Calibration and scaling

The ADE9000 provides multiple levels of gain and offset correction:

Calibration Gain (per-channel)

Fine-tuning calibration gains applied in the digital domain for each channel type. Controlled via calibscale attributes (AIGAIN, AVGAIN, APGAIN registers).

Calibration Bias (per-channel)

Hardware calibration offsets applied by the device internally:

  • Power measurements: Controlled via calibbias attributes for power channels (xWATTOS, xVAROS registers).

  • RMS measurements: Controlled via calibbias attributes for RMS channels (IRMSOS, VRMSOS registers).

These are internal chip calibrations, not userspace-applied offsets.

4. Event attributes

The ADE9000 provides various interrupts that are mapped to IIO events. Event functionality is only available if the corresponding interrupts are connected in the device tree.

IIO Event Attribute

ADE9000 Datasheet Equivalent

in_voltage[0-2]_thresh_either_en

Zero crossing detection interrupt (ZXVx)

in_altvoltage[0-2]_rms_thresh_rising_en

RMS swell detection interrupt (SWELLx)

in_altvoltage[0-2]_rms_thresh_rising_value

RMS swell threshold (SWELL_LVL register)

in_altvoltage[0-2]_rms_thresh_falling_en

RMS sag/dip detection interrupt (DIPx)

in_altvoltage[0-2]_rms_thresh_falling_value

RMS sag/dip threshold (DIP_LVL register)

in_current[0-2]_thresh_either_en

Current zero crossing detection interrupt (ZXIx)

Event directions:

  • rising: Upper threshold crossing (swell detection)

  • falling: Lower threshold crossing (sag/dip detection)

  • either: Any threshold crossing (zero crossing detection)

  • none: Timeout or non-directional events

Note: Event attributes are only available if the corresponding interrupts (irq0, irq1, dready) are specified in the device tree. The driver works without interrupts but with reduced functionality.

5. Device buffers

This driver supports IIO buffers for waveform capture. Buffer functionality requires the dready interrupt to be connected.

The device supports capturing voltage and current waveforms for power quality analysis. The waveform buffer can be configured to capture data from different channel combinations.

Supported channel combinations for buffered capture:

  • Phase A: voltage and current (IA + VA)

  • Phase B: voltage and current (IB + VB)

  • Phase C: voltage and current (IC + VC)

  • All phases: all voltage and current channels

  • Individual channels: IA, VA, IB, VB, IC, VC

Usage examples

Enable waveform capture for Phase A:

root:/sys/bus/iio/devices/iio:device0> echo 1 > scan_elements/in_current0_en
root:/sys/bus/iio/devices/iio:device0> echo 1 > scan_elements/in_voltage0_en

Set buffer length and enable:

root:/sys/bus/iio/devices/iio:device0> echo 100 > buffer/length
root:/sys/bus/iio/devices/iio:device0> echo 1 > buffer/enable

6. Clock output

The ADE9000 can provide a clock output via the CLKOUT pin when using an external crystal/clock source. This feature is enabled by specifying #clock-cells = <0> in the device tree. The output clock will be registered as “clkout” and can be referenced by other devices.

7. Usage examples

Show device name:

root:/sys/bus/iio/devices/iio:device0> cat name
ade9000

Read voltage measurements:

root:/sys/bus/iio/devices/iio:device0> cat in_voltage0_raw
12345
root:/sys/bus/iio/devices/iio:device0> cat in_voltage0_scale
0.000030517
  • Phase A voltage = in_voltage0_raw * in_voltage0_scale = 0.3769 V

Read power measurements:

root:/sys/bus/iio/devices/iio:device0> cat in_power0_active_raw
5678
root:/sys/bus/iio/devices/iio:device0> cat in_power0_scale
0.000244140
  • Phase A active power = in_power0_active_raw * in_power0_scale = 1.386 W

Configure calibration gains:

# Set current channel 0 calibration gain
root:/sys/bus/iio/devices/iio:device0> echo 0x800000 > in_current0_calibscale
# Set voltage channel 0 calibration gain
root:/sys/bus/iio/devices/iio:device0> echo 0x7FFFFF > in_voltage0_calibscale

Configure RMS voltage event thresholds (requires interrupts):

# Set RMS sag detection threshold
root:/sys/bus/iio/devices/iio:device0> echo 180000 > events/in_altvoltage0_rms_thresh_falling_value
# Enable RMS sag detection
root:/sys/bus/iio/devices/iio:device0> echo 1 > events/in_altvoltage0_rms_thresh_falling_en

# Set RMS swell detection threshold
root:/sys/bus/iio/devices/iio:device0> echo 260000 > events/in_altvoltage0_rms_thresh_rising_value
# Enable RMS swell detection
root:/sys/bus/iio/devices/iio:device0> echo 1 > events/in_altvoltage0_rms_thresh_rising_en

8. IIO Interfacing Tools

See Documentation/iio/iio_tools.rst for the description of the available IIO interfacing tools.