xref: /linux/Documentation/iio/ade9000.rst (revision ec2e0fb07d789976c601bec19ecced7a501c3705)
1*942ab02bSAntoniu Miclaus.. SPDX-License-Identifier: GPL-2.0
2*942ab02bSAntoniu Miclaus
3*942ab02bSAntoniu Miclaus===============
4*942ab02bSAntoniu MiclausADE9000 driver
5*942ab02bSAntoniu Miclaus===============
6*942ab02bSAntoniu Miclaus
7*942ab02bSAntoniu MiclausThis driver supports Analog Device's ADE9000 energy measurement IC on SPI bus.
8*942ab02bSAntoniu Miclaus
9*942ab02bSAntoniu Miclaus1. Supported devices
10*942ab02bSAntoniu Miclaus====================
11*942ab02bSAntoniu Miclaus
12*942ab02bSAntoniu Miclaus* `ADE9000 <https://www.analog.com/media/en/technical-documentation/data-sheets/ADE9000.pdf>`_
13*942ab02bSAntoniu Miclaus
14*942ab02bSAntoniu MiclausThe ADE9000 is a highly accurate, fully integrated, multiphase energy and power
15*942ab02bSAntoniu Miclausquality monitoring device. Superior analog performance and a digital signal
16*942ab02bSAntoniu Miclausprocessing (DSP) core enable accurate energy monitoring over a wide dynamic
17*942ab02bSAntoniu Miclausrange. An integrated high end reference ensures low drift over temperature
18*942ab02bSAntoniu Miclauswith a combined drift of less than ±25 ppm/°C maximum for the entire channel
19*942ab02bSAntoniu Miclausincluding a programmable gain amplifier (PGA) and an analog-to-digital
20*942ab02bSAntoniu Miclausconverter (ADC).
21*942ab02bSAntoniu Miclaus
22*942ab02bSAntoniu Miclaus2. Device attributes
23*942ab02bSAntoniu Miclaus====================
24*942ab02bSAntoniu Miclaus
25*942ab02bSAntoniu MiclausPower and energy measurements are provided for voltage, current, active power,
26*942ab02bSAntoniu Miclausreactive power, apparent power, and power factor across three phases.
27*942ab02bSAntoniu Miclaus
28*942ab02bSAntoniu MiclausEach IIO device has a device folder under ``/sys/bus/iio/devices/iio:deviceX``,
29*942ab02bSAntoniu Miclauswhere X is the IIO index of the device. Under these folders reside a set of
30*942ab02bSAntoniu Miclausdevice files, depending on the characteristics and features of the hardware
31*942ab02bSAntoniu Miclausdevice in question. These files are consistently generalized and documented in
32*942ab02bSAntoniu Miclausthe IIO ABI documentation.
33*942ab02bSAntoniu Miclaus
34*942ab02bSAntoniu MiclausThe following tables show the ADE9000 related device files, found in the
35*942ab02bSAntoniu Miclausspecific device folder path ``/sys/bus/iio/devices/iio:deviceX``.
36*942ab02bSAntoniu Miclaus
37*942ab02bSAntoniu Miclaus+---------------------------------------------------+----------------------------------------------------------+
38*942ab02bSAntoniu Miclaus| Current measurement related device files          | Description                                              |
39*942ab02bSAntoniu Miclaus+---------------------------------------------------+----------------------------------------------------------+
40*942ab02bSAntoniu Miclaus| in_current[0-2]_raw                               | Raw current measurement for phases A, B, C.              |
41*942ab02bSAntoniu Miclaus+---------------------------------------------------+----------------------------------------------------------+
42*942ab02bSAntoniu Miclaus| in_current[0-2]_scale                             | Scale for current channels.                              |
43*942ab02bSAntoniu Miclaus+---------------------------------------------------+----------------------------------------------------------+
44*942ab02bSAntoniu Miclaus| in_current[0-2]_calibscale                        | Calibration gain for current channels (AIGAIN reg).      |
45*942ab02bSAntoniu Miclaus+---------------------------------------------------+----------------------------------------------------------+
46*942ab02bSAntoniu Miclaus| in_altcurrent[0-2]_rms_raw                        | RMS current measurement for phases A, B, C.              |
47*942ab02bSAntoniu Miclaus+---------------------------------------------------+----------------------------------------------------------+
48*942ab02bSAntoniu Miclaus| in_altcurrent[0-2]_rms_scale                      | Scale for RMS current channels.                          |
49*942ab02bSAntoniu Miclaus+---------------------------------------------------+----------------------------------------------------------+
50*942ab02bSAntoniu Miclaus| in_altcurrent[0-2]_rms_calibbias                  | RMS offset correction for current channels (IRMSOS reg). |
51*942ab02bSAntoniu Miclaus+---------------------------------------------------+----------------------------------------------------------+
52*942ab02bSAntoniu Miclaus
53*942ab02bSAntoniu Miclaus+---------------------------------------------------+----------------------------------------------------------+
54*942ab02bSAntoniu Miclaus| Voltage measurement related device files          | Description                                              |
55*942ab02bSAntoniu Miclaus+---------------------------------------------------+----------------------------------------------------------+
56*942ab02bSAntoniu Miclaus| in_voltage[0-2]_raw                               | Raw voltage measurement for phases A, B, C.              |
57*942ab02bSAntoniu Miclaus+---------------------------------------------------+----------------------------------------------------------+
58*942ab02bSAntoniu Miclaus| in_voltage[0-2]_scale                             | Scale for voltage channels.                              |
59*942ab02bSAntoniu Miclaus+---------------------------------------------------+----------------------------------------------------------+
60*942ab02bSAntoniu Miclaus| in_voltage[0-2]_calibscale                        | Calibration gain for voltage channels (AVGAIN reg).      |
61*942ab02bSAntoniu Miclaus+---------------------------------------------------+----------------------------------------------------------+
62*942ab02bSAntoniu Miclaus| in_voltage[0-2]_frequency                         | Measured line frequency from instantaneous voltage.      |
63*942ab02bSAntoniu Miclaus+---------------------------------------------------+----------------------------------------------------------+
64*942ab02bSAntoniu Miclaus| in_altvoltage[0-2]_rms_raw                        | RMS voltage measurement for phases A, B, C.              |
65*942ab02bSAntoniu Miclaus+---------------------------------------------------+----------------------------------------------------------+
66*942ab02bSAntoniu Miclaus| in_altvoltage[0-2]_rms_scale                      | Scale for RMS voltage channels.                          |
67*942ab02bSAntoniu Miclaus+---------------------------------------------------+----------------------------------------------------------+
68*942ab02bSAntoniu Miclaus| in_altvoltage[0-2]_rms_calibbias                  | RMS offset correction for voltage channels (VRMSOS reg). |
69*942ab02bSAntoniu Miclaus+---------------------------------------------------+----------------------------------------------------------+
70*942ab02bSAntoniu Miclaus
71*942ab02bSAntoniu Miclaus+---------------------------------------------------+----------------------------------------------------------+
72*942ab02bSAntoniu Miclaus| Power measurement related device files            | Description                                              |
73*942ab02bSAntoniu Miclaus+---------------------------------------------------+----------------------------------------------------------+
74*942ab02bSAntoniu Miclaus| in_power[0-2]_active_raw                          | Active power measurement for phases A, B, C.             |
75*942ab02bSAntoniu Miclaus+---------------------------------------------------+----------------------------------------------------------+
76*942ab02bSAntoniu Miclaus| in_power[0-2]_active_scale                        | Scale for active power channels.                         |
77*942ab02bSAntoniu Miclaus+---------------------------------------------------+----------------------------------------------------------+
78*942ab02bSAntoniu Miclaus| in_power[0-2]_active_calibbias                    | Calibration offset for active power (xWATTOS regs).      |
79*942ab02bSAntoniu Miclaus+---------------------------------------------------+----------------------------------------------------------+
80*942ab02bSAntoniu Miclaus| in_power[0-2]_active_calibscale                   | Calibration gain for active power (APGAIN reg).          |
81*942ab02bSAntoniu Miclaus+---------------------------------------------------+----------------------------------------------------------+
82*942ab02bSAntoniu Miclaus| in_power[0-2]_reactive_raw                        | Reactive power measurement for phases A, B, C.           |
83*942ab02bSAntoniu Miclaus+---------------------------------------------------+----------------------------------------------------------+
84*942ab02bSAntoniu Miclaus| in_power[0-2]_reactive_scale                      | Scale for reactive power channels.                       |
85*942ab02bSAntoniu Miclaus+---------------------------------------------------+----------------------------------------------------------+
86*942ab02bSAntoniu Miclaus| in_power[0-2]_reactive_calibbias                  | Calibration offset for reactive power (xVAROS regs).     |
87*942ab02bSAntoniu Miclaus+---------------------------------------------------+----------------------------------------------------------+
88*942ab02bSAntoniu Miclaus| in_power[0-2]_apparent_raw                        | Apparent power measurement for phases A, B, C.           |
89*942ab02bSAntoniu Miclaus+---------------------------------------------------+----------------------------------------------------------+
90*942ab02bSAntoniu Miclaus| in_power[0-2]_apparent_scale                      | Scale for apparent power channels.                       |
91*942ab02bSAntoniu Miclaus+---------------------------------------------------+----------------------------------------------------------+
92*942ab02bSAntoniu Miclaus| in_power[0-2]_powerfactor                         | Power factor for phases A, B, C.                         |
93*942ab02bSAntoniu Miclaus+---------------------------------------------------+----------------------------------------------------------+
94*942ab02bSAntoniu Miclaus
95*942ab02bSAntoniu Miclaus+---------------------------------------------------+----------------------------------------------------------+
96*942ab02bSAntoniu Miclaus| Energy measurement related device files           | Description                                              |
97*942ab02bSAntoniu Miclaus+---------------------------------------------------+----------------------------------------------------------+
98*942ab02bSAntoniu Miclaus| in_energy[0-2]_active_raw                         | Active energy measurement for phases A, B, C.            |
99*942ab02bSAntoniu Miclaus+---------------------------------------------------+----------------------------------------------------------+
100*942ab02bSAntoniu Miclaus| in_energy[0-2]_reactive_raw                       | Reactive energy measurement for phases A, B, C.          |
101*942ab02bSAntoniu Miclaus+---------------------------------------------------+----------------------------------------------------------+
102*942ab02bSAntoniu Miclaus| in_energy[0-2]_apparent_raw                       | Apparent energy measurement for phases A, B, C.          |
103*942ab02bSAntoniu Miclaus+---------------------------------------------------+----------------------------------------------------------+
104*942ab02bSAntoniu Miclaus
105*942ab02bSAntoniu Miclaus+------------------------------+------------------------------------------------------------------+
106*942ab02bSAntoniu Miclaus| Shared device attributes     | Description                                                      |
107*942ab02bSAntoniu Miclaus+------------------------------+------------------------------------------------------------------+
108*942ab02bSAntoniu Miclaus| name                         | Name of the IIO device.                                          |
109*942ab02bSAntoniu Miclaus+------------------------------+------------------------------------------------------------------+
110*942ab02bSAntoniu Miclaus| filter_type                  | Waveform buffer filter type (sinc4, sinc4+lp).                   |
111*942ab02bSAntoniu Miclaus+------------------------------+------------------------------------------------------------------+
112*942ab02bSAntoniu Miclaus| filter_type_available        | Available filter types for waveform buffer.                      |
113*942ab02bSAntoniu Miclaus+------------------------------+------------------------------------------------------------------+
114*942ab02bSAntoniu Miclaus
115*942ab02bSAntoniu Miclaus3. Calibration and scaling
116*942ab02bSAntoniu Miclaus===========================
117*942ab02bSAntoniu Miclaus
118*942ab02bSAntoniu MiclausThe ADE9000 provides multiple levels of gain and offset correction:
119*942ab02bSAntoniu Miclaus
120*942ab02bSAntoniu Miclaus**Calibration Gain (per-channel)**
121*942ab02bSAntoniu Miclaus  Fine-tuning calibration gains applied in the digital domain for each channel type.
122*942ab02bSAntoniu Miclaus  Controlled via ``calibscale`` attributes (AIGAIN, AVGAIN, APGAIN registers).
123*942ab02bSAntoniu Miclaus
124*942ab02bSAntoniu Miclaus**Calibration Bias (per-channel)**
125*942ab02bSAntoniu Miclaus  Hardware calibration offsets applied by the device internally:
126*942ab02bSAntoniu Miclaus
127*942ab02bSAntoniu Miclaus  - Power measurements: Controlled via ``calibbias`` attributes for power channels (xWATTOS, xVAROS registers).
128*942ab02bSAntoniu Miclaus  - RMS measurements: Controlled via ``calibbias`` attributes for RMS channels (IRMSOS, VRMSOS registers).
129*942ab02bSAntoniu Miclaus
130*942ab02bSAntoniu Miclaus  These are internal chip calibrations, not userspace-applied offsets.
131*942ab02bSAntoniu Miclaus
132*942ab02bSAntoniu Miclaus4. Event attributes
133*942ab02bSAntoniu Miclaus===================
134*942ab02bSAntoniu Miclaus
135*942ab02bSAntoniu MiclausThe ADE9000 provides various interrupts that are mapped to IIO events.
136*942ab02bSAntoniu MiclausEvent functionality is only available if the corresponding interrupts are
137*942ab02bSAntoniu Miclausconnected in the device tree.
138*942ab02bSAntoniu Miclaus
139*942ab02bSAntoniu Miclaus+---------------------------------------------------+----------------------------------------------------------+
140*942ab02bSAntoniu Miclaus| IIO Event Attribute                               | ADE9000 Datasheet Equivalent                             |
141*942ab02bSAntoniu Miclaus+---------------------------------------------------+----------------------------------------------------------+
142*942ab02bSAntoniu Miclaus| in_voltage[0-2]_thresh_either_en                  | Zero crossing detection interrupt (ZXVx)                 |
143*942ab02bSAntoniu Miclaus+---------------------------------------------------+----------------------------------------------------------+
144*942ab02bSAntoniu Miclaus| in_altvoltage[0-2]_rms_thresh_rising_en           | RMS swell detection interrupt (SWELLx)                   |
145*942ab02bSAntoniu Miclaus+---------------------------------------------------+----------------------------------------------------------+
146*942ab02bSAntoniu Miclaus| in_altvoltage[0-2]_rms_thresh_rising_value        | RMS swell threshold (SWELL_LVL register)                 |
147*942ab02bSAntoniu Miclaus+---------------------------------------------------+----------------------------------------------------------+
148*942ab02bSAntoniu Miclaus| in_altvoltage[0-2]_rms_thresh_falling_en          | RMS sag/dip detection interrupt (DIPx)                   |
149*942ab02bSAntoniu Miclaus+---------------------------------------------------+----------------------------------------------------------+
150*942ab02bSAntoniu Miclaus| in_altvoltage[0-2]_rms_thresh_falling_value       | RMS sag/dip threshold (DIP_LVL register)                 |
151*942ab02bSAntoniu Miclaus+---------------------------------------------------+----------------------------------------------------------+
152*942ab02bSAntoniu Miclaus| in_current[0-2]_thresh_either_en                  | Current zero crossing detection interrupt (ZXIx)         |
153*942ab02bSAntoniu Miclaus+---------------------------------------------------+----------------------------------------------------------+
154*942ab02bSAntoniu Miclaus
155*942ab02bSAntoniu MiclausEvent directions:
156*942ab02bSAntoniu Miclaus
157*942ab02bSAntoniu Miclaus- ``rising``: Upper threshold crossing (swell detection)
158*942ab02bSAntoniu Miclaus- ``falling``: Lower threshold crossing (sag/dip detection)
159*942ab02bSAntoniu Miclaus- ``either``: Any threshold crossing (zero crossing detection)
160*942ab02bSAntoniu Miclaus- ``none``: Timeout or non-directional events
161*942ab02bSAntoniu Miclaus
162*942ab02bSAntoniu Miclaus**Note**: Event attributes are only available if the corresponding interrupts
163*942ab02bSAntoniu Miclaus(irq0, irq1, dready) are specified in the device tree. The driver works without
164*942ab02bSAntoniu Miclausinterrupts but with reduced functionality.
165*942ab02bSAntoniu Miclaus
166*942ab02bSAntoniu Miclaus5. Device buffers
167*942ab02bSAntoniu Miclaus=================
168*942ab02bSAntoniu Miclaus
169*942ab02bSAntoniu MiclausThis driver supports IIO buffers for waveform capture. Buffer functionality
170*942ab02bSAntoniu Miclausrequires the dready interrupt to be connected.
171*942ab02bSAntoniu Miclaus
172*942ab02bSAntoniu MiclausThe device supports capturing voltage and current waveforms for power quality
173*942ab02bSAntoniu Miclausanalysis. The waveform buffer can be configured to capture data from different
174*942ab02bSAntoniu Miclauschannel combinations.
175*942ab02bSAntoniu Miclaus
176*942ab02bSAntoniu MiclausSupported channel combinations for buffered capture:
177*942ab02bSAntoniu Miclaus
178*942ab02bSAntoniu Miclaus- Phase A: voltage and current (IA + VA)
179*942ab02bSAntoniu Miclaus- Phase B: voltage and current (IB + VB)
180*942ab02bSAntoniu Miclaus- Phase C: voltage and current (IC + VC)
181*942ab02bSAntoniu Miclaus- All phases: all voltage and current channels
182*942ab02bSAntoniu Miclaus- Individual channels: IA, VA, IB, VB, IC, VC
183*942ab02bSAntoniu Miclaus
184*942ab02bSAntoniu MiclausUsage examples
185*942ab02bSAntoniu Miclaus--------------
186*942ab02bSAntoniu Miclaus
187*942ab02bSAntoniu MiclausEnable waveform capture for Phase A:
188*942ab02bSAntoniu Miclaus
189*942ab02bSAntoniu Miclaus.. code-block:: bash
190*942ab02bSAntoniu Miclaus
191*942ab02bSAntoniu Miclaus        root:/sys/bus/iio/devices/iio:device0> echo 1 > scan_elements/in_current0_en
192*942ab02bSAntoniu Miclaus        root:/sys/bus/iio/devices/iio:device0> echo 1 > scan_elements/in_voltage0_en
193*942ab02bSAntoniu Miclaus
194*942ab02bSAntoniu MiclausSet buffer length and enable:
195*942ab02bSAntoniu Miclaus
196*942ab02bSAntoniu Miclaus.. code-block:: bash
197*942ab02bSAntoniu Miclaus
198*942ab02bSAntoniu Miclaus        root:/sys/bus/iio/devices/iio:device0> echo 100 > buffer/length
199*942ab02bSAntoniu Miclaus        root:/sys/bus/iio/devices/iio:device0> echo 1 > buffer/enable
200*942ab02bSAntoniu Miclaus
201*942ab02bSAntoniu Miclaus6. Clock output
202*942ab02bSAntoniu Miclaus===============
203*942ab02bSAntoniu Miclaus
204*942ab02bSAntoniu MiclausThe ADE9000 can provide a clock output via the CLKOUT pin when using an external
205*942ab02bSAntoniu Miclauscrystal/clock source. This feature is enabled by specifying ``#clock-cells = <0>``
206*942ab02bSAntoniu Miclausin the device tree. The output clock will be registered as "clkout" and can be
207*942ab02bSAntoniu Miclausreferenced by other devices.
208*942ab02bSAntoniu Miclaus
209*942ab02bSAntoniu Miclaus7. Usage examples
210*942ab02bSAntoniu Miclaus=================
211*942ab02bSAntoniu Miclaus
212*942ab02bSAntoniu MiclausShow device name:
213*942ab02bSAntoniu Miclaus
214*942ab02bSAntoniu Miclaus.. code-block:: bash
215*942ab02bSAntoniu Miclaus
216*942ab02bSAntoniu Miclaus	root:/sys/bus/iio/devices/iio:device0> cat name
217*942ab02bSAntoniu Miclaus        ade9000
218*942ab02bSAntoniu Miclaus
219*942ab02bSAntoniu MiclausRead voltage measurements:
220*942ab02bSAntoniu Miclaus
221*942ab02bSAntoniu Miclaus.. code-block:: bash
222*942ab02bSAntoniu Miclaus
223*942ab02bSAntoniu Miclaus        root:/sys/bus/iio/devices/iio:device0> cat in_voltage0_raw
224*942ab02bSAntoniu Miclaus        12345
225*942ab02bSAntoniu Miclaus        root:/sys/bus/iio/devices/iio:device0> cat in_voltage0_scale
226*942ab02bSAntoniu Miclaus        0.000030517
227*942ab02bSAntoniu Miclaus
228*942ab02bSAntoniu Miclaus- Phase A voltage = in_voltage0_raw * in_voltage0_scale = 0.3769 V
229*942ab02bSAntoniu Miclaus
230*942ab02bSAntoniu MiclausRead power measurements:
231*942ab02bSAntoniu Miclaus
232*942ab02bSAntoniu Miclaus.. code-block:: bash
233*942ab02bSAntoniu Miclaus
234*942ab02bSAntoniu Miclaus        root:/sys/bus/iio/devices/iio:device0> cat in_power0_active_raw
235*942ab02bSAntoniu Miclaus        5678
236*942ab02bSAntoniu Miclaus        root:/sys/bus/iio/devices/iio:device0> cat in_power0_scale
237*942ab02bSAntoniu Miclaus        0.000244140
238*942ab02bSAntoniu Miclaus
239*942ab02bSAntoniu Miclaus- Phase A active power = in_power0_active_raw * in_power0_scale = 1.386 W
240*942ab02bSAntoniu Miclaus
241*942ab02bSAntoniu MiclausConfigure calibration gains:
242*942ab02bSAntoniu Miclaus
243*942ab02bSAntoniu Miclaus.. code-block:: bash
244*942ab02bSAntoniu Miclaus
245*942ab02bSAntoniu Miclaus        # Set current channel 0 calibration gain
246*942ab02bSAntoniu Miclaus        root:/sys/bus/iio/devices/iio:device0> echo 0x800000 > in_current0_calibscale
247*942ab02bSAntoniu Miclaus        # Set voltage channel 0 calibration gain
248*942ab02bSAntoniu Miclaus        root:/sys/bus/iio/devices/iio:device0> echo 0x7FFFFF > in_voltage0_calibscale
249*942ab02bSAntoniu Miclaus
250*942ab02bSAntoniu MiclausConfigure RMS voltage event thresholds (requires interrupts):
251*942ab02bSAntoniu Miclaus
252*942ab02bSAntoniu Miclaus.. code-block:: bash
253*942ab02bSAntoniu Miclaus
254*942ab02bSAntoniu Miclaus        # Set RMS sag detection threshold
255*942ab02bSAntoniu Miclaus        root:/sys/bus/iio/devices/iio:device0> echo 180000 > events/in_altvoltage0_rms_thresh_falling_value
256*942ab02bSAntoniu Miclaus        # Enable RMS sag detection
257*942ab02bSAntoniu Miclaus        root:/sys/bus/iio/devices/iio:device0> echo 1 > events/in_altvoltage0_rms_thresh_falling_en
258*942ab02bSAntoniu Miclaus
259*942ab02bSAntoniu Miclaus        # Set RMS swell detection threshold
260*942ab02bSAntoniu Miclaus        root:/sys/bus/iio/devices/iio:device0> echo 260000 > events/in_altvoltage0_rms_thresh_rising_value
261*942ab02bSAntoniu Miclaus        # Enable RMS swell detection
262*942ab02bSAntoniu Miclaus        root:/sys/bus/iio/devices/iio:device0> echo 1 > events/in_altvoltage0_rms_thresh_rising_en
263*942ab02bSAntoniu Miclaus
264*942ab02bSAntoniu Miclaus8. IIO Interfacing Tools
265*942ab02bSAntoniu Miclaus========================
266*942ab02bSAntoniu Miclaus
267*942ab02bSAntoniu MiclausSee ``Documentation/iio/iio_tools.rst`` for the description of the available IIO
268*942ab02bSAntoniu Miclausinterfacing tools.
269