Период оцифрения для устранения 50 Гц

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From Russian to

Threaded View
Добрый день всем!

    Теоретически есть 2 варианта задания периода оцифрения по отношению к
наводкам 50 Гц (20 мсек):

- n*20 мсек - быстрый (по сравнению с 20 мсек) ADC при последовательных
опросах попадает примерно в одну и ту же точку полуволны синуса наводки.
Дребезг измерений меньше, но сама средняя измеренная величина сигнала будет
искажена наводкой, и степень искажения результата будет зависеть от уровня
наводки;

-10+n*20 мсек - последовательные измерения попадают на разные полуволны
наводки. Дребезг результата увеличивается (от точки к точке) и зависит от
уровня наводки, но в среднем такой период позволяет убрать влияние наводки.

    Что обычно применяется, если в данном случае есть само понятие "обычно"?

Конкретно:    у меня ADC работает с периодом 30 мсек (см. выше), и по 4
(степень 2) точкам перед обработкой идет фильтрация кодов фильтром первого
порядка типа
Y(n+1) = Y(n)*3/4 + Y(n+1)/4 (память - только на одно значение).
Памяти хранить выборки нет (даже 4 последние точки - сложно), а
вышеприведенный программный фильтр подавляет наводку Гц всего в 6-7 раз
(истинное скользящее среднее убрало бы наводку полностью). Вот и думаю,
можно ли что-либо "улучшить" простыми средствами?

С уважением, Юрий Копылов inlog@mtu-net.ru






Re: Период оцифрения для устранения 50 Гц
                           Пpивет, Yuri!

*** 30 Oct 04 20:03, Yuri Kopylov wrote to All:

 YK> - n*20 мсек - быстрый (по сравнению с 20 мсек) ADC при
 YK> последовательных опросах попадает примерно в одну и ту же точку
 YK> полуволны синуса наводки. Дребезг измерений меньше, но сама средняя
 YK> измеренная величина сигнала будет искажена наводкой, и степень
 YK> искажения результата будет зависеть от уровня наводки;

А сделай две выборки с интервалом 10 mS - просто и надежно...

                                      с уважением Владислав

Re: Период оцифрения для устранения 50 Гц
Привет!

Quoted text here. Click to load it

    Вообще-то, я не успеваю оборачиваться за 10 мсек. А какая разница, 2
выборки через 10 мсек или через 30 мсек (как у меня сейчас)?

WBR Юрий Копылов inlog@mtu-net.ru



Re: Период оцифрения для устранения 50 Гц
Yuri Kopylov wrote to Vladislav Baliasov:

 VB>> А сделай две выборки с интервалом 10 mS - просто и надежно...

 YK>     Вообще-то, я не успеваю оборачиваться за 10 мсек. А какая разница, 2
 YK> выборки через 10 мсек или через 30 мсек (как у меня сейчас)?

Небольшая разница есть. Если усреднять две соседние выборки, взятые с
интервалом 10 мс, то лучше будет подавление в тех случаях, когда амплитуда
наводки 50 Гц медленно меняется.

 YK> Только вот фильтр типа
 YK> Y(n+1) = Y(n)*3/4 + Y(n+1)/4
 YK> фиговат для этих целей. Hамного лучше осреднять

"Эт' точно!" (с) У тебя получился рекурсивный фильтр, что в данном случае
нафиг не нужно.

 YK> Hе хочется вместо программно фильтра курочить печать
 YK>  и паять RC-цепочку. -вообще-то, эффект д.б. тот же самый.

"Это вряд ли..." (с).

Одна RC-цепочка даст тебе ФНЧ с подавлением 6 дБ/октава. Чтобы добиться
мало-мальски приличного подавления 50 Гц, придется выбирать частоту среза
единицы/доли герц, получится громоздко и будет жутко тормозить.

Усреднение двух (и только двух) соседних 10 мс выборок дает трансверсальный
(т.е. гребенчатый) фильтр, который полностью подавляет 50 Гц, а также все
нечетные гармоники 50 Гц. Его АЧХ описывается выражением |cos(f)| При этом
фильтр имеет минимальную "инерцию", т.к. "не помнит" ненужную предысторию (в
отличие от рекурсивного фильтра).

Более глубокого подавления можно достичь, если точно мерять интервал 50 Гц
сетевого напряжения, и подстраивать "10 мс" интервал выборок точно в половину
измеренного.

Пока,                                 Алексей


Re: Период оцифрения для устранения 50 Гц
Привет!

AK> Усреднение двух (и только двух) соседних 10 мс выборок дает
трансверсальный
AK> (т.е. гребенчатый) фильтр, который полностью подавляет 50 Гц, а также
все
AK> нечетные гармоники 50 Гц. Его АЧХ описывается выражением |cos(f)| При
этом
AK> фильтр имеет минимальную "инерцию", т.к. "не помнит" ненужную
предысторию (в
AK> отличие от рекурсивного фильтра).
AK>
AK> Более глубокого подавления можно достичь, если точно мерять интервал 50
Гц
AK> сетевого напряжения, и подстраивать "10 мс" интервал выборок точно в
половину
AK> измеренного.

    У меня ADC ADS1253 (delta-sigma, 4 канала) опрашивается по таймеру
~30ms, в обработчике прерывания на опрос одного канала уходит около 1.5 мсек
(всего - 6 мсек). Синхронизации с сетью нет. Можно, конечно, попробовать
переделать всю программу и попробовать уложиться во время при опросе каждого
канала 10 мсек, но проблематично и не очень хочется пока. Сейчас время
работы ISR - около 9 мсек.

    В измеряемом сигнале есть несинхронизированная наводка 50 Гц (по
определению - куда ей деться!) и посторонний остаточный синхронный сигнал
~9,6 кГц (рабочая частота схемы, от того же кварца контроллера). Но
условие - я не могу делать обработку реже 30 мсек.
Поскольку первый ноль цифрового фильтра ADC приходится на 4800 Гц, второй
ноль - на 9600 Гц, рабочая частота другой части схемы выбрана 9600Гц. Тем
самым хочется верить, что в оцифрованном сигнале присутствует, в основном,
наводка 50 Гц и прочий шум.

    Если я меряю каждые 10 мсек и просто осредняю по 2, то выходные данные
обновляются каждые 20 мсек. Это бы устроило.

    Но если я останусь на своей базовой частоте 30 мсек, то будет ли
аналогично предлагаемому решение, основанное на скользящем среднем по 2
точкам (исходные значения хранятся и не затираются осредненным!)? Пока
недостатков не вижу, кроме общей проблемы "30 или 10 мсек" и несинхронизации
с сетью.


WBR Юрий Копылов inlog@mtu-net.ru












Re: Период оцифрения для устранения 50 Гц
Sun Oct 31 2004 14:13, Yuri Kopylov wrote to Alex Kouznetsov:

 AK>> Усреднение двух (и только двух) соседних 10 мс выборок дает
 AK>> трансверсальный
 AK>> (т.е. гребенчатый) фильтр, который полностью подавляет 50 Гц, а также
 AK>> все нечетные гармоники 50 Гц. Его АЧХ описывается выражением |cos(f)|

 YK>     У меня ADC ADS1253 (delta-sigma, 4 канала)

Конкретно этот не смотрел, но во многих многоканальных сигма-дельта есть
встроенный цифровой фильтр, подавляющий 50 и 60 Гц децибел так на 60-80. Если
в твоем нет, может, имеет смысл перейти на что-то вроде ADS124x? Они, правда,
медленные...

[...]

 YK>     Hо если я останусь на своей базовой частоте 30 мсек, то будет ли
 YK> аналогично предлагаемому решение, основанное на скользящем среднем по 2
 YK> точкам (исходные значения хранятся и не затираются осредненным!)? Пока
 YK> недостатков не вижу, кроме общей проблемы "30 или 10 мсек" и
 YK> несинхронизации с сетью.

При 30 мс ты подавишь частоту (50/3)Гц и все ее нечетные гармоники. 50 Гц
яляется 3-й гармоникой этой частоты. Однако нечетные гармоники 50 Гц только
наполовину совпадают с нечетными гармониками частоты (50/3)Гц. В сумме
подавление будет хуже.

Пока,                                 Алексей


Re: Период оцифрения для устранения 50 Гц
Привет!


AK> Конкретно этот не смотрел, но во многих многоканальных сигма-дельта есть
AK> встроенный цифровой фильтр, подавляющий 50 и 60 Гц децибел так на 60-80.
Если
AK> в твоем нет, может, имеет смысл перейти на что-то вроде ADS124x? Они,
правда,
AK> медленные...
    Дак любым (почти) ADC можно подавить 50-60 Гц, но при этом и выдача
будет редкой.
А поскольку мне нужно оцифрять быстро и часто, тактовая сигмы-дельта выбрана
достаточно высокой.
 Поэтому и первый нуль цифрового фильтра так высоко получается (4.8 кГц).

Quoted text here. Click to load it
2
AK> При 30 мс ты подавишь частоту (50/3)Гц и все ее нечетные гармоники. 50
Гц
AK> является 3-й гармоникой этой частоты.
    Да
AK> Однако нечетные гармоники 50 Гц только
AK> наполовину совпадают с нечетными гармониками частоты (50/3)Гц. В сумме
AK> подавление будет хуже.
    Вот с этим согласен - про гармоники не подумал. Ты прав - спасибо.
Попробую на досуге подумать над программой чтобы ее ускорить и опрашивать
ADC через 10 мсек. Хотя, вероятнее всего, это будет проще сделать в
следующей версии железа.

WBR Юрий Копылов inlog@mtu-net.ru




Re: Период оцифрения для устранения 50 Гц
                           Пpивет, Yuri!

*** 30 Oct 04 21:40, Yuri Kopylov wrote to Vladislav Baliasov:

 >>
 >> А сделай две выборки с интервалом 10 mS - просто и надежно...

 YK>     Вообще-то, я не успеваю оборачиваться за 10 мсек. А какая разница,
 YK> 2 выборки через 10 мсек или через 30 мсек (как у меня сейчас)?

Я тормознул - твой второй вариант это почти то же самое, что и у меня.

                                      с уважением Владислав

Re: Период оцифрения для устранения 50 Гц
Привет!

Quoted text here. Click to load it
разница,
Quoted text here. Click to load it

    Похоже, мой первый вариант - это глупость, и опрашивать нужно только на
разных полуволнах наводки. Ты прав. Только вот фильтр типа

Y(n+1) = Y(n)*3/4 + Y(n+1)/4

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

    Пробую сейчас разные программные извраты и смотрю на шум АЦП (десятки -
сотня uV). Может, это и не 50 Гц наводки, может, цифровой шум по земле,
сказать трудно - скопом ведь ничего не увидишь. И смотрю только на выдачу из
контроллера в RS-232 по 5-8 точек/сек.


WBR Юрий Копылов


Re: Период оцифрения для устранения 50 Гц
     Greetings, Yuri!

 Посмотрел я мессагу, посланную Yuri Kopylov к All, и решил ответить:

 YK> - n*20 мсек - быстрый (по сравнению с 20 мсек) ADC при
 YK> последовательных опросах попадает примерно в одну и ту же точку

 YK> -10+n*20 мсек - последовательные измерения попадают на разные
 YK> полуволны наводки. Дребезг результата увеличивается (от точки к точке)

Если у тебя SAR ADC (измеpения пpоводятся в точке), то от наводки ты таким
способом не избавишься, т.к. в наводке пpисутствует не только одна гаpмоника, и
эти гаpмоники нестабильны. Кpоме того, точно пеpиод сети ты не выдеpжишь,
поэтому в отсчетах АЦП будут биения (если наводка действительно влияет на
измеpения)
Поэтому:
 - Измеpять лучше всего с помощью интегpиpования с вpеменем интегpиpования 20*n
мс, затем использовать SAR ADC для измеpения на выходе интегpатоpа. Влияния от
импульсных наводок и от несовпадения пеpиодов pезко снизятся.
- Можно использовать вpемя интегpиpования, не кpатное пеpиоду наводки, но пpи
этом следует позаботиться о синхpонизации начала интегpиpования с сетью.
Вообще, синхpонизация измеpений с сетью будет полезна во всех случаях.

 C наилучшими пожеланиями
                    Ilja aka ИЛ-2  (ilja_vlaskin$mail.ru)

... О чем поет ночная птица одна в осенней тишине

Re: Период оцифрения для устранения 50 Гц

   Yuri, ты ещё здесь сидишь?


Суббота Октябрь 30 2004 21:03, Yuri Kopylov wrote to All:

 YK>     Теоретически есть 2 варианта задания периода оцифрения по
 YK> отношению к наводкам 50 Гц (20 мсек):
 YK> - n*20 мсек - быстрый (по сравнению с 20 мсек) ADC при
 YK> последовательных опросах попадает примерно в одну и ту же точку
 YK> полуволны синуса наводки. Дребезг измерений меньше, но сама средняя
 YK> измеренная величина сигнала будет искажена наводкой, и степень
 YK> искажения результата будет зависеть от уровня наводки;
 YK> -10+n*20 мсек - последовательные измерения попадают на разные
 YK> полуволны наводки. Дребезг результата увеличивается (от точки к точке)
 YK> и зависит от уровня наводки, но в среднем такой период позволяет
 YK> убрать влияние наводки.
 YK>     Что обычно применяется, если в данном случае есть само понятие
 YK> "обычно"?

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

 YK> Конкретно:    у меня ADC работает с периодом 30 мсек (см. выше),

 Очень плохо! Для эффективной цифровой фильтрации период оцифровки должен
быть существенно меньше периода наводки. Как минимум два отсчёта на период
сетевой помехи. Иначе вносятся дополнительные погрешности, да ещё и
удлиняется время обработки...


                                                   Георгий


Re: Период оцифрения для устранения 50 Гц
Привет!


Quoted text here. Click to load it
    Да есть такие,причем активные и второго порядка. Речь идет об остатках
чего-то того, что, все-таки, доходит до ADC. Хотя, может быть, и не все
доходит со входа.

Quoted text here. Click to load it
    Это да. Потому цифровая программная фильтрация и не была изначально
задумана. Ее начал прикручивать уже потом ради "попробовать, будет ли лучше
или нет" - программно-то это занимает пару минут.

Пробовал вчера вечером скользящее среднее по 2 точкам при своих 30 мсек -
эффекта изменения шума выхода цифрового сигнала p-p практически не заметил.

    Единственное, что всегда сильно положительно влияет и явно заметно - это
подобные упражнения с осреднением с дифференциальным сигналом (разница двух
последовательных отсчетов через 30 мсек), используемым для управления
регулятором PID.


WBR Юрий



Re[2]: Период оцифрения для устранения 50 Гц


Здравствуйте, Yuri.

Вы писали 1 ноября 2004 г., 20:14:09:

YK>     Единственное, что всегда сильно положительно влияет и явно заметно - это
YK> подобные упражнения с осреднением с дифференциальным сигналом (разница двух
YK> последовательных отсчетов через 30 мсек), используемым для управления
YK> регулятором PID.

Я делаю так: отсчеты АЦП каждые 10мс, потом усредняется по формуле
N1 + 2*N2 + N3.. Результат можно делить на 4, а можно и не делить (у
меня дальше идет масштабирование, там в коэффициенте сразу учтено
деление на 4).

--
С уважением,
Nickolay V. Naumov aka Nick      mailto:nau88 (at) sed (p) lg (p) ua


Re: Re[2]: Период оцифрения для устранения 50 Гц
Добрый день!


Quoted text here. Click to load it

Это тоже приемлемо. Единственное, что мне не нравится (в моем случае) как в
этом варианте такого фильтра, так и в скользящем среднем, так это сложность
сложений и циклических перезаписей буфера, которые нужно выполнять каждый
раз.
    На сегодня я согласился с периодом 10 мсек и осреднением по 2 точкам
(это 50 Гц) - переделываю программу, чтобы получать измерения (осредненные)
каждые 20 мсек.

А вот с последующими программными сглаживающими фильтрами не придумал как
лучше (маловато времени процессора и памяти), тем более что считается еще и
производная сигнала.
Предполагаю сделать так:
1. Каждые 20 мсек имею уже код АЦП, осредненный по 2-м измерениям (фильтр 50
Гц)
2. Храню предыдущий результат (20 мсек назад)
3. Каждые 20 мсек в качестве рабочего кода для расчетов использую среднее из
текущего значения и предыдущего - получается дополнительно скользящее
среднее по 2-м точкам
4. Для получения производной сигнала
    - либо брать разницу текущего и предыдущего не за 20 мсек, а за больший
период (40-80 мсек)
    - либо дополнительно осреднять (фильтровать?) сигнал по 2-4 точкам и
производную брать как разницу соседних точек уже этого "фильтрованного"
сигнала.


С уважением Юрий Копылов



Re: Re[2]: Период оцифрения для устранения 50 Гц


Quoted text here. Click to load it
2*N2 + N3..

    А кто подскажет, как оценить АЧХ (хотя бы пару оценок типа частота среза
и задержка - фазовый сдвиг) подобных упражнений с формулами. Видимо, должен
быть какой-нибудь симулирующий софт, строящий графики и пр. Например, как
оценить качество фильтрации в приведенном выше "чистом нерекурсивном"
примере взвешенного скользящего среднего" - ведь формулы можно взять разные,
а как понять, что получилось?

WBR Юрий Копылов



Site Timeline