LINUX.ORG.RU

Как привести сигнал с АЦП к реальному?

 


0

1

Чисто теоритечески, есть 16-разрядный АЦП до 10В, к нему подключен трансформатор. При подачи тока, функция которая снимает показания АЦП показывает разные значения, как отрицательные так и положительные, варирущие по синусоиде. Зная, что я подаю на вход к примеру 5 Ампер, как мне надо обработать сигнал с АЦП что бы привести его например к виду 5000? Как апроксимировать данные, как снизить наводки. В общем хочеться теории обработки сигнала с АЦП и приведения его к удобочитаемому виду. Хочеться систематизировать хаос в голове.

★★★★★

Последнее исправление: splinter (всего исправлений: 1)

Пересчёт. V=ADCval*VALmax/ADCmax.

Я, например использую более сложную формулу

V=(ADCval - ADCval0) * (VALmax/ADCmax) * B

, где B в том числе и за перевод единиц отвечает. Но это для линейной зависимости.

Знаю некоторые делают через сопоставление диапазонов ADCmax..ADCmin ~ VALmax..VALmin.

ziemin ★★
()

Ток снимают с шунта, а не с трансформатора. Не мешает тебе теории почитать. Ток в 5А уже значительная величина, а значит потребуются специальные меры, а не просто тупое измерение напряжения на шунте. Как минимум выбор материала, оптимизация заделки шунта, возможно придется ставить ОУ (зависит от выбранного сопротивления шунта).
Определись точней с задачей, а то тянет отправить к учебникам, вопросы совсем начального уровня.

anonymous
()

Вот тебе правильно сказали. Если ты измеряешь ток в цепи до 5А (а это большой ток), то тебе нужен низкоомный шунт в цепи, усилитель напряжения шунта, а уже с усилителя подавать на АЦП. Причем еще неплохо бы знать динамический диапазон входного сигнала. А то вдруг тебе надо от пикоампер до ампер измерять.

Zubok ★★★★★
()

Зная, что я подаю на вход к примеру 5 Ампер

И что такое «подаю на вход 5А». Ток течет в цепи. Какая цепь? Трансформатор нагружен? На что? Это ток через нагрузу твоего трансформатора? Нет, ты можешь нагрузить свой трансформатор на сопротивление 1 Ом. Тогда у тебя на этом сопротивлении будет при амплитуде 5 А - амплитуда напряжения 5 В. Сопротивление надо взять мощное, так как на нем будет выдеряться P=I^2*R=5 Вт (имеются в виду действующие значения). Значит, сопротивление на 10 Ватт хотя бы. Это серьезная такая деталюшка будет. Типа такой http://lib.chipdip.ru/175/DOC000175069.jpg :) Деталька будет греться.

Zubok ★★★★★
()
Последнее исправление: Zubok (всего исправлений: 2)

Мне почему-то кажется, что ты про ток ляпнул просто так. Ты хочешь напряжение измерять с трансформатора, наверное. Может быть, ты имеешь в виду синусоидальное *напряжение*, не? 5 Вольт?

Zubok ★★★★★
()

Во мне проcнулся графоман
пусть А - измеряемая величина
REF - опорное напряжение ацп
Аmod - приведенная измеряемая величина, в максимуме должна равняться и не превышать REF (схемотехнику приведения измеряемой величины не обсуждаем, отдельная тема, для простоты - делитель, либо множитель, обозначим как К)
Отсюда А=AmodK
n - разрядность ацп
m - цифровая величина на ацп измеренного Amod
формула измерения - A=REF/2^n*m*K
Конечно все на много сложней, никто не выбирает пороги измерения равными входному напряжению АЦП, всегда учитывают множество факторов, такие как погрешность элементов схемы, класс измерения, запас диапозона для предотвращения перегрузки и т.д.
Если что-то напутал с синих глаз поправляйте :)

anonymous
()
Ответ на: комментарий от Zubok

Ремарка по току, если и вправду он нужен.

Вместо шунта можно датчик Холла припаять, он и греться меньше будет, и меньше энергии заберет. Точность, правда, особо не повысить, какая нормирована у микрухи, такой и будет.

anonymous
()
Ответ на: комментарий от anonymous

Ну да, можно и Холла.

Я полагаю, что автор вообще не схемотехнику хочет, а у него гипотетический случай, похоже. Он просто хочет понять, как ему измеряемое значение привести к реальному. Но без понимания его схемы (которой, я полагаю, и нет), нельзя сказать предметно. Можно сказать абстрактно. У его 0-10 В динамический диапазон АЦП. Он подает 5 В переменного напряжения (амплитуда 5 В, размех 10 В) на вход. Причем у него это напряжение центрировано относительно 5 В посередине диапазона АЦП, которое он считает у себя за 0. Это я как понял.

Zubok ★★★★★
()
Последнее исправление: Zubok (всего исправлений: 1)
Ответ на: комментарий от Zubok

От оно как. Век живи, век учись.

anonymous
()
Ответ на: комментарий от Zubok

И что такое «подаю на вход 5А». Ток течет в цепи. Какая цепь?

Устройство уже собранно, ток подаю с ретома, то есть сама железка есть, микроконтроллер и блок трансформаторов.

splinter ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Аmod - приведенная измеряемая величина, в максимуме должна равняться и не превышать REF (схемотехнику приведения измеряемой величины не обсуждаем, отдельная тема, для простоты - делитель, либо множитель, обозначим как К)

Что то не понял я этот момент, можно как то подробнее расписать?

splinter ★★★★★
() автор топика
Ответ на: комментарий от splinter

Ты так и не сказал, посредством чего измерять ток собрался.
Что непонятного, в множителе/делителе? Сложно понять, что диапазон измеряемой величины переведенной в напряжение, чаще всего отличается на порядок от рабочего напряжения ЦАП заданного опорным напряжением? ЦАП работает в диапазоне заданного опорного, исходя из этого строят схему.
Если будешь мерить шунтом, то его сопротивление выбирается маленким, для уменьшения влияния на выходное напряжение схемы при большом токе. Следовательно на шунте диапазон доли вольт, диапазон ЦАП вольты. Ставят усилитель с коэффициентом усиления K, измеренное напряжение ЦАПом, делят на это К, получают значение напряжения на шунте, остается поделить его на сопротивление шунта и получить искомый ток через шунт. для твоих токов, важен материал и заделка шунта, сопротивление твоей измерительной цепи не должно зависить от температуры. Такие токи как у тебя уже будут разогревать сам шунт и места крепления в измеряемую цепь.

anonymous
()
Ответ на: комментарий от anonymous

Понаписал, конечно речь шла про АЦП. Звиняй, одним глазом в монитор смотрел.

anonymous
()
Ответ на: комментарий от Zubok

Обычно, когда говорят про переменное напряжение, оперируют действующим значением. И, как я понял, основная проблема ТС это из этих постоянно меняющихся значений амплитудного напряжения/тока получить действующее. При этом он не указал ни частоту тока, ни частоту дискретизации, с которой он может получать данные с АЦП.

Судя по тому, что у ТС АЦП выдаёт то отрицательные, то положительные значения, у него диапазон АЦП -10 — 10 В.

Для переменного напряжения есть трансформаторы, как напряжения, так и тока, поэтому там не нужен шунт с большой рассевающей мощностью.

mky ★★★★★
()
Ответ на: комментарий от mky

Дельное замечание, правда у ТСа пытались выяснить, чтож за схема у него и какой ток он мерит.

anonymous
()

для начала определись с параметрами трансформатора тока. далее цепь калибровки с компенсатором (термо- и частотным), цепь согласования (пассивная или активная), АЦП

chg ★★★★★
()
Ответ на: комментарий от prischeyadro

Не знаю я, что ТС за железяка. Судя по начальному посту «функция которая снимает показания АЦП показывает разные значения», возможно, что он работает не напрямую с регистрами АЦП, а дёргает уже готовую подпрограмму, которая знает насколько смещён ноль сигнала и пересчитывает выдаваемые АЦП значения.

Походу ТС захачил электронный электросчётчик :-)

mky ★★★★★
()

хватить уже о схемотехнике, сказано ведь было, устройство уже есть. автору нужно из квантов АЦП гармонического сигнала получить его амплитуду. искать преобразование Фурье и теорему Котельникова.

anonymous
()
Ответ на: комментарий от anonymous

Что значит хватит, коэффициент трансформации известен? Если у тса измерительный трансформатор тока. Нет, тогда о чем речь?
А так - квадратный корень из среднего значения квадрата измеренного сигнала. Но тут будет целая масса камней, если не вводить в алгоритм поправки, то будет копиться ошибка дискретизации. Короче к книжкам.

anonymous
()
Ответ на: комментарий от mky

модель АЦП AD7656 код считывающий с АЦП:

static int readAD (void)
{
	short temp;
	temp = (at91_get_gpio_value(AD_D0) | (at91_get_gpio_value(AD_D1)<<1) | (at91_get_gpio_value(AD_D2)<<2) | (at91_get_gpio_value(AD_D3)<<3)//// & MASK;
	 | (at91_get_gpio_value(AD_D4)<<4) | (at91_get_gpio_value(AD_D5)<<5) | (at91_get_gpio_value(AD_D6)<<6) | (at91_get_gpio_value(AD_D7)<<7)
	 | (at91_get_gpio_value(AD_D8)<<8) | (at91_get_gpio_value(AD_D9)<<9) | (at91_get_gpio_value(AD_D10)<<10) | (at91_get_gpio_value(AD_D11)<<11)
	 | (at91_get_gpio_value(AD_D12)<<12) | (at91_get_gpio_value(AD_D13)<<13) | (at91_get_gpio_value(AD_D14)<<14) | (at91_get_gpio_value(AD_D15)<<15));

	return temp;
}

трансформатор тока LMZ-2ZCT, коэффициент трансформации 4000:1. Подаю какое то колл-во ампер получаю отрицательные и положительные числа на выхлопе, каким образом осуществляется каллибровка или как сказать приведение показателя выхода дискретного сигнала из АЦП что бы я точно знал что при этом значении это 5 Ампер, а при этом 1 Ампер и никак иначе?

splinter ★★★★★
() автор топика
Последнее исправление: splinter (всего исправлений: 1)
Ответ на: комментарий от mky

Обычно, когда говорят про переменное напряжение, оперируют действующим значением.

Я так понял, что у него именно форма сигнала задана, а не действующие значения. Вернее, понять можно как угодно. % Ампер и все. :)

Судя по тому, что у ТС АЦП выдаёт то отрицательные, то положительные значения, у него диапазон АЦП -10 — 10 В.

Или АЦП, или это же это желаемые параметры. Опять же мне не ясно. Это он так хочет получить или получает. Когда я написал про центрирование сигнала, то имел в виду, что он хочет получить отрицательные и положительные, а не что АЦП их реально выдает.

Для переменного напряжения есть трансформаторы, как напряжения, так и тока, поэтому там не нужен шунт с большой рассевающей мощностью.

Про сопротивление 1 Ом - это я закон Ома иллюстрировал и давал понять, что не может быть «подаюю на вход ток 5 А». 1 Ом - просто удобное значение было, котороя взято с потолка, но чтобы оказать, что при таком токе уже только с сопротивлением 1 Ом будет. Шунты берут доли омов.

Zubok ★★★★★
()
Ответ на: комментарий от splinter

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

anonymous
()
Ответ на: комментарий от splinter

short temp;

А почему у тебя значение temp типа short. Как только старший бит числа становится 1, то результат внезапно становится отрицательным. unsigned short тогда надо, не?

Zubok ★★★★★
()
Ответ на: комментарий от Zubok

Вот данные без подачи тока: readAD - выхлоп без коэф. трансформации. readAD - выхлоп с readAD() - offset * coeff; (для калибровки трансформатора)

 
Oct  7 16:36:35 cpu-unit user.info kernel: readAD_1ch - 2
Oct  7 16:36:35 cpu-unit user.info kernel: readAD_transform - 2
Oct  7 16:36:35 cpu-unit user.info kernel: readAD_1ch - 3
Oct  7 16:36:35 cpu-unit user.info kernel: readAD_transform - 3
Oct  7 16:36:35 cpu-unit user.info kernel: readAD_1ch - 4
Oct  7 16:36:35 cpu-unit user.info kernel: readAD_transform - 5
Oct  7 16:36:36 cpu-unit user.info kernel: readAD_1ch - 3
Oct  7 16:36:36 cpu-unit user.info kernel: readAD_transform - 3
Oct  7 16:36:36 cpu-unit user.info kernel: readAD_1ch - 8
Oct  7 16:36:36 cpu-unit user.info kernel: readAD_transform - 10
Oct  7 16:36:36 cpu-unit user.info kernel: readAD_1ch - 8
Oct  7 16:36:36 cpu-unit user.info kernel: readAD_transform - 10
Oct  7 16:36:36 cpu-unit user.info kernel: readAD_1ch - 1
Oct  7 16:36:36 cpu-unit user.info kernel: readAD_transform - 1
Oct  7 16:36:37 cpu-unit user.info kernel: readAD_1ch - 5
Oct  7 16:36:37 cpu-unit user.info kernel: readAD_transform - 6
Oct  7 16:36:37 cpu-unit user.info kernel: readAD_1ch - 5
Oct  7 16:36:37 cpu-unit user.info kernel: readAD_transform - 6
Oct  7 16:36:37 cpu-unit user.info kernel: readAD_1ch - 8
Oct  7 16:36:37 cpu-unit user.info kernel: readAD_transform - 10
Oct  7 16:36:38 cpu-unit user.info kernel: readAD_1ch - 4
Oct  7 16:36:38 cpu-unit user.info kernel: readAD_transform - 5
Oct  7 16:36:38 cpu-unit user.info kernel: readAD_1ch - 6
Oct  7 16:36:38 cpu-unit user.info kernel: readAD_transform - 7
Oct  7 16:36:38 cpu-unit user.info kernel: readAD_1ch - 4
Oct  7 16:36:38 cpu-unit user.info kernel: readAD_transform - 5

Подаю 5 Ампер тока:

[root@cpu-unit ~]# tail -f /var/log/messages
Oct  7 16:44:38 cpu-unit user.info kernel: readAD_1ch - -528
Oct  7 16:44:38 cpu-unit user.info kernel: readAD_transform - -677
Oct  7 16:44:39 cpu-unit user.info kernel: readAD_1ch - -812
Oct  7 16:44:39 cpu-unit user.info kernel: readAD_transform - -1041
Oct  7 16:44:39 cpu-unit user.info kernel: readAD_1ch - -536
Oct  7 16:44:39 cpu-unit user.info kernel: readAD_transform - -688
Oct  7 16:44:39 cpu-unit user.info kernel: readAD_1ch - 125
Oct  7 16:44:39 cpu-unit user.info kernel: readAD_transform - 160
Oct  7 16:44:40 cpu-unit user.info kernel: readAD_1ch - 695
Oct  7 16:44:40 cpu-unit user.info kernel: readAD_transform - 890
Oct  7 16:44:40 cpu-unit user.info kernel: readAD_1ch - 788
Oct  7 16:44:40 cpu-unit user.info kernel: readAD_transform - 1010
Oct  7 16:44:40 cpu-unit user.info kernel: readAD_1ch - 342
Oct  7 16:44:40 cpu-unit user.info kernel: readAD_transform - 438
Oct  7 16:44:40 cpu-unit user.info kernel: readAD_1ch - -342
Oct  7 16:44:40 cpu-unit user.info kernel: readAD_transform - -439
Oct  7 16:44:41 cpu-unit user.info kernel: readAD_1ch - -783
Oct  7 16:44:41 cpu-unit user.info kernel: readAD_transform - -1004
Oct  7 16:44:41 cpu-unit user.info kernel: readAD_1ch - -675
Oct  7 16:44:41 cpu-unit user.info kernel: readAD_transform - -866
Oct  7 16:44:41 cpu-unit user.info kernel: readAD_1ch - -94
Oct  7 16:44:41 cpu-unit user.info kernel: readAD_transform - -121
Oct  7 16:44:42 cpu-unit user.info kernel: readAD_1ch - 560
Oct  7 16:44:42 cpu-unit user.info kernel: readAD_transform - 717
Oct  7 16:44:42 cpu-unit user.info kernel: readAD_1ch - 821
Oct  7 16:44:42 cpu-unit user.info kernel: readAD_transform - 1052
Oct  7 16:44:42 cpu-unit user.info kernel: readAD_1ch - 515
Oct  7 16:44:42 cpu-unit user.info kernel: readAD_transform - 660
Oct  7 16:44:42 cpu-unit user.info kernel: readAD_1ch - -151
Oct  7 16:44:42 cpu-unit user.info kernel: readAD_transform - -194
Oct  7 16:44:43 cpu-unit user.info kernel: readAD_1ch - -712
Oct  7 16:44:43 cpu-unit user.info kernel: readAD_transform - -913
Oct  7 16:44:43 cpu-unit user.info kernel: readAD_1ch - -756
Oct  7 16:44:43 cpu-unit user.info kernel: readAD_transform - -969
Oct  7 16:44:43 cpu-unit user.info kernel: readAD_1ch - -256
Oct  7 16:44:43 cpu-unit user.info kernel: readAD_transform - -329
Oct  7 16:44:44 cpu-unit user.info kernel: readAD_1ch - 416
Oct  7 16:44:44 cpu-unit user.info kernel: readAD_transform - 533
Oct  7 16:44:44 cpu-unit user.info kernel: readAD_1ch - 805
Oct  7 16:44:44 cpu-unit user.info kernel: readAD_transform - 1031
Oct  7 16:44:44 cpu-unit user.info kernel: readAD_1ch - 640
Oct  7 16:44:44 cpu-unit user.info kernel: readAD_transform - 820
Oct  7 16:44:44 cpu-unit user.info kernel: readAD_1ch - 18
Oct  7 16:44:44 cpu-unit user.info kernel: readAD_transform - 23

Как выявить закономерность что при такой вот амплитуде мы имеем на канале 5 ампер?

splinter ★★★★★
() автор топика
Ответ на: комментарий от splinter

Еще раз тогда объясни: ты хочешь сделать процедуру калибровки у себя по несколькоми заранее известным токам или просто понять, откуда у тебя именно такие цифры берутся?

Zubok ★★★★★
()
Ответ на: комментарий от splinter

Возводи каждое в квадрат и усредняй скользящим средним по некоторому (целому!) количеству периодов, потом корень извлекай.

prischeyadro ★★★☆☆
()
Ответ на: комментарий от Zubok

хочешь сделать процедуру калибровки у себя по несколькоми заранее известным токам

Да. Сейчас я знаю что подал на трансформатор 5 ампер, но потом я знать не буду сколько пришло ампер и хочу это определять по выхлопу с АЦП.

splinter ★★★★★
() автор топика
Ответ на: комментарий от Zubok

Удваиваю, разные задачи. Твоя мозговая деятельность тоже разная потребуется.

anonymous
()
Ответ на: комментарий от splinter

Я бы оцифровывал с условиями теоремы Котельникова, выхватывал полный период и считал среднеквадратичное значение(как понял, сигнал синусоидальный), для большей точности ловил бы несколько периодов так и усреднял потом полученные среднеквадратичные

nand
()
Ответ на: комментарий от nand

Уже оцифровано, осталось среднеквадратичное посчитать за несколько периодов, получим действующих попугаев. Если разбираться откуда что взялось нет задачи, то говорим что это 5А. повторяем процедуру на крайних точка интересующего диапазона измеряемого тока, для очистки совести пару точек внутри диапазона. Строим кривую в соответствии с полученным результатом, забываем как страшный сон.

anonymous
()
Ответ на: комментарий от anonymous

Уже оцифровано

Не понятно как оцифровано, с какой частотой. ТСу надо по полным периодам считать, если нет аппаратного захвата нуля, то очень грустно

nand
()
Ответ на: комментарий от nand

Не спорю, но похоже задача так не стоит.

anonymous
()
Ответ на: комментарий от splinter

Судя по выборке, частота дискретизации маловата, чтобы обойтись каким-то простым способом. Придётся находить синусоиду, накрывающую точки выборки, и её амплитуду считать искомой величиной.

Elyas ★★★★★
()
Ответ на: комментарий от splinter

Да. Сейчас я знаю что подал на трансформатор 5 ампер, но потом я знать не буду сколько пришло ампер и хочу это определять по выхлопу с АЦП.

Теперь понятно. Все схемотехнические изыски тогда можно отложить в сторону. Ну, можно напряжение в RMS посчитать.

Дальше - гугл «RMS calculation microcontroller» (чтобы ближе к твоей теме).

Zubok ★★★★★
()
Ответ на: комментарий от splinter

Калибровка то осуществляется просто, подаёте эталонную величину на вход, смотрите показания прибора. Отношение этих величин даёт коэффициент калибровки.

Но, вы на вход подаёте синусоидальный ток с заданным значением средней величины, а на выходе, пока что, получаете набор мгновенных значений. Так что вам пока что нужно решать задачу определения среднего значения тока по набору мгновенных значений. И не факт, что ваша плата в состоянии её решить. Это нужно смотреть насколько у вас быстрый АЦП — пригоден ли он для измерения изменяющегося сигнала, насколько точно по времени берутся отсчёты. А пока что вы даже не ответили на вопрос о частоте измеряемой синусойды.

mky ★★★★★
()
Ответ на: комментарий от mky

насколько у вас быстрый АЦП

50Гц синусоиду чем угодно оцифровать можно, у ТС АДэшка кторая 250 kSPS давит. И не среднее значение по набору мгновенных, а среднеквадратичное.

nand
()
Ответ на: комментарий от mky

максимум что я могу подать это 20А, есть ли вероятность что при больших значениях синусоида поедет.

splinter ★★★★★
() автор топика

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

Это если тебе надо узнать частоту/гармонические составляющие сигнала. Ибо я так до сих пор и не понял, чего же ты собсно хочешь.

dikiy ★★☆☆☆
()
Ответ на: комментарий от dikiy

Надо ТСу по дискретным значениям гармонического сигнала напряжения(повторяющего сигнал тока с масштабируемым коэффициентом) с АЦП получить среднеквадратические попугаи - сколько ампер протекает в цепи.

nand
()
Ответ на: комментарий от nand

Даже если учесть, что вы набирали этот пост в тот момент, когда ТС сообщил про 1 кГц, то в более ранних постах было показано в лучшем случае 8 отсчётов в секунду. Как-то трудновато этим 50 Гц изобразить.

Да, не среднее, а действующее.

mky ★★★★★
()
Ответ на: комментарий от mky

Да как раз набирал, просто я модель АЦП глянул и если реально на 1кГц - этого хватит с избытком.

в более ранних постах было показано в лучшем случае 8 отсчётов в секунду

С таким железом(до 250 kSPS), это явно кто-то накосячил с проектированем как минимум и это деньги на ветер. Я вообще бы еще рекурсивным цифровым фильтром по периоду синусоиды пробежался прежде чем считать среднеквадратичное

nand
()
Ответ на: комментарий от nand

решаема ведь, если не меняется ни частота, ни амплитуда входного сигнала и гарантированно (с точностью в два и более раза выше частоты исходного сигнала) определяется момент измерения АЦП

anonymous
()
Ответ на: комментарий от splinter

Пока нет смысла менять силу тока. Лучше почитать описание схемы, если есть. ИМХО, в реальности, нужно хотя бы 10 отсчётов на период синусойды, чтобы как-то воспроизвести её форму/амплитудное значение. В вашем случае это 10000 отсчётов в секунду, ваша железяка такое может? Есть какое-нибудь описание вашей железяки и для измерения переменного синусоидального тока там другой режим включается (с выпрямителем и измерением максимального значения)?

mky ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.