This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TI的官方单相锁相环程序(SPLL_1ph_F)参数选择



TI的官方单相锁相环程序(SPLL_1ph_F)中,PI参数的由动态响应来确定,陷波器系数一部分由电网频率。那PD模块中的比例值Kd,和VOC模块中的Ko怎么确定的。

也是根据动态响应确定的?

官方程序中Kd=1  Ko=0.159154943

//*********** Function Definition ********//
void SPLL__FUNC(SPLL_1ph_F *spll_obj)
{
//-------------------//
// Phase Detect //
//-------------------//

spll_obj->Upd[0]=(spll_obj->AC_input*spll_obj->cos[1]);

//-------------------//
//Notch filter structure//
//-------------------//

spll_obj->ynotch[0]=-(spll_obj->notch_coeff.A1_notch*spll_obj->ynotch[1])-(spll_obj->notch_coeff.A2_notch*spll_obj->ynotch[2])+(spll_obj->notch_coeff.B0_notch*spll_obj->Upd[0])+(spll_obj->notch_coeff.B1_notch*spll_obj->Upd[1])+(spll_obj->notch_coeff.B2_notch*spll_obj->Upd[2]);

// update the Upd array for future
spll_obj->Upd[2]=spll_obj->Upd[1];
spll_obj->Upd[1]=spll_obj->Upd[0];

//---------------------------//
// PI loop filter //
//---------------------------//

spll_obj->ylf[0]=-(spll_obj->lpf_coeff.A1_lf*spll_obj->ylf[1])+(spll_obj->lpf_coeff.B0_lf*spll_obj->ynotch[0])+(spll_obj->lpf_coeff.B1_lf*spll_obj->ynotch[1]);

//update array for future use
spll_obj->ynotch[2]=spll_obj->ynotch[1];
spll_obj->ynotch[1]=spll_obj->ynotch[0];

spll_obj->ylf[1]=spll_obj->ylf[0];

//------------------//
// VCO //
//------------------//

spll_obj->wo=spll_obj->wn+spll_obj->ylf[0]; //

//integration process
spll_obj->sin[0]=spll_obj->sin[1]+(((spll_obj->delta_t*spll_obj->wo))*spll_obj->cos[1]);
spll_obj->cos[0]=spll_obj->cos[1]-(((spll_obj->delta_t*spll_obj->wo))*spll_obj->sin[1]);

if(spll_obj->sin[0]>(float32)(0.99))
spll_obj->sin[0]=(float32)(0.99);
else if(spll_obj->sin[0]<(float32)(-0.99))
spll_obj->sin[0]=(float32)(-0.99);

if(spll_obj->cos[0]>(float32)(0.99))
spll_obj->cos[0]=(float32)(0.99);
else if(spll_obj->cos[0]<(float32)(-0.99))
spll_obj->cos[0]=(float32)(-0.99);

spll_obj->theta[0]=spll_obj->theta[1]+((spll_obj->wo*(float32)(0.159154943))*spll_obj->delta_t);

if(spll_obj->sin[0]>(float32)(0.0) && spll_obj->sin[1]<=(float32)(0.0))
{
spll_obj->theta[0]=(float32)(0.0);
}

spll_obj->theta[1]=spll_obj->theta[0];

spll_obj->sin[1]=spll_obj->sin[0];
spll_obj->cos[1]=spll_obj->cos[0];
}