Рассчитываю RMS. Использую mega328p. Для определения периода входного сигнала собран детектор нуля, который привязан на внешнее прерывание int0. Далее все измеренные значения за период помещаю в массив, потом соответственно считаю RMS по всем значениям массива, которые успел намерить МК. Вообщем-то измеренные значения близки к эталонным. Но есть погрешность. Пытаюсь разобраться, может ошибка в коде.
Моделирую в протеусе, вывожу количество измеренных значений в терминал и есть несоответствия. Правильно ли я считаю теоретическое количество измеренных значений ADC? В таблице приведены расчеты для частот входного, измеряеряемого сигнала 25, 50 и 100Гц, и рассчитанное число измерений которое успевает сделать ADC для предделителя ADC 32, 64 и 128
Ну дык самим контроллером и считайте сколько замеров реально выходит. Особенно это существенно, если используется внутренний тактовый генератор, он не самый точный.
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
[uquote="Z_h_e",url="/forum/viewtopic.php?p=3410021#p3410021"]Ну дык самим контроллером и считайте сколько замеров реально выходит. Особенно это существенно, если используется внутренний тактовый генератор, он не самый точный.[/uquote]
Я и говорю то, что насчитал контроллер не сходится с тем, что я рассчитываю выше. А вопрос в том правильно ли рассчитал я? и использую я внешний резонатор 4Мгц
[uquote="OKF",url="/forum/viewtopic.php?p=3410126#p3410126"]Скорость АЦП можно увеличитеь. У меня получалось до 1 мгц. Разрешение только страдает.)[/uquote]
Да это то тут причем?
Вопрос только в том, правильно ли я веду расчет. Повторюсь, есть детектор нуля, который определяет период входного сигнала, частота тактирования моего контроллера 4Мгц, допустим предделитель ADC выбран 32, допустим частота входного сигнала синус 50Гц, отсюда имеем: Число измерений N=4000000/32/13/50=192, измерения
13-число тактов нормального преобразования.
А если например частота входного будет не 50, а 100Гц, то соответственно: Число измерений N=4000000/32/13/100=96, измерений.
И если частота тактирования МК 4МГц, предделитель ADC=64, а частота входного сигнала 50Гц, то: Число измерений N=4000000/64/13/50=96, измерений. Правильно ли я рассчитываю число измерений?
Последний раз редактировалось DenChik87 Пт июн 29, 2018 09:05:52, всего редактировалось 1 раз.
не лучше ли запускать АЦП на максимально приемлемой скорости по таймеру? тогда вы сможете уложить в 1 период сигнала заранее желаемое количество семплов, например, ровно 100, а не 98,6
кстати, для вычисления RMS нет необходимости в детекторе 0. если вы заранее знаете частоту измеряемого сигнала, достаточно снять заданное количество семплов в течение интервала времени, равного периоду частоты, и начать этот процесс можно в любой момент.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
[uquote="ARV",url="/forum/viewtopic.php?p=3410145#p3410145"]не лучше ли запускать АЦП на максимально приемлемой скорости по таймеру? тогда вы сможете уложить в 1 период сигнала заранее желаемое количество семплов, например, ровно 100, а не 98,6
кстати, для вычисления RMS нет необходимости в детекторе 0. если вы заранее знаете частоту измеряемого сигнала, достаточно снять заданное количество семплов в течение интервала времени, равного периоду частоты, и начать этот процесс можно в любой момент.[/uquote]
Частота входного заранее неизвестна, поэтому есть детектор и на да данном этапе интересует только правильность расчетов количества измерений Правильно ли я веду расчет измерений?
Последний раз редактировалось aen Пт июн 29, 2018 16:35:42, всего редактировалось 1 раз.
Причина:Нарушение Правил форума п. 2.7
[uquote="OKF",url="/forum/viewtopic.php?p=3410240#p3410240"]Да так, Деньчик, для разговору, не?[/uquote]
Может я не понимаю ответа вопрос в количестве измерений. Может и можно увеличить до 1Мгц, только зачем. В даташите написано для адекватного измерения надо частоту ADC 50-200kГц. Мой диапазон входного сигнала синус 40-65Гц. Но хочу спроектировать измерение в диапазоне по шире, где-нибудь 25-80Гц. Для этого большая скорость измерений не нужна. И так много данных хранить придется
Z_h_e писал(а):Если сигнал боле-менее нормальной формы, то можно период определить по выбранным данным, но детектор самое удобное и проще с программой имхо.
главное в расчете RMS - это знать частоту сигнала, ну или период. если делать измеритель RMS в расчете на любую частоту - это будет очень непростой задачей. а для стандартной "сетевой" (или любой наперед известной) частоты можно и без детектора обойтись - хоть аппаратного, хоть по данным.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Я понял, что вы говорите. Видимо, я говорю не достаточно понятно. В бытовой сети более-менее нормальная синусоида. Так вот, определять её период вообще нет необходимости - ни по переходу через ноль, ни по массиву снятых данных - период УЖЕ известен.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
[uquote="DenChik87",url="/forum/viewtopic.php?p=3410388#p3410388"]Может я не понимаю ответа [/uquote]
Как выполнена схемотехника измерения синусоиды? То есть как измеряется двухполярный сигнал?
[uquote="КРАМ",url="/forum/viewtopic.php?p=3410658#p3410658"]Как выполнена схемотехника измерения синусоиды? То есть как измеряется двухполярный сигнал?[/uquote]
Да, измеряется двухполярный сигнал. Синусоида сдвинута на 2,5 вверх от нуля. В железе еще не делал, но будет именно так, пока только моделирую в протеусе. Для этого подаю на вход ADC сигнал синусоиды сдвинутый на 2.5В от нуля. Программно вычитаю эти 2.5В, т.е из измерений adc-512. Затем вывожу значения измерений в терминал по UART. Контроллер считает значения близкие к правде, но есть погрешность.
На рисунке приведены эталонные сигналы, подаваемые на порты и те, что измерил контроллер. Измерение ведутся по шести портам ADC, последовательно опрашивая их. Как видно значения измерений близки к эталонным, но погрешность все же есть.
Хочу разобраться в связи с чем. Заметил что вроде как неправильно производит количество измерений за период. Так как количество значений измеренных за период, которые рассчитываю я не сходятся с количеством измерений, которые производит контроллер.
Для этого и прошу подсказать верны ли мои расчеты количества измерений, которые я привел выше
[uquote="Z_h_e",url="/forum/viewtopic.php?p=3410501#p3410501"]У Вас расхождение с расчетным и фактическим в какую сторону? Быть может Вы не успеваете вовремя считать результат АЦП?[/uquote]
Расхождение получается в разную сторону, Результаты после каждого прерывания ацп сохраняются в массив. Далее по внешнему прерыванию достаются, рассчитываются, затем передаются по uart
[uquote="Z_h_e",url="/forum/viewtopic.php?p=3410501#p3410501"]А время на включение АЦП? А время первого преобразования после включения? Время на старт АЦП?[/uquote]
Контроллер находится в режиме фриран и я так понимаю время включения и то что первое преобразование после включения 25тактов можно во внимание не брать?
DenChik87 писал(а): Контроллер считает значения близкие к правде, но есть погрешность.
ПГ есть всегда. Термина близко не может существовать в измерениях. Вы сделали какие-то расчеты, определились с ПГ и в нее не укладываетесь? Какие критерии у Вас?
DenChik87 писал(а):Расхождение получается в разную сторону,
Т.е. нет повторяемости? Тогда появляются вопросы к программе.
DenChik87 писал(а):и то что первое преобразование после включения 25тактов можно во внимание не брать?
Если я правильно понимаю, если АЦП не выключается, то для последующих измерений такого времени не будет. Для фриран 2 такта на старт и 13.5 тактов АЦП на каждый замер.
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
[uquote="DenChik87",url="/forum/viewtopic.php?p=3411003#p3411003"]Синусоида сдвинута на 2,5 вверх от нуля. В железе еще не делал, но будет именно так, пока только моделирую в протеусе. Для этого подаю на вход ADC сигнал синусоиды сдвинутый на 2.5В от нуля. Программно вычитаю эти 2.5В, т.е из измерений adc-512.[/uquote]
Это, скорее всего, не относится к нынешней ошибке, но в реальном железе Вы ее получите совершенно точно.
Ноль не находится на 2,5 вольтах. Ни у АЦП контроллера при сдвиге на полшкалы, ни у ОУ и/или делителя, обеспечивающего сдвиг сигнала на полшкалы. Мало того, эти величины случайны для примененных экземпляров элементной базы, да еще и зависят от температуры.
Поэтому, нужно НЕПРЕРЫВНО измерять ноль В ПРИХОДЯЩЕМ МАССИВЕ СИГНАЛА. Для чего нужно просто находить его среднее значение по интервалу значительно превышающему период сигнала. Чтобы не расходовать ОЗУ, можно сделать не КИХ (скользящее среднее), а БИХ фильтр НЧ. Сиречь простейший однозвенный рекурсивный фильтр.
Вопрос с несимметричным сигналом справедлив. Строго говоря, если предполагается смешанный сигнал с переменной и постоянной составляющей (в сети постоянной составляющей не может быть по определению, ибо мы все питаемся от ТП), то потребуется замер нулей на лету с отключением сигнала от входа (периодически и тоже через цифровой фильтр).
Но в любом случае, формальный сдвиг на полшкалы АЦП - это ошибочное решение.
ЗЫ. Визуальная несимметрия сигнала и присутствие в нем постоянной составляющей - это не связанные вещи.
Последний раз редактировалось КРАМ Сб июн 30, 2018 07:30:04, всего редактировалось 1 раз.