| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384 |
- .. SPDX-License-Identifier: GPL-2.0
- ================
- ADIS16475 driver
- ================
- This driver supports Analog Device's IMUs on SPI bus.
- 1. Supported devices
- ====================
- * `ADIS16465 <https://www.analog.com/ADIS16465>`_
- * `ADIS16467 <https://www.analog.com/ADIS16467>`_
- * `ADIS16470 <https://www.analog.com/ADIS16470>`_
- * `ADIS16475 <https://www.analog.com/ADIS16475>`_
- * `ADIS16477 <https://www.analog.com/ADIS16477>`_
- * `ADIS16500 <https://www.analog.com/ADIS16500>`_
- * `ADIS16505 <https://www.analog.com/ADIS16505>`_
- * `ADIS16507 <https://www.analog.com/ADIS16507>`_
- Each supported device is a precision, miniature microelectromechanical system
- (MEMS) inertial measurement unit (IMU) that includes a triaxial gyroscope and a
- triaxial accelerometer. Each inertial sensor in the IMU device combines with
- signal conditioning that optimizes dynamic performance. The factory calibration
- characterizes each sensor for sensitivity, bias, alignment, linear acceleration
- (gyroscope bias), and point of percussion (accelerometer location). As a result,
- each sensor has dynamic compensation formulas that provide accurate sensor
- measurements over a broad set of conditions.
- 2. Device attributes
- ====================
- Accelerometer, gyroscope measurements are always provided. Furthermore, the
- driver offers the capability to retrieve the delta angle and the delta velocity
- measurements computed by the device.
- The delta angle measurements represent a calculation of angular displacement
- between each sample update, while the delta velocity measurements represent a
- calculation of linear velocity change between each sample update.
- Finally, temperature data are provided which show a coarse measurement of
- the temperature inside of the IMU device. This data is most useful for
- monitoring relative changes in the thermal environment.
- The signal chain of each inertial sensor (accelerometers and gyroscopes)
- includes the application of unique correction formulas, which are derived from
- extensive characterization of bias, sensitivity, alignment, response to linear
- acceleration (gyroscopes), and point of percussion (accelerometer location)
- over a temperature range of −40°C to +85°C, for each ADIS device. These
- correction formulas are not accessible, but users do have the opportunity to
- adjust the bias for each sensor individually through the calibbias attribute.
- 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 questions. These files are consistently generalized and documented in
- the IIO ABI documentation.
- The following tables show the adis16475 related device files, found in the
- specific device folder path ``/sys/bus/iio/devices/iio:deviceX``.
- +-------------------------------------------+----------------------------------------------------------+
- | 3-Axis Accelerometer related device files | Description |
- +-------------------------------------------+----------------------------------------------------------+
- | in_accel_scale | Scale for the accelerometer channels. |
- +-------------------------------------------+----------------------------------------------------------+
- | in_accel_x_calibbias | Calibration offset for the X-axis accelerometer channel. |
- +-------------------------------------------+----------------------------------------------------------+
- | in_accel_x_raw | Raw X-axis accelerometer channel value. |
- +-------------------------------------------+----------------------------------------------------------+
- | in_accel_y_calibbias | Calibration offset for the Y-axis accelerometer channel. |
- +-------------------------------------------+----------------------------------------------------------+
- | in_accel_y_raw | Raw Y-axis accelerometer channel value. |
- +-------------------------------------------+----------------------------------------------------------+
- | in_accel_z_calibbias | Calibration offset for the Z-axis accelerometer channel. |
- +-------------------------------------------+----------------------------------------------------------+
- | in_accel_z_raw | Raw Z-axis accelerometer channel value. |
- +-------------------------------------------+----------------------------------------------------------+
- | in_deltavelocity_scale | Scale for delta velocity channels. |
- +-------------------------------------------+----------------------------------------------------------+
- | in_deltavelocity_x_raw | Raw X-axis delta velocity channel value. |
- +-------------------------------------------+----------------------------------------------------------+
- | in_deltavelocity_y_raw | Raw Y-axis delta velocity channel value. |
- +-------------------------------------------+----------------------------------------------------------+
- | in_deltavelocity_z_raw | Raw Z-axis delta velocity channel value. |
- +-------------------------------------------+----------------------------------------------------------+
- +---------------------------------------+------------------------------------------------------+
- | 3-Axis Gyroscope related device files | Description |
- +---------------------------------------+------------------------------------------------------+
- | in_anglvel_scale | Scale for the gyroscope channels. |
- +---------------------------------------+------------------------------------------------------+
- | in_anglvel_x_calibbias | Calibration offset for the X-axis gyroscope channel. |
- +---------------------------------------+------------------------------------------------------+
- | in_anglvel_x_raw | Raw X-axis gyroscope channel value. |
- +---------------------------------------+------------------------------------------------------+
- | in_anglvel_y_calibbias | Calibration offset for the Y-axis gyroscope channel. |
- +---------------------------------------+------------------------------------------------------+
- | in_anglvel_y_raw | Raw Y-axis gyroscope channel value. |
- +---------------------------------------+------------------------------------------------------+
- | in_anglvel_z_calibbias | Calibration offset for the Z-axis gyroscope channel. |
- +---------------------------------------+------------------------------------------------------+
- | in_anglvel_z_raw | Raw Z-axis gyroscope channel value. |
- +---------------------------------------+------------------------------------------------------+
- | in_deltaangl_scale | Scale for delta angle channels. |
- +---------------------------------------+------------------------------------------------------+
- | in_deltaangl_x_raw | Raw X-axis delta angle channel value. |
- +---------------------------------------+------------------------------------------------------+
- | in_deltaangl_y_raw | Raw Y-axis delta angle channel value. |
- +---------------------------------------+------------------------------------------------------+
- | in_deltaangl_z_raw | Raw Z-axis delta angle channel value. |
- +---------------------------------------+------------------------------------------------------+
- +----------------------------------+-------------------------------------------+
- | Temperature sensor related files | Description |
- +----------------------------------+-------------------------------------------+
- | in_temp0_raw | Raw temperature channel value. |
- +----------------------------------+-------------------------------------------+
- | in_temp0_scale | Scale for the temperature sensor channel. |
- +----------------------------------+-------------------------------------------+
- +-------------------------------+---------------------------------------------------------+
- | Miscellaneous device files | Description |
- +-------------------------------+---------------------------------------------------------+
- | name | Name of the IIO device. |
- +-------------------------------+---------------------------------------------------------+
- | sampling_frequency | Currently selected sample rate. |
- +-------------------------------+---------------------------------------------------------+
- | filter_low_pass_3db_frequency | Bandwidth for the accelerometer and gyroscope channels. |
- +-------------------------------+---------------------------------------------------------+
- The following table shows the adis16475 related device debug files, found in the
- specific device debug folder path ``/sys/kernel/debug/iio/iio:deviceX``.
- +----------------------+-------------------------------------------------------------------------+
- | Debugfs device files | Description |
- +----------------------+-------------------------------------------------------------------------+
- | serial_number | The serial number of the chip in hexadecimal format. |
- +----------------------+-------------------------------------------------------------------------+
- | product_id | Chip specific product id (e.g. 16475, 16500, 16505, etc.). |
- +----------------------+-------------------------------------------------------------------------+
- | flash_count | The number of flash writes performed on the device. |
- +----------------------+-------------------------------------------------------------------------+
- | firmware_revision | String containing the firmware revision in the following format ##.##. |
- +----------------------+-------------------------------------------------------------------------+
- | firmware_date | String containing the firmware date in the following format mm-dd-yyyy. |
- +----------------------+-------------------------------------------------------------------------+
- Channels processed values
- -------------------------
- A channel value can be read from its _raw attribute. The value returned is the
- raw value as reported by the devices. To get the processed value of the channel,
- apply the following formula:
- .. code-block:: bash
- processed value = (_raw + _offset) * _scale
- Where _offset and _scale are device attributes. If no _offset attribute is
- present, simply assume its value is 0.
- The adis16475 driver offers data for 5 types of channels, the table below shows
- the measurement units for the processed value, which are defined by the IIO
- framework:
- +-------------------------------------+---------------------------+
- | Channel type | Measurement unit |
- +-------------------------------------+---------------------------+
- | Acceleration on X, Y, and Z axis | Meters per Second squared |
- +-------------------------------------+---------------------------+
- | Angular velocity on X, Y and Z axis | Radians per second |
- +-------------------------------------+---------------------------+
- | Delta velocity on X. Y, and Z axis | Meters per Second |
- +-------------------------------------+---------------------------+
- | Delta angle on X, Y, and Z axis | Radians |
- +-------------------------------------+---------------------------+
- | Temperature | Millidegrees Celsius |
- +-------------------------------------+---------------------------+
- Usage examples
- --------------
- Show device name:
- .. code-block:: bash
- root:/sys/bus/iio/devices/iio:device0> cat name
- adis16505-2
- Show accelerometer channels value:
- .. code-block:: bash
- root:/sys/bus/iio/devices/iio:device0> cat in_accel_x_raw
- -275924
- root:/sys/bus/iio/devices/iio:device0> cat in_accel_y_raw
- -30142222
- root:/sys/bus/iio/devices/iio:device0> cat in_accel_z_raw
- 261265769
- root:/sys/bus/iio/devices/iio:device0> cat in_accel_scale
- 0.000000037
- - X-axis acceleration = in_accel_x_raw * in_accel_scale = −0.010209188 m/s^2
- - Y-axis acceleration = in_accel_y_raw * in_accel_scale = −1.115262214 m/s^2
- - Z-axis acceleration = in_accel_z_raw * in_accel_scale = 9.666833453 m/s^2
- Show gyroscope channels value:
- .. code-block:: bash
- root:/sys/bus/iio/devices/iio:device0> cat in_anglvel_x_raw
- -3324626
- root:/sys/bus/iio/devices/iio:device0> cat in_anglvel_y_raw
- 1336980
- root:/sys/bus/iio/devices/iio:device0> cat in_anglvel_z_raw
- -602983
- root:/sys/bus/iio/devices/iio:device0> cat in_anglvel_scale
- 0.000000006
- - X-axis angular velocity = in_anglvel_x_raw * in_anglvel_scale = −0.019947756 rad/s
- - Y-axis angular velocity = in_anglvel_y_raw * in_anglvel_scale = 0.00802188 rad/s
- - Z-axis angular velocity = in_anglvel_z_raw * in_anglvel_scale = −0.003617898 rad/s
- Set calibration offset for accelerometer channels:
- .. code-block:: bash
- root:/sys/bus/iio/devices/iio:device0> cat in_accel_x_calibbias
- 0
- root:/sys/bus/iio/devices/iio:device0> echo 5000 > in_accel_x_calibbias
- root:/sys/bus/iio/devices/iio:device0> cat in_accel_x_calibbias
- 5000
- Set calibration offset for gyroscope channels:
- .. code-block:: bash
- root:/sys/bus/iio/devices/iio:device0> cat in_anglvel_y_calibbias
- 0
- root:/sys/bus/iio/devices/iio:device0> echo -5000 > in_anglvel_y_calibbias
- root:/sys/bus/iio/devices/iio:device0> cat in_anglvel_y_calibbias
- -5000
- Set sampling frequency:
- .. code-block:: bash
- root:/sys/bus/iio/devices/iio:device0> cat sampling_frequency
- 2000.000000
- root:/sys/bus/iio/devices/iio:device0> echo 1000 > sampling_frequency
- 1000.000000
- Set bandwidth for accelerometer and gyroscope:
- .. code-block:: bash
- root:/sys/bus/iio/devices/iio:device0> cat filter_low_pass_3db_frequency
- 720
- root:/sys/bus/iio/devices/iio:device0> echo 360 > filter_low_pass_3db_frequency
- root:/sys/bus/iio/devices/iio:device0> cat filter_low_pass_3db_frequency
- 360
- Show serial number:
- .. code-block:: bash
- root:/sys/kernel/debug/iio/iio:device0> cat serial_number
- 0x04f9
- Show product id:
- .. code-block:: bash
- root:/sys/kernel/debug/iio/iio:device0> cat product_id
- 16505
- Show flash count:
- .. code-block:: bash
- root:/sys/kernel/debug/iio/iio:device0> cat flash_count
- 150
- Show firmware revision:
- .. code-block:: bash
- root:/sys/kernel/debug/iio/iio:device0> cat firmware_revision
- 1.6
- Show firmware date:
- .. code-block:: bash
- root:/sys/kernel/debug/iio/iio:device0> cat firmware_date
- 06-27-2019
- 3. Device buffers
- =================
- This driver supports IIO buffers.
- All devices support retrieving the raw acceleration, gyroscope and temperature
- measurements using buffers.
- The following device families also support retrieving the delta velocity, delta
- angle and temperature measurements using buffers:
- - ADIS16477
- - ADIS16500
- - ADIS16505
- - ADIS16507
- However, when retrieving acceleration or gyroscope data using buffers, delta
- readings will not be available and vice versa.
- Usage examples
- --------------
- Set device trigger in current_trigger, if not already set:
- .. code-block:: bash
- root:/sys/bus/iio/devices/iio:device0> cat trigger/current_trigger
- root:/sys/bus/iio/devices/iio:device0> echo adis16505-2-dev0 > trigger/current_trigger
- root:/sys/bus/iio/devices/iio:device0> cat trigger/current_trigger
- adis16505-2-dev0
- Select channels for buffer read:
- .. code-block:: bash
- root:/sys/bus/iio/devices/iio:device0> echo 1 > scan_elements/in_deltavelocity_x_en
- root:/sys/bus/iio/devices/iio:device0> echo 1 > scan_elements/in_deltavelocity_y_en
- root:/sys/bus/iio/devices/iio:device0> echo 1 > scan_elements/in_deltavelocity_z_en
- root:/sys/bus/iio/devices/iio:device0> echo 1 > scan_elements/in_temp0_en
- Set the number of samples to be stored in the buffer:
- .. code-block:: bash
- root:/sys/bus/iio/devices/iio:device0> echo 10 > buffer/length
- Enable buffer readings:
- .. code-block:: bash
- root:/sys/bus/iio/devices/iio:device0> echo 1 > buffer/enable
- Obtain buffered data:
- .. code-block:: bash
- root:/sys/bus/iio/devices/iio:device0> hexdump -C /dev/iio\:device0
- ...
- 00001680 01 1f 00 00 ff ff fe ef 00 00 47 bf 00 03 35 55 |..........G...5U|
- 00001690 01 1f 00 00 ff ff ff d9 00 00 46 f1 00 03 35 35 |..........F...55|
- 000016a0 01 1f 00 00 ff ff fe fc 00 00 46 cb 00 03 35 7b |..........F...5{|
- 000016b0 01 1f 00 00 ff ff fe 41 00 00 47 0d 00 03 35 8b |.......A..G...5.|
- 000016c0 01 1f 00 00 ff ff fe 37 00 00 46 b4 00 03 35 90 |.......7..F...5.|
- 000016d0 01 1d 00 00 ff ff fe 5a 00 00 45 d7 00 03 36 08 |.......Z..E...6.|
- 000016e0 01 1b 00 00 ff ff fe fb 00 00 45 e7 00 03 36 60 |..........E...6`|
- 000016f0 01 1a 00 00 ff ff ff 17 00 00 46 bc 00 03 36 de |..........F...6.|
- 00001700 01 1a 00 00 ff ff fe 59 00 00 46 d7 00 03 37 b8 |.......Y..F...7.|
- 00001710 01 1a 00 00 ff ff fe ae 00 00 46 95 00 03 37 ba |..........F...7.|
- 00001720 01 1a 00 00 ff ff fe c5 00 00 46 63 00 03 37 9f |..........Fc..7.|
- 00001730 01 1a 00 00 ff ff fe 55 00 00 46 89 00 03 37 c1 |.......U..F...7.|
- 00001740 01 1a 00 00 ff ff fe 31 00 00 46 aa 00 03 37 f7 |.......1..F...7.|
- ...
- See ``Documentation/iio/iio_devbuf.rst`` for more information about how buffered
- data is structured.
- 4. IIO Interfacing Tools
- ========================
- See ``Documentation/iio/iio_tools.rst`` for the description of the available IIO
- interfacing tools.
|