我一直在实施一个控制软件,其核心功能之一是能够与三相电网同步。基本上我需要实现适合三相的某种形式的锁相环(PLL)。我发现有几种方法可以做到这一点。我发现的最简单的方法之一基本上是基于相电压时间积分的计算。我的第一个想法是如何以递归形式使用梯形积分规则
我已经在 C 中实现了上面写的差分方程,我试图将正弦波传递给它
#define PI 3.14
#define N 64
float x, y;
for(int k = 0; k < N; k++){
x = sin(k*2*PI/N);
y = integrate(1.0, x);
}
float integrate(float T, float xk)
{
static float intk_1 = 0; // I(k-1)
static float xk_1 = 0; // x(k-1)
float intk = intk_1 + T/2*(xk_1 + xk);
intk_1 = intk;
xk_1 = xk;
return intk;
}
根据我的实验结果,我意识到如果积分过程从正弦波为零值的点开始,则所得积分有很大的偏移
如果积分过程从正弦波具有正最大值的点开始,则积分的偏移为零。
我需要具有零偏移的积分才能估计三相电网的相位和频率。显而易见的解决方案可能是以某种方式检测正弦波的正最大值,然后开始积分过程。问题是三相电网的频率在某个容差范围内波动。任何人都可以给我一个建议如何进行积分过程,以使结果积分具有零偏移?


