- Pengarang: Johnny Liu, CEO di Dowway Vehicle
- Tanggal Publikasi: 29 April 2026
- Kategori: Sistem Kontrol / Teknik Otomotif / Simulasi
Tentang Penulis
Saya Johnny Liu, CEO dari Kendaraan Dowway. Kami membangun sistem penggerak daya bersih dan dinamika kendaraan yang cerdas. Selama lebih dari dua puluh tahun, saya telah bekerja pada suspensi mobil aktif, kemudi drive-by-wire, dan keselamatan sasis. Di bengkel kami, kami tidak pernah membuat komponen fisik tanpa mengujinya terlebih dahulu di layar.
Simulink membantu kami melakukan hal itu. Simulink memungkinkan kami menjalankan uji keamanan dan mencoba algoritma kontrol baru sebelum kami benar-benar mengerjakan sesuatu. Dalam panduan ini, saya akan membagikan alur kerja persis yang kami gunakan untuk memodelkan, menganalisis, dan mengontrol sistem dinamis.
Table of Contents
Bagian 1: Teori Sistem Kontrol
Kita harus memahami matematikanya sebelum mulai menyeret balok-balok ke sana kemari. Teori kontrol membagi model menjadi tiga bentuk utama.
1.1 Pemodelan Matematika
Model dinamis menunjukkan bagaimana keadaan dan keluaran suatu sistem berubah seiring waktu ketika Anda menerapkan suatu masukan.
1. Model Input-Output
- Persamaan Diferensial: Ini menggambarkan hukum fisika sistem dalam domain waktu. Contohnya termasuk sistem massa-pegas atau jaringan listrik.
- Fungsi Transfer (TF): Kita memperoleh persamaan-persamaan ini dengan menerapkan transformasi Laplace pada persamaan diferensial linear dan invarian waktu (LTI), dengan asumsi semua kondisi awal adalah nol: $$G(s) = \frac{Y(s)}{U(s)} = \frac{b_m s^m + b_{m-1} s^{m-1} + \dots + b_0}{a_n s^n + a_{n-1} s^{n-1} + \dots + a_0}$$
- Karakteristik Frekuensi: Kita mendapatkan ini dengan mengganti $s$ dengan $j\omega$ dalam fungsi transfer. Ini menunjukkan bagaimana sistem merespons input gelombang sinus pada kecepatan yang berbeda.
2. Model Ruang Keadaan
Teori kontrol modern menggunakan model ruang keadaan. Alih-alih memperlakukan sistem seperti kotak tersembunyi, kita melacak variabel internal yang disebut keadaan. Keadaan ini mendefinisikan energi dan perilaku sistem pada setiap saat: $$\dot{x}(t) = Ax(t) + Bu(t)$$$$y(t) = Cx(t) + Du(t)$$
Di mana:
- $x(t)$ adalah vektor keadaan.
- $u(t)$ adalah vektor input.
- $y(t)$ adalah vektor output.
- $A$ adalah matriks sistem (yang mengatur dinamika internal).
- $B$ adalah matriks input (yang menunjukkan bagaimana input memengaruhi keadaan).
- $C$ adalah matriks keluaran (yang memetakan keadaan ke keluaran yang diukur).
- $D$ adalah matriks umpan balik langsung.
Berikut perbandingan antara Fungsi Transfer dan Model Ruang Keadaan:
| Fitur | Fungsi Transfer (TF) | Ruang-Keadaan (SS) |
|---|---|---|
| Kompatibilitas Sistem | Hanya berfungsi untuk konfigurasi Single-Input Single-Output (SISO) dan Linear Time-Invariant (LTI). | Berfungsi untuk pengaturan Multi-Input Multi-Output (MIMO), non-linear, dan yang berubah terhadap waktu. |
| Keunikan | Unik untuk setiap pasangan input-output yang diberikan. | Tidak unik. Anda dapat memilih status yang berbeda, yang akan mengubah matriks Anda. |
| Kelengkapan | Hanya menampilkan dapat dikendalikan bagian-bagiannya. Pembatalan kutub-nol menyembunyikan dinamika tersembunyi. | Menunjukkan semuanya. Ini mencakup semuanya. baik yang dapat dikendalikan maupun yang tidak dapat dikendalikan bagian-bagian, ditambah bagian-bagian yang dapat diamati dan yang tidak dapat diamati. |
| Komputasi | Menggunakan aljabar domain frekuensi. | Cocok untuk komputer dan program penyelesaian aljabar linear. |
3. Diagram Blok
Kami menghubungkan sistem fisik menggunakan tiga tata letak sederhana:
- Seri (Cascade): Fungsi transfer tersebut dikalikan: $G_{\text{total}}(s) = G_1(s) \cdot G_2(s)$
- Paralel: Fungsi transfer tersebut dijumlahkan: $G_{\text{total}}(s) = G_1(s) + G_2(s)$
- Masukan: Rumus untuk umpan balik loop tertutup $H(s)$ adalah: $$G_{\text{closed}}(s) = \frac{G(s)}{1 \mp G(s)H(s)}$$
Penanda Kinerja Sistem
Saat kami menjalankan pengujian langkah demi langkah, kami menilai kinerja transien menggunakan empat angka:
- Melebihi target ($M_p$): Nilai puncak dibandingkan dengan nilai stabil akhir, ditulis sebagai persentase: $$M_p = \frac{y(t_p) – y(\infty)}{y(\infty)} \times 100\%$$
- Waktu Penyelesaian ($t_s$): Waktu yang dibutuhkan sistem untuk stabil dan tetap berada dalam rentang kesalahan kecil (biasanya 2% atau 5%) dari nilai akhirnya.
- Waktu Puncak ($t_p$): Waktu yang dibutuhkan untuk mencapai puncak overshoot pertama.
- Waktu Naik ($t_r$): Waktu yang dibutuhkan untuk berpindah dari 10% menjadi 90% (atau 0% menjadi 100%) dari nilai akhir.
1.2 Metode Analisis
Kita harus menguji seberapa stabil suatu sistem sebelum membangun pengontrolnya.
1. Analisis Domain Waktu
Kami menerapkan sinyal uji standar pada sistem. Ini termasuk impuls satuan, langkah satuan, landasan unit, percepatan satuan, atau gelombang sinus satuan.
- Aturan Stabilitas: Suatu sistem LTI dikatakan stabil jika semua kutubnya (akar penyebut) memiliki bagian riil negatif. Jika bahkan satu kutub berada di sisi kanan bidang s, sistem tersebut akan meledak.
- Alat MATLAB:
zpk: Mendefinisikan sistem penguatan kutub nol.akar: Menemukan akar penyebut Anda untuk memeriksa lokasi kutub.
2. Analisis Lokus Akar
Kami memplot bagaimana kutub loop tertutup bergerak di bidang s saat kami memutar gain ($K$) dari $0$ ke $\infty$.
- Dua aturan harus terpenuhi untuk setiap titik pada plot:
- Kondisi Magnitudo: $|KG(s)H(s)| = 1$
- Kondisi Fase: $\angle G(s)H(s) = (2k+1)\pi$
- Alat MATLAB: Menggunakan
rlocus(sys)untuk menggambar garis. Selalu gunakansumbu samatepat setelahnya sehingga sumbu horizontal dan vertikal menggunakan skala yang sama. Ini menjaga agar sudut Anda terlihat benar.
3. Analisis Domain Frekuensi
Kami memeriksa bagaimana suatu sistem menangani gelombang sinus stabil pada frekuensi yang berbeda.
- Alur Ceritanya:
- Plot Nyquist: Plot polar dari $G(j\omega)$ ketika frekuensi ($\omega$) berjalan dari $-\infty$ ke $+\infty$.
- Plot Bode: Dua grafik terpisah. Grafik atas menunjukkan magnitudo dalam desibel ($20\log_{10}|G(j\omega)|$). Grafik bawah menunjukkan sudut fase dalam derajat.
- Plot Nichols: Ini menampilkan kedua grafik Bode dalam satu layar. Grafik ini memplot desibel langsung terhadap sudut fase, menggunakan frekuensi sebagai penanda tersembunyi di sepanjang garis.
- Alat MATLAB: Menggunakan
nyquist(),beralamat(), Dannichols(). - Angka-angka Penting: Puncak resonansi ($M_r$), frekuensi resonansi ($\omega_r$), bandwidth, dan penguatan frekuensi nol.
- Pemeriksaan Stabilitas (Aturan Nyquist): Sistem Anda stabil jika garis Nyquist mengelilingi titik $(-1, j0)$ dalam arah berlawanan arah jarum jam sebanyak $N$ kali, di mana $N$ sama dengan jumlah kutub loop terbuka tidak stabil Anda ($P$).
- Margin Keuntungan ($G_M$): Seberapa besar keuntungan tambahan yang dapat Anda peroleh sebelum sistem menjadi tidak stabil.
- Batas Fase ($\Phi_M$): Penundaan fase tambahan diperlukan untuk membuat sistem menjadi tidak stabil.
- Perintah MATLAB:
margin(sys)menghitung margin keamanan ini untuk Anda.
4. Analisis Ruang Keadaan
Kita menggunakan matriks untuk mempelajari sistem kompleks dengan banyak masukan dan keluaran.
- Formulir Standar: Anda dapat memetakan satu fungsi transfer ke tata letak ruang keadaan yang berbeda menggunakan matriks transformasi ($x = Pz$). Empat konfigurasi utama adalah:
- Bentuk Kanonik yang Dapat Dikendalikan (membantu mendesain pengontrol umpan balik keadaan).
- Bentuk Kanonik yang Dapat Diamati (membantu membangun estimator keadaan).
- Bentuk Kanonik Diagonal (keadaan yang tidak berpasangan di sepanjang diagonal, digunakan ketika kutub-kutubnya berbeda).
- Bentuk Kanonik Yordania (digunakan ketika kutub berulang).
- Perintah MATLAB:
ss(),tf2ss(),zp2ss(),canon(), Danjordan().
- Stabilitas Lyapunov: Suatu sistem dikatakan stabil jika kita dapat menemukan fungsi energi definit positif $V(x)$ yang turunannya terhadap waktu, $\dot{V}(x)$, selalu negatif. Untuk sistem linier, kita menyelesaikan persamaan berikut: Persamaan Lyapunov: $$A^TP + PA = -Q$$ Jika kita memilih matriks $Q$ yang definit positif dan mendapatkan matriks $P$ yang unik dan definit positif, maka sistem kita stabil.
- Perintah MATLAB:
lyap(A, Q)ataulyap2()Selesaikan persamaan ini.
- Perintah MATLAB:
Bagian 2: Blok Simulasi Simulink
Sekarang mari kita lihat blok-blok yang kita gunakan untuk membangun sistem-sistem ini di Simulink.
2.1 Pustaka Blok Standar
1. Sub-perpustakaan berkelanjutan
Di sinilah kita membangun model waktu kontinu.
- Blok Ruang-Keadaan: Menghitung $\dot{x} = Ax+Bu$ dan $y=Cx+Du$. Anda harus memasukkan Matriks A, B, C, dan D, beserta vektor keadaan awal $x_0$.
- Blok Transfer Fcn: Anda memasuki pembilang (num) Dan penyebut (den) vektor sebagai pangkat menurun dari $s$.
- Blok Penguatan Kutub Nol: Anda memasukkan array untuk nol (z), kutub (p), dan konstanta penguatan (K).
- Blok Pengontrol PID (1-DOF & 2-DOF): Blok-blok ini menghitung suku-suku proporsional, integral, dan derivatif.
- Parameter: Anda mengkonfigurasi tipe pengontrol, bentuknya (Paralel atau Ideal), domain waktu, koefisien ($P, I, D$), dan konstanta filter ($N$). Anda dapat mengatur status awal dan mengaktifkan batas atas dan bawah. batas saturasi untuk menghentikan integrator windup. Di bawah tab Tipe Data, Anda dapat mengatur batasan. Secara default, ia menggunakan aturan yang diwariskan tanpa pemeriksaan batasan.
- Perbedaan PID 2-DOF dengan PID 1-DOF: Pengontrol 1-DOF standar hanya melihat kesalahan $e = r – y$. A PID 2-DOF Pengontrol memisahkan cara melacak perintah dari cara menolak gangguan. Ia menggunakan nilai bobot $b$ dan $c$ pada jalur proporsional dan derivatif: $$u(t) = P \cdot (b \cdot r – y) + I \cdot \int (r – y) dt + D \cdot \frac{d}{dt}(c \cdot r – y)$$ Ini mencegah “hentakan derivatif” ketika Anda mengubah titik setel dengan cepat, menjaga pergerakan aktuator tetap halus.
2. Sub-perpustakaan Diskontinuitas
Perangkat keras fisik tidak pernah sempurna. Kami menggunakan blok-blok ini untuk memodelkan batasan dunia nyata:
- Blok Reaksi Negatif: Mensimulasikan pergerakan roda gigi. Anda mengatur lebar deadband dan output awal.
- Blok Zona Mati: Output blok tetap nol sampai input melewati batas atas atau bawah yang Anda tetapkan.
- Blok Saturasi: Membatasi output. Anda mengatur batas atas dan bawah. Selalu aktif. deteksi perpotongan nol Jadi, pemecah masalah akan menemukan momen tepat ketika sinyal mencapai batasnya.
3. Sub-perpustakaan terpisah
Kami menggunakan blok-blok ini untuk memodelkan prosesor digital dan ECU.
- Blok Penundaan Unit ($z^{-1}$): Menahan nilai input selama satu langkah clock dan kemudian menampilkannya.
- Blok Zero-Order Hold (ZOH): Mengambil sampel sinyal kontinu dan mempertahankan nilainya tetap selama waktu pengambilan sampel yang telah ditentukan ($T_s$).
? Tips: Bagaimana Pengaturan Solver Mempengaruhi Simulasi Anda
Mari kita lihat apa yang terjadi ketika Anda menggunakan Penundaan Unit memblokir:
- Jika Anda menggunakan Variable-Step Solver (seperti ode45): Langkah-langkah penyelesaian dapat berubah ukuran secara dinamis. Hal ini dapat menyebabkan kesalahan interpolasi di dalam blok diskrit Anda, membuat sinyal Anda tampak kontinu padahal seharusnya tidak.
- Jika Anda menggunakan Fixed-Step Solver: Mengatur pemecah masalah ke Langkah Tetap dengan waktu pengambilan sampel sebesar 1,0 detik membuat semuanya berjalan sinkron. Blok Unit Delay menahan nilai selama tepat satu detik, menciptakan plot tangga yang bersih dan diskrit pada Osiloskop Anda.
2.2 Menggunakan Blok Sistem LTI
Jika Anda memiliki model linier di ruang kerja MATLAB Anda, Anda dapat memasukkannya ke Simulink menggunakan Blok Sistem LTI (ditemukan di Control System Toolbox).
- Cara mengaturnya:
- Ketik langsung: Masukkan perintah TF langsung di kotak parameter blok (seperti
tf([1 1],[1 5 1])). - Gunakan variabel ruang kerja: Pertama, definisikan model Anda dalam skrip MATLAB:
G1 = tf([1 1],[1 5 1]);Kemudian, cukup masukkanG1ke dalam blok LTI. Di Dowway Vehicle, kami menggunakan metode skrip ini untuk menjaga agar parameter kami tetap terorganisir. Perhatikan bahwa Anda hanya dapat mengatur status awal jika model LTI Anda dalam bentuk ruang keadaan (state-space).
- Ketik langsung: Masukkan perintah TF langsung di kotak parameter blok (seperti
Bagian 3: Proyek Langkah demi Langkah
Mari kita bangun dan jalankan dua sistem praktis.
Proyek 1: Analisis Stabilitas Fungsi Transfer
Kita akan menganalisis fungsi transfer kontinu untuk melihat bagaimana perilakunya di bawah input langkah dan perubahan frekuensi.
Model Pabrik Kami:
$$G(s) = \frac{25(s + 17)}{(s + 25)(s + 37)} = \frac{25s + 425}{s^2 + 62s + 925}$$
Skrip MATLAB:
Jalankan skrip ini untuk menghasilkan grafik Bode, Nyquist, dan Nichols Anda.
% Project 1: Frequency Response Analysis
clear; clc; close all;
% Define numerator and denominator
num = 25 * [1 17]; % 25s + 425
den = conv([1 25], [1 37]); % s^2 + 62s + 925
% Create Transfer Function
G = tf(num, den);
disp('System Transfer Function:');
printsys(num, den);
% Draw Bode Plot
figure(1)
bode(G)
grid on;
title('System Bode Diagram');
% Draw Nyquist Plot
figure(2)
nyquist(G)
axis equal % Keeps the scale of real and imaginary axes equal
grid on;
title('System Nyquist Plot');
% Draw Nichols Plot
figure(3)
nichols(G)
grid on;
title('System Nichols Chart');
Pengaturan Simulink:
- Buka model kosong di Simulink.
- Tambahkan Melangkah blok dari Sumber perpustakaan. Atur waktu langkahnya menjadi $0$.
- Tambahkan Transfer Fcn blok dari Kontinu perpustakaan. Atur “Koefisien pembilang” ke
[25 425]dan “Koefisien penyebut” untuk[1 62 925]. - Tambahkan Cakupan blok dari Wastafel perpustakaan.
- Hubungkan balok-balok tersebut:
[Step]->[Transfer Fcn]->[Scope]. - Jalankan simulasi selama $1.0\text{s}$. Osiloskop akan menunjukkan respons langkah yang stabil dan halus tanpa osilasi.
Proyek 2: Kontrol Umpan Balik Keadaan LQR untuk Pendulum Terbalik
Bandul terbalik tidak stabil dan sulit dikendalikan. Kita akan melinierkan perilakunya, memverifikasi sifat-sifatnya, dan merancang bandul yang optimal. Regulator Kuadrat Linier (LQR) untuk menjaga keseimbangannya.
Vektor Negara Bagian Kita:
$$x = \begin{bmatrix} x & \theta & \dot{x} & \dot{\theta} \end{bmatrix}^T$$
Di mana $x$ adalah posisi kereta, $\theta$ adalah sudut pendulum, $\dot{x}$ adalah kecepatan kereta, dan $\dot{\theta}$ adalah kecepatan sudut.
Matriks Linier (Tidak Stabil dalam Sistem Loop Terbuka):
$$A = \begin{bmatrix} 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \\ 0 & -0.524 & -3.129 & 0 \\ 0 & -15.332 & 9.012 & -0.562 \end{bmatrix}, \quad B = \begin{bmatrix} 0 \\ 0 \\ 81.23 \\ -120.1 \end{bmatrix}$$$$C = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & $$ …
Ini adalah MIMO Sistem. Inputnya adalah gaya ($u$). Outputnya adalah posisi kereta ($x$) dan sudut kemiringan pendulum ($\theta$).
Skrip Optimasi MATLAB:
Jalankan kode ini untuk menghitung matriks umpan balik LQR Anda $K$.
% Project 2: Inverted Pendulum LQR Design
clear; clc; close all;
% System Matrices
A = [0, 0, 1, 0;
0, 0, 0, 1;
0, -0.524, -3.129, 0;
0, -15.332, 9.012, -0.562];
B = [0;
0;
81.23;
-120.1];
C = [1, 0, 0, 0; % Output 1: Cart Position
0, 1, 0, 0]; % Output 2: Pendulum Angle
D = [0;
0];
% Create state-space model
sys = ss(A, B, C, D);
% Calculate eigenvalues
E = eig(A);
fprintf('Open-Loop Eigenvalues:\n');
disp(E);
% Test Controllability
OC = ctrb(A, B);
N_C = rank(OC);
fprintf('Controllability Rank: %d\n', N_C);
% Test Observability
OB = obsv(A, C);
N_B = rank(OB);
fprintf('Observability Rank: %d\n', N_B);
% LQR Tuning Matrices
Q = diag([10, 0.01, 0.01, 0.1]);
R = 45;
N = 0;
% Compute feedback gain matrix K
[K, S, e] = lqr(sys, Q, R, N);
fprintf('Calculated LQR Feedback Gain Matrix K:\n');
disp(K);
% Create Closed-Loop System (u = -Kx)
sysT = ss(A - B*K, B, C, D);
% Plot closed-loop step response
figure(1)
step(sysT)
grid on;
legend('Cart Position (x)', 'Pendulum Angle (theta)');
title('Closed-Loop LQR Step Response');
Nilai eigen loop terbuka menunjukkan bahwa sistem mentah tidak stabil. Matriks kontrolabilitas dan observabilitas keduanya memiliki rank 4. Ini berarti sistem kita sepenuhnya dapat dikendalikan dan diamati, memungkinkan kita untuk membangun pengontrol LQR.
Implementasi Simulink:
Untuk menjalankan model ini di Simulink:
- Tambahkan Ruang-Keadaan blok dari perpustakaan berkelanjutan.
- Konfigurasikan parameternya:
- Mengatur A ke
A - B*K. - Mengatur B ke
B. - Mengatur C ke
C. - Mengatur D ke
D. (Pastikan skrip MATLAB Anda telah dijalankan terlebih dahulu agar variabel-variabel ini aktif di ruang kerja Anda).
- Mengatur A ke
- Hubungkan Melangkah blok ke port input.
- Hubungkan Cakupan blok ke port output.
- Jalankan simulasi. Scope Anda akan memplot dua garis. Posisi kereta stabil dengan mulus, dan sudut pendulum kembali ke 0 (berdiri tegak lurus) setelah goyangan singkat dan terkontrol.
Daftar Periksa Johnny untuk Sistem Kontrol yang Aman
Sebagai penutup, berikut adalah daftar periksa pribadi saya untuk membangun loop kontrol di Simulink:
- Uji Kontrolabilitas Terlebih Dahulu: Sebelum membuang waktu berjam-jam untuk menyetel gain pada sistem yang kompleks, jalankan
ctrbdi MATLAB. Jika peringkatnya terlalu rendah, tidak ada algoritma yang dapat menstabilkan sistem Anda. - Pilih Pemecah Masalah yang Tepat: Untuk sistem dengan blok non-linier seperti Kejenuhan atau Reaksi, menyalakan Deteksi Perpotongan Nol. Gunakan penyelesai langkah variabel (seperti
ode45) untuk pengujian cepat, tetapi beralihlah ke pemecah langkah tetap ketika Anda siap untuk mengkompilasi kode untuk perangkat keras yang sebenarnya. - Simpan Variabel Anda di Satu Tempat: Jangan pernah mengetik angka mentah langsung ke dalam kotak parameter Simulink. Masukkan semuanya ke dalam skrip inisialisasi MATLAB pusat. Ini akan menjaga pekerjaan Anda tetap rapi dan terorganisir.
Beri tahu saya jika Anda mengalami masalah penyetelan atau kesalahan pada solver. Tinggalkan komentar di bawah, dan kita bisa mendiskusikannya!




