Chương 3.THIẾT KẾ VÀ THI CÔNG MẠCH NẠP ACQUY TỪ HỆ THỐNG PIN MẶT TRỜI.. Từ những cơ sở lý thuyết đó, chúng ta xây dựng mô hình của đề tài với ý tưởng thiết kế là sử pin năng lượng mặt tr
Trang 1Chương 3.
THIẾT KẾ VÀ THI CÔNG MẠCH NẠP ACQUY TỪ
HỆ THỐNG PIN MẶT TRỜI.
3.1 Thiết kế mạch nạp acquy:
Những chương trước chúng ta đã tìm hiểu tổng quan về hệ thống pin mặt trời Từ những cơ sở lý thuyết đó, chúng ta xây dựng mô hình của đề tài với ý tưởng thiết kế là sử pin năng lượng mặt trời, nạp điện cho Acquy, có dò điểm công suất cực đại
3.1.1 Yêu cầu của mô hình:
3.1.1.1 Về kỹ thuật:
- Mô hình phải thể hiện được hiệu quả tiết kiệm và thân thiện với môi trường.
- Chịu được các điều kiện khắc nghiệt của thời tiết, bền vững với thời gian.
- Đơn giản trong vận hành và bảo trì.
- Linh động và thẩm mỹ.
3.1.1.2 Về kinh tế:
- Đơn giản nhất trong thiết kế để hạ giá thành.
- Sử dụng vật tư và thiết bị thông dụng với giá thành thấp.
- Với những phần không quan trọng của mô hình có thể tận dụng vật tư có sẳn để hạ
giá thành nhất có thể
3.1.2 Sơ đồ nguyên lý và code cho mạch nạp acquy:
Trang 2Hình 3.1: Sơ đồ nguyên lý mạch nạp acquy.
Sơ đồ nguyên lý mạch nạp acquy được vẽ và chạy mô phỏng trên phần mềm Protues
Trang 3Hình 3.2: Phần mềm mô phỏng Protues.
Chương trình được viết bằng ngôn ngữ lập trình C, được lập trình trên phần mềm Keil C
Hình 3.3: Phần mềm keil C.
Sau đây là đoạn code của mạch nạp acquy:
Phần này bao gồm:
- Chương trình chính của mạch nạp
- Các thư viện có trong chương trình chính:
Thư viện LCD
Thư viện DS1307
Trang 43.1.2.1 Code chương trình chính:
#include "REG51xD2.h"
#include <stdio.h>
unsigned char buf_lcd[20];
#define rs_lcd P10
#define e_lcd P11
#define d4_lcd P00
#define d5_lcd P01
#define d6_lcd P02
#define d7_lcd P03
#include "Driver_Lcd_4Bit_V0.h"
#define DS_WRITE 0xD0
#define DS_READ 0xD1
#define ERR_ACK 0x01
// *** -***
unsigned char RTC_ARR[7];
#include "i2c.h"
// Read RTC (all real time)
void ReadRTC(unsigned char * buff)
{
StartI2C();
WriteI2C(DS_WRITE);
Trang 5WriteI2C(0x00);
StartI2C();
WriteI2C(DS_READ);
*(buff+0)=ReadI2C(ACK); // Second
*(buff+1)=ReadI2C(ACK); // Minute
*(buff+2)=ReadI2C(ACK); // hour
*(buff+6)=ReadI2C(NO_ACK); // year
StopI2C();
}
// Write RTC
void WriteRTC(unsigned char *buff)
{
StartI2C();
WriteI2C(DS_WRITE);
WriteI2C(0x00);
WriteI2C(*(buff+0));
WriteI2C(*(buff+1));
WriteI2C(*(buff+2));
StopI2C();
}
void Set_Date_Time( unsigned char min, unsigned char hour)
{
ReadRTC(&RTC_ARR[0]);
RTC_ARR[0] = RTC_ARR[0] & 0x7F;//enable oscillator (bit 7=0) RTC_ARR[1] = min;
RTC_ARR[2] = hour;
WriteRTC(&RTC_ARR[0]);//Set RTC
}
void display(void)
Trang 6ReadRTC(&RTC_ARR[0]);
sprintf(buf_lcd," %02bX:%02bX:%02bX",RTC_ARR[2],RTC_ARR[1],RTC_ARR[0]); Putc_Lcd(buf_lcd,8,0);
delay(50); // delay about 1 second
}
#define adc_ale P14
#define adc_start P15
#define adc_add0 P16
#define adc_add1 P17
#define data_adc P2
short f_adc=0;
unsigned val_adc[6];
float xdata Vso, Pso,deltaV,deltaP,D_pwm,Pnew; Inap;
unsigned int mode=0,f_k=0;
void int_ex0 (void ) interrupt 0
{ f_adc = 1;
}
void int_ex1 (void ) interrupt 2
if(mode==3)
{ mode =1;}
}
void scan_adc()
{ unsigned int i=0;
/// doc ad
Trang 7for (i=0;i<3;i++)
{ adc_add0 = (i & 0x01)? 1:0;
adc_add1 = (i & 0x02)? 1:0;
delay(1);
delay(1);
adc_start = 1;
delay(1);
adc_start = 0;
while(!f_adc);
val_adc[i] = data_adc;
delay(100);
}
/// hien thi ad
sprintf(buf_lcd,"%.2fV ",(float)val_adc[0]*14.10/255.0); /// hien thi ap pin Putc_Lcd(buf_lcd,9,1);
sprintf(buf_lcd,"%.2fV ",(float)val_adc[1]*20.0/255.0); /// hien thi ap solar Putc_Lcd(buf_lcd,9,2);
sprintf(buf_lcd,"%.2fA",((float)val_adc[2]*22.7/255.0-(float)val_adc[1]*20.0/255.0)/0.22); /// hien thi dong solar
Putc_Lcd(buf_lcd,9,3);
}
void charge() //moi bo sung pwm de do MPPT mach nap {
Inap= val_adc[2]; // do dong Isolar
deltaV = val_adc[1] - Vso; // Tinh deltaV
Trang 8Pnew = val_adc[1]*Inap; // Tinh cong suat
deltaP = Pnew - Pso; //Tinh DeltaP
if (deltaP > 0.0)
{ if (deltaV > 0.0)
{ if (D_pwm > 5)
D_pwm = D_pwm-5;} } else
{ if (deltaV > 0.0)
{ if (D_pwm < 245.0) D_pwm = D_pwm+5; } }
void main()
EX1 = 1;
IT1 = 1;
Trang 9mode =1 ;
//Set_Date_Time(0x37,0x9);
main:
Write_Lcd(0x01,0);
delay(10);
Dis_Lcd_4line (" Time =",
"Bater V=",
"Solar V=",
"Solar I="
);
// che do auto
while(mode==1)
{ ///
delay(200);
display();
scan_adc();
if(((float)val_adc[1]*20.0/255.0)>10.0) ///xet nap {
charge();
sprintf(buf_lcd,"Nap");
Putc_Lcd(buf_lcd,15,1);
} else {
Trang 10CCAP0H = 255;
sprintf(buf_lcd,"Stop");
Putc_Lcd(buf_lcd,15,1);
} }
Write_Lcd(0x01,0);
delay(10);
goto main;
}
3.1.2.2 Code chương trình các thư viện:
Thư viện LCD:
#include <string.h>
void Triger(void);
void Write_Lcd(char c ,short mode );
void Innit_Lcd(void );
void Goto_Lcd(int x, int y);
void Putc_Lcd(char c[ ],int x , int y);
// ===
void delay(unsigned int count)
{ unsigned int i;
while(count)
{ i = 115;
while(i>0) i ;
count ;
}
}
Trang 11void Triger(void)
{ delay(1);
delay(1);
e_lcd = 0;
delay(1);
}
// ===
void make_out_data(char buffer_data)
{ d4_lcd= (buffer_data&0x01) ;
d5_lcd= ((buffer_data&0x02)>>1);
d6_lcd= ((buffer_data&0x04)>>2);
d7_lcd= ((buffer_data&0x08)>>3);
}
// ===
void lcd_send_nibble(char buffer_nibble)
{ make_out_data(buffer_nibble);
Triger();
}
// ===
void Write_Lcd(char c ,short mode )
{ rs_lcd = 0;
delay(1);
rs_lcd = mode;
delay(1);
delay(1);
lcd_send_nibble((c >> 4)&0xf);
lcd_send_nibble(c & 0xf);
Trang 12void Innit_Lcd(void )
{ char i;
rs_lcd = 0;
e_lcd= 0;
delay(5);
for(i=1;i<=3;++i)
{ lcd_send_nibble(3);
delay(10);
}
lcd_send_nibble(2);
// for(i=0;i<=3;++i)
Write_Lcd(((0x20|(2<<2))),0);
Write_Lcd(0x0c,0);
Write_Lcd(0x01,0);
Write_Lcd(6,0);
}
void Goto_Lcd(int x, int y)
{ switch(y)
{ case 0 : Write_Lcd((0x80+x),0);break;
case 1 : Write_Lcd((0xc0+x),0);break;
case 2 : Write_Lcd((0x94+x),0);break;
case 3 : Write_Lcd((0xd4+x),0);break;
}
}
void Putc_Lcd(char c[],int x, int y)
{ int i;
Goto_Lcd(x,y);
for (i=0 ; i<strlen(c) ; i++)
Trang 13{ Write_Lcd(c[i],1);
}
}
void Dis_Lcd_4line(char str1[ ],char str2[ ],char str3[ ],char str4[ ]) {
Putc_Lcd(str1,0,0); //Hàng 1
delay(5);
Putc_Lcd(str2,0,1); //Hàng 2
delay(5);
Putc_Lcd(str3,0,2); //Hàng 3
delay(5);
Putc_Lcd(str4,0,3); //Hàng 4
delay(5);
}
Thư viện DS1307:
#include <intrins.h>
// *** -***
// I2C START
// *** -***
void StartI2C(void)
{
SDA = 1;
SCL = 1;
delay(1);
SDA = 0;
delay(1);
SCL = 0;
delay(1);
Trang 14// *** -***
// I2C STOP
// *** -***
void StopI2C(void)
{ SDA = 0;
delay(1);
SCL = 1;
delay(1);
SDA = 1;
}
// *** -***
// I2C WRITE
// *** -***
void WriteI2C(unsigned char Data)
{ unsigned int i;
for (i=0;i<8;i++)
{
SDA = (Data & 0x80) ? 1:0;
SCL=1;SCL=0;
Data<<=1;
}
SCL = 1;
delay(1);
SCL = 0;
}
// *** -***
// I2C READ
// *** -***
Trang 15unsigned char ReadI2C(bit ACK_Bit)
{ unsigned int i;
unsigned char Data=0;
SDA = 1;
for (i=0;i<8;i++)
{
SCL = 1;
Data<<= 1;
Data = (Data | SDA);
SCL = 0;
delay(1);
}
if (ACK_Bit == 1)
SDA = 0; // Send ACK else
SDA = 1; // Send NO ACK delay(1);
SCL = 1;
delay(1);
SCL = 0;
return Data;
}
3.2 Thi công mạch nạp acquy:
3.2.1 Vật tư thi công mạch nạp acquy:
- Bo mạch gồm: vi điều khiển P89V51RD2, ADC 0809, điện trở, biến trở, tụ điện, cuộn cảm, đèn led báo tín hiệu, DS1307, rơle đóng ngắt, điốt, màn hình LCD 4 lines …
- Bình acquy 12V-5Ah
Trang 163.2.2 Yêu cầu của mô hình:
- Màn hình LCD 4 lines hiển thị: time, áp acquy, áp solar, dòng solar
- Pin nuôi đồng hồ thời gian thực 3V
- Có rơle dự phòng để đóng điện vào buổi tối
- Chỉ sạc cho ắc quy khi điện áp của ắc quy nhỏ hơn 12.0V và điện áp của solar lớn hơn 10V
- Sạc bằng phương pháp điều rộng xung tần số 20KHZ
3.2.3 Kết quả phần thi công mạch nạp:
Hình 3.4: Mô hình sau khi hoàn thành.
Trang 17Khi đưa nguồn acquy vào mạch sẽ tạo ra 5VDC, mục đích để cấp nguồn nuôi cho vi điều khiển, LCD, ADC…được thể hiện ở hình 3.5
Hình 3.5: Sau khi đưa acquy vào mạch.
Trang 18Hình 3.6: Sau khi đưa nguồn từ pin mặt trời vào mạch.
Trong quá trình tiến hành đo độ rộng xung, khi ta thay đổi điện áp thì độ rộng xung thay đổi như hình 3.7 sau:
Hình 3.7: Độ rộng xung thay đổi khi thay
đổi điện áp solar.
3.3 Kết quả nghiên cứu đạt được và đánh giá về kết quả:
* Kết quả đạt được: chế tạo thành công mô hình mạch sạc acquy bằng năng lượng Mặt Trời có MPPT
* Đánh giá kết quả:
Mô hình mạch sạc acquy bằng năng lượng Mặt Trời có tính chính xác cao, kết quả
đo đạt phù hợp với thực tế
Mô hình mạch sạc acquy bằng năng lượng Mặt Trời có độ tin cậy cao, mạch chạy
ổn định
Trang 19 Với việc chế tạo thành công mô hình này sẽ góp phần giúp cho đất nước ta khai thác tốt hơn về nguồn năng lượng siêu sạch và vô tận này Mô hình này có thể ứng dụng vào việc chiếu sáng cho những vùng sâu, vùng xa mà ở đó chưa có điện sinh hoạt Xa hơn có thể phát triển mô hình này với công suất lớn hơn dùng để hòa lưới