> For the complete documentation index, see [llms.txt](https://taiphoon-com.gitbook.io/taiphoon.com-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://taiphoon-com.gitbook.io/taiphoon.com-docs/knowledge-base/can-bus.md).

# CAN Bus

### 什麼是 CAN Bus <a href="#can-bus" id="can-bus"></a>

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

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

### CAN 的核心特性 <a href="#can" id="can"></a>

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

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

### 差動訊號是什麼 <a href="#undefined" id="undefined"></a>

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

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

### CAN 與 UART / I2C 的差異 <a href="#can--uart--i2c" id="can--uart--i2c"></a>

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

| 介面   | 典型結構      | 優勢                 | 常見用途                          |
| ---- | --------- | ------------------ | ----------------------------- |
| UART | 點對點。      | 簡單、常見、容易配置。        | GPS、遙測、接收機、除錯主控台。             |
| I2C  | 多裝置共享兩線。  | 適合短距離板內或近距離感測器。    | 羅盤、氣壓計、簡單感測器。                 |
| CAN  | 多節點共享匯流排。 | 抗干擾強、較適合長距離與多周邊整合。 | CAN GPS、CAN ESC、CAN 感測器、節點模組。 |

### 匯流排拓撲 <a href="#undefined" id="undefined"></a>

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

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

### 仲裁機制 <a href="#undefined" id="undefined"></a>

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

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

### 終端電阻 <a href="#undefined" id="undefined"></a>

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

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

### 如何判斷終端是否正確 <a href="#undefined" id="undefined"></a>

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

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

### 常見終端錯誤 <a href="#undefined" id="undefined"></a>

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

典型情況包括：

* 完全沒有終端，導致反射嚴重。
* 每個節點都開啟終端，導致總阻抗過低。
* 終端不在實體最末端，而是在中間節點。

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

### 位元率 <a href="#undefined" id="undefined"></a>

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

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

### 接頭與線材 <a href="#undefined" id="undefined"></a>

在許多飛控系統中，CAN 常採用 **4-pin JST-GH** 接頭，典型腳位為 5V、CAN\_H、CAN\_L、GND。

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

### 供電不是自動成立 <a href="#undefined" id="undefined"></a>

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

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

### 為什麼 CAN 適合飛控周邊 <a href="#can" id="can"></a>

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

常見優點包括：

* 多個裝置共用同一條匯流排，擴充較方便。
* 可提供裝置狀態回報，而不只是單向資料輸入。
* 適合較長的配線距離與較高雜訊環境。
* 可透過匯流排進行節點管理、參數設定與部分韌體更新。

### DroneCAN 是什麼 <a href="#dronecan" id="dronecan"></a>

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

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

### Node ID <a href="#node-id" id="node-id"></a>

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

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

### 動態節點分配 <a href="#undefined" id="undefined"></a>

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

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

### 冗餘 CAN <a href="#can" id="can"></a>

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

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

### 常見問題 <a href="#undefined" id="undefined"></a>

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

* **缺少終端電阻**：節點會偶爾出現又消失。
* **終端太多**：阻抗過低，通訊品質下降。
* **位元率不一致**：某些節點完全無法被看見。
* **Node ID 衝突**：兩個節點使用同樣編號會互相干擾。
* **供電不足**：裝置可能不穩定、重開機或隨機離線。
* **線材太長或布線不佳**：雖然 CAN 抗干擾較強，但仍有物理極限。

### 建議排查順序 <a href="#undefined" id="undefined"></a>

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

1. 確認 CAN\_H、CAN\_L、5V、GND 接線方向正確。
2. 確認匯流排兩端各有一個 120 歐姆終端電阻。
3. 在系統斷電下量測 CAN\_H 與 CAN\_L 間阻值是否約為 60 歐姆。
4. 確認所有節點位元率一致。
5. 確認沒有重複的 Node ID。
6. 確認匯流排供電足夠，尤其在多節點系統中。
7. 必要時使用支援 CAN/DroneCAN 的監看工具查看是否有節點上線與訊框流量。

### 注意事項 <a href="#undefined" id="undefined"></a>

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

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

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