Laman

Minggu, 04 Desember 2016

Paper Tugas Besar Pemrograman Bahasa C++

Kendali Motor Servo Dengan Fitur Timer 1 Menggunakan Bahasa C AVR

Motor servo merupakan sebuah motor yang bergerak sesuai kontrol sudut diberikan. Disini saya memakai servo SG90 dengan besar sudut antara -90o sampai dengan 90o dan memiliki spesifikasi seperti pada gambar berikut:
Untuk memangkitkan sinyal PWM yang dibutuhkan oleh servo tersebut. Saya menggunakan fitur dari Timer 1 dengan mode “Fast PWM”. Untuk menentukan nilai frekuensi keluaran (osilasi)nya dapat ditentukan dengan rumus berikut:

Servo tersebut membutuhkan frekuensi sebesar 50 Hz, maka kita harus menentukan nilai TOP dari Timer1 jika diketahui frekuensi kristalnya 12MHz dan Prescaler’nya 64!
Penyelesaian;












Setelah diketahui nilai frekuensinya maka kita bisa langsung membuat programnya. Adapun langkah2nya sebagai berikut:

1.   Perangkat lunak yang kita adalah CodeVision AVR dengan bahasa pemrogramannya bahasa c. langkah pertamanya adalah kita langsung masuk ke perangkat lunaknya seperti pada screenshot pada gambar dibawah ini yang saya tandai warna merah,
2. Langsung control+N dan buat project baru kemudian gunakan CodeWizardAVR untuk mempermudah penginisialisasian fitur Timer 1
3.      Untuk inisialisasinya ikuti saja gambar berikut:
4.      Lalu, klik ikon yang telah dilingkari warna merah pada gambar dibawah ini:
5.      Setelah itu skrip dari program timer akan keluar dengan sendirinya.

Untuk menentukan nilai dari Duty Cyclenya dapat ditentukan dengan rumus berikut: 

Nah, karena nilai duty cycle pada motor servo sebesar 1-2ms maka besar nilai duty cyclenya adalah
Maka range kerja dari duty cycle motor servo tersebut antara 5-10% saja.
Setelah duty cycle’nya diketahui dapat diperhitungkan nilai OCRn-nya sebagai berikut:

Nah, inilah skrip dari kendali servo:
#include <mega16.h>
#include <delay.h>

// Declare your global variables here
void servo(int pwm)
{
OCR1A=pwm;
//nilai OCR1A
}
void main(void)
{
PORTD=0x00;
DDRD=0x30;

// Inisialisasi Timer/Counter 1
// Sumber Clock: System Clock
// Nilai Clock: 187.500 kHz
// Mode: Fast PWM top=ICR1
// Keluaran OC1A: Tak-Membalik.
// Keluaran OC1B: Tak-Terpakai.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Interuspsi Overflow Timer1: Off
// Interupsi Input Capture: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0xA2;
TCCR1B=0x1B;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x0E;
ICR1L=0xA5;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

while (1)
{
// Place your code here
servo(231); //0 derajat
}
}


Metode Perancangan PWM

Hai semuanya, PWM itu apa sih?
Nah, PWM merupakan kepanjangan dari Pulse Width Modulation yang mana ini digunakan untuk memodulasi lebar pulsa dalam sebuah periode untuk mendapatkan tegangan rata-rata.
Pada dasarnya PWM memiliki 2 hal penting yaitu periode dan duty cycle. Nah duty cycle sendiri merupakan sebuah perbandingan waktu aktif dengan satu periode. Dan untuk rumus umumnya seperti dibawah ini:
PWM itu bisa dibangkitkan dengan 2 metode, yaitu dengan metode manual alias analog dan dengan menggunakan program. Okelah disini saya akan menjelaskan bagaimana cara membangkitkan sinyal PWM dengan metode analog:

Untuk membangkitkan sinyal PWM dengan metode ini saya menggunakan IC Timer NE555 dengan blok diagram sebagai berikut:
Dan rangkaian yang dipakai adalah:
untuk melakukan perancangan pada rangkaian ini digunakan, rumus perhitungan sebagai berikut:

untuk pembangkitan PWM dengan program bisa dilihat pada postingan artikel saya selanjutnya.
semoga barokah ilmu yang telah kita pelajari!.