| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268 |
- .. SPDX-License-Identifier: GPL-2.0
- ===============
- ADE9000 driver
- ===============
- This driver supports Analog Device's ADE9000 energy measurement IC on SPI bus.
- 1. Supported devices
- ====================
- * `ADE9000 <https://www.analog.com/media/en/technical-documentation/data-sheets/ADE9000.pdf>`_
- 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:
- .. code-block:: bash
- 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:
- .. code-block:: bash
- 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:
- .. code-block:: bash
- root:/sys/bus/iio/devices/iio:device0> cat name
- ade9000
- Read voltage measurements:
- .. code-block:: bash
- 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:
- .. code-block:: bash
- 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:
- .. code-block:: bash
- # 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):
- .. code-block:: bash
- # 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.
|