Kontrol Motor dengan Komunikasi Serial

Kontrol Kecepatan Motor DC Melalui Komunikasi Serial VB

Sama seperti artikel sebelumnya hanya saja disini sebagai inputnya yaitu melalui komunikasi serial PC. Sebagai tampilannya menggunakan Visual Basic 6. Simulasi disini sudah dicoba secara hardware dan hasilnya berhasil. Untuk menghubungkan mikrokontrole pada proteus dengan PC yaitu pada proteus menggunakan komponen COMPIM

sehingga mikrokontroler pada proteus dapat berkomunikasi Serial Port pada PC. Com pada mikro misalnya kita setting COM4 sedangkan pada PC kita setting COM3. Agar COM 3 dan COM dapat berkomunikasi yaitu menggunakan program “virtual serial Port”. Pada tampilan vb yaitu menggunakan scrollbar, nilai dari scrollbar ini dikirim melalui serial yaitu menggunakan mscomm.

Pada mikrokontroler yaitu menggunakan AVR ATMega16. Menggunakan fasilitas interupt serial receive. Jadi saat ada data masuk melalui serial maka otomatis AVR akan menjalankan program yang ada pada subrutin USART Receiver interrupt. Berikut setting programnya pada codevision AVR :

serial1 serial2

serial3 serial4

Programnya :

#include <mega16.h>
#include <delay.h>
#include <stdio.h>
unsigned char cek,input; char lcd_buffer[33];
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>

#define RXB8 1
#define TXB8 0
#define UPE 2
#define OVR 3
#define FE 4
#define UDRE 5
#define RXC 7

#define FRAMING_ERROR (1<<FE)
#define PARITY_ERROR (1<<UPE)
#define DATA_OVERRUN (1<<OVR)
#define DATA_REGISTER_EMPTY (1<<UDRE)
#define RX_COMPLETE (1<<RXC)

// USART Receiver buffer
#define RX_BUFFER_SIZE 8
char rx_buffer[RX_BUFFER_SIZE];

#if RX_BUFFER_SIZE<256
unsigned char rx_wr_index,rx_rd_index,rx_counter;
#else
unsigned int rx_wr_index,rx_rd_index,rx_counter;
#endif

// This flag is set on USART Receiver buffer overflow
bit rx_buffer_overflow;

// USART Receiver interrupt service routine
interrupt [USART_RXC] void usart_rx_isr(void)
{
char status,data;
status=UCSRA;
data=UDR;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
{
rx_buffer[rx_wr_index]=data;
if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
if (++rx_counter == RX_BUFFER_SIZE)
{
rx_counter=0;
rx_buffer_overflow=1;
};

PORTD.2=0; PORTD.3=1; OCR0=data; //Data serial untuk mengatur  //kecepatan motor
lcd_clear();
lcd_gotoxy(0,0);
sprintf(lcd_buffer,”Data Receive:%d”,data);
lcd_puts(lcd_buffer);
lcd_gotoxy(0,1);
if(OCR0==0){lcd_putsf(“Motor Mati  “);}
else if(OCR0>0 && OCR0<150){lcd_putsf(“Motor pelan”);}
else{lcd_putsf(“Motor Cepat”);}
};
}

#ifndef _DEBUG_TERMINAL_IO_
// Get a character from the USART Receiver buffer
#define _ALTERNATE_GETCHAR_
#pragma used+
char getchar(void)
{
char data;
while (rx_counter==0);
data=rx_buffer[rx_rd_index];
if (++rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
#asm(“cli”)
–rx_counter;
#asm(“sei”)
return data;
}
#pragma used-
#endif

// Standard Input/Output functions
#include <stdio.h>

// Declare your global variables here

void main(void)
{ unsigned char data_rx[25],input,sip;
unsigned char i,j,k,l; //Declare your local variables here

PORTA=0x00;
DDRA=0x00;

PORTB=0x00;
DDRB=0x08;

PORTC=0x00;
DDRC=0x00;

PORTD=0x00;
DDRD=0xff;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 43.200 kHz
// Mode: Fast PWM top=FFh
// OC0 output: Non-Inverted PWM
TCCR0=0x6D;
TCNT0=0x00;
OCR0=0x00;

TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

MCUCR=0x00;
MCUCSR=0x00;

TIMSK=0x00;

UCSRA=0x00;
UCSRB=0x98;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x47;

ACSR=0x80;
SFIOR=0x00;

// LCD module initialization
lcd_init(16);

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

while (1)
{
};
}

Sedangkan pada tampilan vb nya :

vb musbikhin

Private Sub Form_Load()
Text1 = 0
MSComm1.PortOpen = True
End Sub

Private Sub out_Change()
Dim nilai As Integer
nilai = out.Value
If nilai > 0 And nilai < 125 Then
Text1.BackColor = vbGreen

ElseIf nilai = 125 Then
Text1.BackColor = vbYellow

ElseIf nilai > 175 And nilai < 255 Then
Text1.BackColor = vbRed
End If

Text1 = nilai
MSComm1.Output = “” + Chr$(nilai)

End Sub

 

 

60 gagasan untuk “Kontrol Kecepatan Motor DC Melalui Komunikasi Serial VB

  1. imam

    mas mau nanyak…
    cara nya mengkoneksikan VB ke proteus itu gmn ya ??? (seperti artikel yg di atas itu)
    terus mau nanyak lagi mas…hehheee….bs tunjukin artikel yg lain gak?? tapi yg buat ARM atau ATXmega gtu?? please mas….help me….

    thank you

    1. Musbikhin Penulis

      Ini pake simulasi atau buat hardwarenya langsung, kalo pake kdang proteus terjadi masalah pada saat mengirim atau menerima data dari serial…coba yang com4(milik mikro proteus) jangan dirun proteusnya tapi pake Hiperterminal dulu, apakah benar vbnya mengirim data serial, kalo mengirim data berarti emang maslah pada mikro di proteusnya. mungkin bs sdikit membantu..thanks for visit..

      1. agung

        ngubahnya di VB langsung or gmn mas?
        saya mau pakai Matlab, kalo dari listing codevision sepertinya hampir sama ya mas?
        perubahan nilai di matlab mau saya pakai sebagai pengubah PWM sperti contih diatas..

          1. agung

            kurang lebih begini mas,
            misalnya saya ngatur setpoint sebesar 1000rpm nanti akan ada sinyal kontol yang dikirim ke mikro karena yang terhubung dengan mikro adalah sinyal kontrol, misal sebesar 500, tapi kalo kita ubah setppoint jadi 500 maka sinyal control jg berubah misal jadi 240, ga linear mas.
            dari sinyal kontrol mau saya pakai sebagai patokan penambahan PWM di mikro untuk gerakin kecepatan motor DC agar sama dengan sepoint.
            masalahnya saya bingung krn sinyal kontrolnya tidak linear mas,
            kira2 gmn ya mas?
            terima kasih

          2. Musbikhin Penulis

            Coba pada proprties “large charge” pada Scrollbarnya diset 5 atau 1 sehingga tiap perubahas scroll bisa linier….mungin bisa membantu..

    1. Musbikhin Penulis

      kalo isp usb itu buat download program…,terus kalo di laptop kan gak adau konektor db9 maka bisa pake USB to Serial (hardware lagi, biasa kalo di pasaran mereknya Prolifik)di laptopnya pake usb di mikronya tetep pake db9…

  2. agungelzan

    mas ada tutorial untuk kendali motor berbasis matlab?
    saya mau merancang PID-fuzzy ada di matlab jadi set point juga berasal dari PC matlab serial ATMega 8535.
    saya bingung dengan listingnya
    mohon bantuannya mas kalo ada contoh program yang bisa saya pelajari.
    terima kasih

    1. Musbikhin Penulis

      Maaf baru blas jarng cek blog..iya mas kalo pake yang versi 2.05 banyak errornya…kalo saya yang pake yang versi 1.25.8 dijamin tidak error..untuk skematiknya serial biasa mas ke mikro pake rs232,…

  3. brahmantya remons

    makasih mas…berkat ni tutorial saya jadi bisa belajar interface vb ma mikro…

    saya mau tanya mas klo kejadiannya di balik mikro yang ngirim dan vb yg nerima ada tutorialnya ga mas…klo ada di tunggu publishnya y mas…

Tinggalkan Balasan