Rabu, 23 Mei 2018

Laporan Mikrokontroler PWM

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