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。