ADIS16480 驱动程序

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

1. 支持的设备

每个支持的设备都是一个完整的惯性系统,包括一个三轴陀螺仪和一个三轴加速度计。设备中的每个惯性传感器都与信号调节相结合,以优化动态性能。出厂校准会表征每个传感器的灵敏度、偏置和对齐。因此,每个传感器都有自己的动态补偿公式,可提供准确的传感器测量值。

2. 设备属性

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

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

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

ADIS16480 和 ADIS16488 还提供对气压数据和三轴磁力计测量的访问。

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

下表显示了在特定设备文件夹路径 /sys/bus/iio/devices/iio:deviceX 中找到的 adis16480 相关设备文件。

仅适用于 ADIS16480 和 ADIS16488

3 轴磁力计相关设备文件

描述

in_magn_scale

磁力计通道的比例。

in_magn_x_calibbias

X 轴磁力计通道的校准偏移。

in_magn_x_filter_low_pass_3db_frequency

X 轴磁力计通道的带宽。

in_magn_x_raw

原始 X 轴磁力计通道值。

in_magn_y_calibbias

Y 轴磁力计通道的校准偏移。

in_magn_y_filter_low_pass_3db_frequency

Y 轴磁力计通道的带宽。

in_magn_y_raw

原始 Y 轴磁力计通道值。

in_magn_z_calibbias

Z 轴磁力计通道的校准偏移。

in_magn_z_filter_low_pass_3db_frequency

Z 轴磁力计通道的带宽。

in_magn_z_raw

原始 Z 轴磁力计通道值。

气压传感器相关文件

描述

in_pressure0_calibbias

气压通道的校准偏移。

in_pressure0_raw

原始气压通道值。

in_pressure0_scale

气压传感器通道的比例。

适用于所有支持的设备

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

描述

in_accel_scale

加速度计通道的比例。

in_accel_x_calibbias

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

in_accel_x_calibscale

X 轴加速度计通道的校准比例。

in_accel_x_filter_low_pass_3db_frequency

X 轴加速度计通道的带宽。

in_accel_x_raw

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

in_accel_y_calibbias

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

in_accel_y_calibscale

Y 轴加速度计通道的校准比例。

in_accel_y_filter_low_pass_3db_frequency

Y 轴加速度计通道的带宽。

in_accel_y_raw

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

in_accel_z_calibbias

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

in_accel_z_calibscale

Z 轴加速度计通道的校准比例。

in_accel_z_filter_low_pass_3db_frequency

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_calibscale

X 轴陀螺仪通道的校准比例。

in_anglvel_x_filter_low_pass_3db_frequency

X 轴陀螺仪通道的带宽。

in_anglvel_x_raw

原始 X 轴陀螺仪通道值。

in_anglvel_y_calibbias

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

in_anglvel_y_calibscale

Y 轴陀螺仪通道的校准比例。

in_anglvel_y_filter_low_pass_3db_frequency

Y 轴陀螺仪通道的带宽。

in_anglvel_y_raw

原始 Y 轴陀螺仪通道值。

in_anglvel_z_calibbias

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

in_anglvel_z_calibscale

Z 轴陀螺仪通道的校准比例。

in_anglvel_z_filter_low_pass_3db_frequency

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_offset

温度传感器通道的偏移。

in_temp0_scale

温度传感器通道的比例。

杂项设备文件

描述

name

IIO 设备的名称。

sampling_frequency

当前选定的采样率。

下表显示了在特定设备调试文件夹路径 /sys/kernel/debug/iio/iio:deviceX 中找到的 adis16480 相关设备调试文件。

Debugfs 设备文件

描述

serial_number

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

product_id

芯片特定产品 ID(例如 16480、16488、16545 等)。

flash_count

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

firmware_revision

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

firmware_date

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

通道处理后的值

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

processed value = (_raw + _offset) * _scale

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

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

通道类型

测量单位

X、Y 和 Z 轴上的加速度

米/秒平方

X、Y 和 Z 轴上的角速度

弧度/秒

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

米/秒

X、Y 和 Z 轴上的增量角

弧度

温度

毫摄氏度

沿 X、Y 和 Z 轴的磁场

高斯

气压

千帕

使用示例

显示设备名称

root:/sys/bus/iio/devices/iio:device0> cat name
adis16545-1

显示加速度计通道值

root:/sys/bus/iio/devices/iio:device0> cat in_accel_x_raw
1376728
root:/sys/bus/iio/devices/iio:device0> cat in_accel_y_raw
4487621
root:/sys/bus/iio/devices/iio:device0> cat in_accel_z_raw
262773792
root:/sys/bus/iio/devices/iio:device0> cat in_accel_scale
0.000000037
  • X 轴加速度 = in_accel_x_raw * in_accel_scale = 0.050938936 米/秒^2

  • Y 轴加速度 = in_accel_y_raw * in_accel_scale = 0.166041977 米/秒^2

  • Z 轴加速度 = in_accel_z_raw * in_accel_scale = 9.722630304 米/秒^2

显示陀螺仪通道值

root:/sys/bus/iio/devices/iio:device0> cat in_anglvel_x_raw
-1041702
root:/sys/bus/iio/devices/iio:device0> cat in_anglvel_y_raw
-273013
root:/sys/bus/iio/devices/iio:device0> cat in_anglvel_z_raw
2745116
root:/sys/bus/iio/devices/iio:device0> cat in_anglvel_scale
0.000000001
  • X 轴角速度 = in_anglvel_x_raw * in_anglvel_scale = −0.001041702 弧度/秒

  • Y 轴角速度 = in_anglvel_y_raw * in_anglvel_scale = −0.000273013 弧度/秒

  • Z 轴角速度 = in_anglvel_z_raw * in_anglvel_scale = 0.002745116 弧度/秒

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

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
4250.000000

root:/sys/bus/iio/devices/iio:device0> echo 1000 > sampling_frequency
1062.500000

设置加速度计通道的带宽

root:/sys/bus/iio/devices/iio:device0> cat in_accel_x_filter_low_pass_3db_frequency
0

root:/sys/bus/iio/devices/iio:device0> echo 300 > in_accel_x_filter_low_pass_3db_frequency
root:/sys/bus/iio/devices/iio:device0> cat in_accel_x_filter_low_pass_3db_frequency
300

显示序列号

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

显示产品 ID

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

显示闪存计数

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

显示固件修订

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

显示固件日期

root:/sys/kernel/debug/iio/iio:device0> cat firmware_date
09-23-2023

3. 设备缓冲区

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

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

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

  • ADIS16545

  • ADIS16547

但是,当使用缓冲区检索加速度或陀螺仪数据时,将不会提供增量读数,反之亦然。这是因为设备一次只允许读取加速度和陀螺仪数据或增量速度和增量角度数据,并且在这两种突发数据选择模式之间切换非常耗时。

使用示例

如果尚未设置,则在 current_trigger 中设置设备触发器

root:/sys/bus/iio/devices/iio:device0> cat trigger/current_trigger

root:/sys/bus/iio/devices/iio:device0> echo adis16545-1-dev0 > trigger/current_trigger
root:/sys/bus/iio/devices/iio:device0> cat trigger/current_trigger
adis16545-1-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
...
00006aa0  09 62 00 00 ff ff fc a4  00 00 01 69 00 03 3c 08  |.b.........i..<.|
00006ab0  09 61 00 00 00 00 02 96  00 00 02 8f 00 03 37 50  |.a............7P|
00006ac0  09 61 00 00 00 00 12 3d  00 00 0b 89 00 03 2c 0b  |.a.....=......,.|
00006ad0  09 61 00 00 00 00 1e dc  00 00 16 dd 00 03 25 bf  |.a............%.|
00006ae0  09 61 00 00 00 00 1e e3  00 00 1b bf 00 03 27 0b  |.a............'.|
00006af0  09 61 00 00 00 00 15 50  00 00 19 44 00 03 30 fd  |.a.....P...D..0.|
00006b00  09 61 00 00 00 00 09 0e  00 00 14 41 00 03 3d 7f  |.a.........A..=.|
00006b10  09 61 00 00 ff ff ff f0  00 00 0e bc 00 03 48 d0  |.a............H.|
00006b20  09 63 00 00 00 00 00 9f  00 00 0f 37 00 03 4c fe  |.c.........7..L.|
00006b30  09 64 00 00 00 00 0b f6  00 00 18 92 00 03 43 22  |.d............C"|
00006b40  09 64 00 00 00 00 18 df  00 00 22 33 00 03 33 ab  |.d........"3..3.|
00006b50  09 63 00 00 00 00 1e 81  00 00 26 be 00 03 29 60  |.c........&...)`|
00006b60  09 63 00 00 00 00 1b 13  00 00 22 2f 00 03 23 91  |.c........"/..#.|
...

有关缓冲数据结构的更多信息,请参见 Documentation/iio/iio_devbuf.rst

4. IIO 接口工具

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