pic16f716單片機spwm輸出模式半橋狀態(tài),可是有相波形的第一個脈寬不對?。ㄈ鐖D一),圖二是另外一相波形,這個是我想要的,不明白第一個為什么,
還有一個問題為什么我設(shè)置的死去時間的一個單位時間是:SPWM的周期時間啊,而不是datasheet上講的是Fosc/4
這個是我的半橋程序,有哪位大俠能幫我看看?。。?!,這波形怎么會是上面這個樣子,還有死去時間,我實在無語了?。?/p>
//spwm調(diào)制,逆變器,
#include
#define uchar unsigned char
#define uint unsigned int
__CONFIG(0X3F32);
const uchar sinTab[200]={ //調(diào)制度M=0.9;正弦波代碼數(shù)組
0,1,2,3,4,5,6,7,8,10,
11,12,13,14,15,16,17,18,19,20,
21,22,23,24,25,26,27,28,29,30,
31,32,33,33,34,35,36,37,38,39,
40,41,41,42,43,44,45,45,46,47,
48,48,49,50,51,51,52,53,53,54,
55,55,56,56,57,58,58,59,59,60,
60,61,61,62,62,62,63,63,64,64,
64,65,65,65,65,66,66,66,66,66,
67,67,67,67,67,67,67,67,67,67,
67,67,67,67,67,67,67,67,67,
67,66,66,66,66,66,65,65,65,65,
64,64,64,63,63,62,62,62,61,61,
60,60,59,59,58,58,57,56,56,55,
55,54,53,53,52,51,51,50,49,48,
48,47,46,45,45,44,43,42,41,41,
40,39,38,37,36,35,34,33,33,32,
31,30,29,28,27,26,25,24,23,22,
21,20,19,18,17,16,15,14,13,12,
11,10,8,7,6,5,4,3,2,1,0
};
/*基波50Hz,載波20KHz,半周期內(nèi)的采樣點數(shù)為100,則pwm的周期=1/20ms=50us*/
/*SPWM初始化*/
uchar B_D=0,i;
void init()
{
TRISB=0X28; //
PR2=149; //SPWM為50uS=150*4*(1/12)
CCP1CON=0XBd; //spwm模式選擇,半橋1011,1101,A、c高有效,b、d低有效
CCPR1L=0; //占空比為0
PWM1CON=0X00; //
TMR2IF=0;
T2CON=0X04; //不分頻,使能TMR2
}
void tmr2()
{
if(TMR2IF)
{
if(i==200)
{
i=0;
B_D=!B_D;
}
if(B_D)
{
TRISB=0X20; //B...C
}
else
{
TRISB=0X08; //D...A
}
PR2=149; //SPWM為50uS=150*4*(1/12)
CCPR1L=sinTab[i];
TMR2IF=0;
i++;
}
}
void main ()
{
init();
while(1)
{
tmr2();
}
}
增強型的CCP PWM,16F690好像也可以