想用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频率的周期)那么是否会有闭不上环的问题
谢谢~
|