本帖最后由 417400765 于 2017-11-30 11:58 编辑
闲来无事,写了个SVPWM生成程序,MCU选择STM32F030C8,有兴趣的可以一起研究,如果有错误,希望大家指正附件是工程压缩包,欢迎大家下载
int Ua(unsigned int angle)
{
int sign=1;//char sign=1;
if(angle>180)
{
angle-=180;
sign=-1;
}
if(0<=angle&&angle<60)
{
if(angle<30)
return sign*QUARTER_ROOT_3*cosxFF[30-angle]/CONSTANT_SCALER+128;
else
return sign*QUARTER_ROOT_3*cosxFF[angle-30]/CONSTANT_SCALER+128;
}
else if(60<=angle&&angle<120)
{
if(angle<90)
return sign*QUARTER_TOT*cosxFF[angle]/CONSTANT_SCALER+128;
else
return -sign*QUARTER_TOT*cosxFF[180-angle]/CONSTANT_SCALER+128;
}
else if(120<=angle&&angle<=180)
{
if(angle<150)
return -sign*QUARTER_ROOT_3*cosxFF[150-angle]/CONSTANT_SCALER+128;
else
return -sign*QUARTER_ROOT_3*cosxFF[angle-150]/CONSTANT_SCALER+128;
}
}
int Ub(unsigned int angle)
{
if(angle<120)
return Ua(120-angle);
else
return Ua(angle-120);
}
int Uc(unsigned int angle)
{
if(angle<240)
return Ua(240-angle);
else
return Ua(angle-240);
}
void IRQ_SVPWM(void)
{
uint8_t p=0;//char p=1; //0-Phase voltage 1-Line voltage
PWM_U=Ua(angle)-p*Ub(angle);
PWM_V=Ub(angle)-p*Uc(angle);
PWM_W=Uc(angle)-p*Ua(angle);
angle+=1;
if(angle>360)
angle = 0;
TIM1->CCR1 = PWM_U;//PWMMR1;
TIM1->CCR2 = PWM_V;//PWMMR3;
TIM1->CCR3 = PWM_W;//PWMMR5;
}
STM32F030R8.rar
(3.01 MB, 下载次数: 1444)
2017-11-30 11:08 上传
点击文件名下载附件
我这个是F030C8跑的,你要移植到103ZE上那需要修改外设配置
一周热门 更多>