Pengaturan Kecepatan Motor DC dengan PI
Pengaturan Kecepatan Motor DC dengan PI
Seiring dengan semakin berkembangnya kemajuan teknologi di era modern ini, membawa
manusia untuk terus melakukan inovasi-inovasi dan kreasi guna memanfaatkan kemajuan
teknologi yang ada, khususnya dibidang perindustrian baik skala besar maupun industri
rumahan. Dibidang perindustrian kebutuhan sistem kontrol yang efektif dan efisien sangat
diperlukan untuk mempermudah, menghemat atau mempersingkat waktu kerja dan tenaga pada
sebuah proses produksi. Dalam hal ini sebuah plant yang akan digunakan adalah motor DC
sebagai sistem agitator. Sistem tersebut dijaga putaran motornya secara konstan menggunakan
sistem kendali Propotional Integral (PI). Salah satu metode pengaturan kecepatan motor DC
yang dapat dilakukan adalah dengan mengatur tegangan yang masuk kedalam motor, dalam hal
ini besar kecil tegangan yang masuk ke motor dipengaruhi oleh besar kecil duty cycle atau lebar
sinyal PWM. Sinyal PWM akan dibangkitkan oleh mikrokontroler dan dinputkan sebagai
penyulutan pada driver motor DC. SEmakin besar duty cycle atau lebar sinyal PWM yang
diberikan pada driver motor DC maka semakin cepat kecepatan dari motor DC tersebut begit
sebaliknya.
i
KATA PENGANTAR
Puji serta syukur kami panjatkan Kehadirat Allah SWT Tuhan Yang Maha Esa yang telah
memberikan Karunia dan Rahmat-Nya, sehingga kami mampu menyelesaikan buku ajar Aplikasi
Sitem Kendali PID sebagai penunjang bahan ajar pada matakuliah di Program Studi Teknik
Elektro Industri Politeknik Elektronika Negeri Surabaya.
Tak lupa juga kami ucapkan terima kasih kepada tim teaching mata kuliah Teknik Kontrol
Industri program studi Teknik Elektro Industri yang telah memberikan kontribusi, masukan dan
arahan sehingga dapat terselesaikanya buku ajar ini. Bukul ajar Chapter 1 ini berisikan tentang
perancangan dan penerapan sistem kendali PI pada pengaturan kecepatan motor DC.
Penyusun menyadari bahwa masih terdapat kekurangan maupun mungkin kesalahan dalam
penyusunan buku ajar ini sehingga penyusun mengharapkan kritik dan saran yang bersifat
membangun untuk perbaikan di masa yang akan datang dari seluruh pembaca.
Akhir kata, penyusun berharap dengan adanya buku ajar ini dapat memberikan manfaat bagi
pembaca dan para mahasiswa/mahasiswi Program Studi Teknik Elektro Industri. Penyusun
mengucapkan terima kasih dan mohon maaf jika terdapat kesalahan dalam penyusunan buku ajar
ini.
ii
DAFTAR ISI
Abstrak……….......................................................................................................................... i
Kata Pengantar.......................................................................................................................... ii
Daftar Isi ….............................................................................................................................. iii
CHAPTER 1
Pengaturan Kecepatan Motor DC 1
1.1 Motor DC ………………………………….................................................... 1
1.1.1 Klasifikasi Motor DC……………………………………………………….. 3
1.2 Sistem Kendali PID…………………………………………………………. 4
1.3 Mikrokontroler………………………………………………………………. 5
1.4 Perencanaan Driver Motor DC ……………………………………………... 7
1.5 Perencanaan Sensor Kecepatan (Rotary Encoder) …………………………. 7
1.6 Perencanaan dan Perhitungan Sistem Kendali PI…………………………... 8
1.7 Pengujian Driver Motor DC………………………………………………… 12
1.8 Pengujian Sensor Kecepatan………………………………………………... 15
1.9 Pengujian Sistrem Kendali PI……………………………………………….. 17
Daftar Pustaka……………………………………………………………………..…... 27
Apendix
iii
CHAPTER 1
PENGATURAN KECEPATAN MOTOR DC
POKOK BAHASAN:
Pengenalan Motor DC
Pengenalan Sistem Kendali PID
Pengenalan Mikrokontroler
Perencanaan Driver Motor DC
Perencanaan Sensor Kecepatan
Perhitungan dan Perencanaan Sistem Kendali PI
Pengujian Driver Motor DC
Pengujian Sensor Kecepatan Motor DC
Pengujian Pengaturan Kecepatan Motor DC
TUJUAN BELAJAR:
Setelah mempelajari bab ini, mahasiswa diharapkan dapat:
Melakukan pengaturan kecepatan motor DC dengan menerapkan sistem Close Loop
Memahami perencaan dan perhitungan kontrol PID
Melakukan perancangan driver motor DC
Melakukan perencanaan sensor kecepatan
Mampu mengimplemetasikan kontrol PID sebagai kontrol pada pengaturan kecepatan
motor DC
1.1. Motor DC
Motor arus searah (motor DC) telah ada selama lebih dari seabad. Keberadaan motor
DC telah membawa perubahan besar sebelum dikenalkan motor induksi. Motor DC telah
memunculkan kembali Silicon Controller Rectifier yang digunakan untuk memfasilitasi
kontrol kecepatan pada motor. Mesin listrik dapat berfungsi sebagai motor listrik apabila
didalam motor listrik tersebut terjadi proses konversi energi listrik menjadi energi mekanik.
Sedang untuk motor DC sendiri memerlukan suplai tegangan yang searah pada
kumparan jangkar dan kumparan medan untuk diubah menjadi energi mekanik. Pada
motor DC kumparan medan disebut stator (bagian yang tidak berputar) dan
kumparanjangkar disebut rotor (bagian yang berputar).
1
Prinsip kerja dari motor DC adalah pada daerah kumparan medan yang dialiri arus
listrik akan menghasilkan medan magnet yang melingkupi kumparan jangkar dengan arah
tertentu. Konversi dari energi listrik menjadi energi mekanik (motor) atau sebaliknya
berlangsung melalui medan magnet, dengan demikian medan magnet disini selain
berfungsi sebagai tempat untuk menyimpan energi, sekaligus berfungsi sebagai tempat
berlangsungnya proses perubahan energi dan daerah tersebut dapat dilihat pada Gambar 2.2.
Bagian-bagian penting dari sebuah motor dc dapat dilihat pada Gambar 2.3, dimana
stator mempunyai kutub yang menonjol dan dikelilingi oleh kumparan medan. Pembagian
dari fluks yang terdapat pada daerah celah udarayang dihasilkan oleh lilitan medan
secara simetris yang berada disekitar daerah tengah kutub kumparan medan.
Kumparan penguat dihubungkan secara seri, letak kumparan jangkar berada pada slot besi
yang berada disebelah luar permukaan jangkar. Pada jangkar terdapat komutator yang
berbentuk silinder dan isolasi sisi kumparan yang dihubungkan dengan komutator
pada beberapa bagian yang berbeda sesuai dengan jenis belitan.
2
1.1.1. Klasifikasi Motor DC
Mesin DC dapat digolongkan berdasarkan sambungan listrik pada lilitan armature dan
lilitan stator. Hal ini dikarenakan sambungan dari lilitan pada motor dapat mempengaruhi
karakteristik kerja motor. Lilitan stator dapat berkonfigurasi self-excited atau separately-
excited maksudnya ujung dari lilitan dapat dihubungkan dengan terminal dari tegangan atau
dari sumber teganagn terpisah. Lebih jauh lagi, pada self-excited motor lilitan dapat
dihubungkan secara seri maupun parallel terhadap lilitan armature. Tiap jenis sambungan
berbeda akan sangat mempengaruhi tipe operasi mesin. Pengaturan kecepatan motor DC
dapat dilakukan dengan beberapa metode sesuai dengan jenis motornya, yaitu dapat
dilakukan dengan mengatur tegangan motor, mengatur flux motor, mengatur tahanan
armature, dan arus jangkar. Berikut rangkaian pengganti motor DC yang ditunjukan pada
gambar dibawah ini.
3
𝑉𝑡 = 𝑅𝑓. 𝐼𝑎 + 𝑅𝑎. 𝐼𝑎 + 𝐸𝑏 ………………… ``````````````````````` (2)
𝐸𝑏 = 𝐾𝛷𝜔𝑚 = 𝐾 (𝐾𝑓. 𝐼𝑎) …………………… …… (3)
𝑉𝑡
𝐼𝑎 ………………… qqqqqq (4)
𝑅𝑎+𝑅𝑓+𝐾𝜔𝑚
𝑉𝑡−𝐼𝑎.𝑅𝑎
𝑁= 𝐾𝛷
(5)
Keterangan :
N = Kecepatan Ia = Arus jangkar
K = Konstanta Ф = Fluks magnet
Ra = Tahanan Jangkar Vt = Tegangan motor
PID merupakan gabungan dari tiga mode. Mode Proportional (P), Integral (I), dan
Derivative (D). Penggabungan ini berfungsi untuk menutupi kekurangan dan menonjolkan
kelebihan dari masing-masing mode kendali. Misalnya mode P berfungsi mempercepat waktu
naik agar respon sistem lebih cepat mencapai setpoint, namun masih meninggalkan offset.
Kelemahan mode P dapat diatasi dengan menggabungkan mode I yang mampu
menghilangkan offset dan mengurangi terjadinya maksimum overshoot yang terlalu besar.
Karena mode I dapat menyebabkan respon sistem lambat, maka dapat digabungkan dengan
mode D. Bentuk umum sistem kendali PID ditunjukkan pada persamaan 6.
1 𝑑𝑒(𝑡)
u(t) = 𝐾𝑃 (𝑒(𝑡) + 𝑇 ∫ 𝑒(𝑡)𝑑𝑡 + 𝑇𝑑 ) (6)
𝑖 𝑑𝑡
4
𝑑𝑒(𝑡)
𝑢(𝑡) = 𝐾𝑃 𝑒(𝑡) + 𝐾𝑖 ∫ 𝑒(𝑡)𝑑𝑡 + 𝐾𝑑 (8)
𝑑𝑡
𝐾𝑃
Bila 𝐾𝑖 = dan 𝐾𝑑 = 𝐾𝑝 𝑇𝑑
𝑇𝑖
𝐾𝑃 𝑒(𝑡)
𝑡 𝑢(𝑡)
𝑒(𝑡) 𝐾𝑖 ∫ 𝑒 (𝑡) 𝑑𝑡
0
𝑑
𝐾𝑑 𝑒(𝑡)𝑑𝑡
𝑑𝑡
Gambar 7. Diagram Blok Sistem Kendali PID
Pada penalaan parameter pengendali PID, gain Kp tidak boleh terlalu besar karena
semakin besar gain Kp maka sistem akan semakin sensitif dan cenderung tidak stabil. Jika Kp
kecil, maka offset menjadi besar. Jika Ti kecil, maka dapat menghilangkan offset tetapi
cenderung membawa sistem menjadi lebih sensitif dan mudah berosilasi. Jika Ti besar, maka
belum tentu efektif menghilangkan offset dan juga membuat respon menjadi lebih lambat.
Jika Td besar, maka akan membuat unsur derivative menjadi lebih menonjol sehingga respon
cenderung cepat. Jika Td kecil, maka kurang membantu pada saat pencapaian setpoint.
1.3. Mikrokontroler
AVR merupakan seri mikrokontroler CMOS 8-bit buatan Atmel, berbasis arsitektur
RISC (Reduced Instruction Set Computer). Hampir semua instruksi dieksekusi dalam satu
siklus clock. AVR mempunyai 32 register general-purpose, timer/counter fleksibel dengan
mode compare, interrupt internal dan eksternal, serial USART, programmable Watchdog
Timer, dan mode power saving. AVR Mempunyai ADC, PWM internal dan mempunyai In-
System Programmable Flash on-chip yang mengijinkan memori program untuk diprogram
ulang dalam sistem menggunakan hubungan serial SPI.
5
3. Memiliki kapasitas Flash memori 16 Kbyte, EEPROM 512 Byte dan SRAM 1 Kbyte.
4. Saluran I/O sebanyak 32 buah, yaitu Port A, Port B, Port C, dan Port D.
5. CPU yang terdiri atas 32 buah register.
6. Unit interupsi internal dan eksternal.
7. Port USART untuk komunikasi serial.
8. Fitur Peripheral yang terdiri dari :
a. Tiga buah Timer/Counter denga kemampuan pembandingan, yaitu :
o 2 buah Timer/Counter 8 bit dengan Prescaler terpisah dan Mode Compare
o 1 buah Timer/Counter 16 bit dengan Prescaler terpisah, Mode Compare, dan
Mode Capture
b. Real Time Counter dengan Oscillator tersendiri
c. 4 channel PWM
d. 8 channel, 10-bit ADC, yaitu :
o 8 Single-ended Channel
o 7 Differential Channel hanya kemasan TQFP
o 2 Differential Channel dengan Programmable Gain 1x, 10x atau 200x
e. Byte-oriented Two-wire Serial Interface
f. Programmable Serial USART
g. Antarmuka SPI
h. Watchdog Timer dengan oscillator internal
i. On-chip Analog Comparator
6
1.4. Perencanaan Driver Motor DC
Pada dasarnya beberapa aplikasi yang menggunakan motor DC harus dapat diatur
kecepatan dan arah putar dari motor DC itu sendiri. Untuk dapat melakukan pengaturan
kecepatan motor DC dapat menggunakan metode PWM (Pulse Width Modulation) sedangkan
untuk mengatur arah putarannya dapat menggunakan rangkaian H-bridge yang tersusun dari
4 buah transistor.
Suplai
TIP 3055
PWM
Motor
Jika diinginkan sebuah motor DC yang dapat diatur kecepatannya tanpa dapat mengatur
arah putarnya, maka kita dapat menggunakan sebuah transistor sebagai driver. Untuk
mengatur kecepatan putar motor DC digunakan PWM yang dibangkitkan melalui fitur Timer
pada mikrokontroler. Sebagian besar power supply untuk motor DC adalah sebesar
12 V – 24 V, sedangkan output PWM dari mikrokontroler maksimal sebesar 5 V. Oleh
karena itu digunakan transistor sebagai penguat tegangan. Dibawah ini adalah gambar driver
motor DC menggunakan transistor.
7
sehingga photo-transistor ini dapat mendeteksi cahaya dari LED yang berseberangan.
Piringan tipis tadi dikopel dengan poros motor, atau divais berputar lainnya yang ingin kita
ketahui posisinya, sehingga ketika motor berputar piringan juga akan ikut berputar. Apabila
posisi piringan mengakibatkan cahaya dari LED dapat mencapai photo-transistor melalui
lubang-lubang yang ada, maka photo-transistor akan mengalami saturasi dan akan
menghasilkan suatu pulsa gelombang persegi. Pada Gambar 10 menunjukkan bagan skematik
sederhana dari rotary encoder. Semakin banyak deretan pulsa yang dihasilkan pada satu
putaran menentukan akurasi rotary encoder tersebut, akibatnya semakin banyak jumlah
lubang yang dapat dibuat pada piringan menentukan akurasi rotary encoder tersebut.
Rangkaian penghasil pulsa pada sensor kecepatan ini yang digunakan umumnya
memiliki output yang berubah dari +5V menjadi 0.5V ketika cahaya diblok oleh piringan dan
ketika diteruskan ke photo-transistor. Rumus perhitungan kecepatan pada sensor Rotary
encoder ini adalah sebagai berikut :
F = Sw x N / 60 (9)
Dimana :
F = Frekwensi / Pulsa
Sw = Kecepatan piringan
N = Jumlah Lubang
8
Integral merupakan kombinasi karakteristik dari kontrol Proporsional dan kontrol
Integral, dimana keluaran kontroler Proporsional adalah Proporsional terhadap error sistem,
sedangkan kontroler Integral merespon ukuran dan lama waktu dari sinyal
error,sehingga sinyal output dari pengontrol integral adalah hasil integral matematik
dari sinyal error. Sinyal error akan muncul ketika terdapat perubahan antara output
yang dihasilkan dengan settingpoint yang diberikan. Aksi integral akan menyebabkan
output terus berubah sampai tidak ada error dalam proses. Besarnya aksi integral diukur
dalam menit pergulungan yang merupakan hubungan antara perubahan terhadap waktu.
Kontroler integral juga mempunyai keluaran dengan perubahan rate yang sebanding
terhadap error, blok diagram dari kontrol Propotionan Integral dapat dilihata pada Gambar
11.
9
2. Ketika sinyal error berharga nol, sinyal keluaran bertahan pada nilai sebelumnya,
sedangkan jika sinyal error tidak berharga nol, maka sinyal keluaran akan mengalami
perubahan sesuai dengan besarnya sinyal error dan nilai Ki. Nilai Ki yang besar akan
mempercepat hilangnya nilai offset tetapi mengakibatkan peningkatan osilasi dari sinyal
kontrol. Berikut disajikan bentuk perhitungan model matematik untuk menentukan parameter
nilai KP dan KI pada kontroler tersebut 11 :
𝐾
𝑂𝐿𝑇𝐹 = (10)
𝜏𝑠+1
𝑌𝑠𝑠 0.3168 1 1
𝐾= = = 1.584 𝜏= . 𝑡𝑠 = . 13 = 2.6 (11)
𝑋𝑠𝑠 0.2 5 5
𝐾 1.584
𝑂𝐿𝑇𝐹 = = (12)
𝜏𝑠+1 2.6𝑠+1
Dimana :
Yss = Kecepatan konstan (Rpm)
Xss = Kecepatan set point (Rpm)
ts = Waktu konstan (Menit)
10
τ = ts / 5 (sistem perhitungan orde 1)
𝐾𝑝 𝐾𝑝 1
𝐶𝐿𝑇𝐹 = 𝐾𝑝 + 𝜏𝑖𝑠 = 𝐾𝑝 + 𝑥 (13)
𝜏𝑖 𝑠
1 𝜏 1 2.6
𝐾𝑃 = 𝑥 𝐾𝑃 = 𝑥 = 0.105 (14)
𝑘 𝜏∗ 1.584 15.6
𝑡𝑠 ∗ = 5 . 𝜏 ∗ (15)
1 1
𝑡𝑠 ∗= 𝑥 𝑡𝑠 𝑡𝑠 ∗= 𝑥 13 = 0.13 𝑚𝑒𝑛𝑖𝑡 ≈ 7.8 𝑠 (16)
𝑛∗ 100
7.8
𝜏 ∗= = 1.56𝑠 (17)
5
Dimana :
τ = ts / 5 (sistem perhitungan orde 1)
ts = waktu konstan
ts* = waku konstan baru yang diinginkan
n* = percepatan waktu konstan yang diinginkan
τ* = ts* / 5 (sistem perhitungan orde 1)
𝐾𝑝 𝐾𝑝 1
𝐶𝐿𝑇𝐹 = 𝐾𝑝 + 𝜏𝑖𝑠 = 𝐾𝑝 + 𝑥 (18)
𝜏𝑖 𝑠
𝐾𝑝 1.05
𝐾𝑖 = = = 0.4 (19)
𝜏 2.6
Gambar 13. Blok Diagram Rangkaian Kontrol Open Loop & Close Loop Untuk Motor
11
Gambar 14. Hasil Simulasi Kontrol Open Loop Menggunakan Matlab Untuk Motor
Gambar 15. Hasil Simulasi Kontrol Close Loop Menggunakan Matlab Untuk Motor
Mikrokontroler
12
Sinyal PWM yang dihasilkan oleh mikrokontroler, yang nantinya akan digunakan untuk
mengatur kecepatan putaran motor melalui rangkaian driver motor.
Gambar 17. Sinyal PWM Duty Cycle 50 %; f =43200Hz (volt/div : 0.5 V ; time/div : 10 μs)
Dari Gambar 17 dapat diketahui bahwa sinyal PWM yang dibangkitkan oleh mikrokontroler
dengan Duty Cycle 50% memiliki tegangan output sebesar 2.5 volt.
Gambar 18. Sinyal PWM Duty Cycle 80 %; f =43200Hz (volt/div : 0.5 V ; time/div : 10 μs)
Dari Gambar 18 dapat diketahui bahwa sinyal PWM yang dibangkitkan oleh mikrokontroler
dengan Duty Cycle 80% memiliki tegangan output sebesar 4 volt.
Gambar 19. Sinyal PWM Duty Cycle 95 %; f =43200Hz (volt/div : 0.5 V ; time/div : 10 μs)
13
Dari Gambar 19 dapat diketahui bahwa sinyal PWM yang dibangkitkan oleh mikrokontroler
dengan Duty Cycle 95% memiliki tegangan output sebesar 4.5 volt.
15
Tegangan ( Volt )
10
0
50% 60% 70% 80%
Duty Cycle %
14
Dari grafik diatas dapat diketahui bahwa semakin besar nilai duty cycle pada pulse
width modulation (PWM) yang dibangkitkan dari mikrokontroler, maka semakin besar
tegangan output yang dihasilkan oleh driver motor yang dalam hal ini menggunakan TIP
3055. Tegangan output dari driver ini yang nantinya digunakan sebagai suplai motor DC
pada proses pengadukan.
Mikrokontroler Motor DC
LCD
15
Gambar 25. Pengujian Sensor Kecepatan Rotary Encoder Dengan Rangkaian Optocoupler
Gambar 26. Pembacaan Dari Sensor Rotary Encoder Dengan Tampilan LCD
Tabel 2. Hasil Pengujian Sensor Rotary Encoder
No Tegangan Tacho Rotary
Motor Meter Encoder
(Volt) (RPM) (RPM)
1 7 89.8 93.3
2 9 113.7 116
3 13 162.4 176
4 15 190.7 193
5 17 218.2 223
250
200
Kecepatan (Rpm)
Tacho
150 Meter
Rotary
100 Encoder
50
0
0 7 9 13 15 17
Tegangan Motor (Volt)
Gambar 27. Grafik Perbandingan Pengukuran Menggunakan Tacho Meter & Sensor Rotary
Encoder
16
Dari grafik perbandingan diatas dapat terlihat bahwa nilai perbedaan antara pengukuran
menggunakan tacho meter dan sensor rotary encoder tidak jauh berbeda sehingga grafik
terlihat segaris.
1.9 Pengujian Sistem Kendali PI
Sistem kendali Proportional Integral (PI) digunakan untuk menjaga kecepatan motor
secara konstan 125 Rpm pada sistem agitator. Pada Gambar 16 dapat dilihat gambar desain
sistem agitator yang digunakan. Grafik respon kecepatan motor yang dijaga secara konstan
dengan nilai KP =10 dan KI =5 ditunjukan pada Gambar 17.
17
No Waktu Kecepatan
(Menit) (Rpm)
10 9 193
11 10 196
250
200
Kecepatan ( RPM )
Tanpa
150 Kontrol
100 Kontrol PI
50
0
0 1 2 3 4 5 6 7 8 9 10
Waktu (Menit)
Gambar 29. Grafik Perbandingan Respon Kecepatan Motor Tanpa Kontrol dengan
Kontrol PI
Dari grafik diatas dapat dilihat bahwa respon dari motor yang diberi kontrol bekerja
pada kecepatan sekitar 125Rpm, meskipun pada kondisi awal motor mengalami overshoot
dengan kecepatan motor mencapai 131 Rpm . Kemudian pada saat diberikan beban dalam hal
18
ini adalah adonan pembuatan pudak sehingga kecepatan motor menurun hinga 111 Rpm ,
maka saat kondisi tersebut kontrol mulai bekerja untuk menaikan kecepatan motor kembali
menuju set point 125 Rpm. Meskipun pada grafik terlihat respon motor tidak dapat steady
state, tetapi kecepatan motor di jaga secara konstan dikisaran 123 Rpm – 128 Rpm, hal itu
dikarenakan motor menggunakan gearbox sehingga kontrol yang diberikan tidak bisa secara
smooth. Sedangkan respon dari kecepatan motor tanpa kontrol, dapat dilihat pada grafik
bahwa , motor akan bekerja pada kecepatan maksimal sekitar 198 Rpm dan ketika motor
dibebani maka kecepatan akan menurun kemudian naik kembali apabila torsi motor lebih
besar dari torsi beban.
Berikut listing program dari sistem pengaturan motor DC menggunakan sistem kendali
PI:
/**************************************************************************/
This program was produced by the
CodeWizardAVR V2.03.4 Standard
Automatic Program Generator
© Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
[Link]
Project :
Version :
Date : 11/26/2014
Author :
Company :
Comments:
Chip type : ATmega16
Program type : Application
Clock frequency : 11.059200 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 256
*****************************************************/
#include <mega16.h>
#include <stdlib.h>
#include <delay.h>
19
#include <stdio.h>
#include <math.h>
bit Ackbit,TimeOut;
int t,Temp4,temp2,Temp5;
float tempdec;
int temp1;
int Humi;
int j ;
char buffer3[4];
char buffer4[4];
char buffer5[4];
char buff[16], buff2[16];
unsigned char mode=0;
flash unsigned char *pesan;
#define ShtClock PORTD.0
#define ShtData PORTD.1
#define KP 10 // Nilai KP untuk motor
#define KI 5 // Nilai KI untuk motor
#define KP1 70.0 // Nilai KP untuk suhu
#define KI1 5.0 // Nilai KI untuk suhu
#define _DT_ 500
#define DT 0.2
#define MAX_PWM 255
#define MIN_PWM 175
#define MAX_DAC 255
#define MIN_DAC 25
int suhu;
int set_suhu=90;
float p,i,d,rate;
int dac;
float aku,last_error,i_err;
int error;
int set_speed=125;
float p,i,d,rate;
20
int cntx = 0;
int q,a[20],v;
int pwm;
float aku,last_error,i_err;
int error;
int frekuensi=0;
float pulsa;
char temp[8];
unsigned char temp3 [6], loop=0;
int data;
unsigned char s=0, m=0, h=0, c[32];
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>
//////////////////////// Timer /////////////////////
// Timer1 output compare A interrupt service routine
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
s=s+1;
if(s==60){
s=0;
m=m+1;}
if(m==60){
m=0;
h=h+1;
}
if (m>=1)
{ PORTA.3=1; }
lcd_gotoxy(4,0);
sprintf(c,"%d:%d:%d",h,m,s);
lcd_puts(c);
}
21
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
// Place your code here
frekuensi++;//baca frekuensi (pulssa) yg masuk ke INT0 trus di increament
}
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Reinitialize Timer 0 value
TCNT0=0x8A;
loop++;
if (loop>=100)
{
pulsa=(float)frekuensi*60/36;//formula perhitungan kecepatan
frekuensi=0;
loop=0;
}
}
// Declare your global variables here
void tampilkan_LCD() //menampilkan data kecepatan di lcd
{
ftoa(pulsa,1,temp);
lcd_gotoxy(12,1);
lcd_puts(temp);
lcd_gotoxy(12,0);
lcd_putsf("RPM");
}
void pi_motor()
{ char ybuff[5];
error = (set_speed - pulsa);
if(error != 0)
{
22
p = KP * error;
i_err =i_err + (error * DT);
i = KI * i_err;
last_error = error;
pwm = p + i ;
if(pwm > MAX_PWM)
{
pwm = MAX_PWM;
}
else if(pwm < MIN_PWM)
{
pwm = MIN_PWM;
last_error = 0;
i_err = 0;
}
OCR2 = pwm;
lcd_gotoxy(0,1);
itoa(pwm,ybuff);
lcd_puts(ybuff);
lcd_gotoxy(0,0);
lcd_putsf("PWM");
}
delay_ms(_DT_);
}
void main(void)
{
// Declare your local variables here
int a=0;
PORTA=0x00;
DDRA=0xFF;
PORTC=0x00;
DDRC=0xFF;
PORTD=0x00;
DDRD=0xFE;
23
// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x08;
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0xFF;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=Out Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=0 State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x80;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 11.719 kHz
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x05;
TCNT0=0x8A;
OCR0=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
24
SFIOR=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 10.800 kHz
// Mode: CTC top=OCR1A
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: On
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x0D;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x2A;
OCR1AL=0x30;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: 11059.200 kHz
// Mode: Fast PWM top=FFh
// OC2 output: Non-Inverted PWM
ASSR=0x00;
TCCR2=0x69;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: On
25
// INT0 Mode: Falling Edge
// INT1: Off
// INT2: Off
GICR|=0x40;
MCUCR=0x02;
MCUCSR=0x00;
GIFR=0x40;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x11;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// LCD module initialization
lcd_init(16);
// Global enable interrupts
#asm("sei")
while (1)
{
// Place your code here
/// Pull Up – Down System///
if (PIND.4==1&&PIND.3==0)
//Menampilkan Timer//
{
lcd_gotoxy(4,0);
sprintf(c,"%d:%d:%d",h,m,s);
lcd_puts(c);
tampilkan_LCD();
pi_motor();
}
{ lcd_clear(); }
}
}
26
DAFTAR PUSTAKA
27