|
Tài trợ cho PIC Vietnam |
Điều khiển nguồn Thảo luận về vấn đề thiết kế nguồn cho các thiết bị |
|
Ðiều Chỉnh | Xếp Bài |
31-08-2016, 11:43 AM | #1 |
Nhập môn đệ tử
Tham gia ngày: Nov 2015
Bài gửi: 4
: |
Hỏi về PID cho mạch nghịch lưu 1 pha dùng PIC8F2431
Chào các anh,
Em đang làm một mạch nghịch lưu 1 pha dùng PIC18F2431 để lái cầu H. Em đã tạo ra được 4 xung PWM sử dụng modul PCPWM của 18f2431. Băm xung 320 bậc cho toàn chu kỳ và sóng sin thu được khá đẹp (qua mô phỏng). Hiện tại các anh cho em hỏi: Em muốn dùng PID để ổn định điện áp sau nghịch lưu thì em phải làm sao? Các anh ai rành vấn đề này chỉ em với hoặc có tài liệu liên quan thì cho em xin để tham khảo. Em cảm ơn nhiều! Code của em viết: Code:
#include <stdio.h> #include <stdlib.h> #include <p18f2431.h> #pragma config OSC = HS #pragma config FCMEN = OFF #pragma config IESO = OFF #pragma config PWRTEN = OFF #pragma config BOREN = ON #pragma config BORV = 27 #pragma config WDTEN = OFF #pragma config WDPS = 32768 #pragma config WINEN = OFF #pragma config PWMPIN = OFF #pragma config LPOL = HIGH #pragma config HPOL = HIGH #pragma config T1OSCMX = ON #pragma config MCLRE = ON #pragma config STVREN = ON #pragma config LVP = ON #pragma config CP0 = OFF #pragma config CP1 = OFF #pragma config CP2 = OFF #pragma config CP3 = OFF #pragma config CPB = OFF #pragma config CPD = OFF #pragma config WRT0 = OFF #pragma config WRT1 = OFF #pragma config WRT2 = OFF #pragma config WRT3 = OFF #pragma config WRTC = OFF #pragma config WRTB = OFF #pragma config WRTD = OFF #pragma config EBTR0 = OFF #pragma config EBTR1 = OFF #pragma config EBTR2 = OFF #pragma config EBTR3 = OFF #pragma config EBTRB = OFF #define _PTIF PIR3bits.PTIF unsigned int index = 0; const rom unsigned int sine[320]= {475, 484, 494, 503, 512, 522, 531, 540, 549, 559, 568, 577, 586, 595, 604, 613, 622, 631, 639, 648, 657, 665, 674, 682, 691, 699, 707, 715, 723, 731, 739, 747, 754, 762, 769, 776, 783, 791, 797, 804, 811, 817, 824, 830, 836, 842, 848, 854, 859, 865, 870, 875, 880, 885, 889, 894, 898, 902, 906, 910, 914, 917, 921, 924, 927, 930, 932, 935, 937, 939, 941, 943, 944, 946, 947, 948, 949, 949, 950, 950, 950, 950, 950, 949, 949, 948, 947, 946, 944, 943, 941, 939, 937, 935, 932, 930, 927, 924, 921, 917, 914, 910, 906, 902, 898, 894, 889, 885, 880, 875, 870, 865, 859, 854, 848, 842, 836, 830, 824, 817, 811, 804, 797, 791, 783, 776, 769, 762, 754, 747, 739, 731, 723, 715, 707, 699, 691, 682, 674, 665, 657, 648, 639, 631, 622, 613, 604, 595, 586, 577, 568, 559, 549, 540, 531, 522, 512, 503, 494, 484, 475, 466, 456, 447, 438, 428, 419, 410, 401, 391, 382, 373, 364, 355, 346, 337, 328, 319, 311, 302, 293, 285, 276, 268, 259, 251, 243, 235, 227, 219, 211, 203, 196, 188, 181, 174, 167, 159, 153, 146, 139, 133, 126, 120, 114, 108, 102, 96, 91, 85, 80, 75, 70, 65, 61, 56, 52, 48, 44, 40, 36, 33, 29, 26, 23, 20, 18, 15, 13, 11, 9, 7, 6, 4, 3, 2, 1, 1, 0, 0, 0, 0, 0, 1, 1, 2, 3, 4, 6, 7, 9, 11, 13, 15, 18, 20, 23, 26, 29, 33, 36, 40, 44, 48, 52, 56, 61, 65, 70, 75, 80, 85, 91, 96, 102, 108, 114, 120, 126, 133, 139, 146, 153, 159, 167, 174, 181, 188, 196, 203, 211, 219, 227, 235, 243, 251, 259, 268, 276, 285, 293, 302, 311, 319, 328, 337, 346, 355, 364, 373, 382, 391, 401, 410, 419, 428, 438, 447, 456, 466}; void Init_PCPWM(); void set_duty(unsigned int duty); void main() { Init_PCPWM(); while(1) { if(_PTIF == 1&&PTMRL >=10) { set_duty(sine[index]); index ++; _PTIF = 0; if(index >=320) index = 0; } } } void Init_PCPWM() { PTCON0 = 0x00; //Postscale 1:1, Prescale 1:1, Free Running PTCON1 = 0x80; //PWM time base is on, count up! PWMCON0 = 0x30; //Enable PWM0-3, Complementary PWMCON1 = 0x40; DTCON = 0x0A; //1.25uS dead-time PTMRH=0; PTMRL=0; PTPERH = 0; PTPERL = 249; // 16KHz PWM PDC0H = 0; PDC0L = 0; //0% duty PDC1H = 0; PDC1L = 0; OVDCOND = 0xFF; //Override disabled OVDCONS = 0; FLTCONFIG = 0; //Fault condition disabled SEVTCMPH = 0; SEVTCMPL = 0; } void set_duty(unsigned int duty) { PDC0H = duty>>8; PDC0L = duty&0xFF; PDC1H = duty>>8; PDC1L = duty&0xFF; } thay đổi nội dung bởi: chaukyo, 31-08-2016 lúc 11:54 AM. |
|
|