RWD TC 控制邏輯、運算方法與安全機制說明

tags: Traction Control Control Logic Safety STM32F446


1. 整體控制概念

1.1 控制目標

1.2 單次控制迴圈流程(10 ms, 100 Hz)

邏輯順序:

  1. 讀取感測器與指令:四輪輪速、IMU、方向盤、T_driver。
  2. 更新錯誤偵測(Fault 檢查)。
  3. 若允許 TC:
    • 估測車速 v。
    • 計算後輪 slip ratio(左右與平均)。
    • 濾波方向盤轉角。
    • 根據模式 + 方向盤 + 車速,計算目標 slip λ*。
    • 依據誤差 e = λ* − λ̄,執行 PI 控制,得到 ΔT。
  4. 外層安全邏輯覆蓋:低速、嚴重打滑、大轉角、Fault → 改寫 T_cmd。
  5. 將最終 T_cmd 與狀態資訊送出給馬達與儀表。

2. 運算方法:訊號到 Slip 控制

2.1 車速估測

運算:

[ v = \max\left( \frac{\omega_{FL} + \omega_{FR}}{2} R_{front},\ 0.1 \right) ]

實作重點:

2.2 後輪 Slip Ratio

[ \lambda_L = \frac{\omega_{RL} R_{rear} - v}{\max(v, 0.1)}, \quad \lambda_R = \frac{\omega_{RR} R_{rear} - v}{\max(v, 0.1)} ]

平均 slip:

[ \bar{\lambda} = \frac{\lambda_L + \lambda_R}{2} ]

物理意義:

2.3 方向盤轉角濾波

方向盤訊號可能有抖動,使用一階低通:

[ \delta_{f}[k] = \alpha \delta_{f}[k-1] + (1-\alpha) \delta_{raw}[k] ]

2.4 簡易路面 μ 估測

使用縱向加速度最大值作為路面摩擦指標:

[ a_{x,peak}[k] = \max(0.95, a_{x,peak}[k-1] + 0.05, |a_x[k]|, \ |a_x[k]|) ]

對應一個增益倍數 μ_scale:0.5–1.0,用來縮放 Kp。


3. 目標 Slip λ* 運算方法

3.1 模式相關基準值

每個模式有一組基準參數:

這些參數封裝在 TC_ModeState_t 中:

3.2 方向盤對 λ* 的影響

令 (d = |\delta_f|)(濾波後方向盤轉角,單位 deg)。

使用分段線性 + 模式敏感度來估計剩餘縱向抓地比例 (k_{steer}):

  1. 小轉角:(d < 4,\deg)
    • 幾乎直線,(k_{steer} = 1.0)。
  2. 輕〜中彎:(4 \le d < 20,\deg)
    • 以線性方式遞減: [ k_{steer} = 1.0 - s_1 (d - 4) ]
    • 斜率 (s_1) 由 steer_sens 決定(模式不同斜率不同)。
  3. 中〜重彎:(d \ge 20,\deg)
    • 再以較小斜率往下掉到下限 (k_{steer,min} \approx 0.4)。

3.3 速度補償

高速時可接受稍高目標 slip,低速時保守:

[ \text{speed_factor} = 0.97 + 0.03 \cdot \min\left(\frac{v_{kmh}}{40}, 1\right) ]

約略在 0.97–1.0 之間微調。

3.4 λ* 綜合計算

綜合模式基準、方向盤與速度:

[ \lambda^* = \max\left( \lambda_{base} \cdot k_{steer} \cdot \text{speed_factor},\ 0.08 \right) ]


4. PI 控制與積分管理

4.1 誤差定義

[ e = \lambda^* - \bar{\lambda} ]

4.2 自適應 Kp

根據 μ 估測結果縮放 Kp:

[ K_{p,eff} = K_p \cdot \text{mu_scale} ]

4.3 PI 控制律

[ \Delta T = K_{p,eff} e + K_i \int e, dt ]

實作時:

  1. 先依當前 Kp_eff 和 Ki_eff 計算 p_term 與 i_term。
  2. 積分部分有限制:

[ \int e,dt \in [-I_{max}, I_{max}], \quad I_{max} = 1.0 ]

4.4 積分重置邏輯(Anti-windup)

避免在以下情況發生「積分殘留」:

設計:

  1. 若 (v < 2,\text{km/h}):
    • 直接令 integral = 0。
  2. 若 (|T_{driver}| < 2,\text{Nm}):
    • 積分快速衰減,例如 integral *= 0.1。

這樣可避免:


5. 扭矩命令與三層安全機制

5.1 原始扭矩命令

根據 PI 結果先算一個「候選」扭矩:

[ T_{raw} = T_{driver} (1 + \Delta T) ]

再以模式決定的最小扭矩比例做內部飽和:

[ T_{pi} = \min(\max(T_{raw}, T_{min}), T_{max}) ]

5.2 第一層安全:低速關閉 TC

如果速度很低(例如 v < 3 km/h):

[ T_{cmd} = T_{driver},\quad \text{TC 狀態 = OFF} ]

理由:

5.3 第二層安全:嚴重打滑保護

若任一後輪 slip 超過安全上限(例如 |λ_L| or |λ_R| > 0.4):

[ T_{cmd} = 0.5 T_{driver}\quad \text{或更低} ]

5.4 第三層安全:大轉角保守模式

若濾波後方向盤轉角非常大(例如 |δ_f| > 30°):

[ T_{cmd} = T_{driver} \cdot \text{min_tq_ratio} ]

5.5 Fault 狀態下的行為

TC_Fault_IsSafeToRun() 回傳 false:


6. 模式切換邏輯(直線 / 繞 8 / 賽道)

6.1 設計原則

6.2 模式切換流程

  1. 車手按 MODE 按鈕,或經由 CAN 設定 target_mode
  2. 若當下車速 (< 1,\text{km/h}):
    • 立即套用新模式參數到 current_mode
    • 將 integral = 0、steer_deg_f = 0。
  3. 若當下車速 (\ge 1,\text{km/h}):
    • 只更新 target_mode,並設 change_pending = true,但不改變實際控制。
    • 等車輛之後停下來時,在控制迴圈中偵測 v 變小,才套用新模式。

6.3 對車手的提示(建議)


7. 總結:分層思維

設計這套 TC 時,可以用「由內而外」的分層方式來理解:

  1. 最內層:PI 控制
    • 只管:誤差 e → ΔT。
    • 內含自適應 Kp(看 μ)與積分 Anti-windup。
  2. 中間層:目標 slip 生成
    • 只管:模式 + 方向盤 + 車速 → λ*。
    • 反映駕駛意圖(直線 / 繞 8 / 賽道)與當下彎道狀態。
  3. 外層:安全機制
    • 只管:是否在危險狀態(低速、嚴重打滑、大轉角、Fault)。
    • 一旦觸發,會直接覆蓋內層計算結果,強制進入保守或關閉狀態。

依照這個分層結構,你可以在不破壞外層 Safety 的前提下,調整與實驗內層的 Kp/Ki、λ* 表格與 μ 估測演算法,使車輛在不同場景(直線、繞 8、賽道)都有一致且可預期的手感與安全邊界。


Revision #2
Created 2026-04-01 02:06:01 UTC by TaipeiTechRacing
Updated 2026-04-06 16:39:15 UTC