For the complete documentation index, see llms.txt. This page is also available as Markdown.

CAN Bus

什麼是 CAN Bus

CAN(Controller Area Network)是一種為雜訊環境設計的有線通訊匯流排,最早用於汽車電子系統,現在也廣泛應用在飛控、感測器、GPS、ESC 與其他周邊之間的通訊。

在飛行器上,馬達、電調、電源模組與無線設備都可能產生明顯的電磁干擾,因此 CAN 之所以常被使用,關鍵就在於它在這類環境下通常比一般單端序列通訊更穩定。

CAN 的核心特性

CAN 最重要的特性,是它使用差動訊號共享匯流排架構。

這代表多個裝置可以共用同一組 CAN_H 與 CAN_L 線路,而接收端讀取的是兩條線之間的電位差,因此對共同受影響的雜訊有很強的抵抗能力。

差動訊號是什麼

CAN 使用兩條資料線:CAN_HCAN_L。傳輸時,這兩條線上的訊號會以相反方向變化,接收端不是只看某一條線的絕對電壓,而是看兩者之間的差值。

這種做法的好處是,若外部噪聲同時耦合到兩條線上,兩條線的共模雜訊大致相同,接收端在計算差值時便能大幅抵消這類干擾,因此 CAN 在電機、電調與高電流系統附近仍能維持不錯的可靠度。

CAN 與 UART / I2C 的差異

CAN 與 UART、I2C 都可用來連接飛控周邊,但用途與設計哲學不同。

介面
典型結構
優勢
常見用途

UART

點對點。

簡單、常見、容易配置。

GPS、遙測、接收機、除錯主控台。

I2C

多裝置共享兩線。

適合短距離板內或近距離感測器。

羅盤、氣壓計、簡單感測器。

CAN

多節點共享匯流排。

抗干擾強、較適合長距離與多周邊整合。

CAN GPS、CAN ESC、CAN 感測器、節點模組。

匯流排拓撲

CAN 是真正的多點匯流排。所有節點都掛在同一組主幹線上,任何節點都可能發送資料,而所有節點都能接收匯流排上的訊框。

在飛控應用中,常見做法是以串接方式把飛控、GPS、感測器、ESC 或其他節點依序接在同一條 CAN 主幹上,而不是像 UART 那樣每個裝置都拉一組獨立 TX/RX。

仲裁機制

因為多個節點共用同一條匯流排,CAN 協定本身內建訊息仲裁機制,讓裝置在同時想傳送資料時,能依訊框優先權決定誰先發送。

這也是 CAN 適合即時控制場景的原因之一。它不是靠簡單「先來先贏」的方式碰運氣,而是由協定層決定哪個訊息應優先保留在匯流排上。

終端電阻

一條正常的 CAN 匯流排,必須在實體兩端各放置一個 120 歐姆終端電阻

終端電阻的作用是吸收訊號反射,若沒有正確終端,訊號在纜線末端反射回來後,可能導致資料失真、節點忽隱忽現或通訊時好時壞。

如何判斷終端是否正確

如果匯流排的兩端各有一個 120 歐姆終端電阻,且整個系統斷電後量測 CAN_H 與 CAN_L 之間的電阻,通常應接近 60 歐姆,因為兩個 120 歐姆電阻是並聯關係。

這是現場排查非常實用的快速檢查方法。若量到大幅偏離 60 歐姆,通常表示終端數量不對、接線有誤,或某些節點的內建終端設定沒有配置正確。

常見終端錯誤

最常見的 CAN 問題,就是終端電阻配置錯誤。

典型情況包括:

  • 完全沒有終端,導致反射嚴重。

  • 每個節點都開啟終端,導致總阻抗過低。

  • 終端不在實體最末端,而是在中間節點。

正確原則很簡單:只有匯流排兩端需要終端,中間節點通常不應再加終端。

位元率

在常見飛控生態中,CAN 的常用位元率通常是 1 Mbps,這也是許多飛控韌體與 DroneCAN 周邊的常見預設值。

和 UART 不同,CAN 的位元率通常不需要頻繁修改;但所有節點必須使用同一個位元率,否則設定錯誤的裝置通常會在匯流排上完全不可見。

接頭與線材

在許多飛控系統中,CAN 常採用 4-pin JST-GH 接頭,典型腳位為 5V、CAN_H、CAN_L、GND。

不過接頭形式雖然常見,仍不保證所有裝置都完全相同;實際接線前,仍應確認該裝置的接腳定義、供電電壓與是否支援匯流排供電。

供電不是自動成立

CAN 線上常同時帶有 5V 與 GND,方便為低功耗周邊供電,但這不代表所有裝置都適合直接從匯流排取電。

若匯流排上節點數量多、線長較長,或某些裝置耗電偏高,供電壓降就可能讓周邊啟動不穩、反覆重開機或間歇離線,因此實作時應先做電流預算與線損評估。

為什麼 CAN 適合飛控周邊

對飛控周邊而言,CAN 的優勢不只是抗干擾而已。

常見優點包括:

  • 多個裝置共用同一條匯流排,擴充較方便。

  • 可提供裝置狀態回報,而不只是單向資料輸入。

  • 適合較長的配線距離與較高雜訊環境。

  • 可透過匯流排進行節點管理、參數設定與部分韌體更新。

DroneCAN 是什麼

在飛控應用中,CAN 只是底層實體與資料鏈路通訊方式;真正定義「資料內容怎麼表示、節點怎麼管理、參數怎麼配置」的,通常是像 DroneCAN 這類上層協定。

DroneCAN 可視為運行在 CAN 上方的應用層協定,它定義了標準化的訊息格式、節點管理方式、動態節點編號分配、參數存取與裝置韌體更新流程,使不同廠商的相容裝置更容易在同一條匯流排上協作。

Node ID

在 DroneCAN 架構中,每個節點都需要一個唯一的 Node ID,常見有效範圍是 1 到 127。

在許多飛控韌體中,節點編號可以由系統自動分配;這樣做可降低初次整合難度,但如果使用者手動指定編號,就必須避免不同裝置出現重複 Node ID,否則節點之間會互相干擾。

動態節點分配

動態節點分配的好處,是新裝置接上匯流排後,不一定需要先手動寫死編號,就能被飛控辨識與納入系統。

這對實際裝機很有幫助,尤其是同時整合多顆感測器或模組時;但若系統配置固定,仍常建議在確認運作正常後,把重要節點編號固定下來,降低後續重組網路時的變動風險。

冗餘 CAN

部分飛控與周邊支援第二組 CAN 介面,可建立冗餘通道,提升整體連線可靠度。

這不是所有系統都必須使用的功能,但對大型飛行器、關鍵任務載具或線路較長的系統來說,雙 CAN 架構能提供更高的容錯能力。

常見問題

CAN 匯流排的典型問題通常集中在幾個地方:

  • 缺少終端電阻:節點會偶爾出現又消失。

  • 終端太多:阻抗過低,通訊品質下降。

  • 位元率不一致:某些節點完全無法被看見。

  • Node ID 衝突:兩個節點使用同樣編號會互相干擾。

  • 供電不足:裝置可能不穩定、重開機或隨機離線。

  • 線材太長或布線不佳:雖然 CAN 抗干擾較強,但仍有物理極限。

建議排查順序

若 CAN 裝置無法正常工作,建議依下列順序檢查:

  1. 確認 CAN_H、CAN_L、5V、GND 接線方向正確。

  2. 確認匯流排兩端各有一個 120 歐姆終端電阻。

  3. 在系統斷電下量測 CAN_H 與 CAN_L 間阻值是否約為 60 歐姆。

  4. 確認所有節點位元率一致。

  5. 確認沒有重複的 Node ID。

  6. 確認匯流排供電足夠,尤其在多節點系統中。

  7. 必要時使用支援 CAN/DroneCAN 的監看工具查看是否有節點上線與訊框流量。

注意事項

注意: CAN 的接法是匯流排,不是星狀配線;若把多個節點從中心點大面積分叉出去,容易破壞匯流排特性並增加反射風險。

注意: 只有實體兩端應放終端電阻,不要因為每個裝置都內建終端,就全部啟用。

注意: CAN 比 UART 更耐雜訊,但不是完全不受配線影響;線長、接頭品質、電源品質與匯流排拓撲仍會直接影響可靠度。

最后更新于