# 7. 如何設計一個「好的電控系統」

## 7. 如何設計一個「好的電控系統」

### 7.1 穩定性

**硬體穩定性**：
- **去耦電容（Decoupling Capacitor）**：每個 IC 電源腳旁放 100nF + 10μF，濾除高頻雜訊
- **保護電路**：TVS 二極體保護 GPIO 輸入，防止靜電和高壓脈衝
- **電源設計**：使用低壓差穩壓（LDO）或 DC-DC，確保 MCU 電源在 HV 切換時不抖動
- **PCB Layout**：類比訊號遠離高頻數位線；差分對等長走線；CAN Bus 終端電阻靠近連接器

**軟體穩定性**：
- **Watchdog Timer**：啟用 Hardware Watchdog，若程式超時未餵狗 → 自動 Reset（搭配 AMS_OK 硬體設計）
- **Stack Overflow 保護**：設定 Stack Canary
- **ROM/Flash 校驗**：上電時校驗程式完整性（CRC 校驗）

### 7.2 安全性

**電氣安全**：
- 所有超過 60V 的裸露導體必須有絕緣保護或物理隔離
- HV 接線使用橙色（FSAE 賽車 HV 線束標準色）
- HV 連接器使用不同於 LV 的物理形式，防止誤插

**功能安全**：
- 關鍵感測器（油門踏板、煞車）使用**雙通道冗餘設計**（兩個獨立感測器，互相比對）
- 單點故障分析（FMEA）：列出所有可能的單點故障，確認每個都有對應的 Fail-safe 處理

### 7.3 可維護性

> 這是新人最容易忽略的部分，但也是讓車隊長期競爭力的關鍵。

**硬體可維護性**：
- 每條線束貼標籤，標明起點、終點、功能
- 使用快拆連接器（如 Deutsch DT/DTM 系列）而非直接焊接
- 關鍵節點（SDC 各節點、CAN Bus）設計測試點（Test Point）

**軟體可維護性**：
- 使用版本控制（Git）管理所有程式碼
- 重要變數（閾值、超時時間）定義為 `#define` 常數，集中在一個 config 文件
- 寫清楚的 commit message，讓半年後的你（或下一屆學弟妹）看得懂當時為什麼這樣改

### 7.4 Debug 能力

**設計時就要為 Debug 準備**：

- **CAN 數據 Log**：使用 CAN Logger（或 Raspberry Pi + candump）記錄所有 CAN 訊息，比賽後可以回放分析
- **LED 狀態指示**：每個關鍵狀態（SDC 狀態、各 AIR 狀態、Fault 碼）用 LED 指示，不用接示波器就能知道系統狀態
- **Serial Debug Output**：保留一個 UART 接口，可以輸出系統狀態和故障記錄
- **Fault Code 設計**：定義數字故障碼，儲存在 EEPROM 或 Flash，斷電後仍可讀取

> 💡 **學長心得**：「只在實驗室能 Debug 的系統，不是好系統。」賽場上你沒有示波器、沒有電腦，你需要能在 5 分鐘內靠 LED 和 CAN 讀值判斷問題出在哪裡。這種設計能力要從一開始就建立。

### 小結

好的電控系統不是功能最多的，而是**最可預期的**：在任何條件下，你都知道它會做什麼，為什麼這樣做。設計的每一個決策都要能回答：「如果這裡壞了，會發生什麼？」

---