ADIS16550 驱动程序¶
该驱动程序支持 Analog Device 基于 SPI 总线的 IMU。
1. 支持的设备¶
ADIS16550 是一个完整的惯性系统,包括三轴陀螺仪和三轴加速度计。出厂校准对每个传感器的灵敏度、偏差和对准进行特性化。因此,每个传感器都有自己的动态补偿公式,可提供准确的传感器测量值。
2. 设备属性¶
加速度计和陀螺仪测量始终提供。此外,驱动程序还提供检索设备计算的增量角度和增量速度测量值的功能。
增量角度测量表示每次采样更新之间的角位移计算,而增量速度测量表示每次采样更新之间的线性速度变化计算。
最后,提供了温度数据,显示了 IMU 设备内部温度的粗略测量。此数据对于监测热环境中相对变化最有用。
每个 IIO 设备在 /sys/bus/iio/devices/iio:deviceX
下都有一个设备文件夹,其中 X 是设备的 IIO 索引。这些文件夹下存放着一组设备文件,具体取决于所讨论的硬件设备的特性和功能。这些文件在 IIO ABI 文档中得到了统一的通用化和记录。
下表显示了在特定设备文件夹路径 /sys/bus/iio/devices/iio:deviceX
中找到的 adis16550 相关设备文件。
三轴加速度计相关设备文件 |
描述 |
in_accel_scale |
加速度计通道的刻度。 |
in_accel_filter_low_pass_3db_frequency |
加速度计通道的带宽。 |
in_accel_x_calibbias |
X 轴加速度计通道的校准偏移。 |
in_accel_x_calibscale |
X 轴加速度计通道的校准刻度。 |
in_accel_x_raw |
X 轴加速度计通道的原始值。 |
in_accel_y_calibbias |
Y 轴加速度计通道的校准偏移。 |
in_accel_y_calibscale |
Y 轴加速度计通道的校准刻度。 |
in_accel_y_raw |
Y 轴加速度计通道的原始值。 |
in_accel_z_calibbias |
Z 轴加速度计通道的校准偏移。 |
in_accel_z_calibscale |
Z 轴加速度计通道的校准刻度。 |
in_accel_z_raw |
Z 轴加速度计通道的原始值。 |
in_deltavelocity_scale |
增量速度通道的刻度。 |
in_deltavelocity_x_raw |
X 轴增量速度通道的原始值。 |
in_deltavelocity_y_raw |
Y 轴增量速度通道的原始值。 |
in_deltavelocity_z_raw |
Z 轴增量速度通道的原始值。 |
三轴陀螺仪相关设备文件 |
描述 |
in_anglvel_scale |
陀螺仪通道的刻度。 |
in_anglvel_filter_low_pass_3db_frequency |
陀螺仪通道的刻度。 |
in_anglvel_x_calibbias |
X 轴陀螺仪通道的校准偏移。 |
in_anglvel_x_calibscale |
X 轴陀螺仪通道的校准刻度。 |
in_anglvel_x_raw |
X 轴陀螺仪通道的原始值。 |
in_anglvel_y_calibbias |
Y 轴陀螺仪通道的校准偏移。 |
in_anglvel_y_calibscale |
Y 轴陀螺仪通道的校准刻度。 |
in_anglvel_y_raw |
Y 轴陀螺仪通道的原始值。 |
in_anglvel_z_calibbias |
Z 轴陀螺仪通道的校准偏移。 |
in_anglvel_z_calibscale |
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 |
温度传感器通道的刻度。 |
杂项设备文件 |
描述 |
名称 |
IIO 设备的名称。 |
sampling_frequency |
当前选定的采样率。 |
下表显示了在特定设备调试文件夹路径 /sys/kernel/debug/iio/iio:deviceX
中找到的 adis16550 相关设备调试文件。
Debugfs 设备文件 |
描述 |
serial_number |
芯片的序列号,十六进制格式。 |
product_id |
芯片特定的产品 ID (16550)。 |
flash_count |
设备上执行的闪存写入次数。 |
firmware_revision |
包含固件版本的字符串,格式为 ##.##。 |
firmware_date |
包含固件日期的字符串,格式为 mm-dd-yyyy。 |
通道处理值¶
可以从其 _raw 属性读取通道值。返回的值是设备报告的原始值。要获取通道的处理值,请应用以下公式
processed value = (_raw + _offset) * _scale
其中 _offset 和 _scale 是设备属性。如果不存在 _offset 属性,则假定其值为 0。
adis16550 驱动程序提供 5 种类型通道的数据,下表显示了处理值的测量单位,这些单位由 IIO 框架定义
通道类型 |
测量单位 |
X、Y 和 Z 轴上的加速度 |
米/秒² |
X、Y 和 Z 轴上的角速度 |
弧度/秒 |
X、Y 和 Z 轴上的增量速度 |
米/秒 |
X、Y 和 Z 轴上的增量角度 |
弧度 |
温度 |
毫摄氏度 |
使用示例¶
显示设备名称
root:/sys/bus/iio/devices/iio:device0> cat name
adis16550
显示加速度计通道值
root:/sys/bus/iio/devices/iio:device0> cat in_accel_x_raw
6903851
root:/sys/bus/iio/devices/iio:device0> cat in_accel_y_raw
5650550
root:/sys/bus/iio/devices/iio:device0> cat in_accel_z_raw
104873530
root:/sys/bus/iio/devices/iio:device0> cat in_accel_scale
0.000000095
X 轴加速度 = in_accel_x_raw * in_accel_scale = 0.655865845 米/秒²
Y 轴加速度 = in_accel_y_raw * in_accel_scale = 0.53680225 米/秒²
Z 轴加速度 = in_accel_z_raw * in_accel_scale = 9.96298535 米/秒²
显示陀螺仪通道值
root:/sys/bus/iio/devices/iio:device0> cat in_anglvel_x_raw
193309
root:/sys/bus/iio/devices/iio:device0> cat in_anglvel_y_raw
-763676
root:/sys/bus/iio/devices/iio:device0> cat in_anglvel_z_raw
-358108
root:/sys/bus/iio/devices/iio:device0> cat in_anglvel_scale
0.000000003
X 轴角速度 = in_anglvel_x_raw * in_anglvel_scale = 0.000579927 弧度/秒
Y 轴角速度 = in_anglvel_y_raw * in_anglvel_scale = −0.002291028 弧度/秒
Z 轴角速度 = in_anglvel_z_raw * in_anglvel_scale = −0.001074324 弧度/秒
设置加速度计通道的校准偏移
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
4000.000000
root:/sys/bus/iio/devices/iio:device0> echo 1000 > sampling_frequency
1000.000000
设置加速度计通道的带宽
root:/sys/bus/iio/devices/iio:device0> cat in_accel_filter_low_pass_3db_frequency
0
root:/sys/bus/iio/devices/iio:device0> echo 100 > in_accel_filter_low_pass_3db_frequency
root:/sys/bus/iio/devices/iio:device0> cat in_accel_filter_low_pass_3db_frequency
100
显示序列号
root:/sys/kernel/debug/iio/iio:device0> cat serial_number
0x000000b6
显示产品 ID
root:/sys/kernel/debug/iio/iio:device0> cat product_id
16550
显示闪存写入次数
root:/sys/kernel/debug/iio/iio:device0> cat flash_count
13
显示固件版本
root:/sys/kernel/debug/iio/iio:device0> cat firmware_revision
1.5
显示固件日期
root:/sys/kernel/debug/iio/iio:device0> cat firmware_date
28-04-2021
3. 设备缓冲区¶
该驱动程序支持 IIO 缓冲区。
该设备支持使用缓冲区检索原始加速度、陀螺仪、增量速度、增量角度和温度测量值。
然而,当使用缓冲区检索加速度或陀螺仪数据时,增量读数将不可用,反之亦然。这是因为设备一次只允许读取加速度和陀螺仪数据或增量速度和增量角度数据,并且在这两种突发数据选择模式之间切换非常耗时。
使用示例¶
在 current_trigger 中设置设备触发器(如果尚未设置)
root:/sys/bus/iio/devices/iio:device0> cat trigger/current_trigger
root:/sys/bus/iio/devices/iio:device0> echo adis16550-dev0 > trigger/current_trigger
root:/sys/bus/iio/devices/iio:device0> cat trigger/current_trigger
adis16550-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
...
0000cdf0 00 00 0d 2f 00 00 08 43 00 00 09 09 00 00 a4 5f |.../...C......._|
0000ce00 00 00 0d 2f 00 00 07 de 00 00 08 db 00 00 a4 4b |.../...........K|
0000ce10 00 00 0d 2f 00 00 07 58 00 00 08 a3 00 00 a4 55 |.../...X.......U|
0000ce20 00 00 0d 2f 00 00 06 d6 00 00 08 5c 00 00 a4 62 |.../.......\...b|
0000ce30 00 00 0d 2f 00 00 06 45 00 00 08 37 00 00 a4 47 |.../...E...7...G|
0000ce40 00 00 0d 2f 00 00 05 d4 00 00 08 30 00 00 a3 fa |.../.......0....|
0000ce50 00 00 0d 2f 00 00 05 d0 00 00 08 12 00 00 a3 d3 |.../............|
0000ce60 00 00 0d 2f 00 00 05 dd 00 00 08 2e 00 00 a3 e9 |.../............|
0000ce70 00 00 0d 2f 00 00 05 cc 00 00 08 51 00 00 a3 d5 |.../.......Q....|
0000ce80 00 00 0d 2f 00 00 05 ba 00 00 08 22 00 00 a3 9a |.../......."....|
0000ce90 00 00 0d 2f 00 00 05 9c 00 00 07 d9 00 00 a3 40 |.../...........@|
0000cea0 00 00 0d 2f 00 00 05 68 00 00 07 94 00 00 a2 e4 |.../...h........|
0000ceb0 00 00 0d 2f 00 00 05 25 00 00 07 8d 00 00 a2 ce |.../...%........|
...
有关缓冲数据结构的更多信息,请参阅 Documentation/iio/iio_devbuf.rst
。
4. IIO 接口工具¶
有关可用 IIO 接口工具的说明,请参阅 Documentation/iio/iio_tools.rst
。