IMPLEMENTASI PID KEDALAM EMBEDED SYSTEM
MICROKONTROLER
Mikrokontroler adalah suatu chip berupa IC (Integrated Circuit) yang dapat menerima sinyal input, mengolahnya dan memberikan sinyal output sesuai dengan program yang diisikan ke dalamnya. Sinyal input mikrokontroler berasal dari sensor yang merupakan informasi dari lingkungan sedangkan sinyal output ditujukan kepada aktuator yang dapat memberikan efek ke lingkungan. Jadi secara sederhana mikrokontroler dapat diibaratkan sebagai otak dari suatu perangkat/produk yang mempu berinteraksi dengan lingkungan sekitarnya. Mikrokontroler pada dasarnya adalah komputer dalam satu chip, yang di dalamnya terdapat mikroprosesor, memori, jalur Input/Output (I/O) dan perangkat pelengkap lainnya. Kecepatan pengolahan data pada mikrokontroler lebih rendah jika dibandingkan dengan PC. Pada PC kecepatan mikroprosesor yang digunakan saat ini telah mencapai orde GHz, sedangkan kecepatan operasi mikrokontroler pada umumnya berkisar antara 1 – 16 MHz. Begitu juga kapasitas RAM dan ROM pada PC yang bisa mencapai orde Gbyte, dibandingkan dengan mikrokontroler yang hanya berkisar pada orde byte/Kbyte. Meskipun kecepatan pengolahan data dan kapasitas memori pada mikrokontroler jauh lebih kecil jika dibandingkan dengan komputer personal, namun kemampuan mikrokontroler sudah cukup untuk dapat digunakan pada banyak aplikasi terutama karena ukurannya yang kompak. Mikrokontroler sering digunakan pada sistem yang tidak terlalu kompleks dan tidak memerlukan kemampuan komputasi yang tinggi. Sistem yang menggunakan mikrokontroler sering disebut sebagai embedded system atau dedicated system. Embeded system adalah sistem pengendali yang tertanam pada suatu produk, sedangkan dedicated system adalah sistem pengendali yang dimaksudkan hanya untuk suatu fungsi tertentu. Sebagai contoh printer adalah suatu embedded system karena di dalamnya terdapat mikrokontroler sebagai pengendali dan juga dedicated system karena fungsi pengendali tersebut berfungsi hanya untuk menerima data dan mencetaknya. Hal ini berbeda dengan suatu PC yang dapat digunakan untuk berbagai macam keperluan, sehingga mikroprosesor pada PC sering disebut sebagai general purpose microprocessor (mikroprosesor serba guna). Pada PC berbagai macam software yang disimpan pada media penyimpanan dapat dijalankan, tidak seperti mikrokontroler hanya terdapat satu software aplikasi. Penggunaan mikrokontroler antara lain terdapat pada bidang-bidang berikut ini.
1
Otomotif : Engine Control Unit, Air Bag, fuel control, Antilock Braking System, sistem pengaman alarm, transmisi automatik, hiburan, pengkondisi udara, speedometer dan odometer, navigasi, suspensi aktif perlengkapan rumah tangga dan perkantoran : sistem pengaman alarm, remote control, mesin cuci, microwave, pengkondisi udara, timbangan digital, mesin foto kopi, printer, mouse. pengendali peralatan di industri. robotika. Saat ini mikrokontroler 8 bit masih menjadi jenis mikrokontroler yang paling populer dan paling banyak digunakan. Maksud dari mikrokontroler 8 bit adalah data yang dapat diproses dalam satu waktu adalah 8 bit, jika data yang diproses lebih besar dari 8 bit maka akan dibagi menjadi beberapa bagian data yang masing-masing terdiri dari 8 bit. Contoh mikrokontroler 8 bit antara lain keluarga Motorolla 68HC05/11, Intel 8051, Microchip PIC 16, dan yang akhir-akhir ini mulai populer keluarga Atmel AVR. Selain yang telah disebutkan di atas terdapat juga beberapa seri mikrokontroler lain yang cukup dikenal antara lain Basic Stamp dari Parallax (banyak digunakan untuk pembelajaran mikrokontroler) dan HD64180 dari Hitachi (sebagai pengendali LCD). Masing-masing mikrokontroler mempunyai cara dan bahasa pemrograman yang berbeda, sehingga program untuk suatu jenis mikrokontroler tidak dapat dijalankan pada jenis mikrokontroler lain. Untuk memilih jenis mikrokontroler yang cocok dengan aplikasi yang dibuat terdapat tiga kriteria yaitu
Jenis-jenis mikrokontroler : 1. Mikrokontroler AVR Mikrokonktroler Alv and Vegard’s Risc processor atau sering disingkat AVR merupakan mikrokonktroler RISC 8 bit. Karena RISC inilah sebagian besar kode instruksinya dikemas dalam satu siklus clock. Mikrokontroler AVR merupakan salah satu jenis arsitektur mikrokontroler yang menjadi andalan Atmel. Arsitektur ini dirancang memiliki berbagai kelebihan dan merupakan penyempurnaan dari arsitektur mikrokontroler-mikrokontroler yang sudah ada. Berbagai seri mikrokontroler AVR telah diproduksi oleh Atmel dan digunakan di dunia sebagai mikrokontroler yang bersifat low cost dan high performance. Di Indonesia, mikrokontroler AVR banyak dipakai karena fiturnya yang cukup lengkap, mudah untuk didapatkan, dan harganya yang relatif terjangkau. Varian Mikrokontroler AVR Antar seri mikrokontroler AVR memiliki beragam tipe dan fasilitas, namun kesemuanya memiliki arsitektur yang sama, dan juga set instruksi yang relatif tidak berbeda. Tabel dibawah ini membandingkan beberapa seri mikrokontroler AVR buatan Atmel. Keterangan: 2
Flashadalah suatu jenis Read Only Memory yang biasanya diisi dengan program hasil buatan manusia yang harus dijalankan oleh mikrokontroler RAM (Random Acces Memory) merupakan memori yang membantu CPU untuk penyimpanan data sementara dan pengolahan data ketika program sedang running EEPROM (Electrically Erasable Programmable Read Only Memory) adalah memori untuk penyimpanan data secara permanen oleh program yang sedang running Port I/O adalah kaki untuk jalur keluar atau masuk sinyal sebagai hasil keluaran ataupun masukan bagi program Timer adalah modul dalam hardware yang bekerja untuk menghitung waktu/pulsa UART (Universal Asynchronous Receive Transmit) adalah jalur komunikasi data khusus secara serial asynchronous PWM (Pulse Width Modulation) adalah fasilitas untuk membuat modulasi pulsa ADC (Analog to Digital Converter) adalah fasilitas untuk dapat menerima sinyal analog dalam range tertentu untuk kemudian dikonversi menjadi suatu nilai digital dalam range tertentu SPI (Serial Peripheral Interface) adalah jalur komunikasi data khusus secara serial secara serial synchronous ISP (In System Programming) adalah kemampuan khusus mikrokontroler untuk dapat diprogram langsung dalam sistem rangkaiannya dengan membutuhkan jumlah pin yang minimal Arsitektur Mikrokontroler AVR Mikrokontroler AVR sudah menggunakan konsep arsitektur Harvard yang memisahkan memori dan bus untuk data dan program, serta sudah menerapkan single level pipelining. Selain itu mikrokontroler AVR juga mengimplementasikan RISC (Reduced Instruction Set Computing) sehingga eksekusi instruksi dapat berlangsung sangat cepat dan efisien. Blok sistem mikrokontroler AVR dapat dilihat dalam Gambar 2.1. Salah satu seri mikrokontroler AVR yang banyak menjadi andalan saat ini adalah tipe ATtiny2313 dan ATmega8535. Seri ATtiny2313 banyak digunakan untuk sistem yang relatif sederhana dan berukuran kecil. Berikut adalah feature-feature mikrokontroler seri ATtiny2313. Kapasitas memori Flash 2 Kbytes untuk program Kapasitas memori EEPROM 128 bytes untuk data Maksimal 18 pin I/O 8 interrupt 8-bit timer 3
Analog komparator On-chip oscillator Fasilitas In System Programming (ISP) Sedangkan ATmega8535 banyak digunakan untuk sistem yang kompleks, memiliki input sinyal analog, dan membutuhkan memori yang relatif lebih besar. Berikut adalah feature-feature mikrokontroler seri ATmega8535.
Memori Flash 8 Kbytes untuk program Memori EEPROM 512 bytes untuk data Memori SRAM 512 bytes untuk data Maksimal 32 pin I/O 20 interrupt Satu 16-bit timer dan dua 8-bit timer 8 channel ADC 10 bit Komunikasi serial melalui SPI dan USART Analog komparator 4 I/O PWM Fasilitas In System Programming (ISP) 2. Mikrokontroler MCS-51 Mikrokonktroler ini termasuk dalam keluarga mikrokonktroler CISC (Complex Instruction Set Computer). Sebagian besar instruksinya dieksekusi dalam 12 siklus clock. Mikrokontroler MCS51 buatan Atmel terdiri dari dua versi, yaitu versi 20 kaki dan versi 40 kaki. Semua mikrokontroler ini dilengkapi dengan Flash PEROM (Programmable Eraseable Read Only Memory) sebagai media memori-program, dan susunan kaki IC-IC tersebut sama pada tiap versinya. Perbedaan dari mikrokontroler-mikrokontroler tersebut terutama terletak pada kapasitas memoriprogram, memori-data dan jumlah pewaktu 16-bit. Perbedaan mikrokontroler Atmel MCS51 tersebut ditunjukan pada Tabel 1.1 berikut.Mikrokontroler MCS51 Atmel versi mini (20 pin) dan versi 40 pin secara garis besar memiliki struktur dasar penyusun arsitektur mikrokontroler yang sama. Bagian-bagian tersebut secara lebih lengkap (detil) ditunjukan dalam diagram blok berikut. 4
Mikrokontroler MCS51 Atmel versi 40 kaki mempunyai 32 kaki sebagai port paralel dan 8 pin yang lain untuk konfigurasi kerja mikrokontroler. Satu port paralel terdiri dari 8 kaki, dengan demikian 32 kaki tersebut membentuk 4 buah port paralel yang masing-masing dikenal sebagai port 0, port 1, port 2, port 3. Nomor dari masing-masing jalur (kaki) dari port paralel mikrokontroler MCS51 Atmel mulai dari 0 sampai 7, jalur (kaki) pertama dari port 0 disebut sebagai P0.0 dan jalur terakhir untuk port 3 adalah P3.7. Mikrokontroler MCS51 Atmel versi mini mempunyai 20 kaki, 15 kaki diantaranya adalah kaki port 1 dan port 3. 5 kaki yang lain untuk konfigurasi kerja mikrokontroler. Port 1 terdiri dari 8 jalur yaitu P1.0 sampai P1.7 dan port 3 terdiri dari 7 jalur yaitu P3.0 sampai P3.5 dan P3.7. Susunan kaki mikrokontroler MCS51 atmel versi 40 kaki dapat dilihat pada Gambar 2.2 berikut. Fungsi-Fungsi Kaki (Pin) VCC Kaki VCC digunakan untuk masukan suplai tegangan. GND Kaki (pin) GND funsinya sebagai saluran ground atau pentanahan. RST Kaki RST fungsinya sebagai masukan reset. Kondisi “1” selama 2 siklus mesin pada saat oscillator bekerja akan me-reset mikrokontroler yang bersangkutan. ALE/ Kaki ALE digunakan sebagai keluaran ALE atau Adreess Latch Enable yang akan menghasilkan pulsa-pulsa untuk menahan byte rendah (low byte) alamat selama mengakses memori eksternal. Kaki ini juga berfungsi sebagai masukan pulsa program (the program pulse input) atau selama pemrograman flash. Pada operasi normal, ALE akan berpulsa dengan laju 1/6 dari frekuensi kristal dan dapat digunakan sebagai pewaktuan (timing) atau pendekatan (clocking) rangkainan eksternal. Kaki (Program Store Enable) merupakan sinyal baca untuk memori program eksternal. Saat mikrokontroler MCS51 menjalankan program dari memori eksternal, akan diaktifkan dua kali per-siklus mesin, kecuali dua aktivasi dilompati (diabaikan) saat mengakses memori data eksternal. /VPP Kaki /VPP ( Exkternal Access Enable) fungsinya sebagai kontrol untuk mengakses memori. harus dihubungkan ke ground, jika mikrokontroler akan mengeksekusi program dari memori eksrternal. Selain itu harus dihubungkan ke VCC jika akan mengakses program secara internal. Kaki ini juga berfungsi untuk menerima tegangan 12V (VPP) selama pemrograman flash, khususnya untuk tipe mikrokontroler 12V volt.
5
XTAL1 Kaki XTAL1 merupakan masukan untuk penguat inverting oscillator dan masukan untuk clock internal pada rangkaian operasi mikrokontroler. XTAL2 Kaki XTAL2 merupakan keluaran dari rangkaian penguat inverting oscilator 3. Mikrokontroler PCI Pada awalnya, PIC merupakan kependekan dari Programmable Interface Controller. PIC termasuk keluarga mikrokonktroler berarsitektur Harvard yang dibuat oleh Microchip Technology. Awalnya dikembangkan oleh Divisi Mikroelektronik General Instruments dengan nama PIC1640. PIC memungkinkan Anda untuk mengontrol perangkat output ketika mereka dipicu oleh sensor dan switch. Program dapat dihasilkan dengan menggunakan diagram alur dalam perangkat lunak komputer, yang kemudian dapat di-download ke dalam chip PIC. Mereka dapat ditulis ulang sebanyak yang Anda inginkan. Memori jenis ini disebut memori flash. Sebuah mikrokontroler PIC adalah sirkuit terpadu tunggal cukup kecil untuk muat di telapak tangan dan berisi memori pengolahan unit, Jam dan sirkuit Input / Output dalam satu unit. Sebuah mikrokontroler PIC, oleh karena itu, sering digambarkan sebagai komputer dalam sirkuit terpadu. Mikrokontroler PIC dapat dibeli kosong dan kemudian diprogram dengan program kontrol tertentu. Mikrokontroler PIC juga dapat dibeli dengan pra-diprogram seperangkat perintah yang memungkinkan download langsung dari kabel komputer dan mengurangi biaya peralatan pemrograman. 4. Mikrokontroler ARM ARM adalah prosesor dengan arsitektur set instruksi 32-bit RISC (Reduced Instruction Set Computer) yang dikembangkan oleh ARM Holdings. ARM merupakan singkatan dari Advanced RISC Machine (sebelumnya lebih dikenal dengan kepanjangan Acorn RISC Machine). Pada awalnya ARM prosesor dikembangkan untuk PC (Personal Computer) oleh Acorn Computers, sebelum dominasi Intel x86 prosesor- Microsoft di IBM PC kompatibel menyebabkan Acorn Computers bangkrut. Melalui izin dari seluruh dunia, arsitektur ARM adalah yang paling umum dilaksanakan 32-bit set instruksi arsitektur. Arsitektur ARM diimplementasikan pada Windows, Unix, dan sistem operasi mirip Unix, termasuk Apple iOS, Android, BSD, Inferno, Solaris, WebOS, Plan 9 dan GNU / Linux. Advanced RISC Machine awalnya dikenal sebagai Mesin Acorn RISC.
6
PID(PROPORTIONAL INTEGRAL DERIFATIV).
Menurut sebuah survey, bahwa 97% industri yang bergerak dibidang proses menggunakan kontrol PID dalam melakukan pengontrolannya. Luasnya penggunaan kontrol PID pada dasarnya dilatarbelakangi beberapa hal diantaranya: Kesederhanaan struktur kontrol. Hanya mempunyai 3 parameter utama yang perlu diatur (tuning). kontrol PID memiliki sejarah yang panjang. PID telah digunakan jauh sebelum era digital berkembang (1930an) Kontrol PID dalam banyak kasus telah terbukti menghasilkan unjuk kerja yang relatif memuaskan baik digunakan sebagai sistem regulator maupun sebagai sistem servo. Pada awalnya kontrol PID umumnya diimplementasikan dengan menggunakan rangkaian elektronika analog. Bahkan banyak diantaranya direalisasikan dalam komponen mekanis dan pneumatis murni.
Seiring dengan berkembangnya dunia digital (terutama mikroprosessor dan mikrokontroler) maka algoritma kontrol PID dapat direalisasikan kedalam bentuk persamaan PID digital. Yang jika diimplementasikan hanya berupa sebuah program saja yang ditanamkan kedalam embedded system (mikroprosessor atau mikrokontroler).
Berikut adalah beberapa penjelasan singkat tentang kontrol PID:
Kontrol Proporsional kontrol proporsional berfungsi untuk memperkuat sinyal kesalahan penggerak (sinyal error), sehingga akan mempercepat keluaran sistem mencapai titik referensi. Hubungan antara input kontroler u(t) dengan sinyal error e(t) terlihat pada persamaan 1.
Kp adalah konstanta proporsional. Diagram blok kontrol proporsional ditunjukkan pada gambar 1.
7
gambar 1 diagram blok kontrol proporsional
Kontrol Integral Kontrol integral pada prinsipnya bertujuan untuk menghilangkan kesalahan keadaan tunak (offset) yang biasanya dihasilkan oleh kontrol proporsional. Hubungan antara output kontrol integral u(t) dengan sinyal error e(t) terlihat pada persamaan 2.
Ki adalah konstanta integral. Diagram blok kontrol integral ditunjukkan pada gambar 2.
gambar 2 diagram blok kontrol integral
Kontrol Derivatif (turunan) Kontrol derivatif dapat disebut pengendali laju, karena output kontroler sebanding dengan laju perubahan sinyal error. Hubungan antara output kontrol derivatif u(t) dengan sinyal error e(t) terlihat pada persamaan 3.
8
Blok kontrol derivatif ditunjukkan pada Gambar 3. Kontrol derivatif tidak akan pernah digunakan sendirian, karena kontroler ini hanya akan aktif pada periode peralihan. Pada periode peralihan, kontrol derivatif menyebabkan adanya redaman pada sistem sehingga lebih memperkecil lonjakan. Seperti pada kontrol proporsional, kontrol derivatif juga tidak dapat menghilangkan offset.
gambar 3 diagram blok kontrol derivatif
Gabungan dari ketiga kontroler tersebut menjadi kontrol PID. Diagram Blok dari kontrol PID ditunjukan pada gambar 4.
gambar 4 diagram blok kontrol PID
Sehingga persamaan untuk kontrol PID adalah:
Atau
9
Dengan: u(t) = sinyal output pengendali PID Kp = konstanta proporsional Ti = waktu integral Td = waktu derivatif Ki = konstanta integral (Kp⁄Ti ) Kd = konstanta derivatif (Kp.Td ) e(t) = sinyal error = referensi – keluaran plant = set point – nilai sensor
Untuk persamaan PID no. (4) merupakan PID bentuk independent dan persamaan no. (5) merupakan PID bentuk dependent. Istilah tersebut mengacu kepada ketergantungan setiap suku persamaan terhadap nilai Kp. Untuk persamaan no (4), jika kita melakukan peruhan nilai pada konstanta proporsional (Kp) maka tidak akan mempengaruhi konstanta parameter lainnya. Sedangkan untuk persamaan no. (5), dengan merubah nilai Kp maka akan merubah nilai dari parameter-parameter lainnya. Disini saya akan menggunakan persamaan PID bentuk independent. Jika anda ingin menggunakan persamaan dependent, maka anda tinggal memasukan nilai dari Ki=Kp/Ti dan Kd=Kp.Td
Pada persamaan-persamaan (persamaan (1) – (5)) diatas merupakan persamaan dalam kawasan waktu continuous (analog). Sedangkan agar persamaan persamaan tersebut dapat direalisasikan dalam bentuk pemrograman, maka persamaan dalam kawasan waktu continuous tersebut harus didiskretisasi terlebih dahulu (kawasan digital). Berikut adalah diskretisasi menggunakan metode numerik rectangular mundur (backward rectangular).
Kontrol Proporsional Jika dari persamaan (1) didiskretisai maka akan menjadi:
Kontrol Integral Jika dari persamaan (2) didiskretisai maka akan menjadi:
10
Tc= waktu sampling atau waktu cuplik (Sampling time) Agar lebih mengerti dari persamaan diatas, akan saya terangkan secara singkat dan jelas.
“Integral (∫) adalah suatu operator matemamis dalam kawasan kontinyu jika didiskretisasi maka akan menjadi sigma (∑), yang merupakan operator matematis dalam kawasan diskret. Dimana fungi dari operator sigma adalah menjumlahkan nilai ke i sampai dengan nilai ke k. Berdasarkan perhitungan diatas variabel error (e) yang di integralkan sehingga dalam kawasan diskret menjadi e(0)+e(1)+…+e(k1)+e(k), atau dengan kata lain error yang sebelumnya dijumlahkan dengan error-error yang sebelumnya hingga error yang sekarang.”
Kontrol Derivatif Jika dari persamaan (3) didiskretisai dengan menggunakan cara yang sama seperti kontrol integral maka akan menjadi:
Tc= waktu sampling atau waktu cuplik (Sampling time) Agar lebih mengerti dari persamaan diatas, akan saya terangkan secara singkat dan jelas.
“Derivatif (de/dt) adalah suatu operator matemamis dalam kawasan kontinyu jika didiskretisasi maka akan menjadi limit, yang merupakan operator matematis dalam kawasan diskret. Dimana fungi dari operator limit adalah mengurangi nilai ke k dengan nilai ke k-1. Berdasarkan perhitungan diatas variabel error (e) yang di derivatifkan, atau dengan kata lain error yang sekarang dikurangi error yang sebelumnya.”
11
Waktu sampling adalah lamanya waktu yang digunakan untuk mencuplik atau mensampling nilai dari sensor. Nilai dari sensor ini berguna untuk mendapatkan sinyal error (error(e)=set point-nilai sensor). Dimana waktu sampling ini sangat berpengaruh pada kesensitifan sistem yang akan dikontrol. Source code library MrLCD.c #ifndef MrLCD #define MrLCD #include
#include #include <stdlib.h>
#define MrLCDsCribe
PORTB
#define DataDir_MrLCDsCribe DDRB #define MrLCDsControl
PORTC
#define DataDir_MrLCDsControl #define LightSwitch
DDRC
2
#define ReadWrite
1
#define BipolarMood
0
void Check_If_MrLCDs_IsBusy(void); void Peek_A_Boo(void); void Send_A_Command(unsigned char command); void Send_A_Character(unsigned char character); void Send_StringOfCharacters(char *stringOfCharacter ); void Goto_location(uint8_t x, uint8_t y); void initLCD(void);
12
void Send_stringWithLocation(uint8_t x, uint8_t y,char *stringOfCharacter); void Send_IntegerWithLocation(uint8_t x, uint8_t y,int Value,char NumberOfInteger);
void Check_If_MrLCDs_IsBusy(void){ DataDir_MrLCDsCribe = 0; MrLCDsControl |=1<=0x80){ Peek_A_Boo(); }
DataDir_MrLCDsCribe =0xFF; }
void Peek_A_Boo(){ MrLCDsControl|=1<
13
Peek_A_Boo(); MrLCDsCribe=0; } void Send_A_Character(unsigned char character){ Check_If_MrLCDs_IsBusy(); MrLCDsCribe=character; MrLCDsControl &=~(1<
void Send_StringOfCharacters(char *stringOfCharacter){ while(*stringOfCharacter > 0){ Send_A_Character(*stringOfCharacter++); } }
char precicion[2]={0,64}; void Goto_location(uint8_t x, uint8_t y){ x--; y--; Send_A_Command(0x80 +precicion[y]+x); }
14
void Send_stringWithLocation(uint8_t x, uint8_t y,char *stringOfCharacter){ Goto_location(x,y); Send_StringOfCharacters(stringOfCharacter); }
void Send_IntegerWithLocation(uint8_t x, uint8_t y,int Value,char NumberOfInteger){ char StringOfValue[NumberOfInteger]; itoa(Value, StringOfValue,10); for(int i =0 ;i
DataDir_MrLCDsControl |= 1<
15
source code PID #include #include <stdlib.h> #include #include "MrLCD.h" float Kp=-5, Ki=-3, Kd=-1, error_sblmI=0, error_sblmD=0, outPID, set_point=60, Tc=0.01, error, errorI, errorD, outP, outI, outD,nilai_sensor; char buffer[8]; void kontrol_PID(void);
int main(void){ initLCD(); DDRD |= (1<<7); TCCR2|= (1<<WGM21)|(1<<WGM20)|(1<
16
while(1){
}
} ISR(TIMER1_COMPA_vect){ nilai_sensor=((ADCH*100)/255); kontrol_PID(); if(outPID>=254){ outPID=254; } if(outPID<=0){ outPID=0; } Send_stringWithLocation(1,2,dtostrf(nilai_sensor, 5,2, buffer)); Send_stringWithLocation(9,1,dtostrf(error, 5,2, buffer)); Send_stringWithLocation(1,1,dtostrf(outPID, 5,2, buffer)); Send_stringWithLocation(9,2,dtostrf(errorI, 5,2, buffer)); OCR2=outPID; ADCSRA |=1<
17
error=set_point-nilai_sensor; outP=Kp*error; //nilai Kp ditentukan melalui tuning
//kendali integral errorI=error+error_sblmI; outI=Ki*errorI*Tc; //nilai Ki ditentukan melalui tuning error_sblmI=errorI;
//kendali Deferensial errorD=error-error_sblmD; outD=(Kd*errorD)/Tc; //nilai Kd ditentukan melalui tuning error_sblmD=error;
//kontrol PID, merupakan gabungan dari kontrol P, I dan D outPID=outP+outI+outD; }
18