Anda di halaman 1dari 7

MODUL IV

MOTOR (DC DAN SERVO)

TUJUAN
Mampu membuat program yang menggunakan 16-bit Timer/Counter1 pada mikrokontroller
ATmega8535 sebagai PWM (Pulse Width Modulation) untuk mengontrol kecepatan putar suatu motor
DC.
Mampu membuat program yang menggunakan pin I/O AVR untuk menggerakan motor servo serta
menggunakan 8-bit Timer/Counter2 sebagai waktu tunda.

DASAR TEORI
Mikrokontroller AVR ATmega8535 mempunyai dua 8-bit Timer/Counter (Timer/Counter0 dan
Timer/Counter2) dan satu 16-bit Timer/Counter (Timer/Counter1). Timer/Counter mengalami
overflow pada saat hitungan Timer/Counter (TCNT0/TCNT1/TCNT2) mencapai maksimum (FFH
untuk 8-bit atau 0xFFFF untuk 16-bit Timer/Counter) dan kembali ke hitungan 0x00 atau 0x0000.
Pada mode operasi normal Timer/Counter Overflow Flag (TOV0/TOV1/TOV2) akan otomatis
berlogika ‘1’pada saat Timer/Counter Register menjadi nol. Bit Timer/Counter Overflow Flag dapat
dibersihkan (menjadi berlogika ‘0’) dengan memberikan nilai logika ‘1’pada flag tersebut.
Mode operasi Timer/Counter0 antara lain mode normal, mode CTC, mode Fast PWM, dan mode
Phase Correct PWM. Pemilihan mode operasi diatur pada bit WGM01 dan WGM02. Sumber clock
untuk Timer/Counter ditentukan oleh bit CS02 dan CS00 pada I/O register TCCR0 bit ke 2 sampai 0.

Tabel 1. Pilihan Sumber Clock Timer/Counter0


CS02 CS01 CS00 Keterangan
0 0 0 Tidak ada clock
0 0 1 CLK (tidak ada pembagian)
0 1 0 CLK/8 (dari prescaller)
0 1 1 CLK/64 (dari prescaller)
1 0 0 CLK/256 (dari prescaller)
1 0 1 CLK/1024 (dari prescaller)
Clock eksternal pada pin T0.
1 1 0
Clock pada saat falling edge
Clock eksternal pada pin T0.
1 1 1
Clock pada saat rising edge

Tabel 2. Pilihan Sumber Clock Timer/Counter2


CS22 CS21 CS20 Keterangan
0 0 0 Tidak ada clock
0 0 1 CLK (tidak ada pembagian)
0 1 0 CLK/8 (dari prescaller)
0 1 1 CLK/32 (dari prescaller)
1 0 0 CLK/64 (dari prescaller)
1 0 1 CLK/128 (dari prescaller)
1 1 0 CLK/256 (dari prescaller)
1 1 1 CLK/1024 (dari prescaller)
Tabel 3. Pengaturan Mode pada Bit WGM13 s/d WGM10
Mode WGM13 WGM12 WGM11 WGM10 Mode Operasi Timer/Counter TOP
0 0 0 0 0 Normal 0xFFFF
1 0 0 0 1 PWM, Phase Correct, 8-bit 0x00FF
2 0 0 1 0 PWM, Phase Correct, 9-bit 0x01FF
3 0 0 1 1 PWM, Phase Correct, 10-bit 0x03FF
4 0 1 0 0 CTC OCR1A
5 0 1 0 1 Fast PWM, 8-bit 0x00FF
6 0 1 1 0 Fast PWM, 9-bit 0x01FF
7 0 1 1 1 Fast PWM, 10-bit 0x03FF
8 1 0 0 0 PWM, Phase and Freq Correct ICR1
9 1 0 0 1 PWM, Phase and Freq Correct OCR1A
10 1 0 1 0 PWM, Phase Correct ICR1
11 1 0 1 1 PWM, Phase Correct OCR1A
12 1 1 0 0 CTC ICR1
13 1 1 0 1 -- --
14 1 1 1 0 Fast PWM ICR1
15 1 1 1 1 Fast PWM OCR1A

Resolusi PWM untuk Mode Phase Correct PWM dapat 8, 9, atau 10 bit, atau ditentukan nilai ICR1
atau OCR1A. Resolusi minimum yang diperbolehkan sebesar 2-bit (ICR1 atau OCR1A = 0x0003) dan
resolusi maksimum sebesar 16-bit (ICR1 atau OCR1A = 0xFFFF). Resolusi PWM dapat dighitung
dengan menggunakan persamaan :
log⁡(𝑇𝑂𝑃+1)
RPCPWM = log⁡(2)
Frekuensi output PWM ketika menggunakan Phase Correct PWM dapat dihitung dengan
menggunakan persamaan :
𝑓
𝑐𝑙𝑘 ⁡𝐼/𝑂
FOC1xPCPWM = 2.𝑁.𝑇𝑂𝑃

Penggunaan 16-bit Timer/Counter1 Untuk Mengendalikan Kecepatan Motor DC

Untuk menggerakkan suatu motor DC menggunakan mikrokontroller diperlukan suatu rangkaian


driver motor. Rangkaian driver motor dapat berupa rangkaian transistor, relay, rangkaian MOSFET,
IC, dan sebagainya. Dalam aplikasi ini digunakan IC L293D yang memiliki kemampuan mengalirkan
arus sebesar 600mA. Tegangan kerja IC L293D dari 6 volt sampai dengan 36 volt dan arus impuls tak
berulang maksimum sebesar 1,2 ampere. Gambar di bawah ini menunjukkan konfigurasi pin IC
L293D.
Pada gambar di atas, pin VCC (kaki 8) merupakan sumber tegangan untuk rangkaian digital (INPUT)
dan pin VSS (kaki 16) merupakan sumber tegangan untuk rangkaian motor (OUTPUT). Pin ENABLE
1,2 (kaki 1) digunakan untuk mengaktifkan channel 1 (INPUT 1) dan channel 2 (INPUT 2) sedangkan
pin ENABLE 3,4 (kaki 9) digunakan untuk mengaktifkan channel 3 (INPUT 3) dan channel 4 (INPUT
4).
Tabel 4. Tabel Kebenaran IC L293D (Dua Channel Driver)
INPUT ENABLE* OUTPUT
H H J
L H L
H L Z
L L Z

Penggunaan 8-bit Timer/Counter2 Untuk Mengendalikan Motor Servo 1800

Terdapat dua macam motor servo yaitu standard servo dan continuous servo. Standard Servo hanya
dapat berputar pada posisi 00 sampai 1800 sedangkan continuous servo dapat berputar terus menerus
(3600).

Gambar 2. Lebar Pulsa Motor Standard Servo

Gambar 2 menunjukkan bentuk pulas yang diberikan ke motor servo untuk mengubah posisi putaran
motor servo. Lebar pulsa yang diberikan harus akurat jika tidak maka putaran motor servo akan tidak
tepat pada posisinya.
Catatan : Lebar pulsa yang diberikan ke motor standard servo tidak boleh kurang dari 920 us untuk
full counterclockwise dan tidak boleh lebih dari 2120 us untuk full clockwise sebab dapat menyebabkan
kerusakan pada motor servo. Kerusakan terjadi karena motor berputar melebihi dari batas putaran (00
– 1800 ) yang mana pada batas tersebut motor tidak bias berputar sehingga dapat menyebabkan motor
servo terbakar.
TUGAS PENDAHULUAN
1. Tuliskan tabel Output Compare Match pada Phase Correct & Phase Frequency PWM dan
bagaimana penulisan script untuk menginisiasikannya.
2. Jelaskan kelebihan dari standard servo dibandingakan dengan continuous servo !

A. Mengatur Kecepatan Motor DC Menggunakan PWM


A.1. Percobaan 1
Program ini merupakan untuk menggerakkan motor DC menggunakan PWM dari
Timer/Counter1.

#include <mega8535.h>
#include <delay.h>

void main(void){

unsigned int temp;


PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x30; // PD4 (OC1B) dan PD5 (OC1A) sebagai output

TCCR1A=0x82; // PWM, Phase correct


TCCR1B=0x12; // Clock
TCNT1=0x0000;
ICR1H=0xFF; // Resolusi phase correct PWM 16 bit
ICR1L=0xFF;
OCR1A=0x0000;

temp=0x0FF0; // Nilai awal PWM

while (1){
if(PINC.0==0){
delay_ms(10);
temp-=0xFF;
if(temp==0xFF01) temp=0x0000;
}

if(PINC.1==0){
delay_ms(10);
temp+=0xFF;
if(temp==0x00FE) temp=0xFFFF;
}
OCR1A=temp;
};
}
A.2. Percobaan 2
Program 2 ini hamper sama dengan program 1 tetapi terdapat tambahan tombol untuk memilih
arah putaran motor.

#include <mega8535.h>
#include <delay.h>

bit i;

void main (void){

unsigned int temp;


PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x30;

TCCR1A=0x82;
TCCR1B=0x12;
TCNT1=0x0000;
ICR1H=0xFF;
ICR1L=0xFF;

OCR1A=0x0000;
OCR1B=0x0000;

i=1;
temp=0x0000;

while(1){
if(PINC.0==0){
delay_ms(5);
temp-=0xFF;
if(temp==0xFF01) temp=0x0000;
}

if(PINC.1==0){
delay_ms(5);
temp+=0xFF;
if(temp==0x00FE) temp=0xFFFF;
}

if(PINC.2==0){
i =~ i;
if(i==0){
PORTD=0x10;
}
else {
PORTD=0x20;
}

delay_ms(100);
}
OCR1A=temp;
OCR1B=temp;
}; }
A.3 Tugas 1
Buatalah suatu program seperti pada contoh program 2 dengan tambahan 2 tombol. Tombol
pertama (terhubung dengan PINC 7) digunakan untuk menggerakkan motor DC berputar cepat,
sedangkan tombol kedua (terhubung dengan PINC 6) digunakan untuk menghentikan putaran
motor. Tombol yang lain (tombol yang terhubung dengan pin PC0,PC1, dan PC2) mempunyai
fungsi yang sama dengan contoh program 2.

B. Mengatur Pergerakan Posisi Putaran Motor Servo


B.1 Percobaan 1
Program ini merupakan suatu contoh program untuk menggerakkan motor servo dengan
menggunakan 3 buah tombol push-button.

#include <mega8535.h>
#include <delay.h>

unsigned char i, j, k;
void putar_servo(void){
for (k=1; k<=75; k++){
PORTA.0=1;
for(j=1; j<=i; j++)
delay_us(1);
PORTA.0=0;

TIFR&=0x40;
TCNT2=0xB1;
while(!(TIFR&0x40));
TIFR&=0x40;
}
}

void main (void){


PORTC=0x00;
DDRC=0x00;
PORTA=0x00;
DDRA=0x01;

TCCR2=0x07;
ASSR=0x00;

while(1){
if(PINC.0==0){
i=30;
putar_servo();
}
if(PINC.1==0){
i=90;
putar_servo();
}
if(PINC.2==0){
i=180;
putar_servo();
}
} }
B.2 Tugas 1
Buatlah suatu program seperti contoh program 1 motor servo dengan menggunakan 5 tombol
untuk memilih posisi motor servo. Setiap tombol mewakili posisi servo berada pada 00, 450, 1350,
dan 1800. Tombol pertama (terhubung pada PINC 0) digunakan untuk posisi motor servo full CW
(1800), tombol kedua (terhubung pada PINC 1) untuk posisi 1350,…, dan seterusnya sampai
tombol kelima (terhubung pada PINC 4) untuk posisi pada full CCW (00).

Anda mungkin juga menyukai