ADIS16475 驱动程序

此驱动程序支持 SPI 总线上的 Analog Device 的 IMU。

1. 支持的设备

每个支持的设备都是一个精密、微型的微机电系统 (MEMS) 惯性测量单元 (IMU),其中包括三轴陀螺仪和三轴加速度计。IMU 设备中的每个惯性传感器都与信号调节相结合,从而优化动态性能。出厂校准会表征每个传感器的灵敏度、偏差、对齐、线性加速度(陀螺仪偏差)和撞击点(加速度计位置)。因此,每个传感器都具有动态补偿公式,可在各种条件下提供准确的传感器测量值。

2. 设备属性

始终提供加速度计和陀螺仪测量值。此外,该驱动程序还提供检索设备计算的增量角度和增量速度测量值的功能。

增量角度测量值表示每个样本更新之间的角位移计算,而增量速度测量值表示每个样本更新之间的线性速度变化计算。

最后,提供温度数据,该数据可显示 IMU 设备内部温度的粗略测量值。此数据对于监控热环境中的相对变化最有用。

每个惯性传感器(加速度计和陀螺仪)的信号链都包括应用独特的校正公式,这些公式来自对每个 ADIS 设备在 -40°C 至 +85°C 温度范围内的偏差、灵敏度、对齐、对线性加速度(陀螺仪)的响应和撞击点(加速度计位置)的广泛表征。这些校正公式是不可访问的,但用户有机会通过 calibbias 属性单独调整每个传感器的偏差。

每个 IIO 设备在 /sys/bus/iio/devices/iio:deviceX 下都有一个设备文件夹,其中 X 是设备的 IIO 索引。在这些文件夹下,驻留着一组设备文件,具体取决于所讨论的硬件设备的特性和功能。这些文件在 IIO ABI 文档中得到了统一的概括和记录。

下表显示了 adis16475 相关的设备文件,这些文件位于特定设备文件夹路径 /sys/bus/iio/devices/iio:deviceX 中。

3 轴加速度计相关设备文件

描述

in_accel_scale

加速度计通道的比例。

in_accel_x_calibbias

X 轴加速度计通道的校准偏移。

in_accel_x_raw

原始 X 轴加速度计通道值。

in_accel_y_calibbias

Y 轴加速度计通道的校准偏移。

in_accel_y_raw

原始 Y 轴加速度计通道值。

in_accel_z_calibbias

Z 轴加速度计通道的校准偏移。

in_accel_z_raw

原始 Z 轴加速度计通道值。

in_deltavelocity_scale

增量速度通道的比例。

in_deltavelocity_x_raw

原始 X 轴增量速度通道值。

in_deltavelocity_y_raw

原始 Y 轴增量速度通道值。

in_deltavelocity_z_raw

原始 Z 轴增量速度通道值。

3 轴陀螺仪相关设备文件

描述

in_anglvel_scale

陀螺仪通道的比例。

in_anglvel_x_calibbias

X 轴陀螺仪通道的校准偏移。

in_anglvel_x_raw

原始 X 轴陀螺仪通道值。

in_anglvel_y_calibbias

Y 轴陀螺仪通道的校准偏移。

in_anglvel_y_raw

原始 Y 轴陀螺仪通道值。

in_anglvel_z_calibbias

Z 轴陀螺仪通道的校准偏移。

in_anglvel_z_raw

原始 Z 轴陀螺仪通道值。

in_deltaangl_scale

增量角度通道的比例。

in_deltaangl_x_raw

原始 X 轴增量角度通道值。

in_deltaangl_y_raw

原始 Y 轴增量角度通道值。

in_deltaangl_z_raw

原始 Z 轴增量角度通道值。

温度传感器相关文件

描述

in_temp0_raw

原始温度通道值。

in_temp0_scale

温度传感器通道的比例。

杂项设备文件

描述

name

IIO 设备的名称。

sampling_frequency

当前选定的采样率。

filter_low_pass_3db_frequency

加速度计和陀螺仪通道的带宽。

下表显示了 adis16475 相关的设备调试文件,这些文件位于特定的设备调试文件夹路径 /sys/kernel/debug/iio/iio:deviceX 中。

Debugfs 设备文件

描述

serial_number

芯片的十六进制格式的序列号。

product_id

特定于芯片的产品 ID(例如 16475、16500、16505 等)。

flash_count

在设备上执行的闪存写入次数。

firmware_revision

包含以下格式的固件修订版的字符串 ##.##。

firmware_date

包含以下格式的固件日期的字符串 mm-dd-yyyy。

通道处理后的值

可以从其 _raw 属性读取通道值。返回的值是设备报告的原始值。要获取通道的处理值,请应用以下公式

processed value = (_raw + _offset) * _scale

其中 _offset 和 _scale 是设备属性。如果不存在 _offset 属性,则简单地假设其值为 0。

adis16475 驱动程序提供 5 种通道类型的数据,下表显示了 IIO 框架定义的处理值的测量单位

通道类型

测量单位

X、Y 和 Z 轴上的加速度

米/平方秒

X、Y 和 Z 轴上的角速度

弧度/秒

X、Y 和 Z 轴上的增量速度

米/秒

X、Y 和 Z 轴上的增量角度

弧度

温度

毫摄氏度

用法示例

显示设备名称

root:/sys/bus/iio/devices/iio:device0> cat name
adis16505-2

显示加速度计通道值

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 轴加速度 = in_accel_x_raw * in_accel_scale = -0.010209188 m/s^2

  • Y 轴加速度 = in_accel_y_raw * in_accel_scale = -1.115262214 m/s^2

  • Z 轴加速度 = in_accel_z_raw * in_accel_scale = 9.666833453 m/s^2

显示陀螺仪通道值

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 轴角速度 = in_anglvel_x_raw * in_anglvel_scale = -0.019947756 rad/s

  • Y 轴角速度 = in_anglvel_y_raw * in_anglvel_scale = 0.00802188 rad/s

  • Z 轴角速度 = in_anglvel_z_raw * in_anglvel_scale = -0.003617898 rad/s

设置加速度计通道的校准偏移

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

设置陀螺仪通道的校准偏移

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

设置采样频率

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

设置加速度计和陀螺仪的带宽

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

显示序列号

root:/sys/kernel/debug/iio/iio:device0> cat serial_number
0x04f9

显示产品 ID

root:/sys/kernel/debug/iio/iio:device0> cat product_id
16505

显示闪存计数

root:/sys/kernel/debug/iio/iio:device0> cat flash_count
150

显示固件修订版

root:/sys/kernel/debug/iio/iio:device0> cat firmware_revision
1.6

显示固件日期

root:/sys/kernel/debug/iio/iio:device0> cat firmware_date
06-27-2019

3. 设备缓冲区

此驱动程序支持 IIO 缓冲区。

所有设备都支持使用缓冲区检索原始加速度、陀螺仪和温度测量值。

以下设备系列还支持使用缓冲区检索增量速度、增量角度和温度测量值

  • ADIS16477

  • ADIS16500

  • ADIS16505

  • ADIS16507

但是,当使用缓冲区检索加速度或陀螺仪数据时,增量读数将不可用,反之亦然。

用法示例

在 current_trigger 中设置设备触发器(如果尚未设置)

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

选择要进行缓冲读取的通道

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

设置要存储在缓冲区中的样本数量

root:/sys/bus/iio/devices/iio:device0> echo 10 > buffer/length

启用缓冲区读取

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

获取缓冲数据

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.|
...

有关缓冲数据的结构方式的详细信息,请参见 Documentation/iio/iio_devbuf.rst

4. IIO 接口工具

有关可用 IIO 接口工具的描述,请参见 Documentation/iio/iio_tools.rst