# Time Step (步長) 的設定原則與語法

## Time Step (步長) 的設定原則與語法

在 MATLAB 腳本中呼叫 `sim()` 時，可以直接強制覆寫 Simulink 模型裡的步長設定。這能確保你每次跑腳本的結果都是一致的。

### 情況 A：使用預設的 Variable-step (變動步長) —— 針對純物理模擬

在 Variable-step 模式下，Simulink 會自動決定步長。但為了解決「畫圖時曲線不夠圓滑、有很多折角」的問題，我們通常只需要限制 **`MaxStep` (最大步長)**。

* **設定原則 (經驗法則)：**
  通常設定為「總模擬時間的 1/1000 到 1/5000」。
  例如：模擬 10 秒，`MaxStep` 可以設為 `0.01`。這樣可以保證每一秒至少有 100 個數據點，畫出來的圖就會非常平滑。

* **MATLAB 語法：**
```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 秒) 或更小。

* **MATLAB 語法：**
```matlab
% 強制將 Solver 改為 Fixed-step，並將步長鎖死在 0.001 秒
out = sim('my_model', ...
          'SolverType', 'Fixed-step', ...
          'FixedStep', '0.001'); 
```
*(註：語法中的 `...` 是 MATLAB 的換行符號，用來把很長的程式碼折成多行以方便閱讀)*