使用SVPWM方法進行三相逆變時,為什么輸出的正弦波頻率和計算的總是不一致???
下面是關于SVPWM的代碼:
double t1,t2,t3; //相鄰兩矢量和零矢量
double pwm1=0,pwm2=0,pwm3=0; //每相開關管的導通時間
if(TIM3->CR1 & 0x0010 == 0x0010) //中央計數模式判斷是否為向下計數
{
if(t>=360)t=0;
if(t>=0 && t<=60)
{
t1 = M*sin_num[60-t]/F; //F時每個導通周期的時間,沒有用會被約掉
t2 = M*sin_num[t]/F;
t3 = 1/F-t1-t2;
pwm1 = t1+t2+t3/2;
pwm2 = t2+t3/2;
pwm3 = t3/2;
}
else if(t>60 && t<=120)
{
t1 = M*sin_num[120-t]/F;
t2 = M*sin_num[t-60]/F;
t3 = 1/F-t1-t2;
pwm1 = t1+t3/2;
pwm2 = t1+t2+t3/2;
pwm3 = t3/2;
}
else if(t>120 && t<=180)
{
t1 = M*sin_num[180-t]/F;
t2 = M*sin_num[t-120]/F;
t3 = 1/F-t1-t2;
pwm1 = t3/2;
pwm2 = t1+t2+t3/2;
pwm3 = t2+t3/2;
}
else if(t>180 && t<=240)
{
t1 = M*sin_num[240-t]/F;
t2 = M*sin_num[t-180]/F;
t3 = 1/F-t1-t2;
pwm1 = t3/2;
pwm2 = t1+t3/2;
pwm3 = t1+t2+t3/2;
}
else if(t>240 && t<=300)
{
t1 = M*sin_num[300-t]/F;
t2 = M*sin_num[t-240]/F;
t3 = 1/F-t1-t2;
pwm1 = t2+t3/2;
pwm2 = t3/2;
pwm3 = t1+t2+t3/2;
}
else if(t>300 && t<=360)
{
t1 = M*sin_num[360-t]/F;
t2 = M*sin_num[t-300]/F;
t3 = 1/F-t1-t2;
pwm1 = t1+t2+t3/2;
pwm2 = t3/2;
pwm3 = t1+t3/2;
}
TIM3->CCR1 = (pwm1)*F*COUNT;
TIM3->CCR2 = (pwm2)*F*COUNT;
TIM3->CCR3 = (pwm3)*F*COUNT;
t+=6;
} 每次步進6度
這部分是放在中斷服務函式里的
問題是:為什么除了每次步進1度的計算值和實際值的頻率相同,其他的計算后的步進度數都會使輸出頻率為100HZ左右
還有就是輸出的波形有時會有上下尖峰,請大佬回答一下問題
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/13965.html
標籤:硬件設計
上一篇:F4的空閑中斷
下一篇:開發一套代還系統應該注意什么?
