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