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

Цифровой вольтметр-амперметр-ваттметр на AVR для бытовой сети

К вопросу о тех кольцевых буферах.

 

С какой частотой должны идти выборки в эти буфера?

Сейчас у меня АЦП тактируется 125 кГц. Сколько там получится сэмплов в секунду я посчитать пока не удосужился (в доке как-то мутно про это написано :( ), но, думается 100KSPS наберется. 1 сэмпл за 10 мкс.

Т.е. 200 байт буфера полностью обновятся за 2 мс. Т.е. весь буфер не вмещает даже полпериода 50 герцового сигнала.

 

Это нормально? Или надо понижать частоту выборки?

 

e_one, не знаю. Посмотрел я схему, не понял ее.

 

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

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


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

3-х фазный вольтметр переменного тока - http://www.embed.com.ua/raznoe/tryohfaznyi...remennogo-toka/

Как раз с 7 сегм индикатором. Правда Mega48. А зачем тебе 128 мега?

Ваттметр на Mega8 -

http://radiokot.ru/circuit/digital/measure/23/

http://www.radiokot.ru/forum/viewtopic.php?f=25&t=25937

 

128 мега потому, что они есть на фирме, а остальных нет вроде.

И вообще я думал и ваттметр и вольтметр объединить в одном устройстве. А вольты выводить или ватты - переключается каким-нибудь тумблером.

Возможна ли такая реализация?

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

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


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

128 мега потому, что они есть на фирме, а остальных нет вроде.

И вообще я думал и ваттметр и вольтметр объединить в одном устройстве. А вольты выводить или ватты - переключается каким-нибудь тумблером.

Возможна ли такая реализация?

 

Возможна. В принципе, все равно, какая там мега. Главное, чтобы АЦП был. Но он у любой меги есть.

Идея простая - меряете всегда и все. А выводите на дисплей что-то одно.

 

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

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

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


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

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

 

Что значит бегает?

Как вообще, в принципе осуществляется измерение этого напряжения(тока)? Чуть дайте теории пожалуйста :-)

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


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

Что значит бегает?

Как вообще, в принципе осуществляется измерение этого напряжения(тока)? Чуть дайте теории пожалуйста :-)

 

Схема в первом посте темы. Мега там не нарисована, только моя измерительная часть.

Программная часть у меня такая (наиболее удачный вариант на текущий момент).

АЦП работает на 125кГц.

Обработчик АЦП суммирует все получаемые отсчеты и считает их кол-во. Как насчитает 1000 штук - останов АЦП (по флагу, в главной программе).

Далее считает среднее арифметическое этих отсчетов. По нему вычисляется напряжение на входе АЦП (формула из ДШ на проц). И умножается на коэффициент делителя (в моем случае это коэф транса*коэф деления потенциометра). Это есть напряжение в сети.

 

"Бегает" - меняется в небольших пределах.

Я "на глаз" наблюдал диапазон примерно 210..230в. Мультиметр показывает где-то 230. Наверное, можно втупую брать максимум, но я не уверен.

 

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

Если шунтом - просто закон ома. Если ТТ, то иначе...

 

Для мощности посложнее. Поэтому и хочется не коэффициентами подгонять, а понять, что там происходит.

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

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


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

К вопросу о тех кольцевых буферах. С какой частотой должны идти выборки в эти буфера?

Сейчас у меня АЦП тактируется 125 кГц. Сколько там получится сэмплов в секунду я посчитать пока не удосужился (в доке как-то мутно про это написано :( ), но, думается 100KSPS наберется. 1 сэмпл за 10 мкс.

Т.е. 200 байт буфера полностью обновятся за 2 мс. Т.е. весь буфер не вмещает даже полпериода 50 герцового сигнала.

Это нормально? Или надо понижать частоту выборки?

Семён Семёныч! В кольцевые буферы я предлагал складывать уже вычисленные значения напряжения и тока ;) Я думаю, вполне хватит по 16 значений тока и напряжения. Чтобы не было неоднозначностей, набросаю код.

#define MY_BUFFER_SIZE	16

float get_voltage( const float mesuredVoltage )
{
static float voltage[MY_BUFFER_SIZE] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
static int pos = 0;
int i;
float result = 0;

//
voltage[pos++] = mesuredVoltage;
//
if ( pos >= MY_BUFFER_SIZE )
	pos = 0;
//
for	( i = 0; i < MY_BUFFER_SIZE; i++ )
{
	//
	result += voltage[i];
}
//
return result / MY_BUFFER_SIZE;
}

И такую же фигню для тока :)

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

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


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

Не понял :( ...

Я ж получаю полож. полуволну с верхнего входа моста .... Зачем ее смещать?

Если б была 2-я вторичка, там были бы обе полуволны.

А зачем вообще выпрямлять? Делителем уменьшаете ПЕРЕМЕННОЕ напряжение трансформатора напряжения до 2/3 максимального входного АЦП и смещаете его до середины шкалы.

Разность Umax-Umin=Ua дает Вам амплитудное значение измеренного напряжения. Действующее значение для синусоиды U=0,707Ua.

Этим избавляетесь от всяких нелинейностей от диодов и значительно упрощаете схему (3 резистора!).

Это же касается и цепи тока.

 

Лично считаю, что усложнять схему ради упрощения программы - дурной тон.

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


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

АЦП работает на 125кГц.

Обработчик АЦП суммирует все получаемые отсчеты и считает их кол-во. Как насчитает 1000 штук - останов АЦП (по флагу, в главной программе).

Далее считает среднее арифметическое этих отсчетов. По нему вычисляется напряжение на входе АЦП (формула из ДШ на проц). И умножается на коэффициент делителя (в моем случае это коэф транса*коэф деления потенциометра). Это есть напряжение в сети.

Как-то это по-моему не очень правильно. На мой взгляд, лучше зарядить таймер на частоту 1000 Гц, в обработчике прерывания запускать одиночное преобразование, дожидаться его завершения и результат приплюсовывать к накопителю. 100 отсчётов АЦП в таком случае перекроют 5 периодов частоты 50 Гц, что снимает необходимость ловить переход через 0 (я надеюсь, у Вас мега от кварца тактируется). По сумме этих 100 отсчётов (ну или 200, лишь бы на 20 делилось) можно вычислить напряжение. Скакать не должно :)

 

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


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

RabidRabbit, спасибо. я так не пытался ;) .

Попробую. Если, конечно потянет считать float значения прямо в прерывании. Но можно и целочисленно сделать, в умноженных на 1000, например.

 

лучше зарядить таймер на частоту 1000 Гц, в обработчике прерывания запускать одиночное преобразование, дожидаться его завершения и результат приплюсовывать к накопителю. 100 отсчётов АЦП в таком случае перекроют 5 периодов частоты 50 Гц, что снимает необходимость ловить переход через 0 (я надеюсь, у Вас мега от кварца тактируется). По сумме этих 100 отсчётов (ну или 200, лишь бы на 20 делилось) можно вычислить напряжение. Скакать не должно :)

 

Есть у меня такая мысль. Наверное сделаю.

Сейчас мега тактируется от внутренних 8MHz, просто ног не хватает :( . На PB (там, где кварц) у меня ШД LCD сидит.

Можно поставить и 16-ю мегу ...

 

А зачем вообще выпрямлять? Делителем уменьшаете ПЕРЕМЕННОЕ напряжение трансформатора напряжения до 2/3 максимального входного АЦП и смещаете его до середины шкалы.

Разность Umax-Umin=Ua дает Вам амплитудное значение измеренного напряжения. Действующее значение для синусоиды U=0,707Ua.

 

А можно потенциометр включить ко вторичке параллельно мосту, а напряжение на движке смещать?

post-7980-1300787672_thumb.png

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

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


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

Попробую. Если, конечно потянет считать float значения прямо в прерывании. Но можно и целочисленно сделать, в умноженных на 1000, например.
Вы правильно понимаете - не нужны float'ы в прерывании. В прерывании, например, можно суммировать целочисленные значения от АЦП (как есть, не надо их ни на что умножать, только в случае 8-битных значений для 100 замеров хватит 16-битной переменной, а для 10-битных значений уже надо 24-битную или 32-битную). Просуммировали 100 значений - скопировать в какую-нибудь глобальную переменную, увеличить другую глобальную переменную на 1, чтобы просигналить основной задаче о доступности нового результата, и снова суммировать сотню значений :) Если я недоступно излагаю - спрашивайте в личке, например :)

 

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


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

Если я недоступно излагаю - спрашивайте в личке, например :)

 

Да нет, все понятно. Спасибо. Напишу, проверю вечером. Я на работе, железо дома :biggrin: .

 

У меня отсчеты 10-битные, суммирую в беззнаковый 32 бит.

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

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


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

...skipped...

А можно потенциометр включить ко вторичке параллельно мосту, а напряжение на движке смещать?

Можно, если постоянное напряжение после моста НИКАК не связано с измерительной схемой.

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


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

Можно, если постоянное напряжение после моста НИКАК не связано с измерительной схемой.

 

Мост питает мегу и LCD. Обычный БП на LM7805.

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


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

RabidRabbit, с буферами вроде получилось. Показывает 213-214 при где-то 230 в. Но это без калибровки, коэффициенты "на глаз".

 

Теперь, наверное, займусь смещением и среднеквадратическим.

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


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

Позволю себе заметиь.

Первое для определения среднего не нужен буфер.

вычисляем по формуле

Аy= ((к-1)Ac+M)/k где Ac предидущее среднее, Ау новое среднее, М последнее измерение, к глубина усреднения(эквивалентна длине буфера)

при к равном степени двойки вычисления сводатся к двум сложениям идвум сдвигам.

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

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


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

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

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

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

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

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

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

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

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

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