• Tidak ada hasil yang ditemukan

TUTORIAL II MONITORING PANEL SURYA TUTORIAL BASIC TIMER- CONTER,ADC AND SERIAL COMMUNICATION

N/A
N/A
Protected

Academic year: 2021

Membagikan "TUTORIAL II MONITORING PANEL SURYA TUTORIAL BASIC TIMER- CONTER,ADC AND SERIAL COMMUNICATION"

Copied!
25
0
0

Teks penuh

(1)

NAMA : MOH. FAISOL KELAS : 2 D3 ELIN B

NRP : 1303121040

TUTORIAL II

MONITORING PANEL SURYA

TUTORIAL BASIC TIMER- CONTER,ADC AND SERIAL COMMUNICATION

I. INTRODUCTION

1. Plant Description

Monitoring panel surya adalah sebuah sistem monitoring nilai tegangan dan besar arus yang akan dimasukkan kedalam accumulator yang kita analogikan sebagai load (beban).

Selain melakukan monitoring nilai arus dan tegangan, plant ini juga merupakan sistem yang berperan untuk mengatur tegangan keluaran yang fluktuatif dari panel surya menjadi tegangan yang konstan sebelum dimasukkan ke accumulator.

Energi listrik yang fluktuatif dari dari panel surya akibat perubahan cahaya matahari tidak dapat digunakan secara langsung untuk charging accumulator, karena berakibat kepada ketidak ekonomisan penggunaan accumulator baik dalam pemuatan maupun umur penggunaan accumulator itu sendiri (accumulator life time) sebagai media penyimpan. Maka digunkanlah DC-DC boost converter yang merupakan sistem dengan keadalan untuk mengatasi masalah ini. DC-DC boost converter ini dirancang sedemikian rupa sehingga didapat keluaran stabil dengan range 16V s.d 18V /0.0022A DC yang kemudian dapat dimasukkan kedalam accumulator melalui sistem carging.

DC-DC buck-bost converter ini akan kita rancang untuk dapat melakukan pengontrolan terhadap keluaran arus dan tegangan dari generator dengan cara membangkitkan PWM pada microcontroler Atmega128 dengan frekuensi sekitar 32 KHZ. Nilai Duty Cycle pada PWM ini akan berubah dan menyesuaikan diri terhadap keluran dari panel surya, sehingga tegangan carging pada accumulator dapat disesuaikan

(2)

2. Lay Out Description

II. PROGRAM PROSES

(3)

2. Circuit description

PORT.4 pada plant ini akan menghasilkan PWM dengan frekuensi 31,25 KHz Kita menentukan nilai frekuensi clock timer 8000 KHz itu berarti kita telah menentukan nilai prescaler sebesar 1.

𝐶𝑙𝑜𝑐𝑘 𝑡𝑖𝑚𝑒𝑟0 = 𝐼𝑛𝑡𝑒𝑟𝑛𝑎𝑙 𝐶𝑙𝑜𝑐𝑘

𝑃𝑟𝑒𝑠𝑐𝑎𝑙𝑒𝑟 =

8000 𝐾𝐻𝑧

1 = 8000 𝐾𝐻𝑧

Timer0 adalah timer 8 bit dengan nilai hexa adalah FF H sehingga diketahui nilai OCR0 maksimum (top) adalah 255. Nilai periode gelombang keluaran yang didapat adalah.

𝑇 = 256

𝐶𝑙𝑜𝑐𝑘 𝑡𝑖𝑚𝑒𝑟0=

256

8000 𝐾𝐻𝑧= 32 µs

Untuk membuat duty cycle maka yang kita atur adalah nilai OCR0, nilai TON akan semakin besar atau duty cycle semakin besar pada saat nilai OCR0 mendekati 255 dan TON akan semakin kicil atau duty cycle semakin kecil pada saat nilai OCR menjauhi nilai 255.

Disini mode yang kita gunakan adalah Phase Correct PWM sehingga nilai periode T tidak lagi 32µs akan tetapi menjadi 64 µs. Sehingga frekuensi timer menjadi 15,625 KHz.

Nilai OCR0 akan berubah berubah tergantung pada besar keluaran panel surya. Jika panal surya menghasilkan tegangan rendah, maka nilai OCR0 akan increment, sehingga PWM akan semakin besar dan menyebabkan sudut penyulutan pada Bost converter semakin besar. Dengan adanya aksi ini maka keluaran dari panel surya dinaikkan secar teru menerus sampai pada keaadaan range tagangan 16V s.d 18V.

Namun pada saat nilai tegangan dari bost converter melebihi 18 VDC maka nilai OCR0 akan diincrement, sehingga PWM akan semakin kecil dan menyebabkan sudut penyulutan pada Bost converter semakin kecil.

Disini nilai OCR0 diatur agar menjaga tegangan keluaran Bost-converter tetap berada pada range 16V s.d 18V.

Besar nilai keluaran Bost-converter juga dipengaruhi oleh besar tahanan beban. Disini kita memberi R1=90KΩ dan R2-5KΩ. Perbandingan nilai resistansi ini diberikan agar pembacaan tegangan pada R2 maksimal adalah 5V. Besar tegangan keluaran R2 ini akan dilewatkan terlebih dahulu pada zener 1N5231B agar stabil pada harga tegangan maksimal keluaran 5V.

Keluaran dari zener akan dibaca pada ADC0 resolusi 10 bit(1023) dan dilakukan perbandingan pada pembacaan tegangan di R2 sehingga didapat pembacaa tegangan pada R1.

Pembacaan nilai teganagn R2 akan ditampilkan pada layar LCD 20X4, diikuti oleh pambacaan nilai arus, daya dan Duty cycle.

Pada saat tegangan di R1<=16 V maka lampu indikator Under voltage condition pada PORT.1 akan menyala dan apabila R1>=18 V maka lampu indikator Over voltage condition pada PORT.0 akan menyala. Untuk condisi lampu indikator Over current conditon pada PORT.2 manyala jika current >= 0.00022.

(4)

3. Setting I/O

a. Open CodeVision AVR compiler dan pilih menu File-New.

b. Pilih Project kemudian OK

c. Pilih chip tipe ATmega

(5)

d. Pilih tipe chip Atmega128 dengan Clock 8000 KHz

a. Atur Port yang ingin digunakan sebagai Input maupun Output

4. Setting timer0 a. Pilih timer0

(6)

b. Tentukan setting seperti gambar dibawah ini.

5. Setting ADC

(7)

6. Setting serial communication a. Pilih USART0

b. Enable reciver dan transmitter

(8)

d. Double clik sehingga tampil invormasi berikut

e. Atur nilai USART0 dengan informasi diatas

(9)

g. Simpan dengan nama yang sesuai

h. Buatlah program dibawah #include <mega128.h> #include <delay.h> #include <alcd.h> #ifndef RXB8 #define RXB8 1 #endif #ifndef TXB8 #define TXB8 0 #endif #ifndef UPE #define UPE 2 #endif #ifndef DOR #define DOR 3 #endif #ifndef FE #define FE 4 #endif #ifndef UDRE #define UDRE 5 #endif #ifndef RXC #define RXC 7 #endif

#define FRAMING_ERROR (1<<FE) #define PARITY_ERROR (1<<UPE) #define DATA_OVERRUN (1<<DOR)

#define DATA_REGISTER_EMPTY (1<<UDRE) #define RX_COMPLETE (1<<RXC)

#define RX_BUFFER_SIZE0 8

char rx_buffer0[RX_BUFFER_SIZE0];

(10)

unsigned char rx_wr_index0,rx_rd_index0,rx_counter0; #else

unsigned int rx_wr_index0,rx_rd_index0,rx_counter0; #endif

bit rx_buffer_overflow0;

float voltage1,voltage2,current,a=1,duty,power;

unsigned char buff1[20],buff2[20],buff3[20],buff4[20];

interrupt [USART0_RXC] void usart0_rx_isr(void) {

char status,data; status=UCSR0A; data=UDR0;

if ((status & (FRAMING_ERROR | PARITY_ERROR |

DATA_OVERRUN))==0) {

rx_buffer0[rx_wr_index0++]=data; #if RX_BUFFER_SIZE0 == 256

// special case for receiver buffer size=256 if (++rx_counter0 == 0) rx_buffer_overflow0=1; #else

if (rx_wr_index0 == RX_BUFFER_SIZE0) rx_wr_index0=0; if (++rx_counter0 == RX_BUFFER_SIZE0) { rx_counter0=0; rx_buffer_overflow0=1; } #endif } } #ifndef _DEBUG_TERMINAL_IO_

// Get a character from the USART0 Receiver buffer #define _ALTERNATE_GETCHAR_ #pragma used+ char getchar(void) { char data; while (rx_counter0==0); data=rx_buffer0[rx_rd_index0++]; #if RX_BUFFER_SIZE0 != 256

if (rx_rd_index0 == RX_BUFFER_SIZE0) rx_rd_index0=0; #endif #asm("cli") --rx_counter0; #asm("sei") return data; } #pragma used- #endif

// USART0 Transmitter buffer #define TX_BUFFER_SIZE0 8

char tx_buffer0[TX_BUFFER_SIZE0];

#if TX_BUFFER_SIZE0 <= 256

unsigned char tx_wr_index0,tx_rd_index0,tx_counter0; #else

unsigned int tx_wr_index0,tx_rd_index0,tx_counter0; #endif

(11)

interrupt [USART0_TXC] void usart0_tx_isr(void) { if (tx_counter0) { --tx_counter0; UDR0=tx_buffer0[tx_rd_index0++]; #if TX_BUFFER_SIZE0 != 256

if (tx_rd_index0 == TX_BUFFER_SIZE0) tx_rd_index0=0; #endif

} }

#ifndef _DEBUG_TERMINAL_IO_

// Write a character to the USART0 Transmitter buffer #define _ALTERNATE_PUTCHAR_

#pragma used+ void putchar(char c) {

while (tx_counter0 == TX_BUFFER_SIZE0); #asm("cli")

if (tx_counter0 || ((UCSR0A & DATA_REGISTER_EMPTY)==0)) {

tx_buffer0[tx_wr_index0++]=c; #if TX_BUFFER_SIZE0 != 256

if (tx_wr_index0 == TX_BUFFER_SIZE0) tx_wr_index0=0; #endif ++tx_counter0; } else UDR0=c; #asm("sei") } #pragma used- #endif

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

#define ADC_VREF_TYPE 0x00

// Read the AD conversion result

unsigned int read_adc(unsigned char adc_input) {

ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);

// Delay needed for the stabilization of the ADC input voltage delay_us(10);

// Start the AD conversion ADCSRA|=0x40;

// Wait for the AD conversion to complete while ((ADCSRA & 0x10)==0);

ADCSRA|=0x10; return ADCW; } void main(void) { PORTA=0x00; DDRA=0x00; PORTB=0x00; DDRB=0x1F; PORTC=0x00; DDRC=0x00;

(12)

PORTD=0x00; DDRD=0x00; PORTE=0x00; DDRE=0x00; PORTF=0x00; DDRF=0x00; PORTG=0x00; DDRG=0x00; // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: 8000.000 kHz

// Mode: Phase correct PWM top=0xFF // OC0 output: Non-Inverted PWM ASSR=0x00;

TCCR0=0x61; TCNT0=0x00; OCR0=0x00;

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

ETIMSK=0x00;

// USART0 initialization

// Communication Parameters: 8 Data, 1 Stop, No Parity // USART0 Receiver: On

// USART0 Transmitter: On // USART0 Mode: Asynchronous // USART0 Baud Rate: 9600 UCSR0A=0x00; UCSR0B=0xD8; UCSR0C=0x06; UBRR0H=0x00; UBRR0L=0x33; // USART1 initialization // USART1 disabled UCSR1B=0x00;

// Analog Comparator initialization // Analog Comparator: Off

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

SFIOR=0x00;

// ADC initialization

// ADC Clock frequency: 1000.000 kHz // ADC Voltage Reference: AREF pin ADMUX=ADC_VREF_TYPE & 0xff; ADCSRA=0x83;

// Alphanumeric LCD initialization // Connections are specified in the

// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu: // RS - PORTA Bit 0

// RD - PORTA Bit 1 // EN - PORTA Bit 2 // D4 - PORTA Bit 4 // D5 - PORTA Bit 5

(13)

// D6 - PORTA Bit 6 // D7 - PORTA Bit 7 // Characters/line: 20 lcd_init(20);

// Global enable interrupts #asm("sei") while (1) { OCR0=a; lcd_gotoxy(0,0); lcd_putsf("Voltage:"); voltage1 = (float)read_adc(0)*5/1024; voltage2 = voltage1*18; sprintf(buff1,"%3.2f",voltage2); lcd_puts(buff1); lcd_gotoxy(0,1); lcd_putsf("Current:"); current=(voltage1+voltage2)/90000; sprintf(buff2,"%3.5f",current); lcd_puts(buff2); lcd_gotoxy(0,2); lcd_putsf("Daya"); lcd_gotoxy(7,2); lcd_putsf(":"); power = voltage2*current; sprintf(buff4,"%3.8f",power); lcd_puts(buff4); if(a>=2){a=a-1;} if (voltage2>=18) { OCR0=a; PORTB.0=1; PORTB.1=0; PORTB.2=0; PORTB.3=0; lcd_gotoxy(0,3); lcd_putsf("Duty"); lcd_gotoxy(7,3); lcd_putsf(": %"); duty=(a/256)*100; sprintf(buff3,"%3.2f",duty); lcd_gotoxy(8,3);lcd_puts(buff3); } if (voltage2<=16) { if(a<=250){a=a+1;} OCR0=a; PORTB.1=1; PORTB.0=0; PORTB.2=0; PORTB.3=0; lcd_gotoxy(0,3); lcd_putsf("Duty"); lcd_gotoxy(7,3); lcd_putsf(": %"); duty=(a/256)*100; sprintf(buff3,"%3.2f",duty); lcd_gotoxy(8,3);lcd_puts(buff3);

(14)

} if (current>=0.00022) { if(a<=250){a=a+1;} OCR0=a; PORTB.2=1; PORTB.1=0; PORTB.0=0; PORTB.3=0; lcd_gotoxy(0,3); lcd_putsf("Duty"); lcd_gotoxy(7,3); lcd_putsf(": %"); duty=(a/256)*100; sprintf(buff3,"%3.2f",duty); lcd_gotoxy(8,3);lcd_puts(buff3); } if (voltage2<=18&&voltage2>=16) { OCR0=a; PORTB.0=0; PORTB.1=0; PORTB.2=0; PORTB.3=1; lcd_gotoxy(0,3); lcd_putsf("Duty"); lcd_gotoxy(7,3); lcd_putsf(": %"); duty=(a/256)*100; sprintf(buff3,"%3.2f",duty); lcd_gotoxy(8,3);lcd_puts(buff3); } } }

III. SIMULATION OUTPUT

(15)

2. NORMAL CONDITION

IV. SERIAL COMMUNICATION

1. PROTEUS CIRCUIT SETTING

a. Double clik pada COMPIM sehingga muncul jendela editor. Tentukan setting comport.

2. CODEVISION AVR PROGRAM SETTING a. Bukalah menu setting-terminal

(16)

b. Lakukan pengaturan seperti gambar dibawah ini.

3. VSPE SETTING

a. Pilih menu divice kemudian create

(17)

c. Pilih menu jenis comport sesuai dengan comport pada proteus dan visual basic setelah selesai clik Finis.

d. Kemudian Running lah

4. VISUAL BASIC SETTING

(18)

b. Buatlah lay-out seperti gambar dibawah.

(19)

d. Tambahkan kedalam Form1

(20)
(21)
(22)
(23)

5. VISUAL BASIC PROGRAM Dim data As String

Dim tegangan, arus, duty As Variant Private Sub cmdcon_Click()

If rs232.PortOpen = False Then rs232.PortOpen = True End Sub

Private Sub cmddis_Click()

If rs232.PortOpen = True Then rs232.PortOpen = False End Sub

Private Sub cmdexit_Click()

If rs232.PortOpen = True Then rs232.PortOpen = False Unload Me

End Sub

Private Sub Form_Load() With rs232 .Settings = "9600,n,8,1" .RThreshold = 1 .InputLen = 1 .CommPort = 5 End With End Sub

Private Sub rs232_OnComm() data = data + rs232.Input If InStr(data, vbCr) Then txttegangan.Text = Mid$(data, 1, 6) txtarus.Text = Mid$(data, 7, 6) Txtduty.Text = Mid$(data, 14, 6) tegangan = Val(txttegangan.Text) arus = Val(txtarus.Text) duty = Val(Txtduty.Text) data = "" End If End Sub

Private Sub Timer1_Timer() If tegangan >= 18 Then oc.FillColor = vbRed Else oc.FillColor = vbBlack End If If tegangan <= 16 Then

(24)

uv.FillColor = vbYellow Else

uv.FillColor = vbBlack End If

If tegangan <= 18 And tegangan >= 16 Then nc.FillColor = vbGreen Else oc.FillColor = vbBlack End If If arus >= 0.0022 Then oc.FillColor = vbBlue Else oc.FillColor = vbBlack End If End Sub

(25)

DAFTAR PUSTAKA

[1]. Prof. Ir. Abdul Kadir, “ENERGI”, UI-Press, Jakarta, 1987.

[2]. Ainur Rofiq, Sutedjo, “Start-Up Busines Initiative for Jobless”, EEPIS-Press, Surabaya, Indonesia, March 1-27, 1999.

[3]. BENJAMIN C. KUO,”Automatics control system SEVENT Edition, Edisi Bahasa Indonesia”, PT.Aditia Media, Yogyakarta,1998

[4]. moh. zaenal efendi, novie ayub W,” STUDI PERBANDINGAN METODE SWITCHING PHASE SHIFTED PWM DENGAN PWM TIPE UNIPOLAR PADA INVERTER 1 PHASA JENIS FULLBRIDGE, IES 2001”, EEPIS Press, eepis-its, surabaya,indonesia, 2001 ,editor dadet pramadihanto

Referensi

Dokumen terkait

Untuk menentukan nilai kapasitas dasar dan faktor parameter geometrik MKJI memberikan grafik untuk tiap-tiap parameter, akan tetapi karena parameter geometrik jalinan pada

Melalui cerita-cerita yang baik, sesungguhnya anak-anak tidak hanya memperoleh kesenangan atau hiburan saja, tetapi mendapatkan pendidikan yang jauh lebih luas. Bahkan tidak

UNAIR NEWS : “Bagi saya, prestasi paling menonjol selama studi adalah dapat menyelesaikan praktik kerja profesi psikologi di Puskesmas dengan baik.” Begitulah yang diucapkan

Belanja adalah semua pengeluaran KUN yang mengurangi ekuitas dana lancar dalam periode tahun yang bersangkutan yang tidak akan diperoleh pembayarannya kembali oleh

Jika proses klarifikasi dan negosiasi tidak berhasil, dalam pengertian vendor dan staff logistik tidak mencapai kata sepakat atas harga atau sepakat namun harga yang

Untuk membuktikan lagi atas teori-teori dan hasil - hasil penelitian sebelumnya, sehingga hasil penelitian ini diharapkan dapat menunjukan bahwa kebijakan dividen ada pengaruh dari

Keterbatasan dalam penelitian ini adalah (1) penelitian ini memiliki R 2 yang masih tergolong rendah yaitu 16,1%, sehingga diharapkan penelitian yang akan datang

Berdasarkan pengolahan data juga diperoleh, 16 responden (40%) tergolong dalam kategori sedang, yang artinya banyak siswa yang melakukan pelanggaran terhadap UU