1. Trang chủ
  2. » Luận Văn - Báo Cáo

Thiết kế mạch flyback sử dụng vi điều khiển DsPIC

20 17 1

Đ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

Thông tin cơ bản

Định dạng
Số trang 20
Dung lượng 1,47 MB

Nội dung

BÁO CÁO BÀI TẬP LỚN Môn học: Vi điều khiển và ứng dụng ĐỀ TÀI: Thiết kế mạch Flyback sử dụng vi điều khiển DsPIC GV hướng dẫn : PGS.TS. Nguyễn Hồng Quang Sinh viên thực hiện: Trần Trọng Tuân Lớp : TĐH02 – K60 MSSV : 20154065 Hà Nội, 1-2019 1 I. Mục tiêu đề tài 1. Đề bài Thiết kế mạch Flyback converter sử dụng vi điều khiển DsPIC 33FJ12MC202 với yêu cầu đầu vào từ 12-24V đầu ra 5V/1A. 2. Cấu trúc và nguyên lí hoạt động mạch Flyback Hình I.1: Sơ đồ nguyên lí mạch Flyback Mạch có cấu tạo một biến áp xung truyền công suất, van điều khiển mosfet, diode nhanh chỉnh lưu, tụ đầu ra. Điện áp đầu ra phụ thuộc vào tỷ số truyền biến áp và xung PWM đưa vào mosfet. Nguyên lí hoạt động mạch Flyback Nửa chu kì đầu, mosfet ON: Dòng điện chảy vào cuộn sơ cấp, năng lượng từ trường được tích lũy trong biến áp. Tụ đầu cấp năng lượng cho tải vì đã được tích lũy điện áp từ chu kì trước. Nửa chu kì sau, mosfet OFF: Cuộn sơ cấp không được cấp điện, năng lượng biến áp đã được tích lũy từ nửa chu kì trước sẽ dẫn qua diode cấp cho tải và đồng thời nạp vào tụ đầu ra. Dạng sóng điện áp và dòng điện trong từng chế độ

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN ĐIỆN BỘ MƠN TỰ ĐỘNG HỐ CƠNG NGHIỆP ====o0o==== BÁO CÁO BÀI TẬP LỚN Môn học: Vi điều khiển ứng dụng ĐỀ TÀI: Thiết kế mạch Flyback sử dụng vi điều khiển DsPIC GV hướng dẫn : PGS.TS Nguyễn Hồng Quang Sinh viên thực hiện: Trần Trọng Tuân Lớp : TĐH02 – K60 MSSV : 20154065 Hà Nội, 1-2019 I Mục tiêu đề tài Đề Thiết kế mạch Flyback converter sử dụng vi điều khiển DsPIC 33FJ12MC202 với yêu cầu đầu vào từ 12-24V đầu 5V/1A Cấu trúc ngun lí hoạt động mạch Flyback Hình I.1: Sơ đồ ngun lí mạch Flyback Mạch có cấu tạo biến áp xung truyền công suất, van điều khiển mosfet, diode nhanh chỉnh lưu, tụ đầu Điện áp đầu phụ thuộc vào tỷ số truyền biến áp xung PWM đưa vào mosfet Nguyên lí hoạt động mạch Flyback Nửa chu kì đầu, mosfet ON: Dịng điện chảy vào cuộn sơ cấp, lượng từ trường tích lũy biến áp Tụ đầu cấp lượng cho tải tích lũy điện áp từ chu kì trước Nửa chu kì sau, mosfet OFF: Cuộn sơ cấp không cấp điện, lượng biến áp tích lũy từ nửa chu kì trước dẫn qua diode cấp cho tải đồng thời nạp vào tụ đầu Dạng sóng điện áp dòng điện chế độ a) Chế độ liên tục (CCM): Hình I.2: Dạng sóng điện áp dịng điện chế độ DCM Nhận xét: Năng lượng biến áp cịn dư vịng chu kì Ts b) Chế độ gián đoạn ( DCM): Hình I.3: Dạng sóng điện áp dịng điện chế độ DCM Nhận xét: Ở chế độ DCM, xuất trạng thái mosfet diode đầu không dẫn Tuy nhiên tụ đầu cung cấp lượng cho tải để điện áp đầu khơng bị gián đoạn Hình I.4: So sánh hai chế độ CCM DCM Với DCM, lượng lưu trữ biến áp chuyển hết sang tải trước chu kì switching bắt đầu Với CCM, chu kì switching bắt đầu, lượng cịn dư tích lũy biến áp DCM yêu cầu điện cảm biến áp nhỏ cần biến áp nhỏ so với CCM Tuy nhiên với DCM, dòng điện đỉnh RMS thứ cấp, sơ cấp lớn so với CCM, nên việc chọn phần tử bán dẫn yêu cầu cao DCM sinh dòng RMS lớn, làm tăng tổn thất dẫn dòng mosfet DCM thường ưu tiên sử dụng ứng dụng đầu có điện áp cao dịng điện nhỏ, CCM sử dụng ứng dụng có điện áp nhỏ dịng điện lớn Với duty, điện áp DCM lớn Hơn nữa, chế độ DCM, diode thứ cấp dẫn nên chịu điện áp ngược, giảm tổn thất chuyển mạch từ trạng thái dẫn sang khóa  Vì chúng em định thiết kế theo chế độ DCM II Tính tốn thơng số mạch lực Thơng số tổng quan Công suất đầu ra: Công suất đầu vào: 𝑃𝑂 = 5.1 = 5W 𝑃𝑖𝑛 =𝑃𝑂 /𝐸𝑓𝑓 = 5/0,75 = 6,67 W Vripple = 10% = 0,5 V Tính tốn thơng số biến áp Biến áp xung thành phần quan trọng biến đổi Có nhiệm vụ truyền lượng từ phía sơ cấp sang thứ cấp cách li Có Dmax= 48%, mà 𝐷𝑚𝑎𝑥 = 𝑉𝑅 𝑉𝑅 +𝑉𝐷𝐶 𝑚𝑖𝑛  𝑉𝑅 = 11V Tỷ số vòng dây cuộn sơ cấp thứ cấp biến áp xung: 𝑉𝑅 11 N= = 𝑉𝐹 + 𝑉𝑜𝑢𝑡 Vậy chọn tỉ số vòng dây N = Cần lựa chọn biến áp cho đảm bảo mặt kích thước cơng suất mạch Ta tính tốn theo chế độ DCM: Dịng điện đỉnh chạy qua cuộn sơ cấp cảu máy biến áp xác định theo công thức: Ipeak = 𝐸𝑓𝑓 𝑉𝐷𝐶 𝑚𝑖𝑛 𝐷𝑚𝑎𝑥 Lp = Sơ cấp: Irmsp = Ipeak √ 𝐷𝑚𝑎𝑥 Thứ cấp: Irmss = Ipeak N √ 𝑉𝐷𝐶 𝑚𝑖𝑛 𝐷𝑚𝑎𝑥 Ipeak f P0 = 2,31A = 49,87 µH = 0,92A 1−𝐷𝑚𝑎𝑥 = 1,76A Số vòng dây sơ cấp tối thiểu để tránh biến áp rơi vào trạng thái bão hòa: Ipeak Lp Np ≥ = 23,04 => Np = 24 Amin Bmax Np Ns = = 12 => Ns = 12 N => Lựa chọn lõi biến áp EE16 phù hợp với cơng suất sử dụng Tính tốn lựa chọn mosfet Điện áp lớn đặt lên hai cực D, S mosfet: Vdsmax = Vinmax + N.Vout + Vspike = 24 + 1,83.5 + 0,3.24 = 40,35V Vspike điện áp gai điện cảm rò gây Lấy 30% VDcmax Dòng đỉnh qua mosfet Ipeak= 2,31A Dòng trung bình qua mosfet Irms= Irmsp=0,92A => Chọn MOSFET IRF540 với Vdsmax = 100V, ID = 28A Diode chỉnh lưu thứ cấp Điện áp ngược lớn đặt lên diode: Vngmax = Vout + Vin max N = 15,39V Điện áp lớn nhất, chọn số dự trữ 1.3: Umax = 1,3.Ungmax = 20V Iif = 1,5 Irmss = 2,64A Dòng điện thuận max qua diode: => Chọn Diode phục hồi nhanh FR307 với IAV = 3A Tính tốn tụ Cout Xác định giá trị nhỏ tụ mà đảm bảo điện áp đầu đập mạch mức cho phép: 𝐶𝑚𝑖𝑛 = 𝐼𝑜𝑢𝑡 𝑚𝑎𝑥 𝑁𝑐𝑝 f.V𝑂 𝑟𝑖𝑝𝑝𝑙𝑒 = 100µF III Triển khai đề tài Lưu đồ thuật tốn Hình III.1: Lưu đồ thuật tốn chương trình Thiết kế mơ Hình III.2 Kết mô với Proteus Thiết kế phần cứng Hình III.3: Sơ đồ ngun lí mạch điều khiển IV Kết thực nghiệm  Hoàn thiện mạch thực tế thử nghiệm Hình IV.1: Hình ảnh mạch thực tế ghép nối với tải  Khi mạch không tải Hình IV.2a: Đồ thị điện áp đáp ứng đầu mạch khơng tải Hình IV.2b: Các thơng số điện áp đầu với mạch không tải Đánh giá: Vo = 5.15V , Vripple = 600mV Gần sát với yêu cầu lí thuyết  Tải nhẹ 22Ω Hình IV.3a: Đồ thị điện áp đáp ứng đầu mạch, tải R=22Ω Hình IV.3b: Các thơng số điện áp ra, tải R=22Ω Đánh giá: Vo = 4.96V , Vripple = 1,2V Giá trị hiệu dụng điện áp đầu thỏa mãn yêu cầu, song độ đập mạch cịn lớn  Tải nặng 5.6Ω Hình IV.4a: Đồ thị điện áp đáp ứng đầu mạch, tải R=5.6Ω 10 Hình IV.4b: Các thơng số điện áp ra, tải R=5.6Ω Đánh giá: Vo = 5.03V , Vripple = 400mV Điện áp đầu hoàn toàn thỏa mãn yêu cầu đề V Tổng kết Những điểm làm - Lập trình vi điều khiển DsPIC với số chức PWM, UART, ADC - Thực mô Proteus , thiết kế mạch in Altium - Hoàn thiện mạch thực tế với linh kiện tính tốn Đánh giá kết cho thấy mạch chạy đạt gần sát yêu cầu đề đặt Những điểm chưa làm - Độ đập mạch điện áp đầu vài trường hợp lớn, vượt giới hạn Những vấn đề phát sinh khắc phục - Thiết kế mạch cịn sai sót, tụ cho mạch snubber bị ngược chiều dẫn đến nổ tụ Cách khắc phục: Đổi đầu gắn tụ, thay tụ không phân cực - Điện trở phân áp chưa xác, dẫn đến đầu sai số lớn Cách khắc phục: Thay điện trở 1%, sai số cải thiện 11 Phụ lục Code chương trình VĐK File adc.c #include "adc.h" void ADC_Init() { TRISAbits.TRISA0 = 1; //set dau vao adc la input AD1CON1bits.ADON = 0; //ADC is off AD1CON1bits.AD12B = 1; //ADC 12 bit AD1CON1bits.FORM = 0b00; //do dien ap duoi dang int khong dau AD1CON1bits.SSRC = 0b111; //000:lay mau va bat dau chuyen doi ADC nho bit ASAM cach thu cong; 111: bo dem ket thuc lay mau thi tu dong chuyn doi AD1CON3bits.ADRC = 0;//Clock derived from system clock(xung ngoai) AD1CON3bits.SAMC = 0b11111; //thoi gian lay mau 31TAD AD1CON3bits.ADCS = 0b000000; //Tcy = Tad AD1CON2bits.VCFG = 0b000; //AVDD=Vref+ AVSS =VrefAD1CON2bits.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 AD1CON2bits.BUFM = 0;//Always starts filling buffer from the beginning AD1CON2bits.ALTS = 0;// Always uses channel input selects for Sample A } void ADC_Chanel(unsigned char chanel) { AD1CON1bits.ADON = 0; /* ADC OFF */ 12 delay_us(100); AD1CHS0bits.CH0SA = (chanel & 0b00011111); /* Channel Changed */ delay_us(100); AD1CON1bits.ADON = 1; /* ADC ON */ } unsigned int ADC_Conver() { AD1CON1bits.ADON = 1; AD1CON1bits.SAMP = 1; /* Start sampling input */ //while(!AD1CON1bits.SAMP); //AD1CON1bits.SAMP = 0; /* End sampling */ //while(AD1CON1bits.SAMP); while(!AD1CON1bits.DONE); //doi chuyen doi xong DONE se len AD1CON1bits.DONE =0; AD1CON1bits.ADON = 0; // tat ADC return ADC1BUF0; } File pwm.c #include "pwm.h" void PWM_Init() { TRISB = 0; //cho PWM la ngo LATB = 0; // dat port B =0 P1TCONbits.PTMOD = 0b11; //che up/down count voi double update P1TCONbits.PTCKPS = 0b00; //prescale la 1:1 P1TMR =0; //bien dem bat dau den tu PWM1CON1bits.PMOD2 = 1; //ngo H va L hoat dong doc lap vi chi xai pin va khong can dung deadtime PWM1CON1bits.PEN2L = 0; //disable pin L PWM1CON1bits.PEN2H = 1; //enable pin H vi chi can xai pin dieu khien mosfet 13 PWM2CON2bits.IUE = 1; //cho phep update duty lap tuc } void tanso_duty(unsigned int tanso, unsigned int duty) { P1TPER = ((unsigned long)(FCY/tanso))/2-1; //cong thuc tinh tan so theo datasheeet //P2DC1 = (duty*2*P2TPER)/100; //cong thuc tinh duty P1DC2 = duty; } void PWM_Run(unsigned int chay) { P1TCONbits.PTEN = chay; // cho phep PWM hoat dong } File uart.c #include "uart.h" void Set_Br(unsigned int br) { U1MODEbits.BRGH = 1; //su dung ct baundrate= FCY/(4*(UxBRG+1)) U1BRG = FCY/(4*br)-1; //thanh ghi thiet lap gia tri baundrate } void Init_Uart() { RPINR18bits.U1RXR = 0b01111; //chon pin PB15 la chan ngo vao cua U1RX(ngo vao uart) RPOR7bits.RP14R = 0x03; // set pin PR14 cua vdk la chan truyen du lieu U1TX cua uart U1MODEbits.UARTEN = 1; //uart enable U1MODEbits.PDSEL = 0b00; //8 bit data, no parity U1MODEbits.STSEL = 0; //1 stop bit U1STAbits.UTXEN = 1; //cho phep truyen delay_us(105);//can delay khoang 1/9600 baund de dam bao phat hien duoc start bit cua ky tu dau tien } 14 void UART_Write_Char(unsigned char ky_tu) { while(!U1STAbits.TRMT); //tmrt =0 chi viec truyen chua xong, trmt =1 truyen du lieu truoc dã xong va ghi tsr empty U1TXREG = ky_tu; } void UART_Write_Text(char* text) { int i; for(i=0;text[i]!='\0';i++) UART_Write_Char(text[i]); } File main.c /* * File: main.c * Author: 20151 * * Created on September 25, 2018, 10:05 PM */ // DSPIC33FJ12MC202 Configuration Bit Settings // 'C' source line config statements // FBS #pragma config BWRP = WRPROTECT_OFF may be written) #pragma config BSS = NO_FLASH Boot program Flash segment) // Boot Segment Write Protect (Boot Segment // Boot Segment Program Flash Code Protection (No // FGS #pragma config GWRP = OFF memory is not write-protected) #pragma config GSS = OFF memory is not code-protected) // General Code Segment Write Protect (User program // General Segment Code Protection (User program 15 // FOSCSEL #pragma config FNOSC = PRIPLL w/ PLL) // Oscillator Mode (Primary Oscillator (XT, HS, EC) #pragma config IESO = ON // Internal External Switch Over Mode (Start-up device with FRC, then automatically switch to user-selected oscillator source when ready) // FOSC #pragma config POSCMD = XT #pragma config OSCIOFNC = OFF function) #pragma config IOL1WAY = ON Re-configurations) // Primary Oscillator Source (XT Oscillator Mode) // OSC2 Pin Function (OSC2 pin has clock out // Peripheral Pin Select Configuration (Allow Multiple #pragma config FCKSM = CSECMD // Clock Switching and Monitor (Clock switching is enabled, Fail-Safe Clock Monitor is disabled) // FWDT #pragma config WDTPOST = PS32768 #pragma config WDTPRE = PR128 #pragma config WINDIS = OFF Window mode) #pragma config FWDTEN = OFF enabled/disabled by user software) // Watchdog Timer Postscaler (1:32,768) // WDT Prescaler (1:128) // Watchdog Timer Window (Watchdog Timer in Non// Watchdog Timer Enable (Watchdog timer // FPOR #pragma config FPWRT = PWR128 #pragma config ALTI2C = OFF // POR Timer Value (128ms) // 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) 16 #pragma config PWMPIN = ON // Motor Control PWM Module Pin Mode bit (PWM module pins controlled by PORT register at device Reset) // FICD #pragma config ICS = PGD1 // Comm Channel Select (Communicate on PGC1/EMUC1 and PGD1/EMUD1) #pragma config JTAGEN = OFF // JTAG Port Enable (JTAG is Disabled) // #pragma config statements should precede project file includes // Use project enums instead of #define for ON and OFF #include #include "main.h" /* */ #define RUN #define STOP void set_FCY(); unsigned int PID(float gt_dat,float gtdo_duoc); void Init_FLTA2(); void attribute (( interrupt )) _FLTA2Interrupt(void); unsigned int a; unsigned int i =0; double ADC_Value,tong; unsigned int duty = 0; //tuong duong 0% float sailech_now , sailech_past , tong_tichphan , vi_phan, output ; float kp=10,ki=250,kd=0; 17 void set_FCY() { /*Configure PLL prescaler, PLL postscaler, PLL divisor *setup external clock for 80MHz/40MIPS * FOSC = FIN * M/(N1*N2) * FOSC = * 40/(2*2) = 80MHz/40 MIPS */ OSCCONbits.OSWEN = 0; //khong cho phep chuyen doi nguon xung vao la hay ngoai CLKDIVbits.PLLPRE = 0; // PLLPRE N1 = PLLFBDbits.PLLDIV = 38; // PLL multiplier M = 40 CLKDIVbits.PLLPOST = 0; // PLLPOST N2 = OSCCONbits.OSWEN = 1; //cho phep chuyen doi nguon xung vao la hay ngoai OSCCONbits.NOSC = 0b011; //dung xung thach anh ngoai che PLL while (OSCCONbits.COSC != 0b011); // doi bit chuyen sang che pll while(OSCCONbits.LOCK != 1); // doi pll lock } unsigned int PID(float gt_dat,float gtdo_duoc) //trong ham main ta delay 40ms nen thoi gian lay mau se la Ta =20ms =0.02s { sailech_now = gt_dat - gtdo_duoc ; tong_tichphan = tong_tichphan + sailech_now*0.02; vi_phan = (sailech_now-sailech_past)/0.02; output = kp*sailech_now +ki*tong_tichphan + kd*vi_phan; sailech_past = sailech_now; if(output > 383) output =383; //duty xap xi 48% if(output < 0) output =0; //duty xap xi 1% duty = (unsigned int)output; return duty; } 18 void Init_FLTA2() { RPINR13bits.FLTA2R =0; //set bit FLTA2 la chan RP0 P2FLTACONbits.FAEN1 = 1; //dau PWM chiu tac dong cua pin FLTA2 P2FLTACONbits.FAOV1H = 0; //FLTA = thi PWM ko hoat dong P2FLTACONbits.FAOV1L =0; P2FLTACONbits.FLTAM = 1; //che cycle IFS4bits.FLTA2IF =0; //co ngat FLTA2 =0 IEC4bits.FLTA2IE = 1; //enable ngat FLTA2 IPC18bits.FLTA2IP =6; //muc uu tien ngat la } void attribute (( interrupt ,auto_psv)) _FLTA2Interrupt(void) { //IFS4bits.FLTA2IF =0; //xoa co ngat duty = duty -6; // giam duty di 0.5% tanso_duty(50000,duty); //delay_ms(100); IFS4bits.FLTA2IF =0; //xoa co ngat } unsigned char temp[8]; void main() { set_FCY(); PWM_Init(); //TRISBbits.TRISB15 = 1; //FLTA la input //LATB =0xffff; //Init_FLTA2(); ADC_Init(); Set_Br(9600); 19 Init_Uart(); ADC_Chanel(0); while(1){ for(i=0;i

Ngày đăng: 12/12/2021, 16:23

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w