Anda di halaman 1dari 6

Pengendalian Kecepatan Motor DC dengan PWM

Pengontrolan motor DC secara sederhana dibagi menjadi dua. Pertama yaitu dengan
mengatur arah putaran dan besarnya kecepatan dari putaran motor. Arah putaran motor
secara prinsip di atur dengan membalikan polaritas tegangan yang masuk ke motor.
Sedangkan besarnya kecepatan putaran motor diatur dengan mengatur tegangannya.
Mekanisme pengaturan ini ditangani oleh driver motor.
Driver motor yang digunakan banyak jenisnya. Yang paling sederhana dan mudah
dijumpai adalah driver dengan tipe IC L293D dan L298. Driver ini masing-masing
memiliki kemampuan memberikan arus maksimal motor sebesar 1A dan 4A. Untuk
motor-motor kecil yang memiliki rating arus rendah sangat cocok menggunakan driver
motor ini. Akan tetapi pada percobaan ini kita tidak akan menggunakan driver untuk
mengatur kerja motor dc.

Cara pengaturan kecepatan yang digunakan adalah dengan menggunakan


teknik PWM(Pulse Width Modulation), salah satu teknik untuk mengatur
kecepatan motor DC yang umum digunakan. Dengan menggunakan PWM kita dapat
mengatur kecepatan yang diinginkan dengan mudah. Teknik PWM untuk pengaturan
kecepatan motor adalah, pengaturan kecepatan motor dengan cara merubah-rubah
besarnya duty cycle pulsa. Pulsa yang yang berubah ubah duty cycle-nya inilah
yang menentukan kecepatan motor. Besarnya amplitudo dan frekuensi pulsa adalah
tetap, sedangkan besarnya duty cycle berubah-ubah sesuai dengan kecepatan yang
diinginkan, semakin besar duty cylce maka semakin cepat pula kecepatan motor, dan
sebaliknya semakin kecil duty cycle maka semakin pelan pula kecepatan motor.

Membuat sinya PWM dengan menggunaka CodeVisionAVR Pada ATMega16 yang


mempunyai 3 buah timer, tetapi disini saya hanya akan menggunakan Timer1 saja yang
digunakan untuk membangkitkan sinyal PWM. Pada dasarnya Timer0 dan Timer1
mempunyai 4 buah mode untuk membangkitkan sinyal PWM.
Output pin PWM pada ATMega16 terdapat pada 2 buah pin yaitu PD4
(OC1B) dan PD5 (OC1A).

Gambar 1. Simulasi Rangkaian pada Proteus

Timer1
Mode Phase Correct PWM
Foc1a = Fosc/(2*N*TOP)
Foc1b = Fosc/(2*N*TOP)
D = (OCR1X/TOP)*100%
Mode
Foc1a
Foc1b
D = (OCR1X/TOP)*100%

Fast
=
=

PWM
Fosc/(N*(1+TOP))
Fosc/(N*(1+TOP))

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)
Sekarang kita akan membuat aplikasi membangkitkan sinyal PWM dengan periode 20
ms dengan duty cycle 75%, menggunakan Timer1 10 Bit Mode Fast PWM.
Dengan menggunakan kristal 12 Mhz,
N
=
256
TOP = 10 bit = 3FF = 1023

Maka akan didapat frekuensi output (Foc1x) sebesar 45,77 Hz atau jika diubah kedalam
peroide 21,8 ms 20 ms

Untuk Duty cycle:


D = (OCR1X/TOP)*100%
75% = (OCR1X/1023)*100%
OCR1X = 767 = 2FF (dalam hexa)

Gambar 2. Pengaturan Timer 1

Gambar 3. Pengaturan Port Output PWM

Script Program pada CodeVision AVR


#include <mega16.h>
#include <delay.h>
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=0x30;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 187.500 kHz

// Mode: Fast PWM top=03FFh


// OC1A output: Non-Inv.
// OC1B output: Non-Inv.
// 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=0xA3;
TCCR1B=0x0B;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x02;
OCR1AL=0xFF;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=FFh
// 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;
// Analog Comparator initialization

// Analog Comparator: Off


// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
while (1)
{
OCR1B = 767 ;
};
}
Hasil Percobaan

Gambar 4. Tampilan Output dari simulasi Proteus

Anda mungkin juga menyukai