发一个TIM1输出6路互补SVPWM程序,带死区

2019-07-21 05:39发布

本帖最后由 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;
}


1.jpg 2.jpg 3.jpg
STM32F030R8.rar (3.01 MB, 下载次数: 1444) 2017-11-30 11:08 上传 点击文件名下载附件



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
179060730q
1楼-- · 2019-07-21 10:33
兄弟  这个程序放在f103ze的板子上用   需要改吗
417400765
2楼-- · 2019-07-21 10:42
179060730q 发表于 2017-12-13 17:13
兄弟  这个程序放在f103ze的板子上用   需要改吗

我这个是F030C8跑的,你要移植到103ZE上那需要修改外设配置
l6931639
3楼-- · 2019-07-21 14:25
什么是SVPWM
417400765
4楼-- · 2019-07-21 16:09
l6931639 发表于 2017-12-21 18:12
什么是SVPWM

你可以自行百度
国行者
5楼-- · 2019-07-21 18:18
 精彩回答 2  元偷偷看……
Owen
6楼-- · 2019-07-21 23:32
楼主,如果用SVPWM控制电机,电压矢量一直在旋转,那电机下臂桥的控制应该在什么时刻切换?还有就是电压矢量的旋转速度和电机实际的旋转速度怎么匹配?

一周热门 更多>