3. 狀態與統計資料

適用於 IMU600-V2/韌體 0.11.2/GUI v1.6.1。

本頁依《通訊協定說明 v1.1》第 3 章、第 10–14 頁說明統計訊息。預設每秒提供三行 STAT、一行 FUS 與一行 SYS。從 fw 0.4.3 起,韌體會先在同一時間讀取統計數值,再由主迴圈依 STAT1 → STAT2 → STAT3 → FUS → SYS → HB(啟用時)的順序送出。雖然收到的時間不同,這些數值都對應同一個統計時間點。

以下編號從訊息名稱後開始;格式中的 <...>/XX 為佔位符,[...] 表示可選欄位,不是實際傳送字元。每行以 CRLF 結束,校驗範圍是 $ 與 * 之間的 ASCII 位元組。可用 $SPNVCMD,STAT,now 立即讀取一組。

3.1 $SPNVSTAT — 每顆 IMU 統計(每顆一行)

$SPNVSTAT,<id>,<dry>,<out>,<crc_err>,<frame_err>,<spi_timeout>,<dropped>,<dcnt_skip>,<dry_timeout>,<dry_kicks>,<dry_pin>,<isr_us_max>,<isr_us_last>,<isr_cpu>,<resync>[,<read_retry>,<read_bad>]*XX
# 欄位 說明 正常值/參考
1 id IMU 編號 1–3 1–3
2 dry DRY 中斷累計,約每秒 +1470;反映原始取樣數 ≈1470/s
3 out 輸出累計,每秒增加量應接近 RATE RATE/s
4 crc_err 內部 SPI 回應 CRC 錯誤,正常 0 0
5 frame_err 帶 S/CE/IDS 感測器旗標的 SPI 回應數;不是通訊錯誤次數 0
6 spi_timeout 內部 SPI 逾時累計,正常 0;fw 0.10.6 設 100 µs 0
7 dropped 取樣/輸出佇列滿而丟棄的累計,正常 0 0
8 dcnt_skip 感測器樣本計數不連續,可能漏讀或重讀,正常 0 0
9 dry_timeout 目前是否超過 100 ms 無 DRY:0 否、1 是 0
10 dry_kicks 解除 DRY 持續高態的額外讀取,手冊正常範例開機後固定 1 開機後固定 1
11 dry_pin DRY 現在電位 0/1,多為 0 多為 0
12 isr_us_max DRY ISR 最長執行時間(µs)。 ≈≤100 µs
13 isr_us_last 最近一次 DRY ISR 執行時間(µs)。 ≈≤100 µs
14 isr_cpu 最近 1 s 該顆 ISR 占 CPU 整數百分比,參考約 13% ≈13%
15 resync 輸出時間邊界重新對齊累計,正常 0 0
16 read_retry fw 0.10.6 起、僅 ASCII;首次 CRC 錯後立即重讀次數 0
17 read_bad fw 0.10.6 起、僅 ASCII;重讀仍失敗而丟棄的原始樣本數 0

dry、out 是從開機起的累計;要知道每秒增加多少,請將相鄰兩次讀到的累計值相減。dry_timeout 是目前狀態,並非逾時累計。fw 0.10.6 的內部 SPI 逾時為 100 µs,交換資料時短暫遮蔽中斷。read_retry/read_bad 自 fw 0.10.6 加在 ASCII 尾端,Binary STAT 沒有這兩欄;接收程式應能處理舊版缺少這兩欄的情況,也要容許新版在尾端增加欄位。

3.1.1 frame_err 增加時如何排查

GUI 的「感測器旗標」是 frame_err,計數單位是帶 S1:S0≠00、CE 或 IDS 的 SPI 回應封包數,不是獨立故障次數,也不直接表示線路品質。每個原始樣本有 7 個回應,同一次狀況可能增加 7;約 5 ms 的劇烈甩動增加 52,不等於 52 次獨立事件。通訊問題另看 crc_err/spi_timeout(GUI「SPI 錯誤」)。

PDF 板上測試:fw 0.4.3、2026-10-08 crc_err / spi_timeout frame_err
靜置 0 0,不增加
緩和搖晃,未超量程 0 0,不增加
劇烈甩動,峰值 >300 °/s 0 三顆各 +52(飽和)
原因/status 三顆同時? 判讀與處置
S_SAT / 16 通常會,承受相同運動 ±300 °/s/±156.9 m/s² 量程,濾波前峰值也算,平均值未超仍可飽和。Δθ/Δv 可能偏小。一般運轉持續增加時檢查馬達、槳、引擎高頻振動及減振;經常超量程需評估較大量程陀螺。
S_INIT / 32 是 開機/REINIT 後約 250 ms。短暫增加後固定通常正常;運轉中再次出現,查電源壓降引起的重置。資料不可信。
S_ERROR / 8 + IDS / 4 三顆:先查共用條件;一顆:先查元件 自我診斷異常,資料不可信。檢查 3.3 V/VDDIO 雜訊、壓降與溫度;REINIT 後仍持續,查該顆焊接與硬體。
CE / 2 — 無效感測器命令,資料本身仍有效但合併會依錯誤位元排除。正常不應出現,請回報原廠。
  1. 先看 crc_err/spi_timeout 是否也持續增加;有則先檢查通訊線路與時序。
  2. 確認是三顆同時增加,還是只有一顆增加。如果三顆同時發生,先檢查機體運動、振動、共用電源與溫度。
  3. 送 $SPNVCMD,OUT,raw,依 2.1.1 status 分辨 16、32、8/12。
  4. 合併一般排除 (status & 0x7F) ≠ 0 者,PPS 不算錯誤;三顆同時出錯會退回使用三顆。不能只因 FUSED 仍在輸出就認定正常,必須同看 RAW status。

3.2 $SPNVFUS — 合併統計

$SPNVFUS,<outputs>,<rej1>,<rej2>,<rej3>,<incomplete>,<degraded>,<gth>,<ath>*XX
# 欄位 型別/小數位 單位 說明
1 outputs 整數 — 合併輸出累計筆數。
2–4 rej1 / rej2 / rej3 整數 — 各顆被排除的輸出週期累計;原因是錯誤旗標或持續偏差,PPS 不列入。一般使用/手持擺動不應增加。
5 incomplete 整數 — 未收齊三顆資料即產生合併的累計次數。
6 degraded 整數 — 可用 IMU 少於 2 顆的累計次數。
7 gth 浮點 3 位 °/s 目前設定的陀螺排除門檻。
8 ath 浮點 3 位 m/s² 目前設定的加速度排除門檻。

3.3 $SPNVSYS — 系統統計

$SPNVSYS,<uart_drop>,<loops_per_s>,<isr_cpu_total>,<rate_hz>,<out_mode>,<uart_resets>,<pps_cnt>,<baro_samples>,<baro_i2c_err>,<baro_timeouts>,<baro_stale>,<baro_hz>,<proto_mode>,<baud>,<pps_state>,<u2_drop>,<trig_cnt>,<trig_rej>*XX
# 欄位 說明
1 uart_drop UART1 傳送佇列滿時整行/整幀丟棄數
2 loops_per_s 最近 1 s 主迴圈次數,手冊參考約 77000
3 isr_cpu_total 三顆 ISR 合計 CPU 百分比,參考約 40%
4 rate_hz 目前 IMU 輸出率
5 out_mode none / raw / fused / both
6 uart_resets UART 傳送停止回應後自動重置數,正常 0
7 pps_cnt PPS 原始擷取數,含雜訊;合格數看 SPNVPPS edges
8 baro_samples 成功氣壓樣本累計,每秒約增加 BRATE
9 baro_i2c_err I2C NACK/衝突累計,正常 0
10 baro_timeouts I2C 逾時後重初始化累計,正常 0
11 baro_stale 超過 200 ms 無新氣壓資料:1 是、0 否
12 baro_hz 氣壓輸出率
13 proto_mode ascii / binary
14 baud 目前 UART1 鮑率
15 pps_state 0 OFF / 1 NO_SIGNAL / 2 ACQUIRING / 3 LOCKED / 4 HOLDOVER
16 u2_drop UART2 佇列滿而丟棄整筆資料數
17 trig_cnt 觸發模式接受的上升緣數;連續模式不累加
18 trig_rej 小於 0.5 ms 的毛刺,或主迴圈忙碌使觸發事件佇列溢位而被排除的邊緣數

uart_drop 持續增加通常表示 UART1 輸出量超過頻寬;降低 RATE/輸出內容,或改用 binary/較高鮑率。baro_samples 預設約每秒 +50;baro_stale 是目前狀態而非累計。pps_state/u2_drop 自 fw 0.8.0 提供,trig_cnt/trig_rej 自 fw 0.9.0 提供。

以上是 ASCII 欄位順序。Binary SYS 的排列不同、out_mode/proto_mode 使用數值,而且沒有 baud 欄位,請依 Binary 封包表 解析。

3.4 $SPNVHB — 診斷心跳

提供原廠診斷資訊,內容採 key=value。一般應用可略過;啟用時每秒輸出一次。通訊協定 PDF 未列出固定 key 名稱、欄位順序或逐欄型別,因此不能將它視為與 STAT/SYS 相同的固定欄位封包。

以下僅為結構示意;<key>/<value>/[...] 不是裝置實際輸出的字元,也不表示 PDF 已公開診斷鍵值清單。

$SPNVHB,<key>=<value>[,<key>=<value>...]*XX
指令 說明
$SPNVCMD,HB,0 關閉診斷心跳。
$SPNVCMD,HB,1 開啟診斷心跳。

文件差異:通訊協定第 3.4 節寫「預設每秒輸出一次」,但使用手冊的參數表列 HB 預設為 0。兩份文件對預設開關不一致;整合時請明確設定 HB,0 或 HB,1,不要只根據有沒有收到 HB,就判斷主要資料輸出是否正常。

若要記錄診斷內容,先確認整行 XOR 正確,再保存 key=value。遇到不認識的 key,可保留原文或略過;不要假設每個欄位一定出現在固定位置。ASCII 解析範例見主機解析與整合。


原始文件:IMU600-V2 Communication Protocol v1.1 · PDF 頁 10–14

原文件逐頁閱讀 · 三份文件逐章對照與差異說明

回到本分類總覽 · 全部設定指南