LAPORAN
PRAKTIK
MIKROKONTROLLER
DOSEN
PENGAMPU MUSLIKHIN, M.Pd.
KENDALI
MOTOR DC MENGGUNAKAN PWM
Disusun
oleh:
Istiqomah 16507134035 Angkatan 2016
TEKNIK
ELEKTRONIKA-D3
PENDIDIKAN
TEKNIK ELEKTRONIKA DAN INFORMATIKA
FAKULTAS
TEKNIK
UNIVERSITAS
NEGERI YOGYAKARTA
2018
A. TUJUAN
Setelah
melakukan praktik mahasiswa diharapkan dapat:
1. Memahami
kerja dari PWM
2. Menguasai
pengontrolan motor DC menggunakan PWM
B. TEORI
DASAR
PWM
(Pulse Width Modulation) atau modulasi lebar pulsa adalah salah satu
keunggulan Timer/Counter yangterdapat pada Atmega8535. Ketiga jenis Timer/Counter
pada Atmega8535 dapat menghasilkan pulsa PWM. Pulsa PWM adalah sederetan
pulsa yang lebar pulsanya dapat diatur. Pulsa PWM berfungsi mengatur kecepatan
motor DC, mengatur gelap terang LED dan aplikasi lainnya. PWM adalah Timer
mode Output Compare yang canggih. Mode PWM Timer juga dapat mencacah
turun yang berlawanan dengan mode Timer lainnya yang hanya mencacah
naik. Pada mode PWM tersebut, Timer mencacah naik hingga mencapai nilai TOP,
yaitu 0xFF (255) untuk PWM 8 bit dan 0x3FF (1023) untuk PWM 10 bit. Timer/Counter
0 hanya memiliki PWM 8 bit, sedangkan pada Timer/Counter 1 memiliki
9 bit dan PWM 10 bit, dan Timer/Counter 2 memiliki PWM 8 bit.
Pemilihan
mode PWM diseting melalui bit COM01 dan bit COM00 pada register TCCR. Saat
COM00 clear dan COM01 set, pin OC0 clear sat timer mencacah
diatas Compare Match dan pin OC0 set saat timer mencacah dibawah Compare
Match atau non-inverting PWM. Kebalikannya, saat COM00 set dan COM01
juga set, maka pin OC0 set saat timer mencacah dibawah Compare Match atau
disebut juga inverting PWM. Fasilitas timer mikrokontroler digunakan
untuk pengaturan PWM. Berikut ini pengujian fungsionalitas mikrokontroler
Atmega 16 dalam membangkitkan PWM. Penggunanan PWM menggunakan fasilitas overflow
pada timer/counter 1.
C.
ALAT DAN BAHAN
1. Modul
AVR Atmega8535/8/16/32
2. PC
(Personal computer)/laptop
3. Jumper
4. Power
supply 5-12V
5. CRO
D.
SKEMA RANGKAIAN
E. LANGKAH
KERJA
1. Memuat
alat dan bahan seperti rangkaian di atas;
2. Membuat
program seperti yang tertulis berikut, uji coba/simulasikan di Proteus lalu mencoba
pada hardware nyata;
3. Membuat
List Program
4. Menuliskan
hasil praktikum anda sesuai format dan simpulkan hasilnya.
F. DATA DAN ANALISIS
/*****************************************************
This
program was produced by the
CodeWizardAVR
V2.05.0 Evaluation
Automatic
Program Generator
©
Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project
:
Version
:
Date : 01/03/2018
Author : Freeware, for evaluation and non-commercial
use only
Company
:
Comments:
Chip
type : ATmega16
Program
type : Application
AVR
Core Clock frequency: 8,000000 MHz
Memory
model : Small
External
RAM size : 0
Data
Stack size : 256
*****************************************************/
#include
<mega16.h>
#include
<delay.h>
#include
<stdio.h>
#include
<stdlib.h>
//
Alphanumeric LCD Module functions
#include
<alcd.h>
//
Declare your global variables here
int SigA,SigB;
char
MA[12];
char
MB[12];
void
main(void)
{
//
Declare your local variables here
//
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=0x00;
//
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=0x00;
//
Port C initialization
//
Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
//
State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTC=0x00;
DDRC=0xFF;
//
Port D 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
PORTD=0x00;
DDRD=0x00;
//
Timer/Counter 0 initialization
//
Clock source: System Clock
//
Clock value: Timer 0 Stopped
//
Mode: Normal top=0xFF
//
OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
//
Timer/Counter 1 initialization
//
Clock source: System Clock
//
Clock value: Timer1 Stopped
//
Mode: Normal top=0xFFFF
//
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: Off
//
Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
//
Timer/Counter 2 initialization
//
Clock source: System Clock
//
Clock value: Timer2 Stopped
//
Mode: Normal top=0xFF
//
OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
//
External Interrupt(s) initialization
//
INT0: Off
//
INT1: Off
//
INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
//
Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
//
USART initialization
//
USART disabled
UCSRB=0x00;
//
Analog Comparator initialization
//
Analog Comparator: Off
//
Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
//
ADC initialization
//
ADC disabled
ADCSRA=0x00;
//
SPI initialization
//
SPI disabled
SPCR=0x00;
//
TWI initialization
//
TWI disabled
TWCR=0x00;
//
Alphanumeric LCD initialization
//
Connections specified in the
//
Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
//
RS - PORTD Bit 2
//
RD - PORTD Bit 1
//
EN - PORTD Bit 3
//
D4 - PORTD Bit 4
//
D5 - PORTD Bit 5
//
D6 - PORTD Bit 6
//
D7 - PORTD Bit 7
//
Characters/line: 16
lcd_init(16);
while
(1)
{
// Place your code here
lcd_gotoxy(0,0);
lcd_putsf("MOT1=");
lcd_gotoxy(0,1);
lcd_putsf("MOT2=");
PORTC.0=1;
//Motor 1 Maju
PORTC.1=0;
PORTC.3=1;
//Motor 2 Mundur
PORTC.4=0;
if(PINA.0==0){SigA++;}
//Jika pushbutton M1_DW ditekan naikan kecepatan motor 1
if(PINA.1==0){SigA--;}
//Jika pushbutton M1_UP ditekan turunkan kecepatan motor 1
if(PINA.2==0){SigB++;}
//Jika pushbutton M2_DW ditekan naikan kecepatan motor 2
if(PINA.3==0){SigB--;}
//Jika pushbutton M2_UP ditekan turunkan kecepatan motor 2
lcd_gotoxy(5,0);
itoa(SigA,MA);
lcd_puts(MA);
//Tampilkan nilai kecepatan Motor 1
lcd_gotoxy(5,1);
itoa(SigB,MB);
lcd_puts(MB);
//Tampilkan nilai kecepatan Motor 2
OCR1A=SigA;
OCR1B=SigB;
}
}
Pada praktikum ini menggunakan mikrokontroler ATMega16
sebagai display menggunakan LCD 16×2. Output yang akan dikontrol kecepatannya
yaitu menneggunakan motor DC sebagai inputnya menggunakan Potensiometer.
Disini potensiometer diibarartkan sebagai sensor. Untuk mengatur suatu
kecepatan motor yaitu disini menggunakan menggunakan teknik Pulse Width
Modulation PWM yaitu dengan mengatur duty cyclenya. Duty cycle itu sendiri
menyatakan presentase keadaan logika high dalam satu periode sinyal. Selama
satu siklus atau satu periode jika waktu sinyal pada keadaan high sama dengan low
maka dapat dikatakan sinyal mempunyai duty cycle 50%. Semakin besar duty cycle
atau keadaan high dalam satu periode maka motor akan berputar semakin cepat
begitu juga sebaliknya. Pengaturan duty cyclenya berasal dari input
Potensiometer. Potensiometer ini dihubungkan dengan pin ADC
mikrokontroler. Hasil dari konversi nilai Analog ke digital dari potensio
ditampilkan pada LCD. Semakin besar nilai potensio maka motor akan
berputar semakin cepat. Timer/counter 1 digunakan untuk membangkitkan 2 channel
Pulse Width Modulation (PWM) yang masing-masing berdiri sendiri atau tidak
tergantung satu sama lainnya. Timer Mode yang digunakan yaitu mode Fast PWM 8
bit. Fast PWM memberikan pulsa PWM frekuensi tinggi. Fast PWM berbeda
dengan mode PWM lain, Fast PWM berdasarkan operasi single slope. Counter
menghitung dari BOTTOM hingga TOP kemudian kembali lagi mulai menghitung
berawal dari BOTTOM.
G. KESIMPULAN
Berdasarkan
hasil praktikum yang telah dilakukan dan teori yang ada maka dapat disimpulkan
bahwa:PWM ( Pulse Width Modulation)
merupakan teknik modulasi dengan mengubah lebar pulsa (duty cylce) dengan nilai
amplitudo dan frekuensi yang tetap. Duty
cycle itu sendiri menyatakan presentase keadaan logika high dalam satu periode
sinyal. Selama satu siklus atau satu periode jika waktu sinyal pada keadaan
high sama dengan low maka dapat dikatakan sinyal mempunyai duty cycle 50%.
Semakin besar duty cycle atau keadaan high dalam satu periode maka motor akan
berputar semakin cepat begitu juga sebaliknya. Duty Cycle
merupakan representasi dari kondisi logika high dalam suatu periode sinyal dan
di nyatakan dalam bentuk (%) dengan range 0% sampai 100%. Penggunaan PWM digunakan
untuk pengaturan kecepatan motor dc, pengaturan cerah/redup LED, dan
pengendalian sudut pada motor servo.

Tidak ada komentar:
Posting Komentar