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

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> Алгоритм измерния RMS напряжения
Stanislav_S
сообщение May 6 2008, 13:59
Сообщение #16


извечный пессимист
*****

Группа: Свой
Сообщений: 1 113
Регистрация: 9-10-06
Из: Днепропетровск
Пользователь №: 21 125



Цитата(Batman @ May 6 2008, 18:39) *
3 раза в секунду мало. У меня скорость срабатывания МТЗ должна быть в пределах 100 мс и это с контактором вместе. Я делаю порядка 150 измерений за период. А от компаратора отказались уже очень давно. Там с точностью задания уставки были проблемы.
Кстати при использовании функции sqrt() (WinAvr) код из 3 КБ раскабанел до 8 КБ. Еще пару корней - и побегу в магазин за жестким диском . smile.gif

Ну 3 раза имелось в виду вычисление действующего, а так конечно на период порядка 200 измерений, на 100 мс я тоже делал по такому принципу, но там пришлось синхронизироваться с сетью.


--------------------
Slaves are those of this world
Given freedom to lay chains upon The Master
The wolf is no longer free
Release the chains and come for me
Go to the top of the page
 
+Quote Post
dENIM
сообщение May 6 2008, 14:38
Сообщение #17


Местный
***

Группа: Свой
Сообщений: 226
Регистрация: 13-03-07
Из: Севастополь
Пользователь №: 26 137



Цитата(Владимир_КПИ @ May 6 2008, 15:48) *
В секунду 5-6 замеров мгновенного значения и вычислялось значение RMS? Может за полупериод?


07.gif 5-6 вычислений RMS
при использовании встроенного АЦП
Go to the top of the page
 
+Quote Post
SSerge
сообщение May 6 2008, 15:01
Сообщение #18


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

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



Кстати, а зачем корень вычислять? Проще уставку возвести в квадрат и с этим значением и сравнивать насчитанное.


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение May 6 2008, 15:41
Сообщение #19


;
******

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



Цитата(Batman @ May 6 2008, 16:39) *
Кстати при использовании функции sqrt() (WinAvr) код из 3 КБ раскабанел до 8 КБ.


Дык и не пользуйтесь плавающей арифметикой. Возьмите fast integer square root
или вот такой, страшно математисский smile.gif
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение May 6 2008, 16:23
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



Цитата(_Pasha @ May 6 2008, 18:41) *
Дык и не пользуйтесь плавающей арифметикой. Возьмите fast integer square root
или вот такой, страшно математисский smile.gif


Касательно "fast integer square root" - может кто-то доступно объяснить подоплёку отого чЮда ?
Всмысле вроде метод нъютона - это где производные, а откуда там взялись эти махинации с битами ?? .....
smile3046.gif
Go to the top of the page
 
+Quote Post
Aleksandr Barano...
сообщение May 6 2008, 16:40
Сообщение #21


Частый гость
**

Группа: Участник
Сообщений: 169
Регистрация: 31-08-05
Из: New York
Пользователь №: 8 118



На первый взгляд - это просто метод последовательных приближений. Как будто в АЦП, только с квадратом внутри.


--------------------
ASB
Go to the top of the page
 
+Quote Post
ReAl
сообщение May 6 2008, 16:47
Сообщение #22


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(Kuzmi4 @ May 6 2008, 19:23) *
Касательно "fast integer square root" - может кто-то доступно объяснить подоплёку отого чЮда ?
Всмысле вроде метод нъютона - это где производные, а откуда там взялись эти махинации с битами ?? .....
smile3046.gif
Если махинации с битами - то это уже не Ньютона :-)
Вот, нашёл в гуглогрупсах старое
(там цитирования надо поразворачивать)
О, тут не вся тема, зато чистым текстом http://files.kpv.nnov.ru/sqrt16b.txt

А для компенсации постоянки отдельно вычислять среднее арифметическое и вычитать его из каждого отсчёта не нужно (заодно массив отсчётов пропадает, экономия ОЗУ).
Делается это так:
Накапиливается в двух накопителях - сумма квадратов и сумма отсчётов.
В конце цикла измерения вычисляем средний квадрат без компенсации постоянки и среднее значение (постоянку).
Из среднего квадрата вычитаем квадрат среднего.
Всё, получили среднее квадрата отклонения от постоянки.

Т.е. (тут нормально формулы не написать - нет ни тегов sup/sub, ни надчерка)
sqr() - это возведение в квадрат

average( sqr( x - average(x) ) ) = average( sqr(x) ) - sqr( average( x ) )

При необходимости из этого извлечь корень.


О, нашёл в RU.EMBEDDED ещё более старую тему, но там есть С-шный 8-битниковый вариант, писался под 8051.

И где-то в сети есть ассемблерный вариант для AVR, автор Александр Труш (тоже на грани тысячелетий в эхе/ньюсах где-то пробегало, я на паре сайтов видел вывешенное, но не помню где).


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
domowoj
сообщение May 6 2008, 17:37
Сообщение #23


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

Группа: Участник
Сообщений: 1 548
Регистрация: 20-12-07
Из: г.Новосибирск
Пользователь №: 33 486



Batman
Подскажите где взять инфу про "пояс Роговского"???


--------------------
И на камнях растут деревья!
Go to the top of the page
 
+Quote Post
galjoen
сообщение May 6 2008, 18:08
Сообщение #24


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Цитата(ReAl @ May 6 2008, 20:47) *
А для компенсации постоянки отдельно вычислять среднее арифметическое и вычитать его из каждого отсчёта не нужно (заодно массив отсчётов пропадает, экономия ОЗУ).
Делается это так:
Накапиливается в двух накопителях - сумма квадратов и сумма отсчётов.
В конце цикла измерения вычисляем средний квадрат без компенсации постоянки и среднее значение (постоянку).
Из среднего квадрата вычитаем квадрат среднего.
Всё, получили среднее квадрата отклонения от постоянки.

Это совершенно правильно. Но только в том случае, если нас устраивает получение значения только 1 раз за период (20 мс при 50 Гц). Чтобы получать значение вдвое чаще - придётся завести ещё 2 накопителя и вычислять всё это со сдвигом в 10 мс. И т.д., по 2 накопителя на каждое дополнительное получение значения за период. Если нужно вычислять значения с максимально возможной частотой (с частотой осчётов АЦП), то эффективнее использовать FIFO отсчётов, FIFO квадратов отсчётов, накопитель отсчётов и накопитель квадратов отсчётов.
При получении очередного отсчёта АЦП:
1. Прибавлять его к накопителю остчётов, квадрат его прибавлять к накопителю квадратов отсчётов.
2. Значения из хвостов соответствующих FIFO вычитать из соответствующих накопителей.
3. Заносить новые значения в головы соответствующих FIFO (при этом значения из хвостов FIFO затрутся).
Ну а дальше как у вас - из накопителя квадратов отсчётов вычитаем квадрат накопителя отсчётов.
Go to the top of the page
 
+Quote Post
Stanislav_S
сообщение May 6 2008, 19:06
Сообщение #25


извечный пессимист
*****

Группа: Свой
Сообщений: 1 113
Регистрация: 9-10-06
Из: Днепропетровск
Пользователь №: 21 125



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


--------------------
Slaves are those of this world
Given freedom to lay chains upon The Master
The wolf is no longer free
Release the chains and come for me
Go to the top of the page
 
+Quote Post
rezident
сообщение May 6 2008, 19:41
Сообщение #26


Гуру
******

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



Цитата(galjoen @ May 7 2008, 00:08) *
При получении очередного отсчёта АЦП:
1. Прибавлять его к накопителю остчётов, квадрат его прибавлять к накопителю квадратов отсчётов.
2. Значения из хвостов соответствующих FIFO вычитать из соответствующих накопителей.
3. Заносить новые значения в головы соответствующих FIFO (при этом значения из хвостов FIFO затрутся).
Ну а дальше как у вас - из накопителя квадратов отсчётов вычитаем квадрат накопителя отсчётов.
Хочу заметить/предупредить, что такой способ вычисления скользящего среднего пригоден только для случая целочисленных значений. При использовании плавучки быстро накапливаются ошибки округления.

Цитата(domowoj @ May 6 2008, 23:37) *
Batman
Подскажите где взять инфу про "пояс Роговского"???

Где, где... в ГуглЕ biggrin.gif Вот первая же ссылка http://www.phys.nsu.ru/electricity/Labwork4-3.html
Go to the top of the page
 
+Quote Post
etoja
сообщение May 7 2008, 04:01
Сообщение #27


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

Группа: Свой
Сообщений: 1 121
Регистрация: 14-01-05
Из: Москва
Пользователь №: 1 952



Среднее значение синуса равно нулю.
Go to the top of the page
 
+Quote Post
alexander55
сообщение May 7 2008, 04:46
Сообщение #28


Бывалый
*****

Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615



Цитата(Batman @ May 6 2008, 16:49) *
Датчик - петля Роговского.

Вы в курсе, что петля Роговского дифференцирует сигнал ?
Я эти проблемы уже решал, поэтому в курсе.

Цитата(Batman @ May 6 2008, 16:49) *
Точность нужна - 5 %. Но хотелось бы выжать больше по возможности.

Не иначе как блок защиты к автоматческому выключателю делаете.

Цитата(Batman @ May 6 2008, 16:49) *
Пробую сейчас сумму квадратов - ресурсов жрет немеряно, а показания от АЦП - все время 171 при любом сигнале от датчика, 0 при нулевом. smile.gif) Где-то накосячил. Но думаю этот способ получше, чем просто усреднять. Буду разбираться.

Без теории тут никак не обойтись. biggrin.gif

Цитата(Batman @ May 6 2008, 17:39) *
Кстати при использовании функции sqrt() (WinAvr) код из 3 КБ раскабанел до 8 КБ. Еще пару корней - и побегу в магазин за жестким диском . smile.gif

А если подумать, то корень не понадобится вообще. biggrin.gif

Цитата(SSerge @ May 6 2008, 19:01) *
Кстати, а зачем корень вычислять? Проще уставку возвести в квадрат и с этим значением и сравнивать насчитанное.

Точно.

Цитата(galjoen @ May 6 2008, 22:08) *
При получении очередного отсчёта АЦП:
1. Прибавлять его к накопителю остчётов, квадрат его прибавлять к накопителю квадратов отсчётов.
2. Значения из хвостов соответствующих FIFO вычитать из соответствующих накопителей.
3. Заносить новые значения в головы соответствующих FIFO (при этом значения из хвостов FIFO затрутся).
Ну а дальше как у вас - из накопителя квадратов отсчётов вычитаем квадрат накопителя отсчётов.

Все правильно.
Еще одна мысль. Можно RMS считать не за 20 мс, а на за 10 мс, как все нормальные люди делают.
Go to the top of the page
 
+Quote Post
Клим
сообщение May 7 2008, 06:12
Сообщение #29


Местный
***

Группа: Свой
Сообщений: 230
Регистрация: 7-04-08
Из: Украина, Запорожье
Пользователь №: 36 541



Цитата(SSerge @ May 6 2008, 18:01) *
Кстати, а зачем корень вычислять? Проще уставку возвести в квадрат и с этим значением и сравнивать насчитанное.

Я тако понял, что нужно еще выводить текущее значение тока. Так что одним сравнением не обойтись.

Цитата(ReAl @ May 6 2008, 19:47) *
А для компенсации постоянки отдельно вычислять среднее арифметическое и вычитать его из каждого отсчёта не нужно (заодно массив отсчётов пропадает, экономия ОЗУ).
Делается это так:
Накапиливается в двух накопителях - сумма квадратов и сумма отсчётов.
В конце цикла измерения вычисляем средний квадрат без компенсации постоянки и среднее значение (постоянку).
Из среднего квадрата вычитаем квадрат среднего.
Всё, получили среднее квадрата отклонения от постоянки.


Я бы предложил вести накопитель для среднего арифметического с обновлением через несколько полупериодов. И вычитать его из каждого измерения и возводить в квадрат. Насколько я понимаю, то тут постоянная составляющая будет достаточно "постоянна". Массивы тут по поределению не нужны.
Go to the top of the page
 
+Quote Post
GDI
сообщение May 7 2008, 06:53
Сообщение #30


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

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



RMS можно получить выполнив Дискретное Преобразование Фурье для первой гармоники входного сигнала и умножив ее на 0,7. Делая Фурье вы автоматом избавляетесь от постоянной составляющей, а получая амплитуду первой гармоники (50Гц) вы автоматом избавляетесь от влияния несинусоидальности входного сигнала и можете смело умножать на 0,7.

Кстати, есть еще и интегральное решение True RMS-to-DC Converter от Analog Devices, например AD636, AD737. На выходе дает RMS входного сигнала в виде постоянного напряжения.


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd June 2025 - 20:05
Рейтинг@Mail.ru


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