关于DSP2812 固定关断时间控制程序设计问题

2019-07-19 13:51发布


        想用2812实现对boostPFC的固定关断时间控制,本人通过对交流侧电流输出与给定电感电流包络线进行比较,最后根据比较结果查询使GPIO输出脉冲,通过高频中断进行查询达到条件进行脉冲控制的方案,但是达不到正确的效果,特此向各位大神求助,还望不吝赐教~由于需要中断频率远大于开关频率表
主程序如下
void V_CONTROL(void)
{
    ud=_IQmpy(_IQ(0.1),udc);// 电压反馈系数0.1(没有反馈滤波时用到)
        ed1[1]=_IQ(Vr)-ud;  // 定标偏差量
        /*ud1[1]=_IQmpy(_IQ(0.15),ed1[1]);  //电流内环k=0.2       
        if(ud1[1]>=1048576)
    {
     ud1[1]=1048576;
     }
     if(ud1[1]<=-1048576)
    {
     ud1[1]=-1048576;
     }*/
    ud1[1]=ud1[0]+_IQmpy(_IQ(kp),(ed1[1]-ed1[0]))+_IQmpy(_IQ(Ts1*ki),ed1[1]);
        ed1[0]=ed1[1];
        ud1[0]=ud1[1];//电压外环
        if(ud1[0]>=1048576)
    {
     ud1[0]=1048576;
     }
    iref=_IQmpy(ud1[1],sin_out);

         if(sin_out>=0)
         {
                 GpioDataRegs.GPACLEAR.bit.GPIOA1=1;//pwm2端口输出置0
                 if(io-iref>0)
                 {
                       
                         GpioDataRegs.GPACLEAR.bit.GPIOA0=1;//pwm1端口输出置0
                         for (p = 0; p < 150; p++) {}//延时
                                GpioDataRegs.GPASET.bit.GPIOA0=1;//pwm1端口输出置1
                 }
                
                 else
                 {       
                         GpioDataRegs.GPASET.bit.GPIOA0=1;//pwm1端口输出置1
                
                 }
         }
      if(sin_out<0)
         {
                 GpioDataRegs.GPACLEAR.bit.GPIOA0=1;//pwm1端口输出置0
                 if(io-iref<0)
                 {
                         GpioDataRegs.GPACLEAR.bit.GPIOA1=1;//pwm2端口输出置0
                         for (p = 0; p < 150; p++) {}//延时
                                GpioDataRegs.GPASET.bit.GPIOA1=1;//pwm2端口输出置1
                 }
                
                   else
                 {
                         GpioDataRegs.GPASET.bit.GPIOA1=1;//pwm2端口输出置1
                 }
         }

至于逻辑是否正确还望众位大神赐教
问题如下
1)以前做20kHZ的PWM时用的锁相环采用了每个周期采400点,现变为200kHZ是否需要采4000个点

2)逻辑方面是否有问题
3)如果采用200k中断,而锁相环pi的计算时间是0.0005(20k频率的周期)那么是否会有闭不上环的问题
谢谢~
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。