RSS

PENGHITUNG KECEPATAN MOTOR DC MENGGUNAKAN OPTOCOUPLER DENGAN CODEVISION AVR

17 Apr

Pada dasarnya aplikasi ini hampir sama dengan aplikasi penghitung frekuensi (Frequency Counter), dimana letak perbedaanya hanya pada perumusannya saja, dimana perumusan tersebut tergantung dari pengubahan detik ke menit dan banyaknya pulsa encoder dalam 1 putaran motor DC.

Jika menggunakan optocoupler sebagai sensor anda harus menggunakan rotary encoder yang di-couple dengan as motor dc untuk mendeteksi kecepatan putaran motor DC. Biasanya pada rotary encoder dibuat lubang-lubang sebagai representasi banyaknya pulsa. Dan anda harus menentukan terlebih dahulu banyaknya pendeteksian pulsa atau lubang pada rotary encoder untuk satu putaran yang dilakukan motor DC. Karena banyaknya pulsa atau lubang akan mempengaruhi perumusan perhitungan kecepatan motor dc, dan semakin banyak pulsa atau lubang maka akan meningkatkan resolusi pembacaan kecepatan motor DC, dengan kata lain pembacaan kecepatan akan semakin presisi.

Dan jika motor DC anda sudah mempunyai internal encoder, anda hanya tinggal menghubungkan saja output internal encoder motor DC anda ke pin INT0 atau PD2.

Saya sendiri menggunakan rotary encoder sebanyak 20 lubang sehingga perumusan kecepatan motor DC menjadi:

pulsa=frekuensi*60/20; atau pulsa=frekuensi*30;

Dimana angka 60 digunakan untuk mengubah kedalam satuan RPM (round per minute), karena timer yang saya gunakan hanya membaca selama 1 detik, jika dikalikan sebanyak 60 maka akan menjadi 1 menit. Dan angka 20 adalah banyaknya lubang atau pulsa rotary encoder.

Pada schematic diatas penggunaan saklar pada optocoupler hanya sebagai pemicu saja (trigger), jika pada implementasi riilnya. Pemicu ini berasal dari lubang-lubang atau pulsa dari encoder.

Jika teman-teman masih bingung mengenai fitur Timer dan Counter serta eksternal interupsi dapat membacanya pada menu TUTORIAL Timer dan Counter dan Interupsi Eksternal.

Berikut adalah listing program lengkapnya:

int frekuensi=0;
float pulsa;
char temp[8];

#include <mega16.h>
#include <lcd.h>
#include <delay.h>
#include <stdlib.h>

// Alphanumeric LCD Module functions
#asm
   .equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>

// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
frekuensi++;//baca frekuensi (pulssa) yg masuk ke INT0 trus di increament
}

// Timer 1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)//timer 1 detik untuk membaca pulsa yg masuk ke INT0
{
// Reinitialize Timer 1 value
    TCNT1H=0xD23A >> 8;
    TCNT1L=0xD23A & 0xff;
pulsa=(float)frekuensi*60/20;//formula perhitungan kecepatan
    frekuensi=0;
    lcd_clear();
}

void tampilkan_LCD() //menampilkan data kecepatan di lcd
{
      lcd_gotoxy(0,0);
      lcd_putsf(“ElektrO-cOntrOl”);
      ftoa(pulsa,1,temp);
      lcd_gotoxy(0,1);
      lcd_puts(temp);
      lcd_gotoxy(0,5);
      lcd_putsf(“RPM”);
}

void main(void)
{
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 11.719 kHz
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: On
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x05;
TCNT1H=0xD2;
TCNT1L=0x3A;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Falling Edge
// INT1: Off
// INT2: Off
GICR|=0x40;
MCUCR=0x02;
MCUCSR=0x00;
GIFR=0x40;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x04;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// LCD module initialization
lcd_init(16);

// Global enable interrupts
#asm(“sei”)

while (1)
      {
      tampilkan_LCD();
      };
}

Jika ingin mendapatkan file program dalam bentuk CodeVision AVR silakan download link dibawah ini.

File program CodeVision AVR

Semoga bermanfaat…

 
3 Comments

Posted by on April 17, 2011 in AVR Projects

 

Tags: , , , , ,

3 responses to “PENGHITUNG KECEPATAN MOTOR DC MENGGUNAKAN OPTOCOUPLER DENGAN CODEVISION AVR

  1. fuad

    May 12, 2011 at 23:15

    mas postingannya bagus2……sangat membantu,,,,,

     
  2. akhmadfarisiy

    June 16, 2011 at 08:05

    Mas, bisa bantu saya gak untuk membuat alat ini ??apa saja yg dibutuhkan untuk pembuatannya, trima kasih,
    Sy Mengharapkan untuk di balas,,

     
    • ElectrO-cOntrOl Team

      June 17, 2011 at 00:40

      pertama2 tentukan dahulu apakah anda ingin membeli motor DC yg sudah dilengkapi internal encoder atau blm! jika belum dilengkapi internel encoder anda membutuhkan optocoupler dan rotary encoder (dapat dibuat sendiri). Trus komponen lainnya seperti gambar rangkaian pada postingan ini.
      Motor DC yg sudah dilengkapi internal encoder memang relatif lebih mahal dibandingkan yg tdk ada.
      biasanya jika membeli motor DC saya melalui situs digi-ware.com

       

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
%d bloggers like this: