Sebelum membangun jalan tol, insinyur tidak langsung menuang aspal. Mereka membuat peta dan cetak biru terlebih dahulu — mensimulasikan jalur mana yang paling efisien. Begitu pula dengan sistem kontrol: model matematis adalah "cetak biru" sistem yang memungkinkan kita merancang dan menguji kontroller di komputer sebelum dipasang di dunia nyata.
Tanpa model yang akurat, merancang kontroller sama seperti merakit mesin tanpa gambar teknik — bisa berhasil, tapi berisiko fatal untuk infrastruktur kritis.
🎯 Manfaat Pemodelan Matematis
- Memahami perilaku sistem tanpa harus membangun fisiknya
- Merancang dan menguji kontroller di simulasi → hemat biaya & aman
- Memprediksi respons sistem terhadap gangguan
- Mengoptimalkan parameter kontrol secara analitis
- Dasar untuk desain kontrol adaptif (model bisa di-update online!)
Bayangkan tangki air. Ada air masuk (pompa) dan air keluar (keran). Laju perubahan level air = (laju masuk − laju keluar). Ini adalah persamaan diferensial! Bukan sesuatu yang misterius — hanya cara formal mengatakan "seberapa cepat sesuatu berubah".
A = luas penampang tangki (m²), h = tinggi air (m)
Q_in = debit masuk (m³/s), Q_out = a√(2gh) (Torricelli)
R = resistansi (Ω), C = kapasitansi (F)
V_c = tegangan kapasitor, V_in = tegangan input
Order Sistem
| Order | Ciri | Contoh Sistem |
|---|---|---|
| Orde 1 | Satu turunan pertama (dX/dt) | Tangki air, RC, sistem termal sederhana |
| Orde 2 | Turunan hingga d²X/dt² | Sistem pegas-massa-redaman, motor DC, ayunan |
| Orde Tinggi | Banyak variabel status | Jaringan listrik, reaktor kimia, turbin |
Dalam game RPG, karakter Anda punya banyak "status": HP, MP, Strength, Defense, Level. Semua status ini bersama-sama menentukan kondisi karakter saat ini. State-space model melakukan hal yang sama untuk sistem fisik — mengumpulkan semua "status" penting (disebut state variables) dalam satu representasi terstruktur.
y(t) = Cx(t) + Du(t) ← Output equation
Arti Setiap Variabel
Kumpulan variabel yang menggambarkan "kondisi dalam" sistem
Sinyal kontrol yang diberikan ke sistem (perintah aktuator)
Sinyal yang terukur/diobservasi (pembacaan sensor)
Parameter yang menentukan dinamika sistem
Contoh: Motor DC dalam Sistem Pompa
[dω/dt ] [Kt/J -B/J ] [ω] [ 0 ]
y(t) = [0 1] [i]
[ω]
✅ Mengapa State-Space Populer di Kontrol Adaptif?
State-space bisa menangani sistem multi-input multi-output (MIMO) dengan mudah. Selain itu, matriks A, B, C bisa di-update secara online ketika parameter sistem berubah — itulah inti kontrol adaptif!
Fungsi transfer seperti "deskripsi matematis" dari sebuah komponen. Radio punya fungsi transfer: "putar 1 notch = naikkan volume 2 dB". Sistem fisik punya fungsi transfer: "beri tegangan 1V = putaran motor 10 rad/s". Fungsi transfer menghubungkan INPUT → OUTPUT tanpa peduli isi dalamnya.
s = variabel Laplace (domain frekuensi), Y(s) = output, U(s) = input
Diagram Blok Sistem Kontrol Sederhana
Setpoint
error
Controller
Plant
Output
T(s) = fungsi transfer dari setpoint ke output
C(s) = controller, G(s) = plant, H(s) = sensor
Contoh Umum Fungsi Transfer
| Sistem | Fungsi Transfer G(s) | Parameter |
|---|---|---|
| Sistem orde-1 (RC, tangki) | K / (τs + 1) | K = gain, τ = time constant |
| Sistem orde-2 (motor, pegas) | ωn² / (s² + 2ζωns + ωn²) | ωn = natural freq, ζ = damping ratio |
| Sistem dengan delay (pipa) | Ke⁻ᵀᵈˢ / (τs + 1) | Td = dead time (delay) |
| Integrator (pompa) | K/s | Output terus naik jika ada input |
Bumi sesungguhnya bulat (nonlinier). Tapi jika kita hanya bepergian di kota kecil, peta datar (linier) sudah cukup akurat! Linearisasi bekerja sama: kita buat "peta lokal yang datar" untuk sistem nonlinier di sekitar titik operasi (operating point) tertentu.
Kebanyakan sistem fisik nyata bersifat nonlinier. Contoh: debit air melalui keran ∝ √h (akar kuadrat tinggi air, bukan linier). Tapi untuk kontrol, kita perlu model linier. Solusinya: linearisasi di sekitar titik kerja.
x₀ = operating point, Δx = x − x₀ (deviasi kecil)
Contoh: Q_out = a√(2gh) → dilinearisasi di h₀:
ΔQ ≈ (a/√(2h₀)) · Δh
= gain konstan di sekitar h₀
- Tentukan Operating Point (x₀, u₀)
Titik di mana sistem biasanya beroperasi (steady-state). Contoh: suhu reaktor 150°C, tekanan 5 bar. - Hitung Turunan Parsial (Jacobian)
Hitung ∂f/∂x dan ∂f/∂u di titik operasi untuk mendapatkan matriks A dan B. - Buat Model Deviasi
Ganti variabel asli dengan deviasi: Δx = x − x₀, Δu = u − u₀ - Validasi
Pastikan model linier akurat di sekitar operating point dengan simulasi.
⚠️ Keterbatasan Linearisasi
Model linier hanya valid di sekitar operating point. Jika sistem bergerak jauh dari titik operasi (misal: beban listrik berubah drastis), model linier tidak akurat lagi. Inilah salah satu alasan mengapa gain scheduling (Sesi 6) dan kontrol adaptif diperlukan!
Kasus 1: Sistem HVAC Gedung Kritis (Data Center)
Suhu data center harus dijaga tepat 20°C. Server menghasilkan panas (gangguan). AC (aktuator) harus mengkompensasinya. Kita modelkan sebagai sistem termal orde-1.
C = thermal capacitance (J/°C)
Q_AC = panas yang diserap AC (W), Q_server = panas server (W)
UA = koefisien kehilangan panas ke lingkungan
Fungsi Transfer (Q_AC → T):
G(s) = 1/(Cs + UA)
Kasus 2: Sistem Distribusi Tenaga Listrik
M = inersia sistem (MW·s/Hz)
f = deviasi frekuensi dari 50 Hz
P_mech = daya mekanik turbin, P_load = beban listrik
D = koefisien damping
Kita akan gunakan Python Control Library untuk mensimulasikan respons sistem HVAC data center.
# Install terlebih dahulu (jalankan di terminal): # pip install control matplotlib numpy scipy
import control as ct import numpy as np import matplotlib.pyplot as plt # ========================================== # MODEL HVAC DATA CENTER # ========================================== # Parameter sistem termal C = 5000 # Thermal capacitance (J/°C) UA = 200 # Heat loss coefficient (W/°C) # Fungsi Transfer: G(s) = 1/(Cs + UA) # = (1/UA) / ((C/UA)s + 1) = K/(τs+1) K = 1/UA # Steady-state gain tau = C/UA # Time constant (detik) print(f"Gain K = {K:.4f} °C/W") print(f"Time const = {tau:.1f} detik ({tau/60:.1f} menit)") # Buat transfer function num = [K] den = [tau, 1] G = ct.tf(num, den) print(f"\nFungsi Transfer:\n{G}") # --- RESPONS STEP (AC menyala tiba-tiba) --- t = np.linspace(0, 600, 1000) # 0 sampai 600 detik t, y = ct.step_response(G, T=t) # Konversi: step = 1000W AC → perubahan suhu Q_AC = 1000 # 1 kW cooling delta_T = y * Q_AC # perubahan suhu (°C) # --- PLOT 1: Step Response --- fig, axes = plt.subplots(1, 2, figsize=(12, 5)) axes[0].plot(t/60, delta_T, 'orange', lw=2) axes[0].axhline(K*Q_AC, color='red', ls='--', label=f'Steady-state: {K*Q_AC:.1f}°C') axes[0].axvline(tau/60, color='gray', ls=':', label=f'τ = {tau/60:.1f} menit') axes[0].set_xlabel('Waktu (menit)'); axes[0].set_ylabel('ΔSuhu (°C)') axes[0].set_title('Respons Step: HVAC 1 kW') axes[0].legend(); axes[0].grid(alpha=0.3) # --- SIMULASI LENGKAP: Server Panas + AC ON/OFF --- dt = 1 # 1 detik per langkah T_sim = 3600 # 1 jam simulasi time = np.arange(0, T_sim, dt) T_room = np.zeros(len(time)) T_room[0] = 25.0 # suhu awal 25°C T_target = 20.0 T_ambient = 30.0 for k in range(1, len(time)): # Panas server (fluktuasi realistis) Q_server = 800 + 200*np.sin(2*np.pi*time[k]/1800) # 600-1000W # Controller on/off (bang-bang) Q_AC = 1200 if T_room[k-1] > T_target else 0 # Update suhu dT = (Q_AC - Q_server - UA*(T_room[k-1] - T_ambient)) / C * dt T_room[k] = T_room[k-1] + dT axes[1].plot(time/60, T_room, 'tomato', lw=1.5, label='Suhu ruangan') axes[1].axhline(T_target, color='lime', ls='--', lw=2, label=f'Target {T_target}°C') axes[1].fill_between(time/60, T_target-0.5, T_target+0.5, alpha=0.2, color='lime', label='±0.5°C toleransi') axes[1].set_xlabel('Waktu (menit)'); axes[1].set_ylabel('Suhu (°C)') axes[1].set_title('Simulasi 1 Jam: HVAC Data Center') axes[1].legend(); axes[1].grid(alpha=0.3) plt.tight_layout() plt.savefig('hvac_simulation.png', dpi=150) plt.show() print("\n✅ Simulasi selesai! Grafik disimpan sebagai 'hvac_simulation.png'")
✅ Interpretasi Hasil
- Grafik Kiri: Respons step — suhu turun perlahan mengikuti kurva eksponensial. Time constant τ = 25 menit artinya setelah 25 menit suhu sudah 63% menuju steady-state.
- Grafik Kanan: Simulasi realistis — AC on/off (bang-bang control) membuat suhu berosilasi di sekitar 20°C. Di Sesi berikutnya, kita akan ganti dengan PID lalu kontrol adaptif untuk hasil yang lebih halus!
import control as ct import numpy as np # ========================================== # STATE-SPACE: Motor DC untuk Pompa Air # ========================================== R = 1.0 # Resistansi armature (Ω) L = 0.5 # Induktansi (H) Kb = 0.01 # Back-EMF constant Kt = 0.01 # Torque constant J = 0.01 # Momen inersia (kg·m²) B = 0.1 # Koefisien gesek (N·m·s) # Matriks state-space A = np.array([[-R/L, -Kb/L], [ Kt/J, -B/J ]]) B_mat = np.array([[1/L], [0]]) C_mat = np.array([[0, 1]]) # output = kecepatan angular ω D_mat = np.array([[0]]) sys = ct.ss(A, B_mat, C_mat, D_mat) print("State-Space Motor DC:") print(f"A = \n{A}") print(f"\nEigenvalues (poles): {np.linalg.eigvals(A)}") # Konversi ke fungsi transfer tf = ct.ss2tf(sys) print(f"\nFungsi Transfer (V → ω):\n{tf}") # Respons step (tegangan 12V) t, y = ct.step_response(sys) import matplotlib.pyplot as plt plt.figure(figsize=(8,4)) plt.plot(t, y*12, 'orange', lw=2) plt.xlabel('Waktu (s)'); plt.ylabel('Kecepatan ω (rad/s)') plt.title('Respons Motor DC: Tegangan 12V → Kecepatan Putar') plt.grid(alpha=0.3); plt.tight_layout(); plt.show()
🧠 Kuis Pemahaman Sesi 2
1. Dalam representasi state-space ẋ = Ax + Bu, apa fungsi matriks A?
2. Linearisasi sistem nonlinier dilakukan dengan tujuan?
3. Jika time constant τ = 25 menit, berapa lama hingga respons mencapai ~95% nilai akhir?