PRAKTIKUM MIKROPROSESOR
MODUL IV
PWM, PID dan USART
LAPORAN AWAL
NAMA : Mukh Yasin Nur Supriyadi
NPM : 140303130001
WAKTU : Senin, 24 November 2014, 16.30 – 18.00
ASSISTEN : Ahmad dan Fajar
LABORATORIUM HARDWARE
PROGRAM STUDI TEKNIK KOMPUTER
FMIPA UNPAD
2014
MODUL IV
PWM, PID dan USART
Tujuan Praktikum
Praktikan mampu memahami konsep PID.
Praktikan mampu membuat robot line follower
Praktikan mampu memahami cara melakukan inisialisasi pada komunikasi serial USART mikrokontroler AVR.
Teori Dasar
PWM (Pulse Width Modulation)
Secara umum PWM adalah sebuah cara memanipulasi lebar sinyal atau tegangan yang dinyatakan dengan pulsa dalam suatu perioda, yang digunakan untuk mentransfer data pada telekomunikasi ataupun mengatur tegangan sumber yang konstan untuk mendapatkan tegangan rata-rata yang berbeda. Penggunaan PWM ini sangat banyak, mulai dari permodulasian data untuk telekomunikasi, pengontrolan daya atau tegangan yang masuk ke beban, regulator tegangan, audio effect dan penguatan, serta aplikasi-aplikasi lainya.
Teknik yang bisa digunakan untuk mengontrol daya ke perangkat listrik. PWM digunakan untuk mendapatkan output analog dengan cara digital. PWM merupakan metoda untuk mengatur kecepatan perputaran motor dengan cara mengatur persentase lebar pulsa high terhadap perioda dari suatu sinyal persegi dalam bentuk tegangan periodik yang diberikan ke motor sebagai sumber daya. Semakin besar perbandingan lama sinyal high dengan perioda sinyal maka semakin cepat motor berputar. Pada driver ini, sinyal PWM akan diatur secara digital yang dibangkitkan oleh mikrokontroler ATMega8535.
Driver motor digunakan untuk menggerakan motor yang membutuhkan arus cukup besar dan tagangan motor yang berbeda dengan rangkaian digital (rangkaian mikrokontroler. Arus yang mampu dikeluarkan atau diterima (current source/sink) oleh mikrokontroler sangat kecil (dalam orde satuan miliampere) sehingga agar mikrokontroler dapat menggerakan motor diperlukan driver motor yang mampu mengalirkan sampai beberapa ampere. Beberapa motor DC mempunyai teganagn kerja yang berbeda dengan rangkaian mikrokontroler (5 volt) misalnya motor DC 6 volt, 12 volt, 24 volt dsb.
Rangkaian driver motor dapat berupa rangkaian transistor, relay, rangkaian MOSFET, IC (Integrated Circuit) dsb. Dalam aplikasi ini digunakan IC L1239D yang berisi 4 channerl driver dengan kemampuan mengalirkan arus sebesar 600 mA per channel. Tegangan kerja IC L239D dari 6 volt sampai dengan 36 volt dan arus impuls tak berulang maksimum sebesar 1,2 ampere.
Cara kerja IC L2393 sebagai berikut:
Arah putar motor kiri diatur oleh PORTB.6 dan PORTB.7
Arah putar motor kanan diatur oleh PORTB.3 dan PORTB.2
Kecepatan motor kiri (EN1) diatur oleh register OC1A (PORTD.5)
Kecepatan motor kanan (EN2) diatur oleh register OC1B (PORTD.4)
Penggunaan PWM
PWM sebagai data keluaran suatu perangkat PWM dapat digunakan sebagai data dari suatu perangkat, data direpresentasikan dengan lebar pulsa positif (Tp).
PWM sebagai data masukan kendali suatu perangkat. Selain sebagai data keluaran, PWM pun dapat digunakan sebagai data masukan sebagai pengendali suatu perangkat. Salah satu perangkat yang menggunakan data PWM sebagai data masukanya adalah Motor DC Servo.
PWM sebagai pengendali kecepatan motor DC bersikat. Motor DC Bersikat atau Motor DC yang biasa ditemui dipasaran yang memiliki kutub A dan kutub B yang jika diberikan beda potensial diantara keduanya, maka Motor DC akan berputar. Pada prinsipnya, Motor DC jenis ini aka nada waktu antara saat beda potensial diantara keduanya dihilangkan dan waktu berhentinya. Prinsip inilah yang digunakan untuk mengendalikan kecepatan motor DC jenis ini dengan PWM, semakin besar lebar pulsa positif dari PWM maka akan semakin cepat putaran Motor DC. Untuk mendapatkan putaran Motor DC yang halus, maka diperlukan penyesuaian Frekuensi (Perioda Total) PWM-nya.
PID
PID (Propotional Integral Derevative) merupakan kontroler untuk menentukan presisi suatu sistem intrumentasi dengan karakteristik adanya umpan balik pada sistem tersebut. Komponen control PID ini terdiri dari 3 jenis yaitu proportional, integrative, dan derivative. Ketiganya dapat dipakai bersamaan maupun sendiri-sendiri tergantung respon yang kita inginkan terhadap suatu plant.
Konstanta Propotional
Kontrol P jika G(s) = Kp, maka k adalah konstanta. Jika u = G(s).e Maka U = Kp.e dengan Kp adalah kostanta propotional, Kp berlaku sebagai Gain (Penguat) saja tanpa memberikan efek dinamik pada kinerja controller. Penggunaan control P memiliki berbagai keterbatasan karena sifat control yang tidak dinamik ini. Walaupun demikian dalam aplikasi-aplikasi dasar sederhana control P ini cukup mampu untuk memperbaiki respon transien khususnya rise time dan setting time.
Konstanta Intergatif
Jika G(S) adalah control 1 maka u dapat dinyatakan sebagai u(t)=[integral (t)dt] Ki, dengan dengan Ki adalah konstanta integral, dan dari persamaan diatas, G(s) dapat dinyatakan sebagai u=Kd.[deltae/deltat], jika e(t) mendekati konstan (bukan nol) maka u(t) akan menjadi sangat besar sehingga diharapkan dapat memperbaiki error. Jika e(T) mendekati nol maka efek control 1 ini akan semakin kecil. Kontrol I dapat memperbaiki sekaligu menghilangkan respon transien yang tinggi sehingga dapat menyebabkan ketidakstabilan system. Pemilihan Ki yang sangat tinggi justru dapat menyebabkan output berisolasi karena menambah orde system.
Konstanta Derevatif
Sinyal control u yang dihasilkan oleh control D dapat dinyatakan sebagai G(s)=s.Kd dari persamaan diatas, nampak bahwa sifat dari control D ini dalam konteks "kecepatan" atau rute error. Dengan sifat ini dapat digunakan untuk memperbaiki respon transien dengan memprediksi error yang akan terjadi. Kontrol derivative ini hanya berubah saat ada perubahan error sehingga saat error statis control ini tidak akan bereaksi, hal ini perlu yang menyebabkan kontroler derivatif tidak dapat dipakai sendiri.
Keterangan Respon Sistem
Dalam menggunakan PID ini adalah mencari respon sesuai yang diinginkan. Semakin kecil rise time/waktu naik, kemudian perbedaan isolasi harus 5 % dari overshoot sebelumnya, dan semakin kecil error-steady state/mendekati set poin yang diinginkan maka respon tersebut dapat dikatakan berhasil.
Tabel Karakteristik Pengendali
Respon Loop
Tertutup
Rise Time
(Waktu Naik)
Overshoot
Setting Time
(Waktu Turun)
Steady-state
Error
Kp
Menurun
Meningkat
Perubahan Kecil
Menurun
Ki
Menurun
Meningkat
Meningkat
Hilang
Kd
Perubahan kecil
Menurun
Menurun
Perubahan Kecil
USART
Komunikasi Serial
Transmisi data seri dibedakan menjadi 2 macam, yaitu komunikasi data seri sinkron dan komunikasi data asinkron, perbedaan ini tergantung pada clock pendorong data. Dalam komunikasi data seri sinkron, clock untuk shift register ikut dikirimkan bersama dengan data ser. Sebaliknya dalam komunikasi data asinkron, clock pendorong shift register tidak ikut dikirim, rangkaian penerima data bisa membangkitkan clock yang biasa dipakai untuk mendorong shift register penerima. Untuk keperluan tersebut terlebih dahulu ditentukan bahwa tidak saat pengiriman data, keadaan saluran adalah '1', saat akan mulai mengirim data byte saluran dibuat menjadi '0' dulu selama 1 periode clock pendorong, dalam 8 periode clock berikutnya dikirim data bit0, bit 1 dan seterusnya sampai dengan 8 bit, dan pada periode clock yang ke 10 saluran dikembalikan menjadi '1'. Dengan demikian, data 8 bit yang dikirim diawali dengan bit start yang bernilai '0' dengan diakhiri bit stop yang bernilai '1'. Bagian yang penting dari komunikasi serial adalah konektor yang digunakan untuk menghubungkan hardware dengan computer. Kegunaan RS232 adalah sebagai driver, yang mengkonversi tegangan dari hardware agar sesuai dengan tegangan pada computer sehingga dapat dibaca.
RS 232
Logic High (1) -15 V s/d -3V
Logic Low (0) +3 V s/d +15 V
TTL
Logic High (1) +2 V s/d +5 V
Logic Low (0) 0 V s/d + 0.8 v
Rangkaian interface menerjemahkan level tegangan RS232 ke level tegangan TTL dan sebaliknya. Rangkaian interdace tersebut menggunakan IC Max232.
Untuk menghubungkan antara 2 buah PC, atau antar rangkaian mikrokontroler dengan PC biasanya menggunakan format null node, dimana pin TXD dihubungkan dengan RXD pasangan, pin sinyak ground (5) dihubungkan dengan sinyal ground dipasangan.
Tabel Fungsi Kaki pada DB9
PIN
SIGNAL
DESCRIPTION
I/O
1
CD
Carrier Detect
In
2
RD
Receive Data
In
3
TD
Transmit Data
Out
4
DTR
Data Terminal Ready
Out
5
SG
Signal Ground
-
6
DSR
Data Set Ready
In
7
RTS
Request To Send
Out
8
CTS
Clear To Send
In
9
RI
Ring Indicator
In
USART (Universal Syncronous Asyncronous Receiver Transmitter)
USART ATMega 8535 memiliki beberapa keuntungan dibandingkan system UART, yaitu:
Operasi full duplex (mempunyai register receive dan transmit yang terpisah)
Mendukung komunikasi multiprosesor
Mode kecepatan tranmisi berorde Mbps
Untuk menganalisa USART, register yang perlu ditentukan nilainya, yaitu:
UBRR (USART Baud Rare Register)
UBRR merupakan register 16 bit, yang berfungsi untuk menentukan kecepatan tranmisi data yang akan digunakan. UBRRL dibagi menjadi 2 yaitu UBRRH dan UBRRL. UBRR [11...0] merupakan bit penyimpanan konstanta kecepatan komunikasi serial. UBRRH menyimpan 4 bit tertinggi, dan UBRRL menyimpan 8 bit sisanya. Data yang dimasukan ke UBRRH dan UBRRL, dihitung menggunakan rumus.
MODE OPERASI
RUMUS NILAI UBR
Asinkron mode kecepatan normal
(U2X=0)
UBRR= f osc16x Baud Rate-1
Asinkron mode kecepatan ganda
(U2X=0)
UBRR= f osc8x Baud Rate-1
Sinkron
UBRR= f osc2x Baud Rate-1
UCSRA (USART Control and Status Register A)
UCSRB (USART Control and Status Register B)
UCSRB merupakan register 8 bit pengatur aktivasi penerima dan mengirim USART, komposisinya sebagai berikut:
Penjelasan bit penyusun register UCSRB :
RXCIE : bit pengatur aktivasi interupsi penerimaan data serial
TXCIE : bit pengatur aktivasi interupsi pengiriman data serial
UDRIE : bit pengatur aktivasi interupsi, yang berhubungan dengan kondisi bit UDRE pada UCSRA
RXEN : bit pengatur aktivasi penerimaan serial ATMega 8535
TXEN : bit pengatur aktivasi pengiriman serial ATMega 8535
UCSAZ2 : bersama sama dengan bit UCSZ1 dan UCSZ0 diregister UCSZ0 menentukan ukuran karakter serial yang dikirimkan
UCSZ[2…0]
Ukuran karakter dalam bit
000
5
001
6
010
7
011
8
100-110
Tidak digunakan
111
9
UCSRC (USART Control and Status Register C)
UCSRC merupakan register 8 bit yang digunakan untuk mengatur mode dan kecepatan komunikasi serial yang dilakukan. Komposisinya seperti gambar dibawah ini:
URSEL : merupakan bit pemilih akses antara UCSRC dan UBRR
UMSEL : merupakan bit pemilih mode komunikasi serial antara sinkron dan asinkron
UPM [1...0] : merupakan bit pengatur paritas
USBS : merupakan bit pemilih ukuran bit stop
UCSZ1 dan UCSZ0 : merupakan pengatur jumlah karakter serial
UCPOL : merupakan bit pengatur hubungan antara perubahan data keluaran dan data masukan serial dengan clock sinkronasi.
TUGAS PENDAHULUAN
Apa fungsi PID pada motor DC?
Jawab : PID (Propotional Integral Derivative) digunakan untuk menentukan presisi suatu sistem intrumentasi dengan karakteristik adanya umpan balik pada sistem tersebut.
Adakah komponen yang lebih baik dari PWM? Jika ada sebutkan alasanya!
Jawab :
PID.
Kedua metode (PWM dan PID) sama-sama dapat digunakan untuk mengatur motor DC, namun masing-masing mempunyai fungsi berbeda, PWM digunakan untuk mengatur kecepatan motor, sedangkan PID digunakan untuk mengetahui apakah ada error / ketidaksamaan antara output ke motor dengan input dari UC, sehingga tentu saja ada feedback untuk mengetahui error yang terjadi, biasanya PID ini digunakan untuk mengatur CoG (Centre of Grafity) sehingga robot dapat menjaga keseimbangan walau hanya menggunakan 2 roda atau 2 kaki di sisi kiri dan kanan. PID dapat mengatur kecepatan motor, namun sebenarnya anda tidak perlu menggunakan PID karena dengan PWM saja juga sudah bisa.
Kesimpulanya PID dapat mengatur kecepatan motor sekaligus mengetahui apakah ada error / ketidaksamaan antara output ke motor dengan input dari UC.
Fungsi PWM pada motor DC
Jawab : Teknik PWM (Pulse Width Modulation) merupakan sebuah metoda untuk mengatur kecepatan perputaran Motor DC. PWM sendiri berfungsi untuk mengatur lebar sisi negative dan positif pulsa control pada frekuensi kerja yang tetap, semakin lebar sisi positif pulsa, putaran motor DC semakin cepat, dan sebaliknya, semakin kecil sisi positif pulsanya, perputaran motor DCnya semakin lambat.
Download dan jelaskan rangkaian komunikasi serial USART!
Jawab :
Penjelasan : Pin 15 dan Pin 16 pada gambar maksudnya yaitu pin pada IC Max232 nya. sedangkan untuk JP1, Pin 1 dihubungkan pada PORTD.0 atau RXD, dan Pin2 dihubungkan pada PORTD.1 atau RXD ada mikrokontroler, mikrokontroler yang saya gunakan disini yaitu ATMega8535. kalo udah dibuat rangkaiannya, maka langkah selanjutnya yaitu menghubungkan konektor DB9 ke Port serial komputer, dan jangan lupa, hubungkan juga Supply tegangan sebesar 5 Volt pada vcc, dan Ground pada rangkaian RS232 dengan ground pada mikrokontroler.
Adakah jenis komunikasi serial selain USART? Sebutkan dan jelaskan!
Jawab :
Komunikasi serial ada dua macam, asynchronous serial dan synchronous serial.
Synchronous serial adalah komunikasi dimana hanya ada satu pihak (pengirim atau penerima) yang menghasilkan clock dan mengirimkan clock tersebut bersama-sama dengan data. Contoh pengunaan synchronous serial terdapat pada transmisi data keyboard.
Asynchronous serial adalah komunikasi dimana kedua pihak (pengirim dan penerima) masing-masing menghasilkan clock namun hanya data yang ditransmisikan, tanpa clock. Agar data yang dikirim sama dengan data yang diterima, maka kedua frekuensi clock harus sama dan harus terdapat sinkronisasi. Setelah adanya sinkronisasi, pengirim akan mengirimkan datanya sesuai dengan frekuensi clock pengirim dan penerima akan membaca data sesuai dengan frekuensi clock penerima. Contoh penggunaan asynchronous serial adalah pada Universal Asynchronous Receiver Transmitter (UART) yang digunakan pada serial port (COM) komputer.
Jelaskan cara mengatur PWM pada Code Vision AVR!
Jawab :
Setelah CodeVision AVR terbuka, buat project baru dengan mengeklik "Create New File". Klik OK. lalu konfirmasi, klik YES. setelah itu akan masuk "CodeWizardAVR" disana terdapat beberapa setting seperti USART, Analog, ADC, SPI, 12C, 1Wire, 2Wire, LCD, Chip dsb. kita pilih 'CHIP'. pada bagian Chip tersebut pilih jenis mikrokontroller yang dipakai. set juga clocknya. setelah itu ke pilihan "TIMERS". pilih Timer0, karena untuk PWM yang dipakai adalah Timer0. pilih "Clock Source"nya, "Value", "Mode", serta "Output" nya juga. setelah semuanya selese, klik menu "File" lalu pilih "Generate, Save and Exit". setelah itu akan muncul jendela warning, abaikan, klik "YES". setelah itu save dengan nama bebas di folder sesuai keinginan. setelah itu muncul halaman untuk penulisan program, tulis program seperti berikut :
#include
#include
#define pwm OCR0 //OCR0 adalah output untuk PWM
//OCR0 diberi nilai dari 0-255
//karena PWM yang digunakan adalah 8 bit
// Declare your global variables here
unsigned char i=0;
void main(void)
{
// Declare your local variables here
// setingan untuk OC0 sebagai output karena berada pada PINB.4
// posisi OC0 tidak bisa diubah, harus berada pada PINB.4, coba lihat datasheet atmega32
PORTB=0x00;
DDRB=0x08;
//setingan register untuk membangkitkan PWM dari Timer0
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 8000.000 kHz
// Mode: Phase correct PWM top=FFh
// OC0 output: Non-Inverted PWM
TCCR0=0x61;
TCNT0=0x00;
OCR0=0x00;
while (1)
{
// Place your code here
for(i=0;i<255;i++)// PWM akan dijalankan dengan variasi antara 0-255 dengan interval 100 ms
{
pwm=i;
delay_ms(100);
}
};
}
Apa fungsi komunikasi serial?
Jawab : Komunikasi serial berfungsi sebagai metode komunikasi data di mana hanya satu bit data yang dikirimkan melalui seuntai kabel pada suatu waktu tertentu
Resolusi PWM dapat ditentukan oleh nilai apa? Berapa resolusi minimum dan maksimumnya? Tuliskan persamaan untuk menghitung frekuensi output PWM!
Jawab :
Resolusi PWM ditentukan oleh jumlah bit dari PWM itu sendiri, misal jumlah bitnya 8, maka Resolusi PWMnya adalah 28 = 256. Resolusi minimal = 2bit, Resolusi maksimal= 16bit.
Persamaan Menghitung Frekuensi Output PWM
Untuk Timer0
Mode Phase Correct PWM
FoC0 = Fosc/(N*512)
D = (OCR0/255)*100%
Mode Fast PWM
Foc0 = Fosc/(N*256)
D = (OCR0/255)*100%
Dimana :
Foc0 = Frekuensi output OC0
N = Skala clock (mempunyai nilai 1, 8, 64, 256, dan 1024)
D = Duty cycle
Fosc = Frekuensi clock kristal yang digunakan
Timer1
Mode Phase Correct PWM
Foc1a = Fosc/(2*N*TOP)
Foc1b = Fosc/(2*N*TOP)
D = (OCR1X/TOP)*100%
Mode Fast PWM
Foc1a = Fosc/(N*(1+TOP))
Foc1b = Fosc/(N*(1+TOP))
D = (OCR1X/TOP)*100%
Dimana :
Foc1a = Frekuensi output OC1A
Foc1b = Frekuensi output OC1B
N = Skala clock (mempunyai nilai 1, 8, 64, 256, dan 1024)
D = Duty cycle
Fosc = Frekuensi clock kristal yang digunakan
TOP = nilai maksimum counter (TCNT1), TOP mempunyai 3 buah nilai untuk kedua mode tersebut yaitu 8 bit (FF), 9 bit (1FF) dan 10 bit (3FF)
Buatlah program untuk mengirimkan sebuah karakter ke komputer menggunakan USART!
Jawab :
#include
#include
#define USART_BAUDRATE 9600
#define F_CPU 11059200
#define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1)
int main (void)
{
char ReceivedByte;
UCSRB "= (1 << RXEN) " (1 << TXEN);
UCSRC "= (1 << URSEL) " (1 << UCSZ0) " (1 << UCSZ1);
UBRRH = (BAUD_PRESCALE >> 8);
UBRRL = BAUD_PRESCALE;
while (1) // Loop selamanya...
{
while ((UCSRA & (1 << UDRE)) == 0) {};
UDR = 'A';
_delay_ms(1000);
}
}
Buatlah program motor DC berputar searah menggunakan output PWM Timer/Counter 1!
Jawab :
#include
// Declare your global variables here
void main(void)
{
// Port D initialization
// Func7=In Func6=In Func5=Out Func4=Out Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=0 State4=0 State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0xFF;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 10.800 kHz
// Mode: Fast PWM top=00FFh
// OC1A output: Non-Inv.
// OC1B output: Non-Inv.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0xA1;
TCCR1B=0x0D;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
while (1)
{
PORTD.0 = 1;
PORTD.1 = 0;
OCR1B = 128;
};
}
DAFTAR PUSTAKA
Ino Suryana, Drs,.M.Kom. 2014 , Laboratorium Hardware: Modul Praktikum Mikroprosessor Universitas Padjadjaran. Jatinangor
http://pemudaminangkabau.wordpress.com/2013/02/28/pengertian-motor-dc/
http://wahyurahmaniar.files.wordpress.com/2010/11/lcd21.jpg
http://elektobot.blogspot.com/2013/09/program-menampilkan-kata-dari.html
http://marizaazhar.blogspot.com/2012/07/membuat-pwm-atmega-dari-timer-dengan_04.html
http://id.wikipedia.org/wiki/Komunikasi_serial
http://arifzakariya.blog.ugm.ac.id/2012/01/09/komunikasi-serial-mikrokontroler/
https://ayeleader.wordpress.com/2012/05/06/komunikasi-serial-rs232/
http://digilib.tes.telkomuniversity.ac.id/images/stories/2011/111088008/111088008-3.JPG
https://budihasian.wordpress.com/2014/03/25/menghitung-sinyal-pwm-menggunakan-timer-avr/
http://pudintekel.blogspot.com/2013/04/pengendalian-motor-dc-menggunakan-pwm.html