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
。