vpd 0 23 октября, 2018 Опубликовано 23 октября, 2018 · Жалоба Возникла у нас тут, казалось бы, тривиальнейшая задача - измерить с помощью МК действующее напряжение сетевой частоты. Этого мы в общем-то добились, в первом приближении всё измеряется, но вылез неожиданный эффект. Мы заметили, что измерения имеют разброс, который доходит до 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кГц КИХ фильтр на 50+-2Гц с уровнями подавления порядка -70дБ становится уж очень прожорливым по ресурсам, а точность измерения ещё далека от идеальной. И это при том, что простейший вольтметр имеет задержку меньше и дергается меньше при измерении. Хотя я не уверен, что он не имеет встроенного интегратора с большим временем накопления и более быстрым временем обновления. В принципе, визуально заметно, что при первом подключении к измеряемому напряжению, он выдает сначала несколько значений с большим разбросом, а потом постепенно разброс сокращается до ~0.2В, и следует с периодом примерно 0.5 с. Попалась тут заметка от STM на тему измерения напряжения для счетчиков электроэнергии. Подобная проблема там описана, и в качестве выхода предложено тупо синхронизировать частоту выборок АЦП с измеряемой сетевой частотой. Метод, наверное, годный, но есть всё же какая-то неудовлетворенность им. Ну, например, потому, что если без подстройки мы получали правильное значение с плавающей добавкой, которая за длительное время всё же усреднялась в 0, то с подстройкой мы просто имеем какую-то добавку, которая усредняется в некоторую неизвестную константу. И не очевидно, что пропорциональную измеряемой величине, чтобы её просто откалибровать один раз и всё. В общем, пока картина получается такая, что накопив 250 выборок за 1 секунду, мы не можем с высокой точностью восстановить действующее значение для частоты 50Гц в полосе 2Гц (по уровню -0.1дБ), которая заметно шире, чем размытость в 1% (0.5Гц), создаваемая неточностью тактового генератора МК. Причем даже в модельном варианте, когда на вход подается чистый синус с идеально постоянной амплитудой, на выходе мы имеем разные значения для энергии сигнала. Вопрос, можно ли такое побороть, не раздувая вычислительные ресурсы уж до совсем неприличного уровня? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 23 октября, 2018 Опубликовано 23 октября, 2018 · Жалоба Так вы RMS как считаете, средние квадраты находите? И почему, когда вычисляете по большой длине, эффект от биений вдруг исчезает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vpd 0 23 октября, 2018 Опубликовано 23 октября, 2018 (изменено) · Жалоба Да, верно, считаем сумму квадратов по окну 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% от абсолютной величины. Изменено 23 октября, 2018 пользователем vpd исправил опечатку Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
FatRobot 0 23 октября, 2018 Опубликовано 23 октября, 2018 · Жалоба Для оценки RMS по 1 периоду основного тона нужно оценивать длительность этого самого периода или частоту, а также фазу. Т.е. реализовать синхронное детектирование. А дальше несколько вариантов: 1. Считать RMS по количеству выборок, которое укладывается в период. Этот период нужно брать от 0 до 0, чтобы уменьшить погрешности от краевых эффектов. 2. Интерполировать выборки, чтобы в 1 период всегда укладывалось фикс. число интерполированных отсчетов на постоянных значениях фазы основного тона. Для этого в вашем случае нужно иметь частоту отсчетов более чем 4 раза превышающую макс. частоту шумового процесса. 3. Подстраивать частоту отсчетов средствами апч. Тут нужно смотреть, что позволяет ваше железо, и какие возможны изменения. Пр оценку частоты сигнала в розетке тут было много копий поломано. Поищите. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vpd 0 24 октября, 2018 Опубликовано 24 октября, 2018 · Жалоба Да у нас задачи измерения частоты сигнала вообще не стояло. Задача измерить действующее значение. Подозреваю, что обычный вольтметр не измеряет частоту и не имеет никакой АПЧ, а что-то типа диодного детектора и измерения амплитуды. полученного. И кроме того, я нигде не писал, что мы оцениваем RMS по одному периоду. Наоборот, писал, что мы суммируем на окне в 0.5 с, то есть 25 периодов. 1. Мы и считаем всегда по количеству выборок, которое дает целое число периодов центральной частоты (50 Гц) 2. У нас частота отсчетов минимум 250 Гц, то есть в 5 раз выше частоты измеряемого сигнала 50 Гц. 3. Чисто технически управлять частотой выборок с высокой точностью мы можем, так как фактически частота выборок получается делением 48МГц на N, для 250Гц N равно почти 200 тысяч. Но мне тут кажется избыточной подстройка частоты для RMS. Действующее значение бывает у любого сколь угодно кривого сигнала. Интересно, почему оно в лоб то не считается? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 24 октября, 2018 Опубликовано 24 октября, 2018 · Жалоба Мне кажется, если бы вы измеряли по скользящему окну (квадрат новой выборки добавили, квадрат самой старой отняли), то вы быстро бы избавились от этого эффекта биений. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Самурай 12 24 октября, 2018 Опубликовано 24 октября, 2018 · Жалоба Что-то не совсем понятно, откуда у Вас 1.5% разброса могут возникнуть... Я вот вижу, что для 50.1Гц входного сигнала и частоты выборок ровно 250Гц окно в 125 отсчетов дает погрешность не больше 0.15%... У Вас случаем в окно усреднения переходной процесс от Вашего полосового фильтра не попадает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 24 октября, 2018 Опубликовано 24 октября, 2018 · Жалоба Матлаб скрипт дали бы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Самурай 12 24 октября, 2018 Опубликовано 24 октября, 2018 · Жалоба Нет, я может быть в самом деле что-то с утра не догоняю, но sin(50Гц)^2 -> 0Гц + 100Гц, что как-бы намекает, что вместо банального усреднения можно использовать любой НЧ фильтр, который хорошо давит 100Гц и не менее хорошо пропускает 0Гц... И что-то мне подсказывает, что этот фильтр можно сделать очень небольшого порядка, гораздо меньше 125-ого... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vpd 0 24 октября, 2018 Опубликовано 24 октября, 2018 (изменено) · Жалоба 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 выборкам в окне никакого такого большого разброса показаний не дает. Изменено 24 октября, 2018 пользователем vpd Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
FatRobot 0 24 октября, 2018 Опубликовано 24 октября, 2018 · Жалоба 4. Если периодов достаточно, то самое простое - увеличить частоту выборок, чтобы уменьшить влияние от стробоскопирования, и наложить оконную функцию, чтобы уменьшить влияние краевых эффектов Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 24 октября, 2018 Опубликовано 24 октября, 2018 · Жалоба Если частота выборок пусть 252 Гц, а сети 50 Гц, то откуда появляются биения 0,1 Гц? Всё дело в децимации, так понимаю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
thermit 1 24 октября, 2018 Опубликовано 24 октября, 2018 · Жалоба Чистый тон 50 Гц -> квадрат - > пс и чистый тон 100Гц. Усреднение каждые 125 отсчетов это однородный фильтр 124-го порядка с последующей децимацией в 125 раз. Такой фильтр имеет 0 на частоте 100Гц. Все отлично. Частота 50.1Гц даст 100.2 Гц. На этой частоте подавление уже ~-51дБ. При децимации в 125 раз преобразует частоту 100.2 в 0.2Гц. Т е результат будет колебаться вокруг 0.5 с частотой 0.2Гц и амплитудой примерно 0.5%. Резюме: нужен другой фнч. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vpd 0 24 октября, 2018 Опубликовано 24 октября, 2018 · Жалоба Пока что краевые эффекты совсем малы, так что мы ими просто пренебрегаем. Всё же усреднение делается по 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 с. ну и эффекты те же. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vpd 0 24 октября, 2018 Опубликовано 24 октября, 2018 · Жалоба thermit, о, а после возведения в квадрат у нас никакого фильтра нет вообще, просто сумма и всё. Я правильно понимаю, что нам надо посчитать квадраты, пропустить их через простейший ФНЧ, чтобы оставить только 0Гц, и уже потом считать сумму квадратов? Надо будет попробовать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться