6. 通訊與控制策略 6. 通訊與控制策略 6.1 CAN 設計(ID 規劃) CAN ID 規劃原則 : 優先級 用途 ID 範圍(建議) 高(低 ID) 安全相關(SDC 狀態、AMS Fault) 0x001–0x0FF 中 控制指令(扭矩命令、模式切換) 0x100–0x2FF 低 監測數據(電壓、溫度、速度) 0x300–0x5FF 最低 儀表顯示、Log 數據 0x600–0x7FF 為什麼這樣分 :CAN 是基於 ID 仲裁的, ID 越小,優先級越高 。安全相關訊息必須在 Bus 繁忙時仍能優先傳輸。 CAN 訊息設計範例(AMS 狀態) : CAN ID: 0x050(高優先) DLC: 8 bytes Byte 0: Status(0x00=OK, 0x01=OV, 0x02=UV, 0x03=OT, 0xFF=Fault) Byte 1: Max Cell Voltage [LSB = 1 mV](高 8 bits) Byte 2: Max Cell Voltage(低 8 bits) Byte 3: Min Cell Voltage(高 8 bits) Byte 4: Min Cell Voltage(低 8 bits) Byte 5: Max Temperature [°C, offset -40] Byte 6: SOC [0–100%] Byte 7: Fault Code(詳細故障碼) 發送頻率設計 : 安全狀態訊息:10–50 ms(快速更新) 控制指令:5–10 ms 監測數據:50–100 ms 儀表數據:100–500 ms 6.2 故障處理(Fail-safe) Fail-safe 設計哲學 : 通訊中斷或數據異常時,系統應進入最安全的狀態,而不是繼續運行。 CAN 超時偵測 : // 偽碼示意 void CAN_RxCallback(uint32_t id, uint8_t *data) { if (id == MOTOR_CONTROLLER_STATUS_ID) { last_mc_heartbeat = get_timestamp(); update_mc_status(data); } } void safety_check_task(void) { // 每 10ms 執行 if (get_timestamp() - last_mc_heartbeat > MC_TIMEOUT_MS) { // Motor Controller 通訊超時 → 扭矩命令設為 0 set_torque_command(0); set_fault(FAULT_MC_TIMEOUT); } } 各模組超時閾值建議 : AMS:100 ms(若超時,禁止扭矩輸出,但不一定立刻斷 HV) Motor Controller:50 ms(立刻設扭矩為 0) 關鍵安全訊號:20 ms 故障分級 : 級別 說明 處理方式 Warning 非立即危險,需注意 儀表警示,繼續運行 Soft Fault 潛在問題,需降功率 限制扭矩輸出至 50% Hard Fault 嚴重問題,需立停 扭矩設 0,禁止 RTD Critical Fault 安全威脅 觸發 SDC 斷路(軟體觸發,補充硬體安全) 6.3 State Machine(車輛狀態設計) 整車狀態機是電控軟體的骨架。 沒有狀態機的電控系統,就像沒有骨架的人,遇到複雜情況就垮掉。 推薦狀態設計 : ┌──────────────────────────────┐ │ ↓ [INIT] → [LV_READY] → [HV_PRECHARGING] → [HV_READY] → [RTD] ↑ │ │ │ │ Fault/SDC Open Fault/SDC Fault/SDC │ ↓ Open Open └─────── [FAULT] ←──────────────────┘←─────────┘ │ (SDC 斷路 所有 Contactor 斷開) 各狀態說明 : INIT :上電初始化。自我檢測(Selftest):確認感測器通訊正常、SDC 節點狀態讀取、CAN 通訊建立。 LV_READY :GLV 系統正常,HV 尚未充電。等待駕駛操作 TSMS 進入 HV Precharge 流程。 HV_PRECHARGING :執行 AIR- → Precharge → AIR+ 流程。超時(如 10 秒後 MC 電壓未上升到閾值)→ 進入 FAULT。 HV_READY :HV 系統正常,等待 RTD 條件(煞車 + RTD 按鈕)。 RTD(Ready To Drive) :正常行駛狀態。扭矩控制啟用,RTDS 已觸發。 FAULT :任何嚴重錯誤。此狀態下,扭矩輸出為 0,向 SDC 硬體發送 Fault 訊號(透過 Watchdog 停止餵狗),重置需要物理操作(重新操作 TSMS 或解除故障)。 💡 學長建議 :狀態機的進入與退出條件要寫得非常嚴謹。特別是從 FAULT 返回正常狀態的條件,不能靠軟體自動 Reset,必須有駕駛或維修人員的確認動作。 小結 通訊與控制策略的核心是: 預期一切可能出錯 。每個 CAN 節點可能超時,每個感測器可能輸出錯誤值,每個程式模組可能有 bug。好的狀態機設計讓系統在這些情況下仍然安全地「失效」。