Измерение trueRMS переменного напряжения — задача не совсем простая, не такая, какой она кажется с первого взгляда. Прежде всего потому, что чаще всего приходится измерять не чисто синусоидальное напряжение, а нечто более сложное, усложнённое наличием гармоник шумов.
Поэтому соблазнительно простое решение с детектором среднего значения с пересчётом в ср.кв. значения не работает там, где форма сигнала сильно отличается от синусоидальной или просто неизвестна.
Профессиональные вольтметры ср. кв. значения — это достаточно сложные устройства как по схемотехнике, так и по алгоритмам [1,2]. В большинстве измерителей, которые носят вспомогательный характер и служат для контроля функционирования, такие сложности и точности не требуются.
Также требуется, чтобы измеритель мог быть собран на самом простом 8-битном микроконтроллере.
Общий принцип измерения
Пусть имеется некое переменное напряжение вида, изображённого на рис. 1.
Квазисинусоидальное напряжение имеет некий квазипериод T.
Преимущество измерения среднеквадратичного значения напряжения в том, что в общем случае время измерения не играет большой роли, оно влияет только на частотную полосу измерения. Большее время даёт большее усреднение, меньшее даёт возможность увидеть кратковременные изменения.
Базовое определение ср. кв. значения выглядит вот таким образом:
где u(t) — мгновенное значение напряжения
T — период измерения
Таким образом, время измерения может быть, вообще говоря, любым.
Для реального измерения реальной аппаратурой для вычисления подинтегрального выражения необходимо проквантовать сигнал с некоторой частотой, заведомо превосходящей не менее, чем в 10 раз частоту квазисинусоиды. При измерении сигналов с частотами в пределах 20 кГц это не представляет проблемы даже для 8-битных микроконтроллеров.
Другое дело, что все стандартные контроллеры имеют однополярное питание. Поэтому измерить мгновенное переменное напряжение в момент отрицательной полуволны не представляется возможным.
В работе [3] предложено довольно остроумное решение, как внести постоянную составляющую в сигнал. Вместе с тем в том решении определение момента, когда стоит начать или закончить процесс вычисления ср. кв. значения представляется довольно громоздким.
В данной работе предлагается метод преодоления этого недостатка, а также вычисление интеграла с большей точностью, что позволяет снизить число точек выборки до минимума.
Особенности аналоговой части измерителя
На рис. 2 показано ядро схемы предварительной аналоговой обработки сигнала.
Сигнал поступает через конденсатор C1 на усилитель-формирователь, собранный на операционном усилителе DA1. Сигнал переменного напряжения замешивается на неинвертирующем входе усилителя с половиной опорного напряжения, которое используется в АЦП. Напряжение выбрано 2.048 В, поскольку в компактных устройствах часто используется напряжение питания +3.6 В и менее. В иных случаях удобно использовать 4.048 В, как в [3].
С выхода усилителя-формирователя через интегрирующую цепочку R3-C2 сигнал поступает на вход АЦП, который служит для измерения постоянной составляющей сигнала (U0). C усилителя-формирователя сигнал U’ — это измеряемый сигнал, сдвинутый на половину опорного напряжения. Таким образом, чтобы получить переменную составляющую, достаточно вычислить разность U’-U0.
Сигнал U0 используется также в качестве опорного для компаратора DA2. При переходе U’ через значение U0 компаратор вырабатывает перепад, который используется для формирования процедуры прерывания для сбора измерительных отсчётов.
Важно, что во многие современные микроконтроллеры встроены как операционные усилители, так и компараторы, не упоминая АЦП.
Базовый алгоритм
На рис. 3 дан базовый алгоритм для случая измерения величины переменного напряжения с основной частотой 50 Гц.
Запуск измерения может осуществляться по любому внешнему событию вплоть до кнопки, нажимаемой вручную.
После запуска в первую очередь измеряется постоянная составляющая во входном сигнале АЦП, а затем контроллер переходит в ожидание положительного перепада на выходе компаратора. Как только прерывание по перепаду наступает, контроллер делает выборку из 20 точек с временным шагом, соответствующим 1/20 квазипериода.
В алгоритме написано X мс, поскольку низкобюджетный контроллер имеет собственное время задержки. Чтобы измерение происходило в правильные моменты времени, необхоимо учитывать эту задержку. Поэтому реальная задержка будет меньше 1 мс.
В данном примере задержка соответствует измерениям квазисинусоид в диапазоне 50 Гц, но может быть любой в зависимости от квазипериода измеряемого сигнала в пределах быстродействия конкретного контроллера.
При измерениях ср.кв. значения напряжения произвольного квазипериодического сигнала, если априори неизвестно, что это за сигнал, целесообразно измерить его период, используя встроенный в контроллер таймер и тот же выход компаратора. И уже на основании этого замера устанавливать задержку при осуществлении выборки.
Вычисление среднеквадратичного значения
После того, как АЦП создал выборку, имеем массив значений U'[i], всего 21 значение, включая значение U0. Теперь, если применить формулу Симпсона (точнее, Котеса) для численного интергрирования, как наиболее точную для данного применения, то получим следующее выражение:
где h — шаг измерения, а нулевой компонент формулы отсутствует, поскольку он равег 0 по определению.
В результате вычисления мы получим значение интеграла в чистом виде в формате отсчётов АЦП. Для перевода в реальные значения полученное значение нужно промасштабировать с учётом величины опорного напряжения и поделить на интервал времени интегрирования.
где Uоп — опорное напряжение АЦП.
Если всё пересчитать в мВ, K приблизительно равняется просто 2. Масштабный коэффициент относится к разностям в квадратных скобках. После пересчёта и вычисления S делим на интервал измерения. С учётом множителя h фактически получаем деление на целое число вместо умножения на h с последующим делением на интервал времени измерения.
И в финале извлекаем квадратный корень.
И вот тут самое интересное и сложное наступает. Можно, разумеется, использовать плавающую точку для вычислений, поскольку язык C это допускает даже для 8-битных контроллеров, и производить вычисления непосредственно по приведённым формулам. Однако скорость расчёта упадёт существенно. Также можно выйти за пределы весьма небольшого ОЗУ микроконтроллера.
Чтобы такого не было, нужно, как верно указано в [3], использовать фиксированную точку и оперировать максимум 16-битными словами.
Автору эту проблему удалось решить и измерять напряжение с погрешностью Uоп/1024, т.е. для приведённого примера с точностью 2 мВ при общем диапазоне измерения ±500 мВ при напряжении питания +3.3 В, что достаточно для многих задач мониторинга процессов.
Программная хитрость состоит в том, чтобы все процессы деления, по возможности, делать до процессов умножения или возведения в степень, чтобы промежуточный результат операций не превышал 65535 (или 32768 для действий со знаком).
Конкретное программное решение выходит за рамки данной статьи.
Заключение
В данной статье рассмотрены особенности измерения среднеквадратичных значений напряжения с помощью 8-битных микроконтроллеров, показан вариант схемной реализации и основной алгоритм получения отсчётов квантования реального квазисинусоидального сигнала.
Ссылки
Комментарии (62)
YBosco
04.02.2017 20:35Вопрос оригинальный, насчёт «зачем делать аппаратно то, что можно сделать программно?». Спросите, например, в Intel, зачем они делают навороченные процессоры, когда всё это можно сделать программно.
Всё для того же, ускорить процесс, уменьшить объём памяти под программу, уменьшить потребление энергии. У меня эта штука сделана на PIC12F1840.
vagran
05.02.2017 11:12+2Программная хитрость состоит в том, чтобы все процессы деления, по возможности, делать до процессов умножения или возведения в степень, чтобы промежуточный результат операций не превышал 65535 (или 32768 для действий со знаком).
Это типичная ошибка, приводящая к потере точности при работе с целочисленной арифметикой. Сначала умножения, потом деления, за редкими исключениями. Для промежуточного результата размер переменной временно расширяется, например, до 32 бит. Накладные расходы на это достаточно низкие, чтобы сильно влиять на производительность.YBosco
05.02.2017 19:53-1Практические эксперименты показали, что лучше не попадать в переполнение, чем бороться за точность таким способом.
Да, точность, разумеется, падает. Но речь идёт не о метрологии, а о мониторинге процессов.
Jef239
05.02.2017 15:22+3Конкретное программное решение выходит за рамки данной статьи.
А вот это самое интересное, вообще-то…YBosco
05.02.2017 19:26-2Know-how причём под NDS.
Jef239
05.02.2017 19:45+2тогда это IMHO не tutorial
YBosco
05.02.2017 19:51Т.е. типа «я пиарюсь»? :-)
Alatarum
06.02.2017 17:17+1Всё же, пожалуй, соглашусь с предыдущим оратором — туториал по моему видению это инструкция, по которой можно что-то сделать. А у Вас по всем темам только куски, везде надо додумывать самостоятельно. )
YBosco
06.02.2017 17:23Я постеснялся назвать это по-другому. Возможно, зря.
Однако, хороший лектор оставляет кое-что для самостоятельной проработки. :-)
GarryC
05.02.2017 19:45+1Меня несколько удивил выбор частоты дискретизации. Она должна быть привязана не к периоду сигнала, а к наивысшей составляющей исследуемого сигнала.
YBosco
05.02.2017 19:49Наивысшая составляющая, если её можно так назвать, априори неизвестна. Известен только приблизительно средний уровень помех.
Alatarum
05.02.2017 20:38Если неизвестна наивысшая составляющая, что вы должны её сами установить. Частота среза аналогового тракта должна быть минимум в два раза ниже частоты дискретизации — теорему Котельникова не обманешь (ну нам, во всяком случае, пока не удалось обмануть, хотя очень хотелось =)).
GarryC
05.02.2017 22:53Ну и как уровень помех нам дает предположения о спектре сигнала и его высшей частоте. Любой прибор, измеряющий RMS будет иметь ограничения по учитываемой частоте и надо просто его указать в характеристиках. Но связывать частоту оцифровки с периодом произвольного сигнала — это выше моего понимания.
Alatarum
06.02.2017 17:13А у него, судя по всему, не произвольный сигнал, а промышленная частота, которая, как известно, является самым точным параметром в электро энергетике :)
А вот спектр искажений — другой разговор. И его надо ограничивать соответственно частоте дискретизации.
YBosco
05.02.2017 19:48Насчёт полопоры. На неинвертирующий вход DA1 подана половина «опоры», на другой вход подано переменное напряжение, максимум которого не превышает этой пол-опоры. С помощью цепочки R3C2 на опорный вход компаратора подаётся только половина опоры с учётом смещения и прочих факторов, без переменной составляющей. Реальный урочень постоянной составляющей (точнее, крайне низкочастотный сигнал в пределах долей Герц + постоянная составляющая) отдельно измеряем на отдельном АЦП контроллера.
А по переходу через «0» измеряем, чтобы за один квазипериод оценить уровень (ср. кв. зн.). Иначе точности не будет.
Это всё же tutorial, а не настоящая техническая статья со всеми подробностями. Уж извините. Смотрите комментарий к предыдущему посту.
А т.н. формула Симпсона — см. здесь. Она даёт очень приличную точность для относительно гладких кривых. Если напряжение сильно зашумлено, то лучше не использовать.Alatarum
05.02.2017 20:44Википедию я уже и сам посмотрел, но там очень скудно с пояснениями. Интересна оценка — эта формула выбрана просто что бы не вычислять корень, или увеличение точности существенно?
YBosco
06.02.2017 08:27Корень вычисляется. Всё, что описано, это, в основном, эмпирические ходы, а не строгий математический анализ. Но во времена оно я обсчитывал численно интегралы, были варианты, когда для сравнения использовались аналитические варжения. Для некоторых вариантов кривых ошибок вообще не было в пределах точности компьютера.
GarryC
05.02.2017 22:55Ну и по поводу периода — множество сигналов переходят через 0 за период множество раз — типичный пример сигналы АОН. Поэтому определять период через переходы — странновато, тут нужен настоящий спектральный анализ и выбор первой гармоники.
YBosco
06.02.2017 08:30Написано же, что «квазисинусоидальный сигнал». Какое такое множество сигналов? Шум, гармоники? Их доля сравнительно невелика. Результат же получился сносным.
Alatarum
05.02.2017 19:50Статья интересная, но у меня вызвала много вопросов.
Ну например самое первое, что всплыло в уме в процессе прочтения: почему 8 бит? лет 5 назад было актуально, более того, лет 7 назад я сам занимался извращениями с математикой на асме (в том числе, для реализации умножения 16x16=32). Но сейчас начинать новый дизайн и при этом заниматься ужиманием целочисленной арифметики странно — можно же за те же деньги взять 32 бита и не париться.
Тема схемотехники слабо раскрыта — не показан формирователь пол-опоры и способ её подмешивания сомнительный, а это очень важно, пол-опоры очень сильно влияет на точность вычисления, наелись в своё время.
Но это ладно, интереснее про математику. Было бы неплохо описать суть формулы Симпсона и привести сравнение по точности с методом «в лоб».
И я не понял, зачем детектор нуля. Ну про измерение частоты-то понятно (хотя опять таки — тут самое интересное, это алгоритм измерения и передискретизации), но зачем цифровать именно от пересечения нуля?YBosco
05.02.2017 19:56Насчёт 8-битных. Тут, в основном, вопрос цены и потребления.
Jef239
05.02.2017 20:08STM32F0 — 50 рублей Энергопотребление — до 120ма супротив 30мка у PIC,. У вас прибор батарейный, что это для него так важно?
YBosco
05.02.2017 20:28В том числе и батарейный вариант возможен.
Вопрос энергопотребления вообще наиважнейший. Если датчик один, то не очень важно, если сотня, то уже существенно.Jef239
05.02.2017 20:35что за задача такая — сотня датчиков на одном питании? Или сама задача — тоже под NDA?
YBosco
06.02.2017 07:56На самом деле — это измерение тока. Датчиков тока в иных местах может быть очень много. Просто задача измеения тока плавно переходит в измерение пропорционального напряжения.
Jef239
06.02.2017 08:15Так сама задача — тоже под NDA или её можно рассказать? Зачем нужно столько датчиков? Нам вот одного двухканального осциллографа хватает. Что у вас за установка такая? Корродирующий железнодорожный мост? Тк там вроде токи на много порядков слабее…
Alatarum
06.02.2017 17:09Мне Очень понравилась Ваша первая ссылка :) Они хорошую траву курили.
Что касается потребления, про 120мА просто без комментариев, не знаю откуда взялось. Очень сомневаюсь что там можно столько получить, даже включив весь фарш на полную. Разве что закоротив пару ножек :)).
А вот с PIC интересно. Потребление контроллера складывается из статического и динамического: I = Is + Id*F, где F рабочая частота камня. Это, разумеется, очень грубая прикидка, не учитываюжая многих особенностей. Так вот, у ПИКа этого Is = 100мкА, Id = 30мкА/МГц. То есть на частоте 32МГц можно ожидать потребление порядка 1мА. Очень неплохой результат.
В качестве 32бит альтернативы я бы рекомендовал смотреть на EFM32ZG и STM32L0.
YBosco
06.02.2017 17:21На самом деле в datasheet написано 4 мА при всех возможных факторах.
Alatarum
06.02.2017 18:19Посмотрел внимательнее даташит — действительно на высоких частотах потребление уже к 100мкА/МГц стремится — уже не так впечатляет :). Тот же EFM32ZG имеет 120-130 мкА/МГц, при этом вычислительная мощность очевидно гораздо выше, а цена такая же.
Jef239
06.02.2017 18:42А чего тут знать? я дал ссылку на официальный datasheet, Значение называется «Total current into sum of all VDD power lines (source)» и находится на странице 44
Насчет цен — так на efind эти процессоры и по 46 рублей есть. Минимум так вообще — 60 центов.
А вам не кажется, что цена и ток связаны? То есть это просто выбраковка с пониженной частотой? Потому и корпус TSOP20.Alatarum
06.02.2017 19:20+1Так это Абсолют Максимум Райтинг — то есть именно что ток, при котором оно ещё не сгорит, если нагрузить ножки.
А то, что нас интересует находится на 47й странице. Там 12мА на 24 МГц, то есть 500икА/МГц. Вполне нормальный показатель для не-low-power контроллеров.
Что до отбраковки — вполне возможно, st таким славится.Jef239
06.02.2017 20:35Вы правы. я все-таки программер, а не электронщик. Так что спутал.
Alatarum
06.02.2017 21:21Бывает. Просто "до 120ма супротив 30мка у PIC" смотрится впечатляюще — в 4000 раз :)
А на деле, если сравнивать сопоставимые характеристики (потребление на мегагерц на частоте 20-30МГц), получается разница "всего" раз в 5-6. То есть промахнулись на три порядка :)).Jef239
06.02.2017 23:20А если посчитать на мегабайт, то будет ещё лучше. Ибо 32бита — это в 4 раза больше, чем 8. :-)
Alatarum
05.02.2017 20:35О, а вот это вообще моя любимая тема? Сколько у вас получилось в активном режиме (при оцифровке периода) и в среднем (ну если за час, например, усреднить)?
Стоимость вашего ПИКа, если я правильно понял, рублей 60?
Да, кстати, как раз на тему ремарки про встроенные в контроллер опампы. Я как-то хотел использовать, но пришёл к выводу, что они мало что слабенькие, так ещё и потребление потребление системы увеличивали микроампер на 12. В нашем случае это категорически перевесило потенциальное сокращение количества корпусов и стоимости.YBosco
06.02.2017 08:14Встроенные ОУ была попытка использовать, но потом от них отказался. Не помню, почему конкретно, но что-то в них не понравилось. В данном примере используется встроенный компаратор. С ним проблем нет.
Оцифровка идёт по широковещательному запросу с головного контроллера. График оцифровки — штука переменная. Так что можно говорить только про ток в момент оцифровки.
Съём идёт за период, т.е. за 20 мс. Обсчёт идёт практически за 1 мс. При этом АЦП вырубаются сразу, как только сняты данные, и компаратор и периферия также.
Главный вклад в ток вносит, как ни странно, обмен по шине данных. Поскольку все датчики сидят на одной шине, то имеет место разделение по времени между ответами. Ожидание пропорционально кол-ву датчиков. Разумеется, можно и нужно вставлять в систему концентраторы. Но всё равно, если собирать, скажем с 9 датчиков, то последний будет сидеть в режиме задержки ответа в активном режиме 0.1(N-1)= 0.8 c.
Контроллер работает в данном случае на частоте 32 МГц. Ток потребления в активном режиме контроллера прядка 4 мА. Думаю, отсюда понятно, какое потребление получается.Alatarum
06.02.2017 16:48График оцифровки — штука переменная. Так что можно говорить только про ток в момент оцифровки.
Ну работа контроллера в низкопотребляющем девайсе всегда штука переменная, по-этому имеет смысл говорить только об усреднённом (проинтегрированном) потреблении в каком-то режиме.
Ну например у меня девайс с непрерывной оцифровкой 4 точки на период двух каналов и выдачей в реалтайме в юарт на 9600 бод ел что-то прядка 24мкА. При этом в момент оцифровки, разумеется, потребление микроампер 400. Сейчас прикидывали потребление для нового устройства — уже 48 точек на период, но на другом камне, получается порядка 15-20мкА без математики и связи. При том, что сам АЦП там ест столько же, сколько в предыдущем камне.
А связь — rs485? Там основное потребление на сам драйвер уходит. Я бы предложил i2c — для физики много питания не нужно, а шину можно во сне слушать. Или просто на основе адреса вычислять таймслот и врубать драйвер незадолго до того, как тебя должен опросить мастер.
YBosco
06.02.2017 17:16Связь по RS485 из-за того, что расстояние до устройства сбора может достигать в пределе до 100 м.Так что особо не разгуляешься. :-(
Alatarum
06.02.2017 17:47Ну тогда да, таймслоты и гасить драйвер. Ну или посмотрите в сторону беспроводки, может получиться экономичнее. Но дороже.
YBosco
06.02.2017 22:16Беспроводка-то и используется в качестве запросного устройства, но у неё в импульсе до 100 мА плюс «протокольные мероприятия» на десяток секунд. Она используется, чтобы как раз не тащить эти самые 100 м. Но батарейка в ней катастрофически садится.
Это сложно, найти баланс между потреблением и удобством использования и монтажа…Alatarum
06.02.2017 23:00100мА в импульсе? Это вы какой мощьностью свистите? Самые прожорливые трансиверы вроде не больше 25мА на 10мВт-ах хотят. А вообще, посмотрите в сторону BLE, сейчас много интересного предлагают.
Jef239
06.02.2017 23:23А 100 метров чего? Поля или железобетона? Я бы в сторону LoRa посмотрел, она малопотребляющая.
Xalium
06.02.2017 14:06-1Для обычной однофазки в розетке тоже считается, что там типа синусоида с положительной и отрицательной полуволнами. Но я вот не пойму, откуда там берется отрицательная полуволна, если ток поступает только по одной жиле, т.е. по идее обратного тока нет (ну за исключением из-за реактивной нагрузки)?
YBosco
06.02.2017 17:18Даже не знаю, что ответить с ходу…
Если только так.
Физика разности потенциалов при сравнении с нулём такова, что ток может течь как в одну сторону, так и в противоположную. Отсюда появляются полуволны разной полярности.Xalium
06.02.2017 22:52Эм. Ток течет от точки, где электронов, больше в точку, где их меньше (типа упрощенно). Для того, чтобы ток тек от нуля, в нуле должно быть больше электронов по сравнению с фазой. Но откуда такому взяться?
В школе, насколько помню, синусоида была из-за того, что в генераторе постоянно менялась «полярность», т.е. фаза и ноль менялись местами (типа у генератора было 2 щетки).Jef239
07.02.2017 00:03Обычная ситуация — электроны откачали. Ноль — это не отсутствие электронов, это равенство заряда электронов и ядер. У атома железа 26 электронов, так что парочку из них вполне можно откачать.
То есть вы зря думаете, что ноль — это нет электронов. Это просто электронов столько же, сколько протонов.Xalium
07.02.2017 01:23Ноль — это отсутствие свободных электронов, которые и участвуют в создании потенциала. Провод — это не хим. батарейка, у которой на одном полюсе избыток свободных электронов, а на другом — избыток положительно заряженных ионов (т.е. дырок).
А то тогда и при постоянном токе тоже был бы обратный ток при прекращении его подачи.
что-то типа того.Jef239
07.02.2017 11:31Ноль — это отсутствие свободных электронов
Коллега, я предлагаю вам доказать этот тезис. И за одно — придумать альтернативные теории электропроводности и теплопроводности металлов, которые хорошо объясняются моделью свободных электронов.
Xalium
07.02.2017 01:40Да и если бы даже откуда-то взялась эта разность потенциалов в момент, когда должна быть отрицательная полуволна, то синусоиде по идее там неоткуда взяться, т.к. синусоиду создает генератор, т.е. только тогда, когда ток идет со стороны фазы.
YBosco
07.02.2017 08:11Люблю флейм!
Господа, ну не ленитесь, нарисуйте схему целиком: 3-фазный звездообразный трансформатор, нулевой провод от центральной точки, фазовый таже и нагрузку.
Нулевая точка потому нудевая, что в ней баланс потенциалов. Но ток-то течёт по обмотке транса в обе стороны!
GarryC
07.02.2017 09:17+1Не ну все правильно. по проводу фазы электроны прибегают, делают работу и исчезают в нуле.
Так что совершенно непонятно, откуда они потом возьмутся в нулевом проводе, чтобы бежать обратно.
Я всегда подозревал, что это мировой заговор и никакого переменного тока не бывает, но только теперь окончательно в этом убедился.
Если Ваш вопрос был тролллингом, то для меня слишком тонко.
Xalium
07.02.2017 01:28Про ноль немного ошибся. Свободные электроны то есть всегда, но нет где-либо скопления в одном месте их или отрицательно заряженных ионов.
P.S. Ошибся веткой. Данный ответ — дополнение к ответу Jef239.Jef239
07.02.2017 11:37Ну теперь доказывайте, что свободных электронов везде одинаково. То есть, что нету скопления или недостатка.
А ионной проводимости в металлах и вправду нет, это проверяли.
Jef239
07.02.2017 11:40Стоп… Пожалуйста, расскажите, как выглядит "отрицательно заряженный ион". Вы точно из нашего мира? Не из антиматериии сделаны?
fogone
А true почему не капсом?
YBosco
Да, действительно. Исправляю.