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
0ms 20ms 40ms 60ms 80ms 100ms Master TX Alive_Cnt=1, BkLt=0xCC Alive_Cnt=2, BkLt=0xCC Alive_Cnt=3, BkLt=0xCC Alive_Cnt=4, BkLt=0xCC Alive_Cnt=5, BkLt=0xCC LIN Bus ▼ Master→Slave ▼ Master→Slave ▼ Master→Slave DDCM FL Win_Pos=2 Win_Pos=0 Win_Pos=4 Win_Pos=0 E2E Check ✓ Alive OK ✓ Alive OK ✓ Alive OK ✓ Alive OK

④ 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
未收到遞增值 → 通訊故障
🛡️
進入 Safe State
禁止車窗操作

⑦ 原始碼重點標註

CAPL Source — Key Annotations
/* 定時器初始化:20ms LIN 調度表 */ on start { setTimer(t_LIN_Schedule_20ms, 20); // ← 每 20ms 觸發一次 = 50Hz } on timer t_LIN_Schedule_20ms { // E2E Safety: 4-bit 循環計數器 gAliveCounter = (gAliveCounter + 1) & 0x0F; // ← 0→1→2→...→15→0 $Zone_FL_Ctrl_Cmd::Zone_FL_Alive_Cnt = gAliveCounter; // 背光控制: 80% 亮度 $Zone_FL_Ctrl_Cmd::DDCM_Backlight_Req = 0xCC; // ← 0xCC/0xFF ≈ 80% setTimer(t_LIN_Schedule_20ms, 20); // ← 重新觸發,形成週期迴圈 } /* 監聽 DDCM 回報的車窗開關狀態 */ on linFrame DDCM_Master_Status { // ← LIN ID: 0x20 byte windowStatus; windowStatus = $DDCM_Master_Status::Win_FL_Switch_Pos; if(windowStatus == 2) { // ← 2 = Auto-Up write("FL Window AUTO-UP Request"); } else if(windowStatus == 4) { // ← 4 = Auto-Down 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)、以及多車窗節點的排程管理。