发一个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条回答
正点原子
1楼-- · 2019-07-22 02:12
cool
417400765
2楼-- · 2019-07-22 04:41
Owen 发表于 2018-6-25 14:26
楼主,如果用SVPWM控制电机,电压矢量一直在旋转,那电机下臂桥的控制应该在什么时刻切换?还有就是电压矢 ...

电机下桥臂和上桥臂一直是互补输出的,所以只要管好上桥臂就好了,电机实际转速=电压矢量的旋转速度-电机滑差转速,电机滑差转速由电机本身设计决定
417400765
3楼-- · 2019-07-22 08:02
正点原子 发表于 2018-6-26 01:18
cool

谢谢原子哥哥,是原子哥哥把我领进STM32的大门,谢谢
Owen
4楼-- · 2019-07-22 08:56
 精彩回答 2  元偷偷看……
douxiaolingyun
5楼-- · 2019-07-22 09:06
MARK 一下 学习中

一周热门 更多>