Nidec DDCM LIN-Bus 智慧門控模組
DDCM_Zone_Ctrl_Sim.capl — 底層驅動 (LLD) 可視化分析 | Rex 生成 2026-07-16
① LIN 匯流排拓撲圖
System Topology — LIN Master/Slave Architecture
Zone Controller (BCM)
LIN Master ・ 20ms Schedule
LIN Bus ・ 19.2 kbps
DDCM FL (前左)
ID: 0x20 Master Status
DDCM FR (前右)
Mirror Node
DDCM RL (後左)
Mirror Node
② LIN 訊號資料流(動態)
Real-time Signal Flow — Master TX → Slave RX
Alive_Cnt++ →
Backlight_Req 0xCC →
← Win_FL_Switch_Pos
← DDCM_Status_Response
← Slave (DDCM)
━━ LIN Bus 19.2 kbps ━━
Master (Zone Ctrl) →
③ LIN 20ms 調度表時序圖
Schedule Table — 20ms Periodic Frame Exchange
④ LIN 訊號定義表
Master → Slave(Zone_FL_Ctrl_Cmd)
| 訊號名稱 | 方向 | 類型 | 說明 |
Zone_FL_Alive_Cnt |
Master TX |
E2E Safety |
0→15 循環計數器,DDCM 用來偵測通訊是否存活(Watchdog) |
DDCM_Backlight_Req |
Master TX |
Control |
背光亮度請求,0xCC = 80% 亮度(夜間藍光模式) |
Slave → Master(DDCM_Master_Status, ID: 0x20)
| 訊號名稱 | 方向 | 類型 | 說明 |
Win_FL_Switch_Pos |
Slave RX |
Sensor |
前左車窗按鍵位置: 0=Idle, 2=Auto-Up, 4=Auto-Down |
⑤ CAPL 執行流程圖
Program Flow — Event-Driven Architecture
🔄 定時器事件迴圈
INIT
on start
初始化 AliveCounter = 0,啟動 20ms 定時器
1
Alive Counter 遞增
(counter + 1) & 0x0F → 0~15 循環,寫入 Zone_FL_Alive_Cnt
2
下發背光請求
DDCM_Backlight_Req = 0xCC(80% 亮度藍光)
3
重新啟動定時器
setTimer(20ms) → 回到 step 1,形成 50Hz 週期迴圈
📡 訊號監聽事件
EVENT
on linFrame DDCM_Master_Status
當收到 ID:0x20 的 LIN 幀時觸發
READ
讀取 Win_FL_Switch_Pos
從 DDCM 回報的訊號中取得車窗開關位置值
DECIDE
判斷按鍵狀態
== 2 → Auto-Up(自動升窗)
== 4 → Auto-Down(自動降窗)
其他 → Idle(無操作)
ACTION
觸發車窗馬達控制
此處可擴充馬達 PWM 驅動邏輯(目前為 write() 輸出日誌)
⑥ E2E Safety 安全機制
End-to-End Protection — Alive Counter Watchdog
0→1→2→...→F→0
4-bit Alive Counter (0~15 循環)
→
⏱️
DDCM 監控:若 >100ms
未收到遞增值 → 通訊故障
→
⑦ 原始碼重點標註
CAPL Source — Key Annotations
on start {
setTimer(t_LIN_Schedule_20ms, 20);
}
on timer t_LIN_Schedule_20ms {
gAliveCounter = (gAliveCounter + 1) & 0x0F;
$Zone_FL_Ctrl_Cmd::Zone_FL_Alive_Cnt = gAliveCounter;
$Zone_FL_Ctrl_Cmd::DDCM_Backlight_Req = 0xCC;
setTimer(t_LIN_Schedule_20ms, 20);
}
on linFrame DDCM_Master_Status {
byte windowStatus;
windowStatus = $DDCM_Master_Status::Win_FL_Switch_Pos;
if(windowStatus == 2) {
write("FL Window AUTO-UP Request");
} else if(windowStatus == 4) {
write("FL Window AUTO-DOWN Request");
}
}
⑧ 程式碼功能總結
🎯 核心功能
這段 CAPL 程式碼在 CANoe 環境中模擬 LIN Master(區域控制器),與 Nidec DDCM 門控模組進行通訊。它實現了兩個並行邏輯:週期性下發控制指令 和 事件驅動監聽開關狀態。
🔄 週期調度(20ms Timer Loop)
每 20ms(50Hz)更新一次 Alive Counter(E2E 安全看門狗)並下發背光亮度請求。Alive Counter 以 4-bit(0~15)循環遞增,DDCM 端監控此值是否持續遞增來判斷通訊是否正常。
📡 訊號監聽(LIN Frame Event)
監聽 DDCM 回傳的 Master_Status 幀(ID: 0x20),讀取車窗開關位置。值=2 代表自動升窗(Auto-Up),值=4 代表自動降窗(Auto-Down)。目前僅做日誌輸出,預留馬達控制擴充介面。
🛡️ E2E Safety Profile
符合 ISO 17987 End-to-End 安全規範。Alive Counter 是通訊存活性檢測的核心機制——若 DDCM 在超時窗口內未偵聽到 Counter 遞增,將判定為通訊故障並進入安全狀態(Safe State)。
💡 延伸方向
目前的 write() 日誌輸出可替換為實際的 LIN Slave 控制指令(如馬達 PWM 驅動、H-Bridge 方向控制)。也可加入 CRC 校驗、訊號超时計時器(Timer Monitor)、以及多車窗節點的排程管理。