Time Step (步長) 的設定原則與語法
Time Step (步長) 的設定原則與語法
在 MATLAB 腳本中呼叫 sim() 時,可以直接強制覆寫 Simulink 模型裡的步長設定。這能確保你每次跑腳本的結果都是一致的。
情況 A:使用預設的 Variable-step (變動步長) —— 針對純物理模擬
在 Variable-step 模式下,Simulink 會自動決定步長。但為了解決「畫圖時曲線不夠圓滑、有很多折角」的問題,我們通常只需要限制 MaxStep (最大步長)。
-
設定原則 (經驗法則): 通常設定為「總模擬時間的 1/1000 到 1/5000」。 例如:模擬 10 秒,
MaxStep可以設為0.01。這樣可以保證每一秒至少有 100 個數據點,畫出來的圖就會非常平滑。 -
MATLAB 語法:
% 限制最大步長為 0.01 秒 (其餘交給 Simulink 自動調整)
out = sim('my_model', 'MaxStep', '0.01');
情況 B:使用 Fixed-step (固定步長) —— 針對數位控制、馬達、電力電子
如果你有用到 PWM (脈衝寬度調變)、數位控制器 (Discrete Controller),或是未來要把模型轉成 C Code 燒進微控制器 (Arduino / DSP),你就 必須 使用 Fixed-step。
-
設定原則 (經驗法則): 必須比你系統中「變化最快」的訊號還要快上 10 到 20 倍 (這與取樣定理有關)。
- 例子 1 (一般控制系統): 如果你的控制器迴圈是 100 Hz (0.01 秒執行一次),你的 FixedStep 就設為
0.01。 - 例子 2 (電力電子/馬達 PWM): 如果你的 PWM 切換頻率是 10 kHz (週期 0.0001 秒),為了精準捕捉開關的瞬間,你的 FixedStep 通常要設為
1e-5(也就是 0.00001 秒) 或更小。
- 例子 1 (一般控制系統): 如果你的控制器迴圈是 100 Hz (0.01 秒執行一次),你的 FixedStep 就設為
-
MATLAB 語法:
% 強制將 Solver 改為 Fixed-step,並將步長鎖死在 0.001 秒
out = sim('my_model', ...
'SolverType', 'Fixed-step', ...
'FixedStep', '0.001');
(註:語法中的 ... 是 MATLAB 的換行符號,用來把很長的程式碼折成多行以方便閱讀)