PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Điều khiển nguồn

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Điều khiển nguồn Thảo luận về vấn đề thiết kế nguồn cho các thiết bị

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 31-08-2016, 11:43 AM   #1
chaukyo
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.
chaukyo vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 02-09-2016, 01:52 PM   #2
chaukyo
Nhập môn đệ tử
 
Tham gia ngày: Nov 2015
Bài gửi: 4
:
ai giúp mình với, bế tắc không có hướng để code tiếp. ai giúp mình mình biết ơn nhiều!
chaukyo vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 01:06 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam