Снова побуду теоретиком. Фильтр с постоянной времени - это же не
интегратор, а просто пропорциональное регулирование. Оно по
определению не сможет вывести в ноль постоянную составляющую.
AN1279 имеет такой код на эту тему:
inverterVoltageMax = VectorMax(RMS_BUFFER_SIZE, voltageRMSBuffer, voltageRMSBuffer);
inverterVoltageMin = VectorMin(RMS_BUFFER_SIZE, voltageRMSBuffer, voltageRMSBuffer);
if (inverterImbalanceCount >= 16)
{
/* Adjustment for DC offset in output voltage */
if (inverterVoltageImbalance > 40)
{
inverterOffsetAdjustment -= 5;
if (inverterOffsetAdjustment <= -200)
{
inverterOffsetAdjustment = -200;
}
}
else if (inverterVoltageImbalance < -40)
{
inverterOffsetAdjustment += 5;
if (inverterOffsetAdjustment >= 200)
{
inverterOffsetAdjustment = 200;
}
}
inverterImbalanceCount = 0;
inverterVoltageImbalance = 0;
}
else
{
inverterImbalanceCount++;
inverterVoltageImbalance += inverterVoltageMax + inverterVoltageMin;
} Затем значение inverterOffsetAdjustment используется для коррекции считанного АЦП значения напряжения, перед использованием его в любых расчетах.
Тут реализован именно интегратор.