реклама на сайте
подробности

 
 
> измерение среднеквадратичного напряжения сети
axalay
сообщение Jun 21 2010, 19:05
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 388
Регистрация: 27-02-06
Из: Москва
Пользователь №: 14 759



Вопрос может быть не совсем в теме, но... Интересует действующее значение в каждом периоде. В mega88 через делитель 1180kOm и 3.3kOm завел напряжение сети. Опора внутренняя 1.1 В Чтобы просматривать обе полуволны пропустил через диодный мост. Знаю, что можно завести сразу обе на разные входы АЦП чтобы не было погрешностей вносимых мостом, но вопрос не в этом. В приложенном файле выведено несколько замеров. Там первая строка-количество отсчетов, второй строкой массив замеров (полученные от АЦП). Третьей-полученный результат. Результат-это сумма квадратов отсчетов, поделенная на количество отсчетов, и изьятие корня квадратного. Теперь вопросы.
-не слишком ли большой разброс полученного значения?
-как его привести к нормальным величинам? Читал что есть 2 варианта. Один-непосредственно полученные от АЦП данные приводить перед вычислениями. И второй (получше) приводить результат.

Ну и вообще послушал бы советы бывалых. Спасибо
Прикрепленные файлы
Прикрепленный файл  __________220.txt ( 6.11 килобайт ) Кол-во скачиваний: 204
 
Go to the top of the page
 
+Quote Post
3 страниц V   1 2 3 >  
Start new topic
Ответов (1 - 37)
=GM=
сообщение Jun 21 2010, 21:52
Сообщение #2


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Для синуса с амплитудой 800, эффективное значение будет 800*0.707=566. Вторая строка даёт 573. У вас - 178. Неправильно вычисляете, ищите ошибку.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
axalay
сообщение Jun 22 2010, 04:56
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 388
Регистрация: 27-02-06
Из: Москва
Пользователь №: 14 759



Цитата(=GM= @ Jun 22 2010, 01:52) *
Для синуса с амплитудой 800, эффективное значение будет 800*0.707=566. Вторая строка даёт 573. У вас - 178. Неправильно вычисляете, ищите ошибку.


Спасибо-нашел ошибку. Чего то с утра напряг повыше ... А как насчет разброса измерений. Может какой фильтр снаружи предусмотреть?
Прикрепленные файлы
Прикрепленный файл  __________220.txt ( 6.6 килобайт ) Кол-во скачиваний: 195
 
Go to the top of the page
 
+Quote Post
dimka76
сообщение Jun 22 2010, 06:37
Сообщение #4


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Среднеквадратичное значение напряжения ЭТО


Вот и интегрируйте. Интегратор в дискретной форме это Yi=Yi-1 + K*Xi.
Форма напряжения в сети 220 может иметь коэффициент гармоник до 10% (по ГОСТ), а SQRT(2) это для идеальной синусоиды.


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
Tanya
сообщение Jun 22 2010, 07:35
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883



Цитата(dimka76 @ Jun 22 2010, 10:37) *
Вот и интегрируйте. Интегратор в дискретной форме это Yi=Yi-1 + K*Xi.
Форма напряжения в сети 220 может иметь коэффициент гармоник до 10% (по ГОСТ), а SQRT(2) это для идеальной синусоиды.

Интегрировать нужно квадрат напряжения.
Go to the top of the page
 
+Quote Post
axalay
сообщение Jun 22 2010, 07:44
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 388
Регистрация: 27-02-06
Из: Москва
Пользователь №: 14 759



Цитата(dimka76 @ Jun 22 2010, 10:37) *
Вот и интегрируйте. Интегратор в дискретной форме это Yi=Yi-1 + K*Xi.
Форма напряжения в сети 220 может иметь коэффициент гармоник до 10% (по ГОСТ), а SQRT(2) это для идеальной синусоиды.


Чето как то непонятна формула. Как минимум чего то не хватает. А догадки реализовывать неохота

Цитата(Tanya @ Jun 22 2010, 11:35) *
Интегрировать нужно квадрат напряжения.

А можно поподробнее... И еще по поводу приведения полученного значения к реальному. Я вижу 2 варианта-первый подгонка, второй - пересчет. А охота сделать правильно.
Go to the top of the page
 
+Quote Post
Tanya
сообщение Jun 22 2010, 07:55
Сообщение #7


Гуру
******

Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883



Цитата(axalay @ Jun 22 2010, 11:44) *
А охота сделать правильно.

Что Вы хотите измерить? Среднеквадратичное значение. Значит - возводим в квадрат (квадратичное будет) и интегрируем (несколько периодов), усредняем (среднее), извлекаем корень (можно приближенно).
Go to the top of the page
 
+Quote Post
dimka76
сообщение Jun 22 2010, 08:06
Сообщение #8


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Цитата(Tanya @ Jun 22 2010, 11:35) *
Интегрировать нужно квадрат напряжения.


Я же не написал что есть Xi. В данном случае Xi действительно будет (Uin)^2.


Цитата(axalay @ Jun 22 2010, 11:44) *
Чето как то непонятна формула. Как минимум чего то не хватает. А догадки реализовывать неохота


Новое значение выхода интегратора (Yi) равно сумме его предыдущего выходного значения (Yi-1) и текущего значения его входа (Xi).
K - коэффициент, определяющий скорость интегрирования. (постоянная времени интегратора)


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
Tanya
сообщение Jun 22 2010, 08:09
Сообщение #9


Гуру
******

Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883



Цитата(dimka76 @ Jun 22 2010, 12:06) *
Я же не написал что есть Xi. В данном случае Xi действительно будет (Uin)^2.




Новое значение выхода интегратора (Yi) равно сумме его предыдущего выходного значения (Yi-1) и текущего значения его входа (Xi).
K - коэффициент, определяющий скорость интегрирования. (постоянная времени интегратора)

Я знала, что Вы знаете, а автор - нет. Только зачем делить каждый раз... И интегратор нужно сбрасывать.
Go to the top of the page
 
+Quote Post
axalay
сообщение Jun 22 2010, 15:18
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 388
Регистрация: 27-02-06
Из: Москва
Пользователь №: 14 759



Поправте если я не прав.

у меня на АЦП 220 для измерения поступает через делитель, верхнее плечо которого 1180 кОм, а нижнее 3.3 кОм. Так как опора 1.1 В, то могу замерить пиковое 394,433333333 В (или наши 278 вольт, то есть 394*0,707)
В моем случае АЦп пик померил 820. Я так понимаю, что это эквивалентно нашим человеческим 311 В ( то есть 311 * 0.707 = 220). Я же беру для одного периода каждый отсчет возвожу в квадрат, суммирую, а потом все это делю на количество отсчетов и изымаю корень квадратный. И получаю что то около 590. Как эту цифру привести к нашим человеческим 220 ? Мне надо для каждого периода. Далее я проинтегрирую и усредню уж сам как нибудь smile.gif. Просто эта тематика не совсем из моей области-поэтому в данной теории я не силен-извиняйте. Я понимаю что можно поделить чтобы получить 220 smile.gif
Go to the top of the page
 
+Quote Post
Tanya
сообщение Jun 22 2010, 15:52
Сообщение #11


Гуру
******

Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883



Цитата(axalay @ Jun 22 2010, 19:18) *
Просто эта тематика не совсем из моей области-поэтому в данной теории я не силен-извиняйте. Я понимаю что можно поделить чтобы получить 220 smile.gif

Что тут посоветовать... Попробуйте вычислить интеграл от квадрата синуса на бумажке по периоду. Если трудно, попробуйте для квадрата косинуса. Если тоже трудно - от их суммы...
Go to the top of the page
 
+Quote Post
rezident
сообщение Jun 22 2010, 17:13
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(axalay @ Jun 22 2010, 21:18) *
В моем случае АЦп пик померил 820.
...
И получаю что то около 590. Как эту цифру привести к нашим человеческим 220 ?
Т.е. эти числа не напряжение, а отсчеты АЦП, так? Следите за ходом рассуждений. UИЗМ. - напряжение на входе АЦП
UИЗМ.=КОДАЦП/МАКС.КОДАЦП*UОП.. Формула упрощена в предположении, что входной сигнал и опорное напряжение приложены к общему проводу, нуль вх. сигнала соответствует коду АЦП=0, а разрядность АЦП - 10 бит.
С другой стороны схемы
UИЗМ.=U220В/(R1+R2)*R2, где U220В это входное напряжение 220В, R1 верхнее плечо делителя, а R2 нижнее плечо делителя.
Из этих двух уравнений следует, что
U220В/(R1+R2)*R2=КОДАЦП/МАКС.КОДАЦП*UОП.
или
U220В=КОДАЦП/МАКС.КОДАЦП*UОП./R2*(R1+R2)
Подставив ваши параметры схемы, получаем
U220В=КОДАЦП/1024*1,1В/3,3кОм*(1180кОм+3,3кОм)=КОДАЦП*0,38519
Подставив ваши результаты расчетов, получаем вполне правдоподобные числа
589 -> 226,88В
588 -> 226,49В
589 -> 226,88В
584 -> 224,95В
и т.д.
Go to the top of the page
 
+Quote Post
axalay
сообщение Jun 22 2010, 18:15
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 388
Регистрация: 27-02-06
Из: Москва
Пользователь №: 14 759



Цитата(rezident @ Jun 22 2010, 21:13) *
Т.е. эти числа не напряжение, а отсчеты АЦП, так? Следите за ходом рассуждений. UИЗМ. - напряжение на входе АЦП
UИЗМ.=КОДАЦП/МАКС.КОДАЦП*UОП.. Формула упрощена в предположении, что входной сигнал и опорное напряжение приложены к общему проводу, нуль вх. сигнала соответствует коду АЦП=0, а разрядность АЦП - 10 бит.
С другой стороны схемы
UИЗМ.=U220В/(R1+R2)*R2, где U220В это входное напряжение 220В, R1 верхнее плечо делителя, а R2 нижнее плечо делителя.
Из этих двух уравнений следует, что
U220В/(R1+R2)*R2=КОДАЦП/МАКС.КОДАЦП*UОП.
или
U220В=КОДАЦП/МАКС.КОДАЦП*UОП./R2*(R1+R2)
Подставив ваши параметры схемы, получаем
U220В=КОДАЦП/1024*1,1В/3,3кОм*(1180кОм+3,3кОм)=КОДАЦП*0,38519
Подставив ваши результаты расчетов, получаем вполне правдоподобные числа
589 -> 226,88В
588 -> 226,49В
589 -> 226,88В
584 -> 224,95В
и т.д.


О-спасибо. ВСе подтвердилось. Тока почему то напряг получается все время чуток более 220...Надо будет принести домой мультиметр и сравнить результаты
Go to the top of the page
 
+Quote Post
rezident
сообщение Jun 22 2010, 19:03
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(axalay @ Jun 23 2010, 00:15) *
Тока почему то напряг получается все время чуток более 220...
В сети допускается отклонение ±10%, т.е. 198В...242В. У вас же чуть более 3% отклонение. Вполне приличная сеть в доме! wink.gif
Go to the top of the page
 
+Quote Post
defunct
сообщение Jun 23 2010, 23:19
Сообщение #15


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата
измерение среднеквадратичного напряжения сети
...
В mega88


Если по простому:
1. Отсеките все отрицательные полупериоды - (схема будет проще - можно убрать смещение / выбросить мостик, оставить только делитель и отсекающий диод да и тот можно выбросить т.к. в МК уже есть).
2. Обеспечьте семплирование АЦП с постоянной частотой Fd напр. 4kHz.
3. Словите начало очередного положительного полупериода (текущее показание с АЦП >0, а предыдущее =0), и начните суммировать все, что приходит с АЦП, заодно запоминая сколько чисел просуммировали.
4. в квадрат ничего не нужно возводить и так все числа положительные, т.к. отрицательные отсекли в п.1. (соответственно потом и корень не надо будет брать).
5. По окончанию полупериода (предыдущее показание АЦП > 0, текущее =0) остановите суммирование, поделите сумму на количество просуммированных семплов.
6. Числа получаемые в результате деления в п.5 пропустите через КИХ/БИХ фильтр по вкусу. (напр скользящее среднее по 8-ми точкам с отбросом мин и макс значений).
7. Поделите отфильтрованное число из п.6 на "K" найденное в процессе калибровки ну и собсно все - результат готов...

калибровка:

8. Измерьте среднеквадратичное напряжение в сети эталонным прибором.
9. Поделите полученное отфильтрованное число из п.6, на показание эталонного прибора из п.8, в результате получите число "K" для п.7


Вы удивитесь насколько точно оно будет работать, и ведь без никаких квадратов и корней! smile.gif
Правда способ будет работать только для правильного синуса.
Go to the top of the page
 
+Quote Post
Alex11
сообщение Jun 24 2010, 05:03
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 2 106
Регистрация: 23-10-04
Из: С-Петербург
Пользователь №: 965



defunct, не вводите человека в заблуждение. То что Вы предлагаете, можно делать лишь при условии, что на входе строгий синус, что для сети не очень верно, и при необходимой точности хуже нескольких процентов.
Go to the top of the page
 
+Quote Post
defunct
сообщение Jun 24 2010, 11:07
Сообщение #17


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Alex11 @ Jun 24 2010, 08:03) *
defunct, не вводите человека в заблуждение. То что Вы предлагаете, можно делать лишь при условии, что на входе строгий синус, что для сети не очень верно

Никого я в заблуждение не ввожу, написал же что способ годится только для правильного синуса.

Способ проверял на практике с обычными сетями там где синус "чуть-чуть не совсем правильный" - результаты полученные способом приведенным выше поражают полным совпадением с показаниями любого китайского тестера включая знаки после запятой. Что наводит на мысль - китайцы не парятся с квадратами. Собсно поэтому и написал:
"Вы удивитесь насколько точно оно будет работать, и ведь без никаких квадратов и корней! smile.gif "

Цитата
и при необходимой точности хуже нескольких процентов.

нелинейность АЦП меги, думаю внесет бОльшую погрешность.
Go to the top of the page
 
+Quote Post
777777
сообщение Jun 25 2010, 08:26
Сообщение #18


Профессионал
*****

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(defunct @ Jun 24 2010, 03:19) *
4. в квадрат ничего не нужно возводить и так все числа положительные, т.к. отрицательные отсекли в п.1. (соответственно потом и корень не надо будет брать).

В квадрат нужно возводить обязательно, так как иначе будет другой коэффициент - для синуса 0.637 вместо 0.707, а поскольку идеального синуса в сети никогда нет, то и результат будет неправильный.

Цитата(defunct @ Jun 24 2010, 03:19) *
6. Числа получаемые в результате деления в п.5 пропустите через КИХ/БИХ фильтр по вкусу. (напр скользящее среднее по 8-ми точкам с отбросом мин и макс значений).

Повбывав бы!
У вас и так суммируются куча значений за период, куда еще фильтровать? Может лучше земли около АЦП правильно развести?

Цитата(defunct @ Jun 24 2010, 03:19) *
Вы удивитесь насколько точно оно будет работать,

Точно оно работать не будет, твоя дубовая фильтрация лишь скрывает дрожание, но если цифры стоят стабильно, то это еще не значит, что они правильные!

Цитата(defunct @ Jun 24 2010, 03:19) *
Правда способ будет работать только для правильного синуса.

То-то и оно!


Цитата(defunct @ Jun 24 2010, 15:07) *
результаты полученные способом приведенным выше поражают полным совпадением с показаниями любого китайского тестера включая знаки после запятой. Что наводит на мысль - китайцы не парятся с квадратами.


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

Цитата(axalay @ Jun 21 2010, 23:05) *
Чтобы просматривать обе полуволны пропустил через диодный мост.

А падение напряжения на диодах тебя не волнует? У тебя мост до делителя или после?
Цитата(axalay @ Jun 21 2010, 23:05) *
Знаю, что можно завести сразу обе на разные входы АЦП чтобы не было погрешностей вносимых мостом

А не лучше приподнять измеряемое напряжение на половину опроного и вести вычисления в знаковых переменных?
Go to the top of the page
 
+Quote Post
ARV
сообщение Jun 25 2010, 08:50
Сообщение #19


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



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

проблема может всплыть в случае, если частота в сети отлична от 50 Гц...


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
Tanya
сообщение Jun 25 2010, 12:42
Сообщение #20


Гуру
******

Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883



Цитата(ARV @ Jun 25 2010, 12:50) *
проблема может всплыть в случае, если частота в сети отлична от 50 Гц...

И даже в этом случае... Если обратить внимание на то, что для точек с напряжением порядка 10% квадрат будет порядка 1%.
Go to the top of the page
 
+Quote Post
defunct
сообщение Jun 25 2010, 12:59
Сообщение #21


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(777777 @ Jun 25 2010, 11:26) *
так как иначе будет другой коэффициент - для синуса 0.637 вместо 0.707, а поскольку идеального синуса в сети никогда нет, то и результат будет неправильный.

И что?
0.707 = k*0.637
это k - определяется при калиброке.

Цитата
У вас и так суммируются куча значений за период, куда еще фильтровать? Может лучше земли около АЦП правильно развести?

Причем тут земли? Скользящее среднее это правило хорошего тона, т.к. сигнал может как пропасть на любом отсчете так и появиться. Если не хотим сюрпризов надо граничные величины отбрасывать, а остальные усреднять. Нельзя доспустить чтобы в результате присутствовали интегральные величины расчитание на интервале меньше Pi.

Цитата
Точно оно работать не будет, твоя дубовая фильтрация лишь скрывает дрожание, но если цифры стоят стабильно, то это еще не значит, что они правильные!

У меня оно работает точно. Измеряет напряжение 3х фаз, их токи, считает cos(fi), затем считает активную и реактивную мощность на m8. С квадратами я бы в 8Kb не влез. Точность по напряжению +/- полпроцента меня абсолютно устраивает.
Для чего фильтрация см. выше. Уж совсем не для того чтобы квадрат в корень превращать и замазывать ошибки кривой земли...

Цитата
То-то и оно!

Так не скрываю ж е-мае. Не в Гондурасе живем, в сети обычно правильный синус.


Цитата
Из чего нормальный человек сделает вывод: нельзя покупать китайские тестеры. Ты же вместо этого берешь с них пример.

Прагматичный человек рассматривает все варианты. В т.ч. и цену китайских тестеров.
Если приемлемый результат можно получить более простым /дешевым способом значит надо взять его на заметку и пользовать его там где он годится.
Go to the top of the page
 
+Quote Post
777777
сообщение Jun 25 2010, 15:31
Сообщение #22


Профессионал
*****

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(defunct @ Jun 25 2010, 16:59) *
Причем тут земли? Скользящее среднее это правило хорошего тона

Это дурнейший тон, который только можно придумать. Такой подход называется "кружок 'умелые руки' при районном доме пионеров".

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

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

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

Цитата(defunct @ Jun 25 2010, 16:59) *
, т.к. сигнал может как пропасть на любом отсчете так и появиться.

Куда он может пропастть? Если он пропал, значит напряжение исчезло и этот факт надо измерить, а не отбрасывать.

Цитата(defunct @ Jun 25 2010, 16:59) *
У меня оно работает точно. Измеряет напряжение 3х фаз, их токи, считает cos(fi), затем считает активную и реактивную мощность на m8. С квадратами я бы в 8Kb не влез.

Уж не с плавающей ли точкой ты выполняешь вычисления? smile.gif Вообще-то для целочисленного квадратного корня существуют простые алгоритсы, например Ньютона.
Go to the top of the page
 
+Quote Post
defunct
сообщение Jun 25 2010, 16:22
Сообщение #23


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(777777 @ Jun 25 2010, 18:31) *
Даже там, где действительно нужна фильтрация (а она нужна только в особых обоснованных случаях), применяется цифровой фильтр, специально рассчитанный для конкретной задачи. Для этого оценивается полосы частот сигнала и шума и их амплитуды, вычисляется требуемое подавление шума и по разности частот и амплитуд вычисляется крутизна фильтра которая определяет его порядок. Только тогда, на основании полученных данных синтезируется фильтр и рассчитываются его коэффициенты.

Чукча писатель?

Объясняю на пальцах, алгоритм построен на интегрировании сигнала на интервале от 0 до Pi. Включаем прибор, сигнал на вход не подан, АЦП возвращает 0 мы ничего не суммируем на выходе напряжение 0В. В произвольный момент времени T подают внешний сигнал со случайной фазой, по приведенному выше алгоритму прибор отдетектирует начало периода, но это будет неверно, т.к. фаза сигнала случайна. Скажем, если фаза равна Pi/4, то результат будет завышен почти в два раза - поэтому такое измерение просто необходимо отбросить. Процесс в результате которого избирательно отбрасываются некоторые результаты измерений называется фильтрацией.

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

Да что вы со своей землей, все в порядке с землей. Фильтруем числа с выхода интегратора, а не семплы с АЦП.

Цитата
Хороший же тон - это когда ты делаешь отсчеты каждую миллисекунду, и они отличаются не более чем на плюс-минус одну единицу АЦП.

Независимо от сигнала на входе? Да... интересное определение хорошего тона...

Цитата
Куда он может пропастть? Если он пропал, значит напряжение исчезло и этот факт надо измерить, а не отбрасывать.

Куда-куда, - свет отключили банально рубильником. Не бывало с Вами такого? Или вы предполагаете, что и прибор вырубится вместе со светом?

Цитата
Уж не с плавающей ли точкой

Результат считается и выдается наружу в плавучке. Это ТЗ.
по ходу только суммирование целочисленное, деление уже в плавучке.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jun 25 2010, 16:34
Сообщение #24


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(defunct @ Jun 25 2010, 17:59) *
С квадратами я бы в 8Kb не влез.

smile.gif
1 команда - умножение (возведение в квадрат).
~50 команд (100 байт) - цикл Ньютона для вычисления корня.

Как раз эти операции идут во время сумирования и сразу после, когда вся инфа целочисленная.

Сообщение отредактировал GetSmart - Jun 25 2010, 16:38


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
defunct
сообщение Jun 25 2010, 21:12
Сообщение #25


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(GetSmart @ Jun 25 2010, 19:34) *
smile.gif
1 команда - умножение (возведение в квадрат).

А все остальное когда считать? (ток, фазу..)
Даже так очень впритык всё получилось. Еще и АЦП оверсемлить пришлось... 6 каналов 4Khz каждый.

ну не совсем одна, АЦП - 10 бит. плюс число допустим 800 в квадрате это уже больше чем U16. Значит надо суммировать U32. А так у меня сумма из 40 семплов помещается в U16.
а каналов то 6.
Go to the top of the page
 
+Quote Post
defunct
сообщение Jun 26 2010, 02:52
Сообщение #26


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



В общем это, чтобы прекратить бессмысленные споры вот C-модель способа (реализовано не все, - вчастности фильтрации нет, т.к. стартуем с Fi=0):
CODE

#include "math.h"



#define TRUE 1
#define FALSE 0
#define COUNT(some_array) ( sizeof(some_array)/sizeof(some_array[0]) )
#define M_PI 3.14159265358979323846



/*******************************************************
* Method related *
*******************************************************/
typedef struct tagV_CHANNEL
{
float Sum;
float K;
float Vdet;
float LastSample;
int nSamples;
int Active;

} V_CHANNEL, *PV_CHANNEL;


V_CHANNEL chanA;


void vChanPrepare(PV_CHANNEL pChan)
{
pChan->LastSample = -1;
pChan->nSamples = 0;
pChan->Active = FALSE;
pChan->Vdet = 0;
pChan->Sum = 0;
}

void vChanUpdate( PV_CHANNEL pChan, float CurrentSample )
{
// try to detect start of the positive sample to activate integrator
if (CurrentSample > 0 && pChan->LastSample <= 0)
pChan->Active = TRUE;

if (pChan->Active)
{
pChan->nSamples += 1;
pChan->Sum += CurrentSample;

// detect start of the negative sample
if (CurrentSample <= 0 && pChan->LastSample > 0)
{
pChan->Active = FALSE;
pChan->Vdet = pChan->Sum / pChan->nSamples / pChan->K;
pChan->Sum = 0;
pChan->nSamples = 0;
}

}

pChan->LastSample = CurrentSample;

}

/*******************************************************
* Signal simulation *
*******************************************************/
float Vref[ 240 ];

void BuildReferenceSignal( float Vrms )
{
for( int i = 0; i < COUNT( Vref ); i++)
{
Vref [ i ] = (Vrms / 0.707) * sin( 2 * M_PI * i / (COUNT( Vref) / 3) );
}
}


/*******************************************************
* ADC sampling simulation *
*******************************************************/
void RunAlg(void)
{
vChanPrepare( &chanA );

// feed reference data in.
for( int i = 0; i < COUNT( Vref); i++)
vChanUpdate( &chanA, Vref[ i ] );
}



/*******************************************************
* Does calibrating *
* and then estimating error of the *
* RMS calculation method w/o squares *
*******************************************************/
int main(void)
{
float err;

printf("Building reference signal Vrms=220V\r\n");
BuildReferenceSignal( 220.0 );
printf("Calibrating....");
chanA.K = 1;

RunAlg();

chanA.K = chanA.Vdet / 220.0;
printf("OK, K = Ves / Vref, K=%0.3f, Ves=%0.3f, Vref=%0.3f\r\n", chanA.K, chanA.Vdet, 220.0);


// now when K is calibrated, lets estimate method error on signals with diff rms (from 40V to 380V)
for( float i = 40; i < 380; i += 2.5)
{
BuildReferenceSignal( (float)i );

RunAlg();
err = abs( chanA.Vdet - i) * 100 / i; // error in percent
printf("Vref=%0.6fV, Vdet=%0.6fV, error - %0.6f%%\r\n", (float)i, chanA.Vdet, err );
}

printf("\r\nenjoy the simplicity, no squares no square root calculation, 0% RMS error ...\r\n");

return 0;
}


А в атаче результат работы модели, если кому интересно. На чистом синусе - погрешность метода - 0%, при калибровке одной точкой. Ну а на "грязном" - можно проверить в модели, хватает ли точности метода под конкретную задачу.
Прикрепленные файлы
Прикрепленный файл  result.txt ( 7.85 килобайт ) Кол-во скачиваний: 87
 
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jun 26 2010, 02:55
Сообщение #27


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(defunct @ Jun 26 2010, 02:12) *
А все остальное когда считать? (ток, фазу..)
Даже так очень впритык всё получилось. Еще и АЦП оверсемлить пришлось... 6 каналов 4Khz каждый.

smile.gif
Ток, фазу,... Считать по очереди.
Ещё можно поверить, что скорострельности не хватило, но не кода.

Возведение в квадрат, суммирование и извлечение корня можно делать в 24 битах. После корня данные опять 16 битные. Всё равно на асме ведь прога.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
axalay
сообщение Jun 26 2010, 05:15
Сообщение #28


Местный
***

Группа: Свой
Сообщений: 388
Регистрация: 27-02-06
Из: Москва
Пользователь №: 14 759



Цитата(ARV @ Jun 25 2010, 12:50) *
можно не привязываться к началу периода сети: важно лишь гарантировать, что в периоде будет заранее определенное число семплов. например, делаем семплы с частотой 10К, тогда в периоде сети уместится 200 семплов - вот эти 200 семплов и снимаем с любого момента времени. так как напряжение в сети есть периодическая функция, то результат интегрирования будет всегда один и тот же: период ведь есть расстояние между точками с одинаковой фазой...

проблема может всплыть в случае, если частота в сети отлична от 50 Гц...


Количество семплов будет периодически на +1 или -1 уходить и потом возвращаться по любому

Нешуточный спор однако.... Мне быстродействия хватает на период 64 очсчета (замеряю обе полуволны) с возведением в квадрат и суммированием отчетов и последующими делением на количество отсчетов и изьятием квадратного корня. Мега88 на частоте 7 с хвостиком. Пишу на Си.
Go to the top of the page
 
+Quote Post
777777
сообщение Jun 28 2010, 05:23
Сообщение #29


Профессионал
*****

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(defunct @ Jun 25 2010, 20:22) *
Цитата
Хороший же тон - это когда ты делаешь отсчеты каждую миллисекунду, и они отличаются не более чем на плюс-минус одну единицу АЦП.

Независимо от сигнала на входе? Да... интересное определение хорошего тона...

Прикидываешься, да? Делаешь вид, что не понимаешь? Ладно, объясняю: вот пример работы 16-разрядного АЦП AD7980
Прикрепленное изображение

Это не самый удачный пример, потому что плату не удалось развести по всем правилам из-за ее особенностей: она узкая (28 мм) и длинная, вследствие чего красный сигнал шумит больше чем на +-2 единицы, но сиреневый с желтым практически идеальны. Причем это - 16 разрядный АЦП с опорным 5 В, то есть единица младшего разряда здесь 5/65536=76.3 микровольт! Если же разработчик не может сделать нешумящим 10-разрядный АЦП, с единицей в 1 милливольт и вынужденный поэтому фильтровать примитивными пионерскими методами, то ему надо за это сразу отрывать руки.
Go to the top of the page
 
+Quote Post
defunct
сообщение Jun 28 2010, 06:25
Сообщение #30


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(777777 @ Jun 28 2010, 08:23) *
Если же разработчик не может сделать нешумящим 10-разрядный АЦП, с единицей в 1 милливольт и вынужденный поэтому фильтровать примитивными пионерскими методами, то ему надо за это сразу отрывать руки.

Согласен, только это совсем не наш случай.
Во первых референс на 10-ти битном АЦП у меня 5V, а это единица - 5mv, даже если очень захотеть больше +/-1 не получить, во вторых уже рассказал где стоит фильтр и зачем.
Go to the top of the page
 
+Quote Post
Tanya
сообщение Jun 28 2010, 07:30
Сообщение #31


Гуру
******

Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883



Цитата(defunct @ Jun 28 2010, 10:25) *
Согласен, только это совсем не наш случай.
Во первых референс на 10-ти битном АЦП у меня 5V, а это единица - 5mv, даже если очень захотеть больше +/-1 не получить, во вторых уже рассказал где стоит фильтр и зачем.

Мне вот совсем непонятно, зачем нужен фильтр... Если мне, к примеру, нужно посчитать сколько энергии выдано в нагреватель за один полупериод (или период) сети... Нам такой фильтр не нужен...
Go to the top of the page
 
+Quote Post
defunct
сообщение Jun 28 2010, 07:44
Сообщение #32


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Tanya @ Jun 28 2010, 10:30) *
Мне вот совсем непонятно, зачем нужен фильтр... Если мне, к примеру, нужно посчитать сколько энергии выдано в нагреватель за один полупериод (или период) сети... Нам такой фильтр не нужен...

А если устройство не расчитано на завышенное напряжение, и просто при этом сгорает? (например предохранителю много не надо сгорает очень быстро).

Допустим, наше устройство должно вести некую статистику, один из параметров которой будет кратковременные пики напряжения в сети. Теперь представим, что в определенный момент напряжение пропадает. Если оно пропало в фазе 3/4Pi тогда когда интегратор еще активен, то мы посчитаем, что перед пропаданием питания в сети был громадный всплеск напряжения, вдвое превышающий номинальное, внесем эту цифру в статистику. Читающий статистику побежит менять предохранители и звонить в электросеть выяснять, что это было. А окажется что всего навсего неотфильтровали неверное число с интегратора.
Go to the top of the page
 
+Quote Post
Tanya
сообщение Jun 28 2010, 07:54
Сообщение #33


Гуру
******

Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883



Цитата(defunct @ Jun 28 2010, 11:44) *
Допустим, наше устройство должно вести некую статистику, один из параметров которой будет кратковременные пики напряжения в сети. Теперь представим, что в определенный момент напряжение пропадает. Если оно пропало в фазе 3/4Pi тогда когда интегратор еще активен, то мы посчитаем, что перед пропаданием питания в сети был громадный всплеск напряжения, вдвое превышающий номинальное, внесем эту цифру в статистику. Читающий статистику побежит менять предохранители и звонить в электросеть выяснять, что это было. А окажется что всего навсего неотфильтровали неверное число с интегратора.

Если нам нужен такой прибор, то нужно именно такой и делать.
Если напряжение пропало, как Вы придумали, то правильный интегратор покажет не всплеск, а падение. Без всяких фильтров.
Напомню, что автору нужно то, что он просил. Среднеквадратичное нужно только для определения мощности, выделяющейся на активной нагрузке.
Go to the top of the page
 
+Quote Post
defunct
сообщение Jun 29 2010, 13:00
Сообщение #34


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Tanya @ Jun 28 2010, 10:54) *
Если нам нужен такой прибор, то нужно именно такой и делать.
Если напряжение пропало, как Вы придумали, то правильный интегратор покажет не всплеск, а падение. Без всяких фильтров.

Правильный... неправильный... уж извините... Давайте все-таки вспомним что мы делаем:
1. Упрощаем схему, - удалением из нее элементов для захвата отрицательной полуволны сигнала.
2. Упрощаем алгоритм расчета:
a. в два раза сокращаем число операций сложения;
b. сокращаем все операции умножения;
c. избавляемся от операции взятия квадратного корня.

Вроде неплохо?.. Теперь вспомним за счет чего это достигается... :
За счет того что накладываются:
1. ограничения на форму сигнала;
2. ограничения на интервал интегрирования.

Вывод: интегратор - правильный, на что указывают результаты моделирования (см. выше),
но он правильный, при условии что интегрировать будем сигнал синусоидальной формы на интервале от 0 до Pi.
Поскольку схема детекта в приведенном алгоритме не может гарантировать точную фазу начала и конца полупериода - фильтр необходим для того чтобы отбросить результаты интегрирования взятые на другом (отличном от 0..Pi) интервале.

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

Цитата
Напомню, что автору нужно то, что он просил.

Автор уже определился с решением, метод ему не подходит, стало быть нет нужды сужать область применения под ТЗ автора.
Go to the top of the page
 
+Quote Post
Tanya
сообщение Jun 29 2010, 16:34
Сообщение #35


Гуру
******

Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883



Цитата(defunct @ Jun 29 2010, 17:00) *
1. Упрощаем схему, - удалением из нее элементов для захвата отрицательной полуволны сигнала.
2. Упрощаем алгоритм расчета:
a. в два раза сокращаем число операций сложения;
b. сокращаем все операции умножения;
c. избавляемся от операции взятия квадратного корня.

Вроде неплохо?.. Теперь вспомним за счет чего это достигается... :
За счет того что накладываются:
1. ограничения на форму сигнала;
2. ограничения на интервал интегрирования.

Так что мы улучшаем? Облегчаем жизнь контроллеру? А он просил? И корень можно вычислять умеючи...
А если дальше пойти - пиковый детектор и никаких вычислений. Даже без фильтра - мы ведь закладываемся на чистую синусоиду.
Go to the top of the page
 
+Quote Post
defunct
сообщение Jun 30 2010, 12:22
Сообщение #36


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Tanya @ Jun 29 2010, 19:34) *
Так что мы улучшаем? Облегчаем жизнь контроллеру? А он просил? И корень можно вычислять умеючи...

И что на это ответить?...
Не нравится клубника по три - берите черешню по пять.

Цитата
пиковый детектор и никаких вычислений. Даже без фильтра - мы ведь закладываемся на чистую синусоиду.

или жабу по рублю но вчера. (качество с пиковым детектором много хуже получается, знаю потому что делал и его).
Go to the top of the page
 
+Quote Post
akken
сообщение Jun 30 2010, 13:02
Сообщение #37


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 17-04-09
Из: UA
Пользователь №: 47 867



Цитата(defunct @ Jun 30 2010, 15:22) *
И что на это ответить?...
Не нравится клубника по три - берите черешню по пять.


или жабу по рублю но вчера. (качество с пиковым детектором много хуже получается, знаю потому что делал и его).


Делал по вашему принципу измеритель активной и реактивных мощностей ( необходимая часть в компенсаторе реактивной энергии). Совпадение со счетчиками получилось достаточно хорошее.
А правильную синусоиду в сети видел в 78 году, она была прекрасна - как и все остальное в молодости
Go to the top of the page
 
+Quote Post
Tanya
сообщение Jun 30 2010, 14:08
Сообщение #38


Гуру
******

Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883



Цитата(defunct @ Jun 30 2010, 16:22) *
И что на это ответить?...

или жабу по рублю но вчера. (качество с пиковым детектором много хуже получается, знаю потому что делал и его).

Если нечего сказать....
А для чистой синусоиды пиковый детектор - самое простое.
Что значит "хуже" получилось? Немножко убираем высокие частоты. Сбрасываем детектор, ждем почти период, измеряем... Хотя... почти нет разницы с интегратором.
Да ладно уж... Я тоже так (почти) делала. Только отрезала нижнюю часть синусоиды...
Если правильно отрезать, то сразу квадрат получается... в аналоговом интеграторе.
Go to the top of the page
 
+Quote Post

3 страниц V   1 2 3 >
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 19:45
Рейтинг@Mail.ru


Страница сгенерированна за 0.01734 секунд с 7
ELECTRONIX ©2004-2016