Перейти к содержанию
    

Стробоскопический эффект при измерении Vrms сетевой частоты

Возникла у нас тут, казалось бы, тривиальнейшая задача - измерить с помощью МК действующее напряжение сетевой частоты. Этого мы в общем-то добились, в первом приближении всё измеряется, но вылез неожиданный эффект. Мы заметили, что измерения имеют разброс, который доходит до 1.5% от абсолютной величины сигнала (фазы с амплитудой ~311В), а это несколько вольт, в то время как простейший мультиметр ту же фазу меряет, и значение дёргается примерно на 0.2 В в масштабе времени 0.5 с. Имея возможность выводить данные через RS-485, мы собрали некоторое количество данных с АЦП с параметрами 12 бит, Fs={250Гц | 300Гц | 1000Гц}. Затащили данные в матлаб, чтобы поизучать. Надо сказать, что исходно в качестве рабочей частоты была выбрана именно частота 250Гц, так как с ней фильтр получается попроще. Но для опытов сняли данные на нескольких частотах выборки, чтобы сравнить погрешности измерений до и после обработки. 

Посмотрев на разные осциллограммы и спектры сигналов, мы поняли, что суть проблемы упирается в то, что частота тактирования АЦП в МК (STM32, внутренний генератор имеет точность порядка 1%) несколько отличается от 250Гц, что в целом эквивалентно изменению частоты сигнала. Действительно, если уже программно сгенерировать синусоидальный сигнал с частотой 50.1 Гц для частоты выборок в 250 Гц, то вид сигнала получается крайне похожий на то, что мы намеряли. То есть, эффект размытой точности измерения упирается не в какие-то там шумы квантования АЦП или просто электронные шумы в полосе пропускания АЦП, а тупо в биение частот сети и выборок. Период когерентности оказывается довольно большим, может быть 2 секунды и больше. По сути тут как повезёт, чем ближе частота сети к реальной Fs/5, тем дольше происходит смена фазы выборки. В итоге это приводит к тому, что RMS значение амплитуды сигнала после фильтра гуляет в пределах 1.5%, и примерно такой же результат получается в числовой модели. При большом времени усреднения, который в несколько больше периода биений, эффект, разумеется, сходит на нет. Но нам надо успевать выдавать измерения с задержкой не более 0.5 с от момента измерения. И вот тут возникает проблема, как побороть этот медленный тренд?

  1. Пока что замечено, что он естественным образом сокращается, если начинать разгонять частоту выборок АЦП. Чем больше точек на один период, тем меньше погрешность прямого попадания выборки в амплитудное значение, эффекты биений сами собой затухают, одновременно падает амплитуда биений и растет частота. В итоге в меньшем окне накопления уже всё получается. Однако, для частоты в 1кГц КИХ фильтр на 50+-2Гц с уровнями подавления порядка -70дБ становится уж очень прожорливым по ресурсам, а точность измерения ещё далека от идеальной. И это при том, что простейший вольтметр имеет задержку меньше и дергается меньше при измерении. Хотя я не уверен, что он не имеет встроенного интегратора с большим временем накопления и более быстрым временем обновления. В принципе, визуально заметно, что при первом подключении к измеряемому напряжению, он выдает сначала несколько значений с большим разбросом, а потом постепенно разброс сокращается до ~0.2В, и следует с периодом примерно 0.5 с.
  2. Попалась тут заметка от STM на тему измерения напряжения для счетчиков электроэнергии. Подобная проблема там описана, и в качестве выхода предложено тупо синхронизировать частоту выборок АЦП с измеряемой сетевой частотой. Метод, наверное, годный, но есть всё же какая-то неудовлетворенность им. Ну, например, потому, что если без подстройки мы получали правильное значение с плавающей добавкой, которая за длительное время всё же усреднялась в 0, то с подстройкой мы просто имеем какую-то добавку, которая усредняется в некоторую неизвестную константу. И не очевидно, что пропорциональную измеряемой величине, чтобы её просто откалибровать один раз и всё.

В общем, пока картина получается такая, что накопив 250 выборок за 1 секунду, мы не можем с высокой точностью восстановить действующее значение для частоты 50Гц в полосе 2Гц (по уровню -0.1дБ), которая заметно шире, чем размытость в 1% (0.5Гц), создаваемая неточностью тактового генератора МК. Причем даже в модельном варианте, когда на вход подается чистый синус с идеально постоянной амплитудой, на выходе мы имеем разные значения для энергии сигнала. Вопрос, можно ли такое побороть, не раздувая вычислительные ресурсы уж до совсем неприличного уровня?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так вы RMS как считаете, средние квадраты находите? И почему, когда вычисляете по большой длине, эффект от биений вдруг исчезает? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, верно, считаем сумму квадратов по окну 0.5 с (125 выборок), после полосового КИХ фильтра, выделяющего полосу вокруг 50Гц. Биения имеют период порядка 2-3 с на реальных данных, и около 1.5с на модели 50.1Гц. Почему исчезают биения? Идея такова. Допустим, есть последовательность:

1, 1, 1, 2, 2, 2, 1, 1, 1, 2, 2, 2, 1, 1, 1, 2, 2, 2, ...

Если окно усреднения меньше или равно 3, то можно получить средние значения от 1 до 2. Разброс получается 100%. Если взять окно 6, то получается среднее значение в 1.5, вообще без разброса. При большом окне получается те же 1.5 плюс поправка на краевые эффекты. Примерно то же и с измерениями, просто в итоге разброс 1.5% от абсолютной величины.

Изменено пользователем vpd
исправил опечатку

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для оценки RMS по 1 периоду основного тона нужно оценивать длительность этого самого периода или частоту, а также фазу. Т.е. реализовать синхронное детектирование. А дальше несколько вариантов:

1. Считать RMS по количеству выборок, которое укладывается в период. Этот период нужно брать от 0 до 0, чтобы уменьшить погрешности от краевых эффектов.

2. Интерполировать выборки, чтобы в 1 период всегда укладывалось фикс. число интерполированных отсчетов на постоянных значениях фазы основного тона. Для этого в вашем случае нужно иметь частоту отсчетов более чем 4 раза превышающую макс. частоту шумового процесса.  

3. Подстраивать частоту отсчетов средствами апч. Тут нужно смотреть, что позволяет ваше железо, и какие возможны изменения.

 

Пр оценку частоты сигнала в розетке тут было много копий поломано. Поищите.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да у нас задачи измерения частоты сигнала вообще не стояло. Задача измерить действующее значение. Подозреваю, что обычный вольтметр не измеряет частоту и не имеет никакой АПЧ, а что-то типа диодного детектора и измерения амплитуды. полученного.

И кроме того, я нигде не писал, что мы оцениваем RMS по одному периоду. Наоборот, писал, что мы суммируем на окне в 0.5 с, то есть 25 периодов.

1. Мы и считаем всегда по количеству выборок, которое дает целое число периодов центральной частоты (50 Гц)

2. У нас частота отсчетов минимум 250 Гц, то есть в 5 раз выше частоты измеряемого сигнала 50 Гц.

3. Чисто технически управлять частотой выборок с высокой точностью мы можем, так как фактически частота выборок получается делением 48МГц на N, для 250Гц N равно почти 200 тысяч. Но мне тут кажется избыточной подстройка частоты для RMS. Действующее значение бывает у любого сколь угодно кривого сигнала. Интересно, почему оно в лоб то не считается?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мне кажется, если бы вы измеряли по скользящему окну (квадрат новой выборки добавили, квадрат самой старой отняли), то вы быстро бы избавились от этого эффекта биений. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что-то не совсем понятно, откуда у Вас 1.5% разброса могут возникнуть... Я вот вижу, что для 50.1Гц входного сигнала и частоты выборок ровно 250Гц окно в 125 отсчетов дает погрешность не больше 0.15%... У Вас случаем в окно усреднения переходной процесс от Вашего полосового фильтра не попадает? 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нет, я может быть в самом деле что-то с утра не догоняю, но sin(50Гц)^2 -> 0Гц + 100Гц, что как-бы намекает, что вместо банального усреднения можно использовать любой НЧ фильтр, который хорошо давит 100Гц и не менее хорошо пропускает 0Гц... И что-то мне подсказывает, что этот фильтр можно сделать очень небольшого порядка, гораздо меньше 125-ого...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ViKo, скрипт на самом деле на питоне, его делал коллега, могу его показать попозже с графиками, если интересно. Довольно много мы там численных экспериментов сделали, пока не поняли, что результат примерно получается одинаковый.

 

Самурай, да, для 50Гц у нас тоже всё просто изумительно, ошибка равна 0 от слова совсем. Но вот если Вы возьмете частоту 50.1Гц, то из ФНЧ вылезет сигнал частоты 0.1Гц, то есть, с очень большим периодом. И как можно будет с окном в 0.5 с узнать, каково среднее значение амплитуды сигнала? Вот оно и плавает у нас. При окне в 10 секунд, мы естественно убрали бы все ошибки и получили бы измерение Vrms с такой огромной задержкой, но мы так не хотим :)

 

По поводу 1.5% я всё же уточню, чтобы не было недопонимания. 1.5% - это отношение разности максимального и минимального значения Vrms к абсолютному значению, наблюдаемого нами на реальном сигнале из сети в реальном микроконтроллере. Измерения делаются с темпом 2 раза в секунду на окнах в 125 выборок. То есть, вводится сигнал на частоте 250Гц, фильтруется в полосе 50+-2Гц (отсекаются лишние шумы и постоянная составляющая при переносе двуполярного сигнала сети в однополярный диапазон АЦП), после чего нарезается на окна по 125 сэмплов и считается сумма квадратов, делится на 125, извлекается корень. Умножается на масштабный коэффициент. Выводится в консоль. В последовательности чисел за 10 с высматриваются максимальное и минимальное, они близки, пусть это будет к примеру 605 и 595. Вот мы и оцениваем разброс как (605-595)/((605+595)/2) ~= 1.5%. И это совсем не среднеквадратичное отклонение, потому что основная масса измеренных значений лежит всё же ближе к средней величине, мы это понимаем. Но выбросы идут постоянно, и это раздражает, потому что на простом мультиметре в показаниях ничего такого нет. Фазы дышат немного по амплитуде, но это медленные процессы, а обновления показаний мультиметра идут гораздо чаще, но по величине составляют десятые доли вольта. А вот если взять разброс в 1.5% от 220 вольт, то это 3 вольта, что примерно в 15 раз больше.

Так вот, про 50.1Гц я нигде не писал, что там разброс 1.5%. Я писал, что смоделировав сигнал 50.1Гц мы получили качественно похожую картину, когда измеренное Vrms начинает скакать, выдавая величины с разбросом. И разброс этот больше, чем мог бы быть, если бы дело было только в нарушении принципа ввода целого числа периодов. 50.1Гц отличается от 50Гц, на 0.2%, за время 0.5 с это соответствует примерно 1/4 периода выборки 250Гц. Например, усреднение сигнала чистых 50Гц по 124 или 126 выборкам в окне никакого такого большого разброса показаний не дает.

Изменено пользователем vpd

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4. Если периодов достаточно, то самое простое - увеличить частоту выборок, чтобы уменьшить влияние от стробоскопирования, и наложить оконную функцию, чтобы уменьшить влияние краевых эффектов

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если частота выборок пусть 252 Гц, а сети 50 Гц, то откуда появляются биения 0,1 Гц? Всё дело в децимации, так понимаю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Чистый тон 50 Гц  -> квадрат - >  пс и чистый тон 100Гц.

Усреднение каждые 125 отсчетов это однородный фильтр 124-го порядка с последующей децимацией в 125 раз.

Такой фильтр имеет 0 на частоте 100Гц.  Все отлично. Частота 50.1Гц даст 100.2 Гц. На этой частоте подавление уже ~-51дБ.

При децимации в 125 раз преобразует частоту 100.2 в 0.2Гц. Т е результат будет колебаться вокруг 0.5 с частотой 0.2Гц и амплитудой примерно 0.5%.

Резюме:

нужен другой фнч.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пока что краевые эффекты совсем малы, так что мы ими просто пренебрегаем. Всё же усреднение делается по 25 периодам. Оконные функции как правило все очень плавные, зарежут половину мощности, и я совсем не уверен, что после них не появится какой-нибудь очередной эффект влияния фазы сигнала на измеренную мощность.

Идея поднять частоту выборок уже была, но там пока проблема в том, что 1) существенно повышается порядок полосового КИХ фильтра на входе, 2) и вообще надо всё кратно чаще считать. А у нас там вообще-то две трехфазных сети. Производительности на всё начинает не хватать. Пока в сознании не укладывается механика сего процесса :) Обещали, что по теореме Котельникова сигнал можно восстановить по 2N отсчетам на каждый герц полосы, мы сделали 5, поставили КИХ фильтр с рябью всего 0.1dБ в полосе 50+-2Гц, и тут такой провал с точностью.

 

ViKo, ну вот конкретно для 252Гц оцифровки сдвиг фазы на одной выборке получается 2*pi*50/252, что эквивалентно частоте сети 49.6Гц при выборках на 250Гц. В это случае получается разница не 0.1, а 0.4Гц, период 2.5 с, что опять таки больше размера окна вычисления Vrms в 0.5 с. ну и эффекты те же.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

thermit,

о, а после возведения в квадрат у нас никакого фильтра нет вообще, просто сумма и всё. Я правильно понимаю, что нам надо посчитать квадраты, пропустить их через простейший ФНЧ, чтобы оставить только 0Гц, и уже потом считать сумму квадратов?

Надо будет попробовать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...