Мгновенное значение напряжения
- Войдите на сайт для отправки комментариев
Пнд, 10/12/2018 - 16:41
Доброго дня, товарищи!
Имеется задачка измерять мгновенное напряжение сети 0.4 кВ и др. параметры сети. Собрана схема как показано на картинке и чего то ни как не могу понять как бы мне измерить мгновенное напряжение. Конкретно не пойму как быть с задержкой между измерениями. Примерно надо получить 20 точек за 1 период и все эти значения записать на флешку. Прошу Вашей помощи.
А период-то какой?
И змерять чем собираетесь? Если ардуиной, то какой именно?
Частота в сети 50 Гц, период соответственно 0.02 секунды. Ардуина Мега имеется
Частота в сети 50 Гц, период соответственно 0.02 секунды. Ардуина Мега имеется
и в чем проблема измерять раз в миллисекунду? - пробовали? - показывайте код
Код выше. Использую опорное напряжение 5В.
Дает примерно следующие значения:
Ну, если мега 2561, то самый аккуратный способ измерять с определённой частотой - это сконфигурировать АЦП, так, чтобы он автоматически измерял напряжение по таймеру 0 или 1 (можно по сравнению, а можно по переполнению) (см. разд. 26.3 и 26.8 даташита) и выдавал прерывание. Тогда останется только сконфигурировать таймер на нужную частоту (1kHz в Вашем случае) и снимать готовые показания в программе-обработчике прерывания, а дольше делайте с ними что хотите, хоть на бумажку записывайте.
Если требования к точности интервалов некритичны, то можно безо всяких хитрых кофигураций читать analogRead раз в миллисекунду (например, через delayMicroseconds(1000) или через micros()).
Вы уверены, что знаете, что делаете в этой строке?
analogReference(EXTERNAL);
Т.е. у Вас реально на соответсвующий пин подведено 5В?
Уверен. Замерено точным хорошим мультиметром и выставлено жестко 5В.
На пине ARef, так? Ну, тогда всё замечательно.
В Вашем скетче есть систематическая ошибка. Период измерения всегда больше 1ms на время работы строк 10-12. Хотите точнее, делайте с micros(). Ну, а наиболее точно - с ADC от таймера, как я описывал выше.
еще бы не мешало засинхронизироваться с сетью, программно или аппаратно
строка 10:
- аналого-цифровое преобразование - 112 мкс,
- преобразование из целого в плавающую точку - около 15 мкс,
строка 11:
- умножение с плавающей точкой - еще 15 мкс.
строка 12: вывод в последовательный порт:
- от 4 до 7 мс (4000-7000 мкс!),
строка 13 - задеоржка в 1000 мкс.
Итого: в среднем около 6.5-7 мс. Т.е. 3 раза за период. Вы считаете этого достаточно?
Как сделал бы я:
- завел массив на 20 (или больше) значений типа int,
- в цикле analogRead() без преобразования пишется прямо в массив + delayMicroseconds(885).
Т.е. одна итерация цикла будет выполняться как раз около 1000 мкс.
А когда массив будет заполнен - обрабатывать его по желанию: переводить в Вольты, искать максимум или минимум и т.п. и уже обработанное выводить в последовательный порт.
Посмотрите как микроконтроллер подключён к сети: http://www.ti.com/lit/df/tidr430/tidr430.pdf
Раньше на сайте TI лежал документ slaa391 с описанием всего, расчётами, блок-схемами, сейчас я его найти не могу, но есть другие со схемами и теорией как измерять параметры сетевого напряжения. Ищется по ключевым словам Three Phase Electronic Watt Hour meter Design.
Я что то не понял, в чем проблема - у Вас все правильно померяло и даже тайминг неплохой - 10 измерений на период, уберите строку 13 и будет Вам счастье :)