Mô phỏng mạch nạp bằng năng lượng mặt trời (hạ áp)
MỤC LỤC I TÌM HIỂU SỐ CHỨC NĂNG CỦA VI ĐIỀU KHIỂN .1 Giới thiệu chung chức tạo xung PWM Chức sử dụng tạo xung PWM kích mở mosfet 2.1 Trong phạm vi đề tài ta sử dụng ghi sau : .6 2.2 Pwm clock control .8 Watchdog timer (FWDT) .11 Timer 14 Bộ chuyển đổi Analog-to-Digital (ADC) 17 4.1 tổng quan 17 4.2 Các ghi 20 II MẠCH BUCK CONVERTER 27 2.1 Tổng quan mạch buck converter 27 2.2 Tính tốn mạch mạch buck Converter .28 2.2.1 Tính tốn tụ C .28 2.2.2 Tính tốn cuộn cảm L 29 III MÔ PHỎNG MẠCH NẠP ẮC QUY BẰNG NĂNG LƯỢNG MẶT TRỜI ( HẠ ÁP ) 30 3.1 Ý tưởng thiết kế 30 3.2 Tổng quan proteus 30 3.3 Các phần tử sử dụng mô .31 3.4 Mạch nguyên lý 31 IV KẾT LUẬN 44 V TÀI LIỆU THAM KHẢO 44 I TÌM HIỂU SỐ CHỨC NĂNG CỦA VI ĐIỀU KHIỂN Giới thiệu chung chức tạo xung PWM MCPWM sử dụng để tạo dạng sóng xung định kỳ, có ích động công suất ứng dụng điều khiển Mô-đun MCPWM hoạt động đếm thời gian để đếm lên đến giá trị đếm thời gian Khoảng thời gian chu kỳ nhiệm vụ xung lập trình Tùy thuộc vào thiết bị, có tối đa hai mơ-đun MCPWM, MCPWM1 MCPWM2, dòng thiết bị dsPIC33F / PIC24H Mô-đun MCPWM1 sử dụng để tạo nhiều điều chế độ rộng xung đồng hóa đầu Các ứng dụng điều khiển cơng suất động sau hỗ trợ MCPWM1 module: - Động cảm ứng điện ba pha (ACIM) - Động chuyển đổi - Động không chổi than DC (BLDC) - Nguồn cung cấp điện liên tục (UPS) Các tính đặc biệt mơ-đun MCPWM1 tóm tắt đây: - Tối đa tám đầu PWM với bốn tạo chu kỳ nhiệm vụ Cơ sở thời gian chuyên dụng hỗ trợ độ phân giải cạnh TNA / PWM Thay đổi tần số PWM trực tuyến Máy tạo thời gian chết phần cứng Cực pin đầu lập trình bit cấu hình thiết bị Mơ-đun MCPWM2 cung cấp cặp đầu PWM bổ sung, hữu ích ứng dụng sau: - Hiệu chỉnh hệ số công suất độc lập (PFC) hệ thống động Hệ thống nấu cảm ứng Hệ thống điều khiển động trực tiếp (DC) Điều khiển biến tần pha - Điều khiển ACIM pha Các ghi sau sử dụng để kiểm soát hoạt động MCPWM1 MCPWM2 mô-đun : -PxTCON: Thiết lập điều khiển sở thời gian PWM Thanh ghi sử dụng cho việc lựa chọn chế độ Time Base, đếm thời gian đồng hồ đầu vào bản, đếm thời gian đầu sở thời gian để kích hoạt đếm thời gian - PxTMR: Thiết lập sở thời gian PWM Giá trị đếm thời gian sở trạng thái số đếm thời gian sở thu ghi danh -PxTPER: Thời gian sở thời gian PWM Giá trị sở thời gian PWM ghi vào ghi này, điều xác định hoạt động PWM tần số -PxSECMP: Thiết lập so sánh kiện đặc biệt Thanh ghi cung cấp giá trị so sánh mà chuyển đổi tương tự sang kỹ thuật số đồng hóa với sở thời gian PWM So sánh q trình đếm ngược down-count chế độ Center-aligned tùy thuộc vào thiết lập bit SEVTDIR ghi danh -PWMxCON1: Kiểm soát PWM Đăng ký Lựa chọn chế độ độc lập bổ sung cho cặp I / O PWM thực ghi -PWMxCON2: Kiểm soát PWM Đăng ký Thanh ghi cung cấp lựa chọn sau: Lựa chọn giá trị postscaler đầu kích hoạt kiện đặc biệt PWM - Cập nhật ghi chu kỳ nhiệm vụ - Lựa chọn đồng ghi đè đầu với sở thời gian - Cho phép cập nhật từ chu kỳ nhiệm vụ ghi đệm thời gian - PxDTCON1: Thiết lâp kiểm soát thời gian chết Giá trị thời gian chết đếm thời gian đồng hồ cho Đơn vị thời gian chết A Đơn vị thời gian chết B chọn cách sử dụng ghi - PxDTCON2: Thiết lập kiểm soát thời gian chết Chèn thời gian chết từ Đơn vị thời gian chết A Đơn vị thời gian chết B cho PWM đầu lựa chọn cách sử dụng ghi -PxFLTACON: Lỗi đăng ký kiểm soát Thanh ghi cung cấp lựa chọn sau: - Pin đầu PWM điều khiển lỗi bên ngồi - trạng thái hoạt động khơng hoạt động - Chế độ lỗi - Chế độ chu kỳ theo chu kỳ chế độ Latched - Ghim cặp điều khiển không điều khiển đầu vào lỗi A - PxFLTBCON: Thiết lập kiểm soát lỗi B Thanh ghi cung cấp lựa chọn sau: - Pin đầu PWM điều khiển lỗi bên ngồi - trạng thái hoạt động khơng hoạt động - Chế độ lỗi - Chế độ chu kỳ theo chu kỳ chế độ Latched - Ghim cặp điều khiển không điều khiển Đầu vào lỗi B -PxOVDCON: Ghi đè điều khiển đăng ký Thanh ghi sử dụng để kích hoạt tính ghi đè đầu điều khiển pin đầu PWM lựa chọn - PxDC1: Chu kỳ nhiệm vụ PWM1 Giá trị chu kỳ nhiệm vụ PWM 16 bit cho cặp đầu PWM ghi vào ghi - PxDC2: Chu kỳ nhiệm vụ PWM2 Giá trị chu kỳ nhiệm vụ PWM 16 bit cho cặp đầu PWM ghi vào ghi -PxDC3: Chu kỳ nhiệm vụ PWM3 Giá trị chu kỳ nhiệm vụ PWM 16 bit cho cặp đầu PWM ghi vào ghi - PxDC4: Chu kỳ nhiệm vụ PWM4 Giá trị chu kỳ nhiệm vụ PWM 16 bit cho cặp đầu PWM ghi vào ghi - PWMxKEY: Thiết lập mở khóa PWM Thanh ghi cho phép người dùng mở khóa PWMxCON1, PxFLTACON PxFLTBCON đăng ký để truy cập ghi - FPOR: Đăng ký cấu hình thiết bị POR Ngoài Đăng ký chức đặc biệt (SFR) kết hợp với mô-đun MCPWM, ba bit cấu hình thiết bị sử dụng để thiết lập trạng thái Reset ban đầu phân cực chân I / O PWM Các bit cấu hình thiết bị nằm ghi FPOR - FOSCSEL:Thiết lập lựa chọn nguồn dao động Ngoài SFR kết hợp với mơ-đun MCPWM, bit cấu hình thiết bị sổ đăng ký sử dụng để thiết lập tính chống ghi cấu hình PWM Chú thích: Chữ “x” tên đăng ký đề cập đến số mô-đun MCPWM Chức sử dụng tạo xung PWM kích mở mosfet 2.1 Trong phạm vi đề tài ta sử dụng ghi sau : FPOR: Thiết lập cấu hình thiết bị POR Hình 1.0 Thanh ghi FPOR bit 23-8 Chưa triển khai: Đọc dạng ' ' bit PWMPIN: Điều khiển động PWM Mô-đun chế độ pin bit = Các chân mô-đun PWM điều khiển ghi PORT thiết bị Reset (tri-nêu) bit PTEN đặt = Các chân mô-đun PWM điều khiển mô đun PWM thiết bị Reset bit HPOL: Điều khiển động PWM bit phân cực cao = MCPWM mô-đun đầu cao cấp chân có cực đầu hoạt động cao = Các chân đầu cao cấp mơ-đun MCPWM có cực phân cực đầu hoạt động thấp bit LPOL: Điều khiển động PWM bit phân cực thấp = MCPWM mơ-đun đầu phía chân thấp có cực đầu hoạt động cao = MCPWM mơ-đun đầu chân thấp có cực đầu hoạt động thấp bit 4-0 Các bit không mô-đun MCPWM sử dụng FOSCSEL: Thiết lập chọn nguồn dao động : Hình 1.2 Thanh ghi POCSEL bit IESO: Khơng mô-đun MCPWM sử dụng bit PWMLOCK: Điều khiển động PWM Mở khóa bit = Đăng ký mô-đun MCPWM, PWMxCON1, PxFLTACON PxFLTBCON, bảo vệ chống ghi = Đăng ký mô-đun MCPWM không bảo vệ chống ghi bit 5-3 Chưa triển khai: Đọc dạng ' ' bit 2-0 Các bit không mô-đun MCPWM sử dụng 2.2 Pwm clock control Hình 1.3 Sơ đồ Pwm clock control a) Khi đệm thời gian chế độ đếm tự Hình 1.4 Bộ đệm thời gian chế độ đếm tự Tính tốn thời gian PWM cho chế độ đếm tự chạy (PTMOD = 00 01 ) Hình 1.5 Cách tính thời gian PWM cho chế độ đếm tự b) Khi đệm thời gian chế độ đếm lên xuống Hình 1.6 Bộ đệm chế độ đếm lên xuống Tính tốn thời gian PWM chế độ đếm lên / xuống (PTMOD = 10 11 ) 10 = Khi cho ta giá trị điện cảm L nhỏ Với gọi tần số Switching,thường chọn 20kHz cao Ta có : Suy giá trị điện cảm : L = = Độ đập mạch dòng điện nằm khoảng từ 10% - 30% III MÔ PHỎNG MẠCH NẠP ẮC QUY BẰNG NĂNG LƯỢNG MẶT TRỜI ( HẠ ÁP ) 3.1 Ý tưởng thiết kế Giả thiết đề tài giá trị điện áp đầu pin mặt trời lớn suy cần giảm điện áp để đưa vào mạch nạp Mạch chuyển đổi em sử dụng làm mạch chuyển đổi điện áp mạch DC-DC Buck Converter Phần mềm sử dụng mô phần mềm Proteus 3.2 Tổng quan proteus Proteus mang tới cho người sử dụng chương trình bao gồm ISIS cho phép mô mạch ARES dùng cho việc vẽ mạch in Bên cạnh Proteus - công cụ giúp mô loại vi điều khiển hỗ trợ dòng VĐK 8051, AVR, PIC, dsPIC, ARM giao tiếp I2C, SPI, CAN, USB, Ethernet ngồi mơ mạch số, mạch tương tự cách hữu hiệu 3.3 Các phần tử sử dụng mô RES : điện trở 30 IRF624 : van mosfet IR2112 : ic dùng để kích mở van mosfet đưa tín hiệu từ vđk vào INDUCTOR : cuộn cảm DsPIC33FJ32MC204: vi điều khiển DIODE : đi- ốt CAP : tụ điện 3.4 Mạch nguyên lý Hình 3.4 Sơ đồ mạch mơ Để điện áp đầu không đổi điện áp đầu vào thay đổi ta cần điều khiển van đóng mở cho đạt giá trị điện áp đầu mong muốn Em sử dụng vi điều khiển để điều khiển q trình đóng mở van Code file hex điều khiển đóng mở van: Thư viện timer.h : 31 #ifndef TIMER_H #define TIMER_H #ifdef cplusplus extern "C" { #endif void init_timer(void); #ifdef cplusplus } #endif #endif /* TIMER_H */ Thư viện PID.h #ifndef PID_H #define #ifdef PID_H cplusplus 32 extern "C" { #endif unsigned int PID( unsigned int gt_dat, unsigned int gtdo_duoc, unsigned int duty_truoc); #ifdef cplusplus } #endif #endif /* PID_H */ Chương trình // FBS #pragma config BWRP = WRPROTECT_OFF // Boot Segment Write Protect (Boot Segment may be written) #pragma config BSS = NO_FLASH // Boot Segment Program Flash Code Protection (No Boot program Flash segment) // FGS 33 #pragma config GWRP = OFF // General Code Segment Write Protect (User program memory is not write-protected) #pragma config GSS = OFF // General Segment Code Protection (User program memory is not code-protected) // FOSCSEL #pragma config FNOSC = PRIPLL #pragma config IESO = ON // Internal External Switch Over Mode (Start-up device with user-selected oscillator source) // FWDT #pragma config WDTPOST = PS32768 // Watchdog Timer Postscaler (1:32,768) #pragma config WDTPRE = PR128 // WDT Prescaler (1:128) #pragma config WINDIS = OFF // Watchdog Timer Window (Watchdog Timer in Non-Window mode) #pragma config FWDTEN = OFF // Watchdog Timer Enable (Watchdog timer enabled/disabled by user software) // FPOR #pragma config FPWRT = PWR128 // POR Timer Value (128ms) 34 #pragma config ALTI2C = OFF // Alternate I2C pins (I2C mapped to SDA1/SCL1 pins) #pragma config LPOL = ON // Motor Control PWM Low Side Polarity bit (PWM module low side output pins have active-high output polarity) #pragma config HPOL = ON // Motor Control PWM High Side Polarity bit (PWM module high side output pins have active-high output polarity) #pragma config PWMPIN = ON // Motor Control PWM Module Pin Mode bit (PWM module pins controlled by PORT register at device Reset) #define CRYSTAL_FREQUENCY 20000000 #define FCY CRYSTAL_FREQUENCY/2UL /* 20 MHz */ /* Cylce frequency 10 MHz*/ #include #include #include #include #include #include #include #include 35 #define kp / ****************************************************************** ************/ // DSPIC33FJ12MC202 Configuration Bit Settings // 'C' source line config statements char flag = 0; unsigned int dutytruoc; unsigned int ADC_Value = 0; float ADCvalue =0; unsigned int dutytruoc; void configPLL() { CLKDIVbits.PLLPRE = 0; // PLLPRE N1 = PLLFBDbits.PLLDIV = 38; // PLL multiplier M = 40 CLKDIVbits.PLLPOST = 0; // PLLPOST N2 = while(!OSCCONbits.LOCK); // wait for PLL ready 36 } / ****************************************************************** ************/ void ConfigModuleADC(void) { TRISAbits.TRISA1 = 1; /* ADC input PIN as */ AD1CON1bits.ADON = 0; //ADC is off AD1CON3bits.ADRC = 0;//Clock derived from system clock AD1CON3bits.SAMC = 0b1111;//t sample = 31 TAD AD1CON3bits.ADCS = 0b0000000;//T CY = T AD AD1CON2bits.CSCNA = 0;//do not scan input AD1CON2bits.BUFS = 0;//ADC is currently filling first half of buffer, us er application should access data in the second half AD1CON2bits.SMPI = 0b00000;//Interrupts at the completion of conversion for each sample/convert sequence 37 AD1CON2bits.BUFM = 0;//Always starts filling buffer from the beginning AD1CON2bits.ALTS = 0;// Always uses channel input selects for Sample A AD1CON1bits.ADSIDL = 0;///continue module operation in Idle mode AD1CON1bits.FORM = 0b00; //integer AD1CON1bits.SSRC = 0b0000;//clearing sample bit ends sampling and starts conversion AD1CON1bits.ASAM = 0;//sampling begins when SAMP bit is set } / *^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^*/ void ChangeChannelADC(unsigned char CHANNEL) { AD1CON1bits.ADON = 0; /* ADC OFF */ delay_us(100); AD1CHS0bits.CH0SA = (CHANNEL & 0b00011111); /* Channel Changed */ delay_us(100); AD1CON1bits.ADON = 1; /* ADC ON */ 38 } / *^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^*/ unsigned int SamplingAndConversionADC(void) { AD1CON1bits.SAMP = 1; /* Start sampling input */ while(!AD1CON1bits.SAMP); AD1CON1bits.SAMP = 0; /* End sampling */ while(AD1CON1bits.SAMP); while(!AD1CON1bits.DONE); return ADC1BUF0; } void initT2forOC1() { /* T2CON */ T2CONbits.TON = 0; // timer2 off T2CONbits.TSIDL = 1; // stop IDLE 39 T2CONbits.TGATE = 0; // use when TCS = T2CONbits.TCKPS = 0b00; T2CONbits.TCS = 0; _T2IE = 1; // prescale :1 // internal clock // enable interrupt timer2 //TMR2 = 0; PR2 = 400; // freq: 100kHz with crystal 20Mhz /* OC1CON */ OC1CONbits.OCSIDL = 1; // disable OC1 when CPU sleep OC1CONbits.OCFLT = 0; // no PWM fault condition, only use when OCM = 0b111 OC1CONbits.OCTSEL = 0; OC1CONbits.OCM OC1RS // use Timer2 for OC1 = 0b110; // PWM mode, fault pin disable = 261; T2CONbits.TON = 1; // timer2 on } void attribute ((interrupt, auto_psv)) _T2Interrupt() 40 { _T2IF = 0; } void setdutyPWM(unsigned int duty) { OC1RS = duty; } void init_timer1() { //Config timer T1CON = 0x00; /* Clearing Control register its a good habit T1CONbits.TCKPS = 0b11; */ /* Clock prescalar using 1:256 for generating 0.5s*/ TMR1 = 0x00; /* clear timing register PR1 = 0x900; /* value fot PR1 using formula for genrating 0.5s */ IPC0bits.T1IP = 0x01; */ /* interrupt priority in interrupt vector IFS0bits.T1IF = 0; /* clearing flag for timer one IEC0bits.T1IE = 1; /* enabling Interrupt for timer */ */ */ 41 T1CONbits.TON = 1; /* timer1 turn ON */ } unsigned int PID(unsigned int gt_dat,unsigned int gtdo_duoc, unsigned int duty_truoc) { float sailech = ((float)gt_dat - (float)gtdo_duoc) * kp * 0.8371; //0.8371 unsigned int duty =(duty_truoc - (int)sailech); return duty; } int main(void) { initT2forOC1(); init_timer1(); TRISAbits.TRISA0 = 1; ConfigModuleADC(); ChangeChannelADC(1); // ADC input PIN as // Configure ADC module // AN0 channel while(1) { 42 ADC_Value = SamplingAndConversionADC();/* Sampling */ ADCvalue = ADC_Value * 16.5 / (3*1023); // 16.5 = *3.3 dutytruoc = PID(930,ADC_Value,dutytruoc);//930 is setpoint if(dutytruoc > 500) //*858 { dutytruoc = 500; //*858 }else if(dutytruoc < 0) { dutytruoc = 0; } setdutyPWM(dutytruoc); } return 0; } Bằng kết thực nghiệm mô với giá trị đầu vào thay đổi 12V, 15V, 20V ta thu giá trị đầu mạch không thay đổi 8.05V Thỏa mãn yêu cầu toán 43 IV KẾT LUẬN Nhờ giúp đỡ nhiệt tình thầy T.S Vũ Vân Hà em hồn thành đề tài mơ mạch nạp lượng mặt trời ( hạ áp) Qua đề tài em hiểu nguyên lý mạch Buck Converter , cách sử dụng vi điều khiển vào tốn cơng suất Mặc dù có phần hồn thiện phần cần phát triển hoàn thiện Em xin chân thành cảm ơn thầy V TÀI LIỆU THAM KHẢO Giáo trình điện tử cơng suất thầy Trần Trọng Minh Sile giảng vi điều khiển ứng dụng thầy Nguyễn Hồng Quang 44 ... = = Độ đập mạch dòng điện nằm khoảng từ 10% - 30% III MÔ PHỎNG MẠCH NẠP ẮC QUY BẰNG NĂNG LƯỢNG MẶT TRỜI ( HẠ ÁP ) 3.1 Ý tưởng thiết kế Giả thiết đề tài giá trị điện áp đầu pin mặt trời lớn suy... mặt trời lớn suy cần giảm điện áp để đưa vào mạch nạp Mạch chuyển đổi em sử dụng làm mạch chuyển đổi điện áp mạch DC-DC Buck Converter Phần mềm sử dụng mô phần mềm Proteus 3.2 Tổng quan proteus... áp từ đầu biến đổi Độ đập mạch : 28 Hình 2.2.1 độ đập mạch điện áp Thành phần đập mạch tụ C : Suy giá trị tụ C đáp ứng yêu cầu :C = Đối với mạch nguồn DC-DC, độ đập mạch không nên vượt q 1% Uo