Вступление
Измерение trueRMS переменного напряжения — задача не совсем простая, не такая, какой она кажется с первого взгляда. Прежде всего потому, что чаще всего приходится измерять не чисто синусоидальное напряжение, а нечто более сложное, усложнённое наличием гармоник шумов.
Поэтому соблазнительно простое решение с детектором среднего значения с пересчётом в ср.кв. значения не работает там, где форма сигнала сильно отличается от синусоидальной или просто неизвестна.
Профессиональные вольтметры ср. кв. значения — это достаточно сложные устройства как по схемотехнике, так и по алгоритмам [1,2]. В большинстве измерителей, которые носят вспомогательный характер и служат для контроля функционирования, такие сложности и точности не требуются.
Также требуется, чтобы измеритель мог быть собран на самом простом 8-битном микроконтроллере.
Общий принцип измерения
Пусть имеется некое переменное напряжение вида, изображённого на рис. 1.
![image](https://habrastorage.org/files/168/6d2/ddc/1686d2ddc0784893bd7361ba79a4e1e9.PNG)
Квазисинусоидальное напряжение имеет некий квазипериод T.
Преимущество измерения среднеквадратичного значения напряжения в том, что в общем случае время измерения не играет большой роли, оно влияет только на частотную полосу измерения. Большее время даёт большее усреднение, меньшее даёт возможность увидеть кратковременные изменения.
Базовое определение ср. кв. значения выглядит вот таким образом:
![](https://habrastorage.org/files/973/ef0/c87/973ef0c8728d49898d32ba2a8973c091.PNG)
где u(t) — мгновенное значение напряжения
T — период измерения
Таким образом, время измерения может быть, вообще говоря, любым.
Для реального измерения реальной аппаратурой для вычисления подинтегрального выражения необходимо проквантовать сигнал с некоторой частотой, заведомо превосходящей не менее, чем в 10 раз частоту квазисинусоиды. При измерении сигналов с частотами в пределах 20 кГц это не представляет проблемы даже для 8-битных микроконтроллеров.
Другое дело, что все стандартные контроллеры имеют однополярное питание. Поэтому измерить мгновенное переменное напряжение в момент отрицательной полуволны не представляется возможным.
В работе [3] предложено довольно остроумное решение, как внести постоянную составляющую в сигнал. Вместе с тем в том решении определение момента, когда стоит начать или закончить процесс вычисления ср. кв. значения представляется довольно громоздким.
В данной работе предлагается метод преодоления этого недостатка, а также вычисление интеграла с большей точностью, что позволяет снизить число точек выборки до минимума.
Особенности аналоговой части измерителя
На рис. 2 показано ядро схемы предварительной аналоговой обработки сигнала.
![](https://habrastorage.org/files/502/571/18e/50257118e565426cb82ff4bc5ce7712c.PNG)
Сигнал поступает через конденсатор C1 на усилитель-формирователь, собранный на операционном усилителе DA1. Сигнал переменного напряжения замешивается на неинвертирующем входе усилителя с половиной опорного напряжения, которое используется в АЦП. Напряжение выбрано 2.048 В, поскольку в компактных устройствах часто используется напряжение питания +3.6 В и менее. В иных случаях удобно использовать 4.048 В, как в [3].
С выхода усилителя-формирователя через интегрирующую цепочку R3-C2 сигнал поступает на вход АЦП, который служит для измерения постоянной составляющей сигнала (U0). C усилителя-формирователя сигнал U’ — это измеряемый сигнал, сдвинутый на половину опорного напряжения. Таким образом, чтобы получить переменную составляющую, достаточно вычислить разность U’-U0.
Сигнал U0 используется также в качестве опорного для компаратора DA2. При переходе U’ через значение U0 компаратор вырабатывает перепад, который используется для формирования процедуры прерывания для сбора измерительных отсчётов.
Важно, что во многие современные микроконтроллеры встроены как операционные усилители, так и компараторы, не упоминая АЦП.
Базовый алгоритм
На рис. 3 дан базовый алгоритм для случая измерения величины переменного напряжения с основной частотой 50 Гц.
![](https://habrastorage.org/r/w1560/files/bb5/895/544/bb5895544921462b82757e57bd8cc7f0.png)
Запуск измерения может осуществляться по любому внешнему событию вплоть до кнопки, нажимаемой вручную.
После запуска в первую очередь измеряется постоянная составляющая во входном сигнале АЦП, а затем контроллер переходит в ожидание положительного перепада на выходе компаратора. Как только прерывание по перепаду наступает, контроллер делает выборку из 20 точек с временным шагом, соответствующим 1/20 квазипериода.
В алгоритме написано X мс, поскольку низкобюджетный контроллер имеет собственное время задержки. Чтобы измерение происходило в правильные моменты времени, необхоимо учитывать эту задержку. Поэтому реальная задержка будет меньше 1 мс.
В данном примере задержка соответствует измерениям квазисинусоид в диапазоне 50 Гц, но может быть любой в зависимости от квазипериода измеряемого сигнала в пределах быстродействия конкретного контроллера.
При измерениях ср.кв. значения напряжения произвольного квазипериодического сигнала, если априори неизвестно, что это за сигнал, целесообразно измерить его период, используя встроенный в контроллер таймер и тот же выход компаратора. И уже на основании этого замера устанавливать задержку при осуществлении выборки.
Вычисление среднеквадратичного значения
После того, как АЦП создал выборку, имеем массив значений U'[i], всего 21 значение, включая значение U0. Теперь, если применить формулу Симпсона (точнее, Котеса) для численного интергрирования, как наиболее точную для данного применения, то получим следующее выражение:
![](https://habrastorage.org/files/e59/654/5cd/e596545cda8f418dbf51871a87fc6aab.PNG)
где h — шаг измерения, а нулевой компонент формулы отсутствует, поскольку он равег 0 по определению.
В результате вычисления мы получим значение интеграла в чистом виде в формате отсчётов АЦП. Для перевода в реальные значения полученное значение нужно промасштабировать с учётом величины опорного напряжения и поделить на интервал времени интегрирования.
где Uоп — опорное напряжение АЦП.
Если всё пересчитать в мВ, K приблизительно равняется просто 2. Масштабный коэффициент относится к разностям в квадратных скобках. После пересчёта и вычисления S делим на интервал измерения. С учётом множителя h фактически получаем деление на целое число вместо умножения на h с последующим делением на интервал времени измерения.
И в финале извлекаем квадратный корень.
И вот тут самое интересное и сложное наступает. Можно, разумеется, использовать плавающую точку для вычислений, поскольку язык C это допускает даже для 8-битных контроллеров, и производить вычисления непосредственно по приведённым формулам. Однако скорость расчёта упадёт существенно. Также можно выйти за пределы весьма небольшого ОЗУ микроконтроллера.
Чтобы такого не было, нужно, как верно указано в [3], использовать фиксированную точку и оперировать максимум 16-битными словами.
Автору эту проблему удалось решить и измерять напряжение с погрешностью Uоп/1024, т.е. для приведённого примера с точностью 2 мВ при общем диапазоне измерения ±500 мВ при напряжении питания +3.3 В, что достаточно для многих задач мониторинга процессов.
Программная хитрость состоит в том, чтобы все процессы деления, по возможности, делать до процессов умножения или возведения в степень, чтобы промежуточный результат операций не превышал 65535 (или 32768 для действий со знаком).
Конкретное программное решение выходит за рамки данной статьи.
Заключение
В данной статье рассмотрены особенности измерения среднеквадратичных значений напряжения с помощью 8-битных микроконтроллеров, показан вариант схемной реализации и основной алгоритм получения отсчётов квантования реального квазисинусоидального сигнала.
Ссылки
Измерение 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 Гц.
![](https://habrastorage.org/files/bb5/895/544/bb5895544921462b82757e57bd8cc7f0.png)
Запуск измерения может осуществляться по любому внешнему событию вплоть до кнопки, нажимаемой вручную.
После запуска в первую очередь измеряется постоянная составляющая во входном сигнале АЦП, а затем контроллер переходит в ожидание положительного перепада на выходе компаратора. Как только прерывание по перепаду наступает, контроллер делает выборку из 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-битных микроконтроллеров, показан вариант схемной реализации и основной алгоритм получения отсчётов квантования реального квазисинусоидального сигнала.
Ссылки