1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

CHUONG 3 thiết kế mạch nạp ắc qui từ NLMT

19 377 2

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Nội dung

ĐỒ ÁN TỐT NGHIỆP Chương 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 tìm hiểu tổng quan hệ thống pin mặt trời Từ sở lý thuyết đó, xây dựng mơ hình đề tài với ý tưởng thiết kế sử pin 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 u cầu mơ hình: 3.1.1.1 Về kỹ thuật: - Mơ hình phải thể hiệu tiết kiệm thân thiện với môi trường - Chịu điều kiện khắc nghiệt thời tiết, bền vững với thời gian - Đơn giản vận hành bảo trì - Linh động thẩm mỹ 3.1.1.2 Về kinh tế: - Đơn giản thiết kế để hạ giá thành - Sử dụng vật tư thiết bị thông dụng với giá thành thấp - Với phần khơng quan trọng mơ hình tận dụng vật tư có sẳn để hạ giá thành 3.1.2 Sơ đồ nguyên lý code cho mạch nạp acquy: Trang ĐỒ ÁN TỐT NGHIỆP Hình 3.1: Sơ đồ nguyên lý mạch nạp acquy Sơ đồ nguyên lý mạch nạp acquy vẽ chạy mô phần mềm Protues Trang ĐỒ ÁN TỐT NGHIỆP Hình 3.2: Phần mềm mơ Protues Chương trình viết ngơn ngữ lập trình C, lập trình phần mềm Keil C Hình 3.3: Phần mềm keil C Sau đoạn code mạch nạp acquy: Phần bao gồm: - Chương trình mạch nạp - Các thư viện có chương trình chính: • • Trang Thư viện LCD Thư viện DS1307 ĐỒ ÁN TỐT NGHIỆP 3.1.2.1 Code chương trình chính: #include "REG51xD2.h" #include // === lcd === 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" // === DS 1307 === #define SCL P36 #define SDA P37 #define ACK #define NO_ACK #define DS_WRITE 0xD0 #define DS_READ #define ERR_ACK 0x01 // 0xD1 *** -*** unsigned char RTC_ARR[7]; #include "i2c.h" // Read RTC (all real time) void ReadRTC(unsigned char * buff) { StartI2C(); WriteI2C(DS_WRITE); WriteI2C(0x00); Trang ĐỒ ÁN TỐT NGHIỆP 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 ĐỒ ÁN TỐT NGHIỆP ReadRTC(&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 second } // === adc === #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 { f_adc = 1; } void int_ex1 (void ) interrupt { mode++; if(mode==3) { mode =1;} } // === === void scan_adc() { unsigned int i=0; /// doc ad for (i=0;i 0.0) { if (deltaV > 0.0) {if (D_pwm < 245.0) D_pwm = D_pwm+5;} else { if (D_pwm > 5) D_pwm = D_pwm-5;} } else { if (deltaV > 0.0) { if (D_pwm > 5.0) D_pwm = D_pwm-5;} else { if (D_pwm < 245.0) D_pwm = D_pwm+5; } } CCAPM0 = 0x42; CCAP0H = D_pwm; CR = 1; Vso = val_adc[1]; // cap nhat Vso Pso = Pnew; // cap nhat Pnew } // ket thuc doan moi bo sung void main() { EA = 1; EX0 = 1; IT0 1; = EX1 = 1; IT1 = 1; Innit_Lcd(); Trang ĐỒ ÁN TỐT NGHIỆP mode =1 ; CCAPM0 = 0x42; CCAP0H = 255; CR = 0; //Set_Date_Time(0x37,0x9); main: Write_Lcd(0x01,0); delay(10); Dis_Lcd_4line (" Time =", "Bater V=", "Solar V=", "Solar I=" ); // che auto while(mode==1) { /// delay(200); display(); scan_adc(); if(((float)val_adc[1]*20.0/255.0)>10.0) { charge(); sprintf(buf_lcd,"Nap"); Putc_Lcd(buf_lcd,15,1); } else { Trang CCAPM0 = 0x42; CCAP0H = 255; ///xet nap ĐỒ ÁN TỐT NGHIỆP CR = 0; 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 thư viện: Thư viện LCD: #include // === 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 ; } } void Triger(void) Trang 10 ĐỒ ÁN TỐT NGHIỆP { delay(1); e_lcd = 1; = 0; delay(1); e_lcd 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); e_lcd = 0; lcd_send_nibble((c >> 4)&0xf); lcd_send_nibble(c & 0xf); } Trang 11 ĐỒ ÁN TỐT NGHIỆP void Innit_Lcd(void ) { char i; rs_lcd = 0; e_lcd= 0; delay(5); for(i=1;i

Ngày đăng: 10/06/2017, 12:44

TỪ KHÓA LIÊN QUAN

w