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 | — | 無效感測器命令,資料本身仍有效但合併會依錯誤位元排除。正常不應出現,請回報原廠。 |
- 先看 crc_err/spi_timeout 是否也持續增加;有則先檢查通訊線路與時序。
- 確認是三顆同時增加,還是只有一顆增加。如果三顆同時發生,先檢查機體運動、振動、共用電源與溫度。
- 送
$SPNVCMD,OUT,raw,依 2.1.1 status 分辨 16、32、8/12。 - 合併一般排除 (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