Kontrol Kecepatan Motor DC Melalui Komunikasi Serial VB

Kontrol Motor dengan Komunikasi Serial

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=0×15 ;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=0×00;
DDRA=0×00;

PORTB=0×00;
DDRB=0×08;

PORTC=0×00;
DDRC=0×00;

PORTD=0×00;
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=0×00;
OCR0=0×00;

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

ASSR=0×00;
TCCR2=0×00;
TCNT2=0×00;
OCR2=0×00;

MCUCR=0×00;
MCUCSR=0×00;

TIMSK=0×00;

UCSRA=0×00;
UCSRB=0×98;
UCSRC=0×86;
UBRRH=0×00;
UBRRL=0×47;

ACSR=0×80;
SFIOR=0×00;

// 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

 

 

You can leave a response, or trackback from your own site.

60 Responses to “Kontrol Kecepatan Motor DC Melalui Komunikasi Serial VB”

  1. Dedy Saleh says:

    klw pake atmega 8535 tinggal ganti mdefnya aja ya mas?

  2. ARH says:

    Mas, boleh minta source-nya? Lagi belajar masalah ini, please ya mas…
    Thx :)

  3. imam says:

    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

  4. 12345 says:

    ini rangkaian RS232nya pake ic max232 dlu gak gan ??

  5. A says:

    mas ini knp ya.. nilai yang dikirim vb (scroll bar).. dan yg muncul dari mikro (LCD) berbeda.. :(( mohon pencerahannya mas..

  6. A says:

    mass.. bingung masalah port .. dicontoh vb mscomm1 <= ini mksd nya com1 ?

    • Musbikhin says:

      itu nama komponennya…kalo untuk com berapa bisa dilihat pada property dan bisa diubah ubah tidak hanya com1, tergantung com yang dicolokkan dengan mikronya…

  7. A says:

    Mas boleh minta save an dari semua program simulasi nya.. butuh bgt.. uda bikin hardware nya tp blm work… kalo boleh kirim ke alt_tea@ymail.com.. makasih banyak mas

  8. A says:

    mass.. ini knp ya, alatnya dah jadi smua, syntax nya uda sama juga, di compile sukses, tp pass scroll bar nya di geser gk ada perubahan, ada saran buat ku gk ??

    • Musbikhin says:

      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..

  9. agung says:

    mas data yang dikirim bentuknya apa??

    • Musbikhin says:

      Nilai integer dari komponen slider kemudian dirubah dalam bentuk karakter sebelum dikirim melalui serial.

      • agung says:

        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..

        • Musbikhin says:

          Ya, ngubahnya langsung di vb, listing di codevidionnya hampir sama…

          • agung says:

            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

          • Musbikhin says:

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

  10. A says:

    mas.. pd saat program.. pke isp usb bisa gk ? trs kalo dari serial DB9 ke laptop pake converter db9 -> usb ngaruh gk ?

    • Musbikhin says:

      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…

  11. Haris Idol says:

    Mas mau tanya, ada tutorial buat rangkaian s3nsor suhu ngga’ mas?
    Trims sblmnya.. :D

    • Musbikhin says:

      kalo rangkaian buat sensor suhu biasanya sudah ada di pasaran sperti SHT11 ato yang murah meriah pake LM35…rangkaiannya paling menggunakan komparator..

  12. bagus sn says:

    mas, bisa minta program vb nya ke email saya ? trims

  13. agungelzan says:

    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

  14. A says:

    mas kalo bisal nya gk pke LCD bisa kan ? klo ttp pke syntax itu trs gk pke lcd bisa ?

  15. A says:

    rangkaian nya ada ukuran yg lebih besar ?

  16. Arifin says:

    Mas saya boleh minta skematiknya?, soalnya gambar di atas kurang jelas. sekalian saya minta code programnya. saya sudah coba copy paste code tersebut ke code vision 2.05, tapi malah error. mohon bantuannya dikirim ke cyberqalbunsalim@gmail.com. Nuhun/terima kasih

    • Musbikhin says:

      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,…

  17. Agush says:

    Mas saya boleh minta program vb-nya ini sama simulasinya sekalian gak?
    thanks. kirim di email guesh_agush@yahoo.com

  18. PONCO says:

    sistem kerjanya, juga hampir sama dengan skripsi aku mas.
    bisa dikirim program vb skaligus source codenya sama simulator proteusnya mas. Buat pengembangnnya… trim’s.
    ponco_xl@yahoo.com

  19. Umar says:

    Waw keren neh…
    mas,, boleh minta program vb skaligus source codenya ga.?
    kirim ke email Q ya.?
    nizartekhnik@yahoo.co.id

  20. bahrin says:

    saya sangat tertarik sekali mas, boleh minta bantuan nyelesain TA, membuat simulator man-machine interface, boleh minta source program dan desain simulator virtual PLC dan Mikro mas, dikirm di emailku mas iya: majongbahrin@yahoo.co.id

    makasih sebelumnya

    bahrin

  21. boleh minta program vb skalian simulator proteusnya kgk mas, coz aq bru blajar mikro..
    tp disuruh bikin tgs interfacing..

  22. makarim says:

    wah bikin tambah gaul.. lanjutkan mas bro’

  23. brahmantya remons says:

    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…

  24. fatan says:

    udah saya coba progrm CVnya,, bnyak yng error… knp ya??
    trus,, mau nnyak, untuk penerimaan data dari VB ke CV gmn ya mas….??? untuk menggerakkan servo

    mhon bntuannya

  25. natasya says:

    Pemanfaatan Sistem Akuisisi Data untuk Inteligent Room System hampir sama dengan TA saya mas
    boleh minta programnya ga mas, coz aq bru blajar mikro

    tolong kirim ke email ya :
    natha_dechoco@yahoo.com

    makasih mas

Leave a Reply

You must be logged in to post a comment.

Anda mungkin juga sukaclose