Senin, 05 Desember 2016
Minggu, 04 Desember 2016
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:
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:
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:
Langganan:
Postingan (Atom)