View Single Post
Old 23-12-2010, 05:26 PM   #79
truongaka
Nhập môn đệ tử
 
Tham gia ngày: Mar 2010
Bài gửi: 3
:
Chào mọi người!
Em đang dùng con Dspic 30f2020 để điều khiển đóng mở FET bằng cách điều chỉnh PWM.
Em thay đổi PDC1 để thay đổi Duty nhưng khi thay đổi PDC1 thì Duty đo trên osiloscope luôn không đổi. thầy Nam và mọi người xem giúp em với ạ?



#include <p30F2020.h>
#include <adc10.h>
// cau hinh cho chip
_FOSC(CSW_FSCM_OFF) // tat che do du phong
_FOSCSEL(FRC_PLL) //chon nguon xung trong
_FWDT(FWDTEN_OFF) //tat bo dinh thoi giam sat
_FPOR(PWRT_OFF)
// dinh nghia cac dinh nghia cac nhan cua chuong trinh
#define PWM_PORT PORTE // thanh ghi port E
#define PWM_TRIS TRISE // thanh ghi tris E
#define PWM_LAT LATE // thanh ghi lat E
#define Fcy 925000000 // TAN SO THUC THI LENH
#define Fpwm 50000 //tan so PWM = 50 kHz
// cac prototype
void Init_ADC0(void); // khoi tao adc
void Init_PORT(void); // khoi tao port
void Init_MCPWM(void);
//khoi tao cac module PWM
//int duty = 50;
// CHUONG TRINH CHINH
int main(void)
{ Init_PORT();
Init_ADC0();
Init_MCPWM();
// asm("nop");
// asm("nop");
// asm("nop");
while (1) ; // cho ngat
return 0;
}

// chuong trinh khoitao cong
void Init_PORT(void)
{
PWM_LAT = 0x0000; //Xoa thanh ghi chot tin hieu ra PWM
PWM_TRIS = 0x0000; // port E la output
TRISB = 0xFFFF; // port B la in put
ADPCFG = 0x0000; // port B la dau vao tuong tu
}

//Chuong trinh con khoi tao PWM chung cho cac module
void Init_MCPWM(void)
{
//PTCON = 0x0000;
PTPER = Fcy/Fpwm - 1; //Dat thanh ghi chu ky voi tan so PWM = 40 kHz
SEVTCMP = PTPER; //su kien dac biet duy nhat là khi bo dem bang PTPER
PWMCON1 = 0x0080; // thanh ghi dieu khien pwm1, dung rieng PDCx,lo dead_time
//PWMCON2 = 0x0080; // thanh ghi dieu khien pwm2, dung rieng PDCx,lo dead_time
PHASE1 = 0x0000;
PWMCON1 = 0x0001;
FCLCON1 = 0x0003;
//PHASE2 = Fcy/Fpwm - 1; // khoi tao period cho pwm2
PDC1 = 0.8*(PTPER + 1) ; // dat khoi tao duty cycle cho pwm1
//PDC2 = 0x00A0; // dat khoi tao duty cycle cho pwm2
IOCON1 = 0xC000;
IOCON2 = 0xC000;
PTCON = 0x8000; //Kich hoat module PWM
}

// chuong trinh khoi tao module ADC
void Init_ADC0(void)
{
ADCON = 0x2003; // CHO PHEP ADC HOAT DONG O 4 CHAN B0, B1, B2, B3
ADCPC0 = 0xC3C3; // lien ket voi PWM//
_ADIF = 0; //Xoa co ngat ADC
_ADCP0IF = 0; //--------------
ADSTATbits.P0RDY = 0; //XOA co bao data is ready
_ADCP1IF = 0; //--------------
ADSTATbits.P1RDY = 0; //XOA co bao data is ready
_ADIE = 1; //Cho phep ngat ADC
_ADON = 1; // cho phep ADC hoat dong
}

void _ISR _ADCInterrupt(void) //ham ngat cua adc
{
PDC1 = ADCBUF0*10; // gan ket qua adc ra pw1 (chan E0 va E1)
PDC2 = ADCBUF2*10; // gan ket qua adc ra pw2 (chan E3 va E4)
_ADIF = 0; // xoa co ngat
_ADCP0IF = 0; //xoa co ngat
ADSTATbits.P0RDY=0; //xoa bit bao du lieu
_ADCP1IF = 0; //xoa co ngat
ADSTATbits.P1RDY=0; //xoa bit bao du lieu
truongaka vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn