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
。