Anda di halaman 1dari 11

Percobaan III

Pengendali P, PI, PD, dan PID pada Motor DC


Diki Dirgiantara (13116041)
Asisten : Wildan Abdullah (13115048)
Tanggal Percobaan : 30/11/2018
EL3104 Praktikum Sistem Kendali
Laboratorium Teknik Elektro
Institut Teknologi Sumatera

integral dan derivatif yang mengoptimalkan kinerja sistem.


Abstrak—Berdasarkan percobaan yang telah dilakukan Setelah tiga parameter tersebut ditala, maka nilai parameter
dengan pengendali P,PI,PD, dan PID pada motor DC, praktikan pengontrol tersebut pada PID biasanya dipertahankan tetap
menggunakan kit praktikum sistem kendali dan menggunakan selama proses pengontrolan. Sebuah sistem kendali close-loop
bantuan software arduino. Penggunaan software arduino sebagai
pengendali perputaran motor DC. Pengendali yang digunakan yang dasar, diperlihatkan pada Gambar 3.2 terdiri dari sebuah
terdiri atas pengendali P, PI, PD, dan PID. Masing-masing pengendali dan sebuah plant. Pada makalah ini PID digunakan
pengendali mempunyai karakteristik. Pengendali P digunakan sebagai pengendali. Pengendali PID ini terdiri dari tiga buah
sebagai parameter pengendali-pengendali lainnya. Hal ini tentu komponen: bagian proportional, bagian integral dan bagian
nilai dari parameter Kp sebagai salah satu unsur pengendali P derivative. Pengendali PID menggunakan persamaan kendali
mendominasi pengaruh respon pada masing-masing kendali. sebagai berikut:
Dari keempat pengendali tersebut, pengendali PID yang
memiliki karakteristik respon yang paling baik dibanding (𝑠) = 𝐾𝑝 (1 + 1/ 𝑇𝑖𝑠+ 𝑇𝑑𝑠) = (𝐾𝑑𝑠2 + 𝐾𝑝𝑠 + 𝐾𝑖)/ 𝑠 (2.1)
lainnya. Kemampuannya pengendali PID ini didukung oleh dimana:
menyatunya parameter pengendali P, PI, dan PD ke dalam 𝐾𝑝 adalah parameter proporsional,
pengendali PID. 𝐾𝑖 = 𝐾𝑝/ adalah parameter integral dan
𝐾𝑑 = 𝐾𝑝 𝑥 𝑇𝑑 adalah parameter derivatif.
Kata Kunci—Pengendali P, PI, PD, PID, Respon, software
arduino, dan motor DC
Dalam perancangan pengendali PID, ketiga konstata tersebut
harus dipilih agar sistem close-loop memberikan respon yang
I. PENDAHULUAN diinginkan. Respon yang diinginkan haruslah memiliki settling
time yang minimal dengan overshoot yang kecil atau tanpa
P ENGENDALI P, PI, PD, dan PID pada motor DC secaranya
umumnya bertujuan untuk memperbaiki respon frekuensi.
Setiap jenis pengendali memiliki karakteristik masing-masing.
overshoot dari respon step sistem close-loop.

Membahas tentang sistem kendali sadar atau tidak sadar sering


menjumpai perakngkat atau peralatan dengan menggunakan
sistem kendali secara otomatis. Sistem pengendali tidak hanya
buatan manusia. Banyak ditemukan sistem kendali yang
terdapat di alam mulai dari bagian terkecil dari tubuh manusia.
Tanpa disadari sistem kendali sangatlah penting bagi Gambar 2.1 Sistem close-loop
kehidupan manusia. Adanya sistem kendali dapat
memudahkan kehidupan manusia dalam melakukan berbagai
aktivitas. PID Controller sebenarnya terdiri dari 3 jenis cara
pengaturan yang saling dikombinasikan, yaitu P (Proportional)
II. LANDASAN TEORETIS Controller, D (Derivative) Controller, dan I (Integral)
A. Pengendali Proporsional Integrative Derivative Controller. Masing-masing memiliki parameter tertentu yang
Pengontrol PID adalah jenis pengontrol yang banyak harus diset untuk dapat beroperasi dengan baik, yang disebut
diaplikasikan dalam kontrol proses industri karena sebagai konstanta. Setiap jenis, memiliki kelebihan dan
kesederhanaan strukturnya, lebih tahan terhadap gangguan kekurangan masingmasing, hal ini dapat dilihat pada tabel di
luar serta dapat diterapkan dalam kondisi operasi yang bawah ini:
bervariasi. Tetapi pengontrol PID perlu ditala secara benar
yaitu menentukan harga konstanta pengontrol proporsional,
Table 2.1 Respon PID Controller Terhadap Perubahan waktu naik dan kesalahan keadaan tunak, tetapi
Konstanta[1] konsekuensinya overshoot naik cukup besar. Kenaikan
overshoot ini sebanding dengan kenaikan nilai parameter Kp.
Typ Rise Time Overshoot Settling Steady Waktu turun juga menunjukkan kecenderungan yang
e Time State membesar.
Error Kontrol PID merupakan alat standar bagi otomasi industri.
Kp Decrease Increase Small Decrease Fleksibilitas pada kontroler membuat kontrol PID digunakan
change pada banyak situasi. Kontroller juga dapat digunakan pada
Ki Decrease Increase Increase eliminati selective control maupun konfigurasi kontroller yang lain.
on Algoritma PID dapat didefinisikan sebagai berikut:
Kd Small Decrease Decrease Small
change change

Sebuah kontrol otomatis dapat menggunakan sistem kontrol


yang mengkombinasikan antara ketiga elemen sistem kontrol (2.3)
yang ada. Yang paling banyak digunakan adalah sistem
kontrol proporsional, proporsional ditambah integral (PI), dan dimana:
proporsional ditambah integral ditambah derivatif (PID).
u(t) : sinyal kontrol
Karakteristik aksi pengontrolan Proporsional adalah e(t) : error
mengurangi waktu naik, menambah overshoot, dan Kc : gain kontroller
mengurangi kesalahan keadaan tunak. Fungsi alih sistem
: integral time
dengan menambahkan aksi pengontrolan P menjadi: : derivative time

Keluaran kontroller PID merupakan penjumlahan dari


keluaran kontroller proporsional, kontroller integral dan
(2.2) kontroller differensial. Karakteristik kontroller PID sangat
dipengaruhi oleh kontribusi besar dari ketiga parameter P, I
Misal, diambil konstanta Kp = 80, maka : dan D. Penngaturan nilai konstanta Kp, Ti, dan Td akan
mengakibatkan penonjolan sifat dari masing-masing elemen.
Kp = 80;
Ps = [Kp];
Qs = [1 5 8+Kp];
t = 0 : 0.01 : 2;
step(Ps, Qs)
title(‘Tanggapan Sistem Loop Tertutup Proporsional’)

Gambar 2.3 Pengaturan nilai konstanta Kp, Ti, dan Td

Satu atau dua dari ketiga konstanta tersebut dapat disetting


lebih menonjol dibanding yang lain sehingga konstanta yang
menonjol itulah akan memberikan kontribusi lebih dominan
pada respon sistem secara keseluruhan.
Pengaruh nilai Kp, Ti dan Td pada respon sistem adalah:
 Kp yang kecil akan membuat pengendali menjadi
sensitif dan cenderung membawa loop berosilasi,
sedangkan Kp yang besar akan menghilangkan
offset yang besar juga.
Gambar 2.2 Tanggapan sistem terhadap aksi kontrol proporsional  Ti yang kecil bermanfaat untuk menghilangkan
offset tetapi juga cenderung membawa sistem
menjadi lebih sensitif dan lebih mudah berosilasi,
Penambahan aksi kontrol P mempunyai pengaruh mengurangi sedangkan Ti yang besar belum tentu efektif
menghilangkan offset dan juga cenderung IV. HASIL DAN ANALISIS
membuat sistem menjadi lambat. Berdasarkan percobaan yang telah dilakukan dengan
 Td yang besar akan membawa unsur Derivative menge-running script progam di bawah ini. Script progam ini
menjadi lebih menonjol sehingga respon kemudian diubah-ubah nilai Ki dan Kd. Adapun script yang
cenderung cepat, sedangkan Td yang kecil kurang digunakan dalam percobaan ini adalah:
memberi nilai ekstra pada saat – saat awal.
//PIN's definition
#define encoder0PinA 2
#define encoder0PinB 3
III. METODOLOGI long I, interval = 1000;
A. Alat dan Bahan long previousMillis = 0;
volatile int encoder0Pos = 0;
 Komputer/Laptop
volatile boolean PastA = 0;
 Software Arduino IDE
volatile boolean PastB = 0;
 Software Visio
long timeNow;
 Kit Praktikum Sistem Kendali int lastMilis;
 Modul Praktikum long rpm;
B. Langkah Kerja const int Toleransi = 5;
double v_aktual, P,D,nilai_PID,delta_error,I_error;
double error, v_ref,motor_pwm,error_sebelumnya;
Persiapkan alat dan bahan yang akan
void setup()
digunakan saat praktikum dimulai.
{
pinMode(encoder0PinA, INPUT);
pinMode(9, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
Pastikan setiap komponen pada kit digitalWrite(6,HIGH);
praktikum dalam keadaan baik. //turn on pullup resistor
//digitalWrite(encoder0PinA, HIGH); //ONLY FOR SOME
ENCODER(MAGNETIC)!!!!
pinMode(encoder0PinB, INPUT);
//turn on pullup resistor
Buka software arduino IDE pada //digitalWrite(encoder0PinB, HIGH); //ONLY FOR SOME
komputer/laptop lalu copy/paste script ENCODER(MAGNETIC)!!!!
yang terlampir.
PastA = (boolean)digitalRead(encoder0PinA); //initial
value of channel A;
PastB = (boolean)digitalRead(encoder0PinB); //and
channel B
Upload script pada kit praktikum dan
ubahlah nilai Kp, Ki dan Kd sesuai dengan //To speed up even more, you may define manually the
instruksi dari Assisten Praktikum. ISRs
// encoder A channel on interrupt 0 (Arduino's pin 2)
attachInterrupt(0, doEncoderA, RISING);
// encoder B channel pin on interrupt 1 (Arduino's pin 3)
Perhatikan dan analisa grafik yang terlihat attachInterrupt(1, doEncoderB, CHANGE);
pada software visio! Apa pengaruh nilai Kp, Serial.begin (115200);
Ki dan Kd pada kendali motor DC tsb. timeNow = millis();
lastMilis = timeNow;
}
long akselerasi=0 ;
void loop()
Ulangi langkah 4-5 sampai menemukan nilai {
pengendali yang menurut anda paling baik
dan berikan alasan dengan teori yang benar.
v_ref = 50; //dalam percent, maksimum 1700 rpm

timeNow = millis();
int seconds = timeNow-lastMilis; 0,1 416 % 50 ms 300 ms
if(seconds>=1000){ 0,5 60 % 25 ms Tidak ada
rpm = (encoder0Pos/24)*60;
lastMilis=timeNow;
encoder0Pos=0;
}
v_aktual =map(rpm,0,2160,0,100); //konversi dari rpm
ke persent
error = v_ref-v_aktual;
delta_error = error - error_sebelumnya;
I_error = I_error+error;
P = (Kp * error);
I = Ki*I_error;
D = Kd*delta_error/0.1;

double u = P + I + D ;

u = constrain(u, -5, 5);


Gambar 4.1 grafik pada tabel 4.1 dengan Kp 0,005
motor_pwm += u;
motor_pwm = constrain(motor_pwm, 0, 255);
analogWrite(9, motor_pwm);

unsigned long currentMillis = timeNow;


delay(100);
if(currentMillis - previousMillis > interval) {
// save the last time you blinked the LED
previousMillis = currentMillis;
Serial.print("$");
Serial.print(v_ref);
Serial.print(", ");
P = (Kp * error);
Gambar 4.2 Grafik pada tabel 4.1 dengan Kp 0,05
I = Ki*I_error;
D = Kd*delta_error/0.1;

double u = P + I + D ;

u = constrain(u, -5, 5);


motor_pwm += u;
motor_pwm = constrain(motor_pwm, 0, 255);
analogWrite(9, motor_pwm);

unsigned long currentMillis = timeNow;


delay(100);
if(currentMillis - previousMillis > interval) {
// save the last time you blinked the LED
Gambar 4.3 Grafik pada tabel 1 dengan Kp 0,1

Tabel 4.1

Kp % OVS Rising time Settling time


0,005 0% 845 ms 845
0,05 20 % 85 ms 225 ms
Gambar 4.5 Grafik pada tabel 2 dengan Kd = 0,005 dan Ki 0,001
Gambar 4.4 Grafik paada tabel 1 dengan Kd 0,5 Gambar 4.5 Grafik pada tabel 2 dengan Kd = 0,1 dan Ki = 0,001

Berdasarkan data di atas diperoleh bahwa nilai KP akan


mempengaruhi respon sistem.gambar 4.4 menjukan adanya
osilasi sehingga sistem tidak bekerja secara maksimal
sedangkan pada gambar 4.2 dan 4.3 terjadi overshoot di
respon sistemya. Untuk grafik 4.1 terlihat respon dalam
mencapai steady state menghabiskan waktu hingga ribuan ms.
Hal itu menunjukan bahwa respon pda grafik 4.1 sangat
lambat. Secara tidak langsung grafik 4.2 lebih baik dari yang
lainnya. Analisis ini didukung sedikitnya overshoot dan
cepatnya respon. Perolehan grafik yang sesuai atau mendekati
spesifikasi dilihat dari respon dengan KP =0,05.
Gambar 4.6 Grafik pada tabel 3 dengan Kp = 0,05 dan Kd =
Tabel 4.2 0,8

Kp Ki overshoot Rising Settling


time time
0,005 0,001 100 % 20 ms Tidak ada
0,05 0,002 100 % 40 ms Tidak ada
0,1 0,001 58 % 40 ms 650 ms
0,1 0,0005 50 % 40 ms 265 ms

Berdasarkan tabel 4.2 dan grafik pendukung tabel 4.2


diperoleh bahwa nilai KP = 0,1 dan KI = 0,0005 memiliki
respon cepat dibanding yang lainnya. Hal ini didukung dengan
overshoot yang diperoleh melalui percobaan sebesar 50 %.
Grafik yang lainnya menunjukan overshoot yang tinggi dan
tingkat respon mendekati referensinya masih lambat. Hal ini
berbeda dengan grafik yang menggunakan KP =0,1 dan KI = Gambar 4.7 Grafik pada tabel 2 dengan Kd = 0,005 dan Ki =
0,0005. Grafik tersebut menunjukan respon cepat dengan 0,002
kesetabilan pada waktu di bawah 600 ms.
Gambar 4.10 Grafik pada tabel 3 dengan Kp = 0,05 dan Kd = 1
Gambar 4.8 Grafik pada tabel 2 dengan Kd = 0,1 dan 0,0005

Tabel 4.3

Kp Kd overshoot Rising Settling


time time
0,05 0,8 24 % 30 ms 955 ms
0,05 1 24 % 45 ms 420 ms
0,05 1,2 24 % 45 ms 810 ms
0,1 1 0% 855 ms 1765 ms
0,1 3 2,3 % 535 ms 1650 ms
0,1 3,5 2,3 % 100 Tidak ada

Berdasarkan percobaan yang telah dilakukan dengan


Gambar 4.11 Grafik pada tabel 3 dengan Kp = 0,05 dan Kd = 1,2
melakukan pengambilan sampel acak untuk pengendali PD.
Pengambilan acak ini bertujuan agar praktikan dapat
memperoleh data respon yang cepat. Hasil simulasi
menunjukan grafik dengan nilai KP=0,05 dan KD = 1
merupakan respon yang tercepat di antara nilai sampel KP dan
KD yang diambil. Analisis ini berdasarkan tingkat overshoot
yang dapat terkontrol dan pergerakan respon lebih cepat
dibandingkan dengan respon yang lainnya. Grafik 4.10
menunjukan waktu respon untuk mencapai referensi di bawah
600 ms. Ditinjau dari grafik yang lain, maka grafik 4.10
dengan KP=0,05 dan KD = 1 merupakan grafik yang
mendekati spesifikasi respon.

Gambar 4.12 Grafik pada tabel 3 dengan Kp = 0,1 dan Kd = 1

Gambar 4.13 Grafik pada tabel 3 dengan Kp = 0,1 dan Kd = 3


bawah 300 ms. Respon ini lebih cepat dibandingkan dengan
respon –respon sebelumnya. Kasus ini merupakan
karakteristik dari pengendali PID

V. SIMPULAN
 Berdasarkan percobaan yang telah dilakukan, terdapat 4
jenis pengendali yang digunakan dalam praktikum ini.
Pengendali tersebut yaitu pengendali P, PI, PD, dan PID.
Masing-masing pengendali memiliki karakteristik masing-
Gambar 4.14 Grafik pada tabel 3 dengan Kp =0,1 dan Kd = 3,5 masing.
 Nilai Kp mempengaruhi tingkat kesensitifan respon.
Apabila nilai Kp yang diinputkan kecil maka berdampak
meningkatkan tingkatkan sensitivitas pengendali. Nilai Kp
Tabel 4 diinputkan besar maka berdampak pada kenaikan nilai
offset pengendali
Kp Ki overshoot Rising Settling  Nilai Td berperan dalam unsur derivative. Hal ini terlihat
time time dari cepatnya respon saat nilai Td bernilai besar sedangkan
0,1 0,000001 40 % 40 ms 185 ms dalam kondisi nilai Td kecil maka respon awal (rising
time) kurang cepat mencapai set point.
 Nilai Ti digunakan untuk menghilangkan offset. fungsi
dari besaran Ti akan bekerja maksimal apabila nilai Ti
bernilai tepat. Kondisi nilai Ti kecil dapat mengakibatkan
respon lebih sensitive dan mudah berosilasi sedangkan
dalam kondisi nilai Ti besar dapat mengakibatkan respon
menjadi lambat.

REFERENSI
[1] McRobert, Michael, “Beginning Arduino,” in Diving DC Motor, 5th ed.
Springer Science+Business Media, LLC., 233 Spring Street, 6th Floor,
New York USA:, year 2010, ch5. , sec. 1, pp. 99-102.
Gambar 4.15 Grafik pada tabel 4 dengan Kp = 0,1 dan Ki = [2] Modul 3 Praktikum Sistem Kendali Institut teknologi Sumatera
0,000001 [3] http://ctms.engin.umich.edu/CTMS/index.php?example=Introduction&s
ection=ControlPID
diakses tanggal 4 Desember 2018 pukul 15.43 WIB
Berdasarkan praktikum yang telah dilakukan diperoleh data [4] https://forum.arduino.cc/index.php?topic=410029.0
diakses tanggal 4 Desember 2018 pukul 15.40 WIB
pada gambar 4.15. Apabila ditinjau dari grafik tersebut maka, [5] https://medium.com/luosrobotics/an-introduction-to-pid-control-with-dc-
dapat dilihat bahwa respon mengalami overshoot sebesar 40% motor-1fa3b26ec661
dan menghabiskan waktu 40 ms serta mencapai settling time diakses tanggal 4 Desember 2018 pukul 15.00 WIB
saat 185 ms. Alasan menjadikan grafik 4.15 sebagai grafik
dengan respon terbaik dibanding grafik-grafik sebelumnya.
Hal ini diperkuat dengan waktu respon mencapai referensi di
Lampiran
1. Source code untuk tugas I
//PIN's definition
#define encoder0PinA 2
#define encoder0PinB 3
long I, interval = 1000;
long previousMillis = 0;
volatile int encoder0Pos = 0;
volatile boolean PastA = 0;
volatile boolean PastB = 0;
long timeNow;
int lastMilis;
long rpm;
const int Toleransi = 5;
double v_aktual, P,D,nilai_PID,delta_error,I_error;
double error, v_ref,motor_pwm,error_sebelumnya;
void setup()
{
pinMode(encoder0PinA, INPUT);
pinMode(9, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
digitalWrite(6,HIGH);
//turn on pullup resistor
//digitalWrite(encoder0PinA, HIGH); //ONLY FOR SOME ENCODER(MAGNETIC)!!!!
pinMode(encoder0PinB, INPUT);
//turn on pullup resistor
//digitalWrite(encoder0PinB, HIGH); //ONLY FOR SOME ENCODER(MAGNETIC)!!!!
PastA = (boolean)digitalRead(encoder0PinA); //initial value of channel A;
PastB = (boolean)digitalRead(encoder0PinB); //and channel B

//To speed up even more, you may define manually the ISRs
// encoder A channel on interrupt 0 (Arduino's pin 2)
attachInterrupt(0, doEncoderA, RISING);
// encoder B channel pin on interrupt 1 (Arduino's pin 3)
attachInterrupt(1, doEncoderB, CHANGE);
Serial.begin (115200);
timeNow = millis();
lastMilis = timeNow;
}
long akselerasi=0 ;
void loop()
{

v_ref = 50; //dalam percent, maksimum 1700 rpm

timeNow = millis();
int seconds = timeNow-lastMilis;
if(seconds>=1000){
rpm = (encoder0Pos/24)*60;
lastMilis=timeNow;
encoder0Pos=0;
}
v_aktual =map(rpm,0,2160,0,100); //konversi dari rpm ke persent
error = v_ref-v_aktual;
delta_error = error - error_sebelumnya;
I_error = I_error+error;
P = (Kp * error);
I = Ki*I_error;
D = Kd*delta_error/0.1;

double u = P + I + D ;

u = constrain(u, -5, 5);


motor_pwm += u;
motor_pwm = constrain(motor_pwm, 0, 255);
analogWrite(9, motor_pwm);

unsigned long currentMillis = timeNow;


delay(100);
if(currentMillis - previousMillis > interval) {
// save the last time you blinked the LED
previousMillis = currentMillis;
Serial.print("$");
Serial.print(v_ref);
Serial.print(", ");
P = (Kp * error);
I = Ki*I_error;
D = Kd*delta_error/0.1;

double u = P + I + D ;

u = constrain(u, -5, 5);


motor_pwm += u;
motor_pwm = constrain(motor_pwm, 0, 255);
analogWrite(9, motor_pwm);

unsigned long currentMillis = timeNow;


delay(100);
if(currentMillis - previousMillis > interval) {
// save the last time you blinked the LED

2. Screenshot hasil tugas

Anda mungkin juga menyukai